WO2017126097A1 - 計算機システム、計算機 - Google Patents

計算機システム、計算機 Download PDF

Info

Publication number
WO2017126097A1
WO2017126097A1 PCT/JP2016/051788 JP2016051788W WO2017126097A1 WO 2017126097 A1 WO2017126097 A1 WO 2017126097A1 JP 2016051788 W JP2016051788 W JP 2016051788W WO 2017126097 A1 WO2017126097 A1 WO 2017126097A1
Authority
WO
WIPO (PCT)
Prior art keywords
queue
request
storage program
program
upper limit
Prior art date
Application number
PCT/JP2016/051788
Other languages
English (en)
French (fr)
Inventor
貴敦 鈴木
匡邦 揚妻
弘明 圷
幸恵 田島
Original Assignee
株式会社日立製作所
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 株式会社日立製作所 filed Critical 株式会社日立製作所
Priority to CN201680069764.3A priority Critical patent/CN108292278B/zh
Priority to PCT/JP2016/051788 priority patent/WO2017126097A1/ja
Priority to US15/772,098 priority patent/US10740040B2/en
Priority to JP2017562396A priority patent/JP6524267B2/ja
Publication of WO2017126097A1 publication Critical patent/WO2017126097A1/ja

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0662Virtualisation aspects
    • G06F3/0665Virtualisation aspects at area level, e.g. provisioning of virtual or logical volumes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0866Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/10Program control for peripheral devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0614Improving the reliability of storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0629Configuration or reconfiguration of storage systems
    • G06F3/0631Configuration or reconfiguration of storage systems by allocating resources to storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0656Data buffering arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/067Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0683Plurality of storage devices
    • G06F3/0689Disk arrays, e.g. RAID, JBOD
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0866Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
    • G06F12/0871Allocation or management of cache space
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/26Using a specific storage system architecture
    • G06F2212/261Storage comprising a plurality of storage devices

Definitions

  • the present invention relates to a computer system and a computer.
  • Patent Document 1 Japanese Patent No. 4480479 as a document disclosing the background art of this technical field.
  • Patent Document 1 describes a technique for operating a storage system (file system) as a part of an operating system (OS).
  • Patent Document 1 does not assume that the storage program is operated on the OS, and does not mention a technique for suppressing a decrease in I / O performance.
  • a computer system includes a processor that executes an operating system and a storage program that operates on the operating system and provides a logical volume to a host.
  • the computer system further includes a memory having a queue that holds communication data between the operating system and the storage program, and volume management information that includes information on a storage function applied to a logical volume provided by the storage program.
  • volume management information that includes information on a storage function applied to a logical volume provided by the storage program.
  • the storage program executes processing based on the I / O request. Further, when the operating system determines that the I / O request processing by the storage program is not necessary, it executes a response to the I / O request to the host.
  • FIG. 1 is a diagram illustrating a configuration example of a computer system 10.
  • FIG. 3 is a diagram illustrating a configuration example of a memory 320 of a server 200.
  • FIG. It is a figure which shows the other structural example of the computer system.
  • 6 is a diagram illustrating a configuration example of an initiator-target queue 410.
  • FIG. 5 is a diagram illustrating a configuration example of a Target-Initiator queue 420.
  • FIG. 5 is a diagram showing a configuration example of a volume management table 1000.
  • FIG. 5 is a diagram illustrating a configuration example of a cache management table 900.
  • FIG. 5 is a diagram illustrating a configuration example of a process management table 1300.
  • FIG. 5 is a diagram illustrating a configuration example of a resource management table 1400.
  • FIG. 5 is a diagram illustrating a configuration example of a queue pair management table 1500.
  • FIG. It is a figure which shows the structural example of the policy management table 1600.
  • FIG. 5 is a flowchart of a communication driver program 500.
  • 5 is a flowchart of a storage program 700. It is a flowchart of a cache operation process.
  • It which shows the structural example of the server 200 in which several queue pairs exist.
  • 10 is a flowchart of a queue pair monitoring program 1700. It is a flowchart of a queue pair increase process. It is a flowchart of a queue pair reduction process. It is a figure which shows an example of GUI which manages a system setting.
  • xxx table various types of information may be described using the expression “xxx table”, but the various types of information may be expressed using a data structure other than the table. In order to show that various types of information do not depend on the data structure, the “xxx table” may be referred to as “xxx information”.
  • Management system can be composed of one or more computers.
  • the management computer when the management computer processes and displays information, the management computer is a management system.
  • the management system when a function equivalent to that of the management computer is realized by a plurality of computers, the plurality of computers (in the case where the display computer performs display, the display computer may be included) is the management system.
  • the management terminal 240 is a management system.
  • processing may be described using “program” or its process as a subject.
  • a program is executed by a processor (for example, a CPU (Central Processing Unit)), and a predetermined processing is performed. Since the processing is performed using a storage resource (for example, a memory) and / or a communication interface device (for example, a communication port) as appropriate, the subject of processing may be a processor.
  • the processor operates as a functional unit that realizes a predetermined function by operating according to a program.
  • An apparatus and a system including a processor are an apparatus and a system including these functional units.
  • the processing described using the program, process, or processor as the subject can also be described using the computer (eg, server, storage system, management computer, client, or host) as the subject.
  • the processor may include a hardware circuit that performs part or all of the processing performed by the processor.
  • the computer program may be installed on each computer from a program source.
  • the program source may be, for example, a program distribution server (for example, a management computer) or a storage medium.
  • FIG. 1 is a schematic diagram showing an outline of I / O processing.
  • the computer system 10 includes a server 200 and a host 210.
  • the server 200 has a shared memory 400 and a disk device 360.
  • the OS 600 operates, and the storage program 700 operates on the OS 600.
  • the OS 600 includes an I / O request reception program 620, an I / O response transmission program 640, and a communication driver program 500.
  • the storage program 700 configures one or more virtual disk devices from the physical storage areas of the plurality of disk devices 360 and provides them to the host 210.
  • this virtual disk device is referred to as a logical volume 340.
  • RAID Redundant Array of Inexpensive Disks
  • RAID Redundant Array of Inexpensive Disks
  • the shared memory 400 includes a pair of an initiator-target queue (ITQ) 410 and a target-initiator queue (TIQ) 420 (hereinafter also referred to as “queue pair”), and a cache 800.
  • ITQ initiator-target queue
  • TIQ target-initiator queue
  • ITQ 410 holds communication data from the I / O request reception program 620 to the storage program 700.
  • the TIQ 420 holds communication data from the storage program 700 to the I / O response transmission program 640.
  • ITQ 410 and TIQ 420 is used as a pair in actual processing.
  • the storage program 700 needs to use the paired TIQ 420 and ITQ 410 for a series of communication.
  • One queue pair may be processed exclusively by one storage program 700, or a plurality of storage programs 700 may share one queue pair for processing.
  • FIG. 1 shows the flow of control information.
  • the control information is an I / O request or an I / O response.
  • FIG. 2 is a flowchart showing an outline of the I / O processing. An overview of I / O processing when the server 200 receives an I / O request for the logical volume 340 from the host 210 will be described below with reference to FIGS. 1 and 2.
  • the host 210 transmits an I / O request for the logical volume 340 to the server 200.
  • the server 200 receives an I / O request from the host 210
  • the HBA 331 or the NIC 332 included in the server 200 issues an I / O interrupt request.
  • the CPU core 311 receives the I / O interrupt request and starts the I / O processing shown in FIG. 2 (S3000).
  • the CPU core 311 that has received the I / O interrupt request calls the I / O request reception program 620 (S3010).
  • the CPU core 311 executes the I / O request reception program 620 and receives the I / O request.
  • the CPU core 311 records the received I / O request in the memory 320 and issues a notification of arrival of the I / O request to the communication driver program 500. Thereafter, the CPU core 311 ends the processing of the I / O request reception program 620.
  • a broken line C1 in FIG. 1 shows a flow of control information (here, I / O request) when executing S3010 and S3020.
  • the CPU core 311 calls the communication driver program 500 (S3020), executes the communication driver program 500, and determines whether the processing by the storage program 700 is necessary (S3030).
  • the CPU core 311 enqueues an I / O request to the ITQ 410 if YES in S3030, that is, if it is determined that the processing of the storage program 700 is necessary.
  • a broken line C2 in FIG. 1 indicates a flow of control information (here, an I / O request) when S3030 is Yes.
  • the I / O request enqueued in the ITQ 410 is processed by the storage program 700 operating on the OS 600 (S3040).
  • the storage program 700 enqueues the I / O response to the TIQ 420 and makes a system call to the communication driver program 500.
  • a broken line C3 in FIG. 1 shows a flow of control information (I / O request or I / O response in this case) when executing S3040.
  • the CPU core 311 executes the communication driver program 500 called by the system call, dequeues the I / O response from the storage program 700 from the TIQ 420, and notifies the I / O response transmission program 640 (S3050).
  • a broken line C4 in FIG. 1 shows a flow of control information (here, I / O response) when executing S3050.
  • the CPU core 311 executes the communication driver program 500 and makes an I / O response.
  • the I / O request is a read request
  • the I / O response transmission program 640 is called to notify the address and size of the cache 800 where the read target data exists (S3050).
  • a broken line C6 in FIG. 1 shows a flow of control information (here, an I / O request or an I / O response) when S3030 is No.
  • the CPU core 311 executes the I / O response transmission program 640 and sends an I / O response to the host 210 (S3060).
  • the called I / O response transmission program 640 transmits an I / O completion notification to the host 210 as a response to the I / O request.
  • the CPU core 311 instructs the host 210 to transfer read data to the HBA 331 or the NIC 332.
  • This instruction includes the address and size of the cache 800 where the read target data notified by the I / O response in S3050 exists.
  • the HBA 331 or the NIC 332 refers to the address and size of the cache 800, reads the read data from the corresponding area of the cache 800, and transfers the read data to the host 210. Then, the CPU core 311 instructs the HBA 331 or the NIC 332 to transmit a notification of completion of the I / O processing (read processing) to the host 210 (S3170).
  • the CPU core 311 instructs the HBA 331 or the NIC 332 to transmit a notification of completion of the I / O process (write process) to the host 210.
  • a broken line C5 in FIG. 1 shows a flow of control information (here, I / O response) when executing S3060.
  • the storage program 700 is running on the OS 600, not the program inside the OS 600. For this reason, if all of the I / O requests to the logical volume 340 provided by the storage program 700 to the host 210 are processed by the storage program 700, for example, the amount of communication between the OS 600 and the storage program 700 increases. As a result, there is a possibility that the I / O performance may be reduced due to a lack of I / O bandwidth or an increase in processing executed by the CPU core 311.
  • the communication driver program 500 determines whether or not processing by the storage program 700 is necessary (S3030), and if processing by the storage program 700 is not necessary, it is a target of an I / O request. Even though the storage program 700 provides the logical volume 340, the storage program 700 does not process the I / O request. As described above, when an I / O response is possible without using the storage function of the storage program 700, the I / O response is made by the communication driver program 500 so that the storage program 700 is operated on the OS 600. , It is possible to suppress a decrease in I / O performance and maintain or improve the I / O performance.
  • the OS 600 when the OS 600 receives a write request for the logical volume 340 from the host 210, the OS 600 communicates with the storage program 700 via the queue pair. Then, the storage program 700 executes processing based on the write request.
  • the OS 600 when the OS 600 receives a read request for the logical volume 340 from the host 210, the OS 600 refers to the cache management table 900 and determines that the data corresponding to the read request exists on the cache 800. Based on the received data, a response to the read request is executed to the host 210.
  • FIG. 1 shows an example in which one OS 600 (OS kernel 610) includes one I / O request reception program 620 process and one I / O response transmission program 640 process.
  • the configuration is not limited, and a plurality of processes of the I / O request reception program 620 and the processes of the I / O response transmission program 640 can be arranged in one OS 600 (OS kernel 610).
  • FIG. 3 is a diagram illustrating a configuration example of the computer system 10.
  • the computer system 10 includes a server 200, a host 210, and a management terminal 240.
  • Server 200, host 210, and management terminal 240 are connected to each other via network 220.
  • the server 200 is a computer that can process a plurality of data communication protocols.
  • the server 200 includes FCP (Fibre Channel Protocol), iSCSI (Internet Small Computer System Interface), NFS (Network File System System), CIFS (Common Internet TP, etc.). Data communication with the host 210 and the management terminal 240.
  • FCP Fibre Channel Protocol
  • iSCSI Internet Small Computer System Interface
  • NFS Network File System System
  • CIFS Common Internet TP, etc.
  • the server 200 receives, for example, an I / O request from the host 210 via the network 220, executes the I / O processing, and then returns a processing result (I / O response) to the host 210.
  • the server 200 may be fixedly installed in a facility such as a data center, or may be movable such as a container type, and the geographical position may be changed as necessary. Further, the server 200 may be configured by a plurality of computers instead of a single computer.
  • the management terminal 240 is a management computer that manages the software and various settings of the server 200.
  • the management terminal 240 stores a management program, and performs various processes related to management of the server 200 by executing the management program.
  • the network 220 may be in any form as long as it is a communication network.
  • the network 220 is, for example, the Internet, a LAN (Local Area Network), a WAN (Wide Area Network), a SAN (Storage Area Network), a wireless LAN, a mobile phone communication network, and the like.
  • the network 220 may be composed of a plurality of types of communication networks instead of a single communication network.
  • the host 210 may be fixedly installed in a facility such as a data center, or may be movable such as a container type and change its geographical position.
  • a mobile phone including a smartphone or a general-purpose computer is assumed.
  • the host 210 may be composed of a plurality of different computers instead of a single device.
  • the server 200 is illustrated as an example of a computer, but the present invention is not limited to this.
  • a storage system may be used.
  • the server 200 may be a computer, a storage system, or a storage device.
  • the server 200 includes a memory 320, an HBA (Host Bus Adapter) 331, an NIC (Network Interface Card) 332, a disk device 360, and a CPU 310 which is a control arithmetic unit connected thereto.
  • HBA Hyper Bus Adapter
  • NIC Network Interface Card
  • CPU 310 which is a control arithmetic unit connected thereto.
  • another type of storage resource may be employed.
  • another type of communication interface device may be employed.
  • the CPU 310 executes a computer program stored in memory 320.
  • the CPU 310 has a CPU core 311 that is a plurality of arithmetic units, and each core can operate independently and executes a computer program in parallel.
  • the CPU core 311 is a processor core that reads various programs including the storage program 700, the OS 600, the I / O request reception program 620, and the I / O response transmission program 640 from the memory 320 and executes them.
  • the CPU core 311 may be called a processor.
  • the memory 320 stores computer programs and other data.
  • the memory 320 may include a cache 800 that temporarily stores data received from the host 210 and data to be transmitted to the host 210.
  • the HBA 331 is connected to the network 220, and the NIC 332 is connected to the network 220 such as a LAN, WAN, or the Internet, and is used for data communication with the management terminal 240 or the host 210.
  • the disk device 360 includes an SSD (Solid State Drive) 351 and an HDD (Hard Disk Drive) 352 which are secondary storage devices of the server 200.
  • the secondary storage device stores I / O processing data as storage.
  • the numbers of SSDs 351 and HDDs 352 are not particularly limited, and are not limited to the numbers shown in FIG.
  • the disk device 360 is typically an SSD 351 or an HDD 352, but may be anything as long as it can store block format data.
  • the disk device 360 is illustrated as an example of the storage device, but the present invention is not limited to this.
  • the disk device 360 may be a device including a tape archive or an optical disk library such as a DVD or a CD.
  • the SSD 351 and the HDD 352 are collectively referred to as a disk device 360.
  • the disk device 360 may be a storage device.
  • FIG. 4 is a diagram illustrating a configuration example of the memory 320 of the server 200.
  • the memory 320 stores a storage program 700, a queue pair monitoring program 1700, a process management table 1300, a resource management table 1400, a policy management table 1600, and an OS 600.
  • the OS 600 has an OS kernel 610.
  • the OS kernel 610 includes a communication driver program 500, an I / O request reception program 620, and an I / O response transmission program 640.
  • the memory 320 includes a storage program 700, a queue pair monitoring program 1700, and a shared memory 400 that is an area accessible from the OS 600.
  • the shared memory 400 includes a cache 800, a cache management table 900, an initiator-target queue (ITQ) 410, a target-initiator queue (TIQ) 420, a queue pair management table 1500, and a volume management table 1000.
  • the program or management information shown in FIG. 4 is loaded from the disk device 360 and stored in the memory 320.
  • the communication driver program 500 realizes communication between the I / O request reception program 620 and the I / O response transmission program 640 and the storage program 700.
  • the communication driver program 500 transmits communication from the OS kernel 610 to the storage program 700 via the TIQ 420.
  • the communication driver program 500 transmits communication from the storage program 700 to the OS kernel 610 via the ITQ 410.
  • the I / O request reception program 620 receives an I / O request from the host 210 using a communication protocol such as FCP / iSCSI, and sends the received I / O request (input / output request) via the communication driver program 500. To the storage program 700.
  • a communication protocol such as FCP / iSCSI
  • the I / O response transmission program 640 receives an I / O response from the storage program 700 via the communication driver program 500 and transmits the I / O response to the host 210.
  • the storage program 700 writes data to the disk device 360 using the cache 800 or data from the disk device 360 using the cache 800 in accordance with an I / O request from the host 210 via a communication protocol such as FCP / iSCSI. Is read.
  • the storage program 700 is a program that operates on the OS kernel 610, and is a program that executes a process of writing data to the storage (disk device 360) or a process of reading data from the storage (disk device 360).
  • the storage program 700 is a program that executes storage functions such as snapshots and RAID.
  • the storage program 700 may be called a storage processing program, a storage process, or a storage function.
  • the storage cache (cache) 800 temporarily stores data to be written to the disk device 360 or block data (data) read from the disk device 360.
  • the logical volume 340 is managed by the volume management table 1000.
  • the storage program 700 when the storage program 700 receives a request (write request) to write data to the logical volume 340 from the host 210, the storage program 700 temporarily writes the data to the cache 800 having a high access speed, and then sends an I / O response to the host 210. The writing completion is notified. Then, the data stored in the cache 800 is written to the disk device 360 asynchronously with the write request from the host 210. Thereby, even when the performance of the disk device 360 is low, the performance of the cache 800 can improve the I / O performance as a system.
  • the storage program 700 performs I / O processing by polling in order to achieve high response performance and high throughput performance.
  • the cache 800 is used for temporarily storing data to be written to the disk device 360 or block data read from the disk device 360.
  • the cache 800 is in the memory 320, but the embodiment is not limited to this.
  • the storage program 700 may be stored in a non-volatile semiconductor memory, or a storage device having a lower speed than the semiconductor memory may be used as part of the cache 800.
  • the cache management table 900 is a table for managing the state of block data stored in the cache 800. For example, the address on the cache 800, the storage destination volume address, and the data size of the block data stored in the cache 800 are stored.
  • the cache management table 900 may be referred to as cache management information.
  • the volume management table 1000 is a table that stores information on the logical volume 340. For example, the volume number, volume attribute, and volume state relating to each logical volume 340 are stored.
  • the volume management table 1000 may be referred to as volume management information.
  • the TIQ 420 is an area for recording data when the storage program 700 transmits data to the I / O response transmission program 640 via the communication driver program 500.
  • the TIQ 420 has a FIFO (First In First Out) type data structure.
  • ITQ 410 is an area for recording data when the I / O request reception program 620 communicates data to the storage program 700 via the communication driver program 500.
  • the ITQ 410 has a FIFO type data structure.
  • the process management table 1300 is a table for managing information on the storage program 700 operating in the server 200.
  • the process management table 1300 stores the process ID of the running storage program 700 and the queue pair ID monitored by the storage program 700.
  • the resource management table 1400 is a table for managing resources that the server 200 has.
  • the resource management table 1400 includes the number of ports of the HBA 331 connected to the server 200, the number of ports of the NIC 332, the amount of memory used as the shared memory 400 in the memory 320, and the memory used as the shared memory 400 Of the amount, the amount of memory used as the cache 800 is stored.
  • the queue pair management table 1500 is a table for managing a pair of TIQ 420 and ITQ 410 (hereinafter simply referred to as a queue pair) stored on the shared memory 400.
  • the queue pair management table 1500 stores a queue pair ID for identifying information stored in the queue pair, a head address of the TIQ 420, a head address of the ITQ 410, and a queue size.
  • the policy management table 1600 is a table for managing policies for increasing / decreasing queue pairs.
  • the policy management table 1600 stores a policy that defines under what conditions the queue pairs are increased and under what conditions the queue pairs are reduced.
  • the policy management table 1600 may be called queue pair increase / decrease policy management information.
  • the queue pair monitoring program 1700 is a program that periodically monitors the process management table 1300, the resource management table 1400, the queue pair management table 1500, and the policy management table 1600, and increases or decreases the number of queue pairs according to the situation.
  • the queue pair monitoring program 1700 may be a part of the storage program 700 or a program different from the storage program 700.
  • FIG. 5 is a diagram showing another configuration example of the computer system 10.
  • the hypervisor 203 may operate on the server 200 and one or more virtual machines 202 may operate on the hypervisor 203.
  • the OS 600, the storage program 700, and the queue pair monitoring program 1700 may operate. That is, each program shown in FIG. 4 may operate on the hardware of a physical computer or may operate on a virtual computer.
  • the host 210 may be a host program that operates on a virtual computer, or may be a physical host computer. Even if the virtual computer on which the OS 600, the storage program 700, and the queue pair monitoring program 1700 operate and the virtual computer on which the host program operates are on the same server 200, they are on different servers 200 connected via the network 220. Also good.
  • FIG. 6 is a diagram illustrating a configuration example of the initiator-target queue (ITQ) 410.
  • FIG. 7 is a diagram illustrating a configuration example of the Target-Initiator queue (TIQ) 420.
  • the ITQ 410 shown in FIG. 6 has a first-in first-out type, that is, a FIFO type data structure.
  • the ITQ 410 is packed with I / O requests received from the host 210 by the I / O request reception program 620 in order.
  • the TIQ 420 shown in FIG. 7 also has a FIFO type data structure.
  • I / O responses that the storage program 700 returns to the I / O request received from the I / O request reception program 620 via the communication driver program 500 are enqueued in order.
  • the I / O response may be called an I / O processing completion notification.
  • the I / O request may include information indicating the volume number 1110, I / O type 1120, volume address 1130, and data size 1140 of the logical volume 340 that is the target of the I / O request. Further, when the I / O type 1120 is write, information indicating the memory address 1150 of the memory 320 in which the write data is stored may be included. For example, according to FIG. 6, in the previously stored I / O request, the target volume number 1110 is “1”, the I / O type 1120 is “read”, and the volume address 1130 is “0x100”. Yes, the data size 1140 is “0x100”.
  • the target volume number 1110 is “2”
  • the I / O type 1120 is “write”
  • the volume address 1130 is “0x3000”
  • the data size 1140 is “ 0x400 "and the memory address 1150 is” 0x58000 ".
  • An I / O request whose I / O type 1120 is “write” may be called a write request.
  • An I / O request whose I / O type 1120 is “read” may be referred to as a read request.
  • the TIQ 420 stores two I / O responses (I / O processing completion notification).
  • the I / O response may include information indicating the volume number 1210, I / O type 1215, volume address 1220, and data size 1225 of the logical volume 340 that is the target of the I / O response.
  • information indicating the memory address 1230 of the memory 320 (cache 800) in which the read data is stored may be included.
  • the volume number 1210 is “1”
  • the I / O type 1215 is “read”
  • the volume address 1220 is “0x100”
  • the data size 1225 is “0x100”.
  • the memory address 1230 is “0x58000”.
  • the volume number 1210 is “2”
  • the I / O type 1215 is “write”
  • the volume address 1220 is “0x300”
  • the data size 1225 is “0x400”. It is.
  • FIG. 8 is a diagram showing a configuration example of the volume management table 1000.
  • the volume management table 1000 information on the logical volume 340 managed by the storage program 700 is recorded.
  • the volume management table 1000 has as many rows as the number of logical volumes 340 created by the storage program 700.
  • the volume management table 1000 includes a volume number 1010, a volume state 1020, a volume size 1030, a volume address 1035, a disk device number 1040, a disk device address 1050, and a storage function 1060 as information on the logical volume 340.
  • the volume ID 1010 stores a volume ID that uniquely identifies the logical volume 340.
  • the volume status 1020 stores information indicating whether I / O to the logical volume 340 is possible or not. Here, either “I / O enabled” or “I / O disabled” is stored.
  • the volume size 1030 stores the capacity of the logical volume 340.
  • the logical address on the logical volume 340 is stored in the volume address 1035.
  • the disk device number 1040 stores the identifier of the disk device 360 that constitutes the logical volume 340.
  • the disk device address 1050 is an address of a physical storage area associated with the volume address 1035, and stores an address on the disk device 360 identified by the disk device number 1040.
  • the logical storage area of the logical volume 340 having a predetermined size for example, “0x100” from the volume address 1035 and the physical storage area of the disk apparatus 360 having the predetermined size from the disk apparatus address 1050 are associated with each other.
  • the size of the predetermined size is not limited to the example of FIG. 8, and it is not always necessary to manage the fixed size for each predetermined size.
  • the volume management table 1000 may manage all the storage areas of the logical volume 340 in association with the physical storage areas of the disk device 360.
  • the correspondence between the physical storage area of the disk device 360 in which the data of the logical volume 340 is stored and the storage area of the logical volume 340 may be managed by the volume management table 1000.
  • the storage program 700 allocates a physical storage area of the disk device 360, and the storage area of the logical volume 340 and the disk device 360 are allocated.
  • the correspondence relationship with the physical storage area may be managed by the volume management table 1000.
  • the storage function 1060 stores a storage function applied to the logical volume 340. Examples of storage functions include snapshots and RAID.
  • the storage function 1060 includes information indicating that ( For example, Yes) may be stored.
  • the logical volume 340 with the volume number 1010 “1” has the volume status 1020 “I / O OK”, the volume size 1030 “1 TB”, and RAID and snap as the storage function 1060. Shows applying shot.
  • FIG. 9 is a diagram illustrating a configuration example of the cache management table 900.
  • Each row of the cache management table 900 stores information related to data stored in the cache 800 by the storage program 700.
  • the stored information includes a volume number 910, a volume address 920, a data size 930, a memory address 940, and a data status 950.
  • the cache management table 900 has a capacity capable of managing data corresponding to the capacity of the cache 800 at the maximum.
  • the volume ID managed by the volume management table 1000 of the logical volume 340 to which the data belongs is stored.
  • the volume address 920 stores an address on the logical volume 340 for the data stored in the cache 800.
  • the data size 930 indicates the size of data stored in the cache 800.
  • the memory address 940 indicates an address on the cache 800 for the data.
  • the data status 950 includes “clean” indicating that the data on the cache 800 has been written to the disk device 360, “dirty” indicating that writing to the disk device 360 has not been completed, “reading” indicating the processing status of the storage program, Alternatively, “Writing” is stored.
  • FIG. 9 illustrates a cache management table 900 when five data are stored in the cache 800.
  • the volume number 910 is “1”
  • the volume address 920 is “0x100”
  • the data size 930 is “0x400”
  • the memory address 940 is “0x0000”
  • the data status 950 is Data where is "clean” is shown.
  • FIG. 10 is a diagram illustrating a configuration example of the process management table 1300.
  • Each row of the process management table 1300 stores information on the storage program 700 that is being activated (executed).
  • the stored information includes a process ID 1310 and a queue pair ID 1320.
  • the process management table 1300 there are as many rows as the number of processes in which the storage program 700 is being activated (executed).
  • the process ID 1310 stores a process ID that is an identifier of a process of the storage program 700 that is being started (executed).
  • the queue pair ID 1320 stores the queue pair ID managed in the queue pair management table 1500 for the queue pair used by the running storage program 700.
  • FIG. 10 illustrates a process management table 1300 when there are two storage programs 700 being activated.
  • the row 1330 shows a running storage program 700 whose process ID 1310 is “2000” and whose queue pair ID 1320 is “1, 2”.
  • FIG. 11 is a diagram showing a configuration example of the resource management table 1400.
  • Each row of the resource management table 1400 shows information about resources connected to the server 200.
  • Resources include memory 320, HBA 331, and NIC 332.
  • the resource information includes a resource type 1410 and a resource amount 1420 for each resource.
  • resource management table 1400 There are as many rows in the resource management table 1400 as the total number of the port types of the HBA 331, the port types of the NIC 332, the shared memory, and the number of caches.
  • the resource type 1410 stores one of the port type of the HBA 331 connected to the server 200, the port type of the NIC 332, the shared memory, and the cache.
  • the resource amount 1420 stores the number of ports of the HBA 331 and the NIC 332 connected to the server 200, and the capacity of the shared memory and the cache 800.
  • FIG. 11 exemplifies a resource management table 1400 in which an HBA 331 whose port type is an FC port, an NIC 332 whose port type is an Ethernet port (Ethernet is a registered trademark), and a cache 800 are illustrated.
  • the row 1430 stores information on resources whose resource type 1410 is “FC port” and whose resource amount 1420 is “8”.
  • FIG. 12 is a diagram showing a configuration example of the queue pair management table 1500.
  • Information to be recorded includes a queue pair ID 1510, a TIQ storage head address 1520, an ITQ storage head address 1530, a queue size 1540, and an operation availability 1545.
  • the queue pair management table 1500 has as many rows as the number of queue pairs of TIQ 420 and ITQ 410.
  • the queue pair ID 1510 stores an ID assigned to each queue pair.
  • the head address on the memory 320 in which the TIQ 420 is stored is stored.
  • the ITQ storage head address 1530 stores the head address of the memory 320 in which the ITQ 410 is stored.
  • the queue size 1540 stores the sizes of TIQ 420 and ITQ 410.
  • the operation availability 1545 information indicating whether or not the operation to the queue pair is possible is stored. Here, either “permitted” or “not permitted” is stored.
  • FIG. 12 illustrates a queue pair management table 1500 when there are four queue pairs.
  • the queue pair ID 1510 is “1”
  • the TIQ storage start address is “0x800000”
  • the ITQ storage start address is “0x880000”
  • the queue size is “0x80000”
  • whether or not operation is possible Data indicating “No” is stored.
  • FIG. 13 is a diagram showing a configuration example of the policy management table 1600.
  • Each row of the policy management table 1600 stores policy information used for determination for deciding whether to increase or decrease queue pairs.
  • the policy information includes a policy item 1610, an upper limit 1620, and a lower limit 1630.
  • the policy item 1610 includes “the number of queue pairs handled by the storage program”, “the number of FC ports”, “the number of Ethernet ports”, and “the amount of memory used by the queue pair”.
  • An upper limit and a lower limit can be set for the “number of queue pairs handled by the storage program”, and an upper limit can be set for the “number of FC ports”, “the number of Ethernet ports”, and “queue pair use memory”.
  • a policy item 1610 is set to “the number of queue pairs processed by the storage program”, an upper limit 1620 is “8”, and a lower limit 1630 is “1”.
  • the necessity / unnecessary execution of increase / decrease of the queue pair is determined by comparing the number of processes during the activation of the storage program 700 and the usage amount of various resources with the upper and lower limits.
  • the number of processes running the storage program 700 can be calculated from the process management table 1300.
  • Various resources include the number of FC ports and the number of Ethernet ports, the amount of shared memory and cache, and the amount of memory used by the queue pair.
  • the number of FC ports and the number of Ethernet ports are described in the resource management table 1400.
  • the shared memory amount and the cache amount are also described in the resource management table 1400.
  • the amount of memory used by the queue pair is calculated from the queue pair management table 1500.
  • the upper limit and lower limit of each resource are obtained from the upper limit or lower limit of each policy item 1610 in the policy management table 1600.
  • FIG. 14 is a flowchart of the communication driver program 500.
  • the CPU core 311 receives notification of arrival of the I / O request from the I / O request reception program 620, the CPU core 311 starts processing of the communication driver program 500.
  • the storage program 700 issues a system call, the CPU core 311 starts processing of the communication driver program 500 (S3300).
  • the CPU core 311 determines whether or not the communication driver program 500 has received notification of arrival of the I / O request (S3310).
  • the CPU core 311 refers to the volume management table 1000 and the logical volume that is the target of the I / O request. It is determined whether 340 is using the predetermined storage function 1060 (S3315).
  • the predetermined storage function is a storage function that requires processing in the storage program 700 when the server 200 receives an I / O request.
  • the predetermined storage function may be set in advance. A part of the plurality of storage functions provided in the storage program 700 may be a predetermined storage function.
  • step S3315 If it is determined in step S3315 that the logical volume 340 does not use the predetermined storage function 1060 (S3315: No), the CPU core 311 refers to the volume management table 1000, and sets the logical target for the I / O request. It is determined whether the volume status 1020 of the volume 340 is I / O enabled (S3320).
  • step S3320 If it is determined in step S3320 that the volume status 1020 of the logical volume 340 is I / O enabled (S3320: YES), the CPU core 311 determines whether the I / O type of the I / O request is read. (S3330).
  • step S3330 If it is determined in step S3330 that the type of the I / O request is read (S3330: YES), the CPU core 311 stores the address and data size of the logical volume 340 that is the target of the I / O request on the cache 800. Whether or not there is data is determined with reference to the cache management table 900 (S3340).
  • step S3340 If it is determined in step S3340 that there is data on the cache 800 for the address range of the logical volume 340 that is the target of the I / O request (S3340: YES), the CPU core 311 makes an I / O request in the ITQ 410. It is determined whether there is a write request for requesting data writing to the address range of the target logical volume 340 (S3350).
  • step S3350 If it is determined in step S3350 that the write request for the address range of the I / O request target logical volume 340 does not exist in the ITQ 410 (S3350: YES), the CPU core 311 notifies the I / O processing completion (I / O). Response) is issued (S3360). This corresponds to the case of No in S3030 of FIG. 2, that is, the case where the CPU core 311 determines that the processing of the storage program 700 is unnecessary, and the I / O request is not enqueued to the ITQ 410, so Do not notify O request.
  • the CPU core 311 calls the I / O response transmission program 640 and notifies the address and size of the cache 800 where the read target data exists.
  • the CPU core 311 ends the process of the communication driver program 500 as soon as the process of step S3360 is completed (S3400).
  • step S3315 If it is determined in step S3315 that a predetermined storage function is used (S3315: YES), the logical volume 340 that is the target of the I / O request uses a storage function that requires processing in the storage program 700. Therefore, the CPU core 311 enqueues an I / O request to the ITQ 410 (S3370).
  • step S3320 If it is determined in step S3320 that the volume status 1020 of the logical volume 340 is not I / O (S3320: NO), there is a possibility that the logical volume 340 is in a failure state or being formatted.
  • the core 311 enqueues an I / O request to the ITQ 410 (S3370).
  • step S3330 If it is determined in step S3330 that the I / O type is not read (S3330: NO), for example, if the I / O type is write, a cache operation process or a storage function such as RAID is used (or may be used).
  • the CPU core 311 enqueues an I / O request to the ITQ 410 (S3370).
  • step S3340 If it is determined in step S3340 that no data exists in the cache 800 for the I / O request target volume address range (S3340: NO), the storage program 700 may need to read or write data from the disk device 360. Therefore, the CPU core 311 enqueues an I / O request to the ITQ 410 (S3370).
  • step S3350 If it is determined in step S3350 that there is a write request for the address range of the I / O request target logical volume 340 in the ITQ 410 (S3350: NO), the storage program 700 processes the preceding write request and Therefore, the CPU core 311 enqueues the I / O request to the ITQ 410 (S3370).
  • the storage program 700 needs to be processed.
  • the CPU core 311 ends the communication driver program 500 as soon as the process of step S3370 is completed (S3400).
  • the CPU core 311 notifies the I / O response to the I / O response transmission program 640 (S3390).
  • the CPU core 311 ends the communication driver program 500 as soon as the process of step S3390 is completed (S3400).
  • steps S3300 to S3400 The process is completed in steps S3300 to S3400. Note that, for each of the determination steps S3310, S3315, S3320, S3330, S3340, and S3350 shown in FIG. 14, the order of some of the steps may be changed or some of the steps may be omitted.
  • the OS 600 when the OS 600 receives an I / O request for the logical volume 340 from the host 210, the OS 600 refers to the volume management table 1000 and the storage function 1060 applied to the logical volume 340 that is the target of the I / O request. Based on the information, it is determined whether or not the storage program 700 needs to process an I / O request. If it is determined that the storage program 700 needs to process an I / O request, the storage program 700 communicates with the storage program 700 via a queue pair. In the storage program 700, processing based on the I / O request is executed.
  • the OS 600 determines that the I / O request processing by the storage program 700 is not necessary, the OS 600 sends a response to the I / O request to the host 210. While operating the storage program 700 on the OS 600, it is possible to suppress a decrease in I / O performance and maintain or improve the I / O performance.
  • the storage program 700 destages to the storage device (disk device 360) after writing the data to the cache 800.
  • the I / O response transmission program 640 receives a request for data output, the I / O response transmission program 640 outputs the data in the cache 800 if the requested data exists in the cache 800.
  • the I / O response transmission program 640 notifies the storage program 700 of the request via the ITQ 410. According to this, in the configuration in which the data output processing is accelerated by the cache 800, when data exists in the cache 800, the communication driver program 500 does not go through the communication using the queue pair and the processing of the storage program 700. Output processing can be completed quickly.
  • FIG. 15 is a flowchart of the storage program 700.
  • the CPU core 311 starts the process shown in FIG. 15 when the server 200 is activated (S3500).
  • the CPU core 311 refers to the process management table 1300 and selects one queue pair to be processed from among the queue pairs in charge of the process of the storage program 700 being executed.
  • the method of selecting a queue pair is not limited, but for example, a method of selecting one by one from a plurality of queue pairs in round robin in order.
  • the CPU core 311 refers to the queue pair management table 1500 to determine whether or not the selected processing target queue pair is operable (operational availability 1545) (S3505). If the queue pair to be processed cannot be operated (S3505: NO), the CPU core 311 returns to step S3500 again to perform the process again.
  • the CPU core 311 determines whether there is an entry in the ITQ 410 (S3510).
  • the CPU core 311 issues a test command to the logical volume 340 that is the target of the I / O request dequeued from the ITQ 410 to determine whether I / O to the logical volume 340 is possible. Processing is performed (S3530). If it is determined in S3530 that I / O to the logical volume 340 is impossible (S3530: NO), the CPU core 311 enqueues an error response as an I / O response to the TIQ 420 (S3590).
  • the CPU core 311 determines whether or not the I / O type of the I / O request dequeued from the ITQ 410 is read (S3540).
  • the CPU core 311 transfers the data of the logical volume 340 that is the target of the I / O request from the disk device 360 to the cache 800 ( S3570).
  • the CPU core 311 updates the data status 950 of the logical volume 340 that is the target of the I / O request in the cache management table 900 to “clean” (S3580).
  • the CPU core 311 If it is determined in S3540 that the I / O type is not “read” (S3540: NO), the CPU core 311 writes data to the cache 800 based on the I / O request (S3620). Next, the CPU core 311 updates the data status 950 of the logical volume 340 subject to the I / O request to “dirty” in the cache management table 900 (S3580).
  • the CPU core 311 enqueues an I / O response to the TIQ 420 (S3590).
  • the CPU core 311 issues a system call and notifies the communication driver program 500 that the enqueue to the TIQ 420 has been performed (S3600).
  • the CPU core 311 returns to step S3500.
  • the processing of the storage program 700 is executed in steps S3500 to S3620.
  • FIG. 16 is a flowchart of the cache operation processing of S3535 in the storage program 700.
  • the CPU core 311 determines whether there is a free area in the cache 800 by using the cache management table 900 (S3730).
  • step S3730 If it is determined in step S3730 that there is a free area in the cache 800 (S3730: YES), the CPU core 311 updates and uses the information on the line indicating the free area in the cache management table 900 in order to use the free area.
  • the cache management table 900 is updated by adding a line indicating the area to be executed (S3780).
  • step S3730 If it is determined in step S3730 that there is no free space in the cache 800 (S3730: NO), the CPU core 311 further refers to the cache management table 900 to determine whether there is clean data on the cache 800 (S3740). .
  • step S3740 If it is determined in step S3740 that clean data exists (S3740: YES), the CPU core 311 discards the clean data on the cache 800 (S3750).
  • the CPU core 311 deletes the row on the cache management table 900 corresponding to the discarded clean data, and updates the cache management table 900 to use the area as a free area (S3780).
  • step S3740 If it is determined in step S3740 that clean data does not exist (S3740: NO), the CPU core 311 selects one line indicating dirty data from the cache management table 900, and the data status 950 of the selected line is displayed as “Writing in progress”. And the data on the cache 800 is written to the disk device 360 (S3770).
  • the CPU core 311 updates the data status 950 of the row corresponding to the data written in the disk device 360 on the cache management table 900 to “clean”, and uses the area as a free area to manage the cache.
  • the table 900 is updated (S3780).
  • FIG. 17 is a diagram illustrating a configuration example of the server 200 in which a plurality of queue pairs exist. Although only one queue pair is described in the server 200 of FIG. 1, a plurality of queue pairs may exist in the server 200 as shown in FIG. Each process of the storage program 700 may use one or more queue pairs. Further, the queue pair may be dynamically increased or decreased.
  • FIG. 18 is a flowchart of the queue pair monitoring program 1700.
  • the CPU core 311 starts the process shown in FIG. 18 when the server 200 is activated (S4000).
  • the CPU core 311 uses, as a pair, an ITQ 410 that holds communication data from the I / O request reception program 620 to the storage program 700 and a TIQ 420 that holds communication data from the storage program 700 to the I / O response transmission program 640. Control the number of queue pairs.
  • the CPU core 311 controls the number of queue pairs based on the usage amount of resources related to the queue pairs.
  • examples of resources include the number of queue pairs processed by the storage program 700, the number of FC ports, the number of Ethernet ports, and the amount of memory used by queue pairs. Since the number of queue pairs is controlled based on the usage amount of resources related to the queue pair, the usage amount of resources can be maintained in an appropriate range.
  • an upper limit number and a lower limit number are determined for the number of queue pairs, and the CPU core 311 increases the number of queue pairs when the number of queue pairs falls below the lower limit number, and reduces the number of queue pairs when the number of queue pairs exceeds the upper limit number. According to this, the number of queue pairs can be controlled to increase / decrease according to the situation, and can be maintained in an appropriate range between the upper limit and the lower limit.
  • the CPU core 311 reads the policy management table 1600.
  • This policy management table 1600 is queue pair increase / decrease policy management information representing a policy used for controlling the number of queue pairs.
  • the management terminal 240 displays the queue pair increase / decrease policy management information on the screen and updates it by an input operation.
  • the server 200 may acquire queue pair increase / decrease policy management information (policy management table 1600) from the management terminal 240.
  • the CPU core 311 controls the number of queue pairs with reference to the queue pair increase / decrease policy management information as shown below. This makes it possible to set or change the conditions for increasing / decreasing the queue pair as desired by the user.
  • the CPU core 311 reads the resource management table 1400, the queue pair management table 1500, and the process management table 1300.
  • the CPU core 311 compares the lower limit value in the row 1640 describing the policy regarding the number of queue pairs processed by the storage program with the number of rows in the queue pair management table 1500 indicating the number of queue pairs to be processed. It is determined whether or not the lower limit value of the row 1640 of the policy management table 1600 exceeds the number of rows of the queue pair management table 1500 (S4050).
  • step S4050 If it is determined in step S4050 that the lower limit value of the row 1640 of the policy management table 1600 exceeds the number of rows of the queue pair management table 1500 (S4050: YES), that is, the number of queue pairs is lower than the lower limit value on the policy.
  • the CPU core 311 executes queue pair increase processing (S4060). Thereafter, the CPU core 311 executes a sleep process (S4090).
  • step S4050 If it is determined in step S4050 that the lower limit value of the row 1640 of the policy management table 1600 exceeds the number of rows of the queue pair management table 1500 (S4050: NO), that is, the number of queue pairs is not lower than the lower limit value on the policy.
  • the CPU core 311 compares the number of rows in the queue pair management table 1500 (the number of queue pairs) with the number of rows in the process management table 1300 (the number of processes in the running storage program 700). Further, in the same S4070, the CPU core 311 compares the upper limit values of the row 1640, the row 1650, and the row 1660 of the policy management table 1600 with the number of rows of the queue pair management table 1500. Furthermore, in the same S4070, the CPU core 311 compares the upper limit value of the row 1670 of the policy management table 1600 with the queue size total value calculated from the queue pair management table 1500.
  • the CPU core 311 controls the number of queue pairs in accordance with the number of processes that execute storage processing. For this reason, it is possible to suppress an increase in the number of queue pairs and an increase in the burden of queue check processing for checking the queue status, while reducing contention of queue operations and suppressing a decrease in throughput.
  • the number of rows calculated from the queue pair management table 1500 does not exceed the upper limit of the number of rows in the policy management table 1600, and the total queue size value calculated from the queue pair management table 1500 is the queue pair usage in the policy management table 1600.
  • the upper limit value of the memory amount is not exceeded (S4070: NO), that is, when the number of queue pairs does not exceed the upper limit value in the policy, the CPU core 311 once stops the process (sleep process) (S4090). .
  • step S4060 or step S4080 the CPU core 311 performs a sleep process (S4090).
  • step S4090 the CPU core 311 sleeps for 10 seconds as an example here.
  • the embodiment is not limited thereto. As another example, it may be 1 second or 1 minute. Alternatively, the sleep time may be variable.
  • the CPU core 311 returns to step S4010 after the completion of the sleep in step S4090, and repeats the processing from step S4000 to S4090 again.
  • the storage process is a program that runs on the OS 600 instead of a part of the OS kernel 610 as in the present embodiment
  • the portability of the storage program 700 is improved and development efficiency is increased. Operate independently, and communication from the storage program 700 to the OS kernel 610 increases. Therefore, in this embodiment, in order to suppress the loss of communication data and to efficiently process, the queue is held not only in the direction from the OS kernel 610 to the storage program but also in the direction from the storage program 700 to the OS kernel 610. Queue to be placed. By using queues in both directions, high throughput performance can be realized.
  • the communication from the storage program 700 to the OS kernel 610 is a response to the communication that has been transmitted from the OS kernel 610 to the storage program 700. If the throughput of either one of the communication programs decreases, It becomes a bottleneck and the throughput of the entire storage process is reduced. However, in this embodiment, since the queue is used in both directions, the entire storage process can be maintained at a high throughput.
  • the OS kernel 610 since the communication from the storage program 700 to the OS kernel 610 is a response to the communication for transmitting a request from the OS kernel 610 to the storage program 700 that occurred before that, in the present embodiment, the OS kernel 610 further transfers the storage program. Control is made more efficient by pairing a queue that holds communication data to 700 with a queue that holds communication data from the storage program to the OS kernel 610 and controlling the number of them to be linked.
  • FIG. 19 is a flowchart of the queue pair increase processing (S4060) in the queue pair monitoring program 1700.
  • the CPU core 311 When called from the queue pair monitoring program 1700, the CPU core 311 starts the processing shown in FIG. 19 (S4200).
  • the CPU core 311 first calculates the minimum value among the upper limit values shown in each row in the policy management table 1600. At this time, for the row 1670 (queue pair used memory amount), the upper limit value is obtained by obtaining the quotient obtained by dividing the upper limit value of the row 1670 (queue pair used memory amount) by twice the queue size of the first row of the queue pair management table 1500. Is converted into the number of queue pairs.
  • step S4210 the upper limit value of the queue pair use memory amount converted to the number of queue pairs is compared with the upper limit values of the other rows 1640, 1650, and 1660. Then, the CPU core 311 calculates a difference between the calculated minimum value of the upper limit value and the current number of queue pairs represented by the number of rows in the queue pair management table 1500, and sets the difference as the number of queue pairs to be increased.
  • the CPU core 311 compares the product of the queue pair increase number and the queue size calculated in S4210 with the free capacity of the cache management table 900, and determines whether the free capacity exceeds the total queue size for the queue pair increase. Determination is made (S4220).
  • step S4220 If it is determined in step S4220 that the free capacity exceeds the total queue size for the queue pair increase (S4220: YES), the CPU core 311 updates the free capacity in the cache management table 900 to a value reduced by the queue pair increase. (S4230). When the free capacity is less than the total queue size for the queue pair increase (S4220: NO), the CPU core 311 performs a cache operation process (S4270) and increases the free capacity of the cache 800.
  • the CPU core 311 creates as many queue pairs as the number of queue pairs calculated in S4210 (S4240).
  • the CPU core 311 updates the queue pair management table 1500 with the added queue pair information (S4250).
  • the CPU core 311 adds the ID of the added queue pair to the process management table 1300 (S4260).
  • the CPU core 311 ends the queue pair increase process.
  • the CPU core 311 converts the upper limit amount of resource usage so that it can be compared with the upper limit number of queue pairs. Further, the CPU core 311 obtains the minimum upper limit number among the upper limit number converted from the upper limit amount and the upper limit number of the number of queue pairs. Furthermore, the CPU core 311 determines the difference between the obtained upper limit number and the current number of queue pairs as the number of queue pairs to be increased. As a result, the upper limit amount of the resource usage is converted into the upper limit number expressed so that it can be compared with the upper limit number. Therefore, the queue pair can be maintained while maintaining each value within the limit range by relatively easy calculation based on the number. Can be increased to an appropriate number.
  • FIG. 20 is a flowchart of the queue pair reduction process (S4080) in the queue pair monitoring program 1700.
  • the CPU core 311 When called from the queue pair monitoring program 1700, the CPU core 311 starts the processing of FIG. 20 (S4400).
  • the CPU core 311 calculates the minimum value among the upper limit values of each row of the policy management table 1600 (S4410). At this time, for the row 1670 (queue pair used memory amount), the upper limit value is obtained by obtaining the quotient obtained by dividing the upper limit value of the row 1670 (queue pair used memory amount) by twice the queue size of the first row of the queue pair management table 1500. Is converted into the number of queue pairs. In step S4410, the upper limit value of the queue pair use memory amount converted to the number of queue pairs is compared with the upper limit values of the other rows 1640, 1650, and 1660. Then, the CPU core 311 sets the difference between the calculated minimum value and the current number of queue pairs as the number of queue pairs to be reduced.
  • the CPU core 311 refers to the queue pair management table 1500 and the cache management table 900, and selects queue pairs by the number of queue pair reductions in order from the side closest to the area of the cache 800 (S4420).
  • the CPU core 311 when there are a plurality of shared memories 400, when creating a queue pair, the CPU core 311 arranges a queue pair in the same shared memory 400 where the cache 800 is arranged, if possible. I will do it. In step S4420, the CPU core 311 selects a queue pair arranged in the same shared memory 400 where the cache 800 is arranged.
  • the CPU core 311 updates the setting of the operation availability 1545 of the queue pair management table 1500 for the queue pair selected in step S4420, and prohibits the operation of the queue pair (S4430).
  • the CPU core 311 moves an entry existing in the selected queue pair to another queue pair (S4440). When the selected queue pair becomes empty, the CPU core 311 next deletes the selected queue pair (S4450). Next, the CPU core 311 deletes information regarding the deleted queue pair from the queue pair management table 1500 (S4460). Next, the CPU core 311 deletes the deleted queue pair ID from the queue pair ID 1320 of the process management table 1300 (S4470).
  • the CPU core 311 updates the free capacity information in the cache management table 900 and ends the processing (S4480).
  • the CPU core 311 deletes the queue pair closest to the cache 800 area when deleting the queue pair. According to this, when deleting a queue pair, the queue pair closest to the area of the cache 800 is deleted, so that a free area that can be deleted by the queue pair can be created at a position where the cache 800 can be used efficiently.
  • the CPU core 311 converts the upper limit amount of resource usage so that it can be compared with the upper limit number of queue pairs. Further, the CPU core 311 obtains the minimum upper limit number among the upper limit number obtained by converting the upper limit amount and the upper limit number of the queue pairs. Further, the CPU core 311 determines the difference between the obtained upper limit number and the current number of queue pairs as the reduction number of queue pairs. Since the upper limit of resource usage is converted to a number so that it can be compared with the upper limit, the number of queue pairs can be reduced appropriately while maintaining each value within the limits by relatively easy calculation based on the number. Can do.
  • FIG. 21 is a diagram illustrating an example of a GUI (Graphical User Interface) that manages system settings.
  • the management program executed by the CPU of the management terminal 240 provides a system administrator with a GUI 1900 for performing system settings.
  • the system administrator inputs an instruction regarding system settings to the server 200 using the GUI 1900.
  • the GUI 1900 is a GUI for setting a queue pair number increase / decrease policy, and includes a queue pair number increase / decrease policy setting unit 1910, an update button 1930, and a cancel button 1940.
  • the queue pair number increase / decrease policy setting unit 1910 is a part for displaying the information of the policy management table 1600 stored in the server 200 or for allowing the system administrator to set the information of the policy management table 1600 stored in the server 200. is there.
  • the number of queue pairs processed by the storage program the number of FC ports, the number of Ethernet ports, and the amount of memory used by the queue pair indicated by the policy item 1610, the upper limit 1620 and the lower limit 1630 display the currently set values, and The value can be edited.
  • the meanings of policy item 1610 and its upper limit 1620 and lower limit 1630 are the same as the meanings in policy management table 1600.
  • the update content is notified from the management terminal 240 to the server 200.
  • the server 200 that has received the update content updates the content of the policy management table 1600 according to the received update content.
  • the management terminal 240 ends the system setting and closes the GUI 1900.

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

ストレージプログラムをOS上で動作させつつ、I/O性能を維持することを可能にする計算機システムを提供する。計算機システムは、OS上で動作し、ホストに論理ボリュームを提供するストレージプログラムを実行する。また、計算機システムは、ストレージプログラムが提供する論理ボリュームに適用されるストレージ機能の情報を含むボリューム管理情報、を有する。OSは、ホストから論理ボリュームに対するI/O要求を受信した場合、ボリューム管理情報を参照して、論理ボリュームに適用されるストレージ機能の情報に基づいて、ストレージプログラムによるI/O処理が必要か否かを判定する。必要と判定した場合、ストレージプログラムと通信し、ストレージプログラムによるI/O処理を実行する。また、OSは、ストレージプログラムによるI/O処理が必要でないと判定した場合、ホストへI/O応答する。

Description

計算機システム、計算機
 本発明は、計算機システム、計算機に関する。
 本技術分野の背景技術を開示する文献として特許第4480479号公報(特許文献1)がある。この公報には、ストレージシステム(ファイルシステム)をオペレーティングシステム(Operating System:OS)の一部として動作させる技術が記載されている。
特許第4480479号公報
 ストレージプログラムの可搬性を向上させ開発効率を高めるため、ストレージプログラムを、OS内部のプログラムではなく、OS上で動作するプログラムとして実装したいという新たな要求がある。この場合においても、大量かつ多様なストレージ処理を高速かつ高信頼に実行することが求められる。
 しかしながら、ストレージプログラムをOS上で動作させた場合、例えばOSとストレージプログラムとの間の通信量が増大して、I/O帯域が不足すると、I/O性能が低下する可能性がある。この点に関し、特許文献1は、ストレージプログラムをOS上で動作させることを想定しておらず、I/O性能の低下を抑える技術については言及していない。
 そこで、ストレージプログラムをOS上で動作させつつ、I/O性能を維持する技術を提供する。
 上記課題を解決するために、本発明の一態様である計算機システムは、オペレーティングシステムと、オペレーティングシステム上で動作しホストに論理ボリュームを提供するストレージプログラムと、を実行するプロセッサを備える。また、計算機システムは、オペレーティングシステムとストレージプログラムとの通信データを保持するキューと、ストレージプログラムが提供する論理ボリュームに適用されるストレージ機能の情報を含むボリューム管理情報と、を有するメモリをさらに備える。オペレーティングシステムは、ホストから論理ボリュームに対するI/O要求を受信した場合、ボリューム管理情報を参照して、I/O要求の対象となる論理ボリュームに適用されるストレージ機能の情報に基づいて、ストレージプログラムによるI/O要求の処理が必要か否かを判定し、必要と判定した場合、キューを介してストレージプログラムと通信する。そして、ストレージプログラムは、I/O要求に基づく処理を実行する。また、オペレーティングシステムは、ストレージプログラムによるI/O要求の処理が必要でないと判定した場合、ホストへI/O要求に対する応答を実行する。
 本発明によれば、ストレージプログラムをOS上で動作させつつ、I/O性能を維持することを可能にする技術を提供できる。上記した以外の課題、構成および効果は、以下の発明を実施するための形態の説明により明らかにされる。
I/O処理の概要を示す模式図である。 I/O処理の概要を示すフローチャートである。 計算機システム10の構成例を示す図である。 サーバ200のメモリ320の構成例を示す図である。 計算機システム10の他の構成例を示す図である。 Initiator-Targetキュー410の構成例を示す図である。 Target-Initiatorキュー420の構成例を示す図である。 ボリューム管理表1000の構成例を示す図である。 キャッシュ管理表900の構成例を示す図である。 プロセス管理表1300の構成例を示す図である。 資源管理表1400の構成例を示す図である。 キューペア管理表1500の構成例を示す図である。 ポリシ管理表1600の構成例を示す図である。 通信ドライバプログラム500のフローチャートである。 ストレージプログラム700のフローチャートである。 キャッシュ操作処理のフローチャートである。 複数のキューペアが存在するサーバ200の構成例を示す図である。 キューペア監視プログラム1700のフローチャートである。 キューペア増加処理のフローチャートである。 キューペア削減処理のフローチャートである。 システム設定を管理するGUIの一例を示す図である。
 以下、図面を参照して本発明の実施形態を説明する。説明の明確化のため、以下の記載及び図面は、適宜、省略及び簡略化がなされている。本発明が本実施形態に制限されることは無く、本発明の思想に合致するあらゆる応用例が本発明の技術的範囲に含まれる。特に限定しない限り、各構成要素は複数でも単数でも構わない。
 以下の説明では、例えば、「xxx表」の表現にて各種情報を説明することがあるが、各種情報は表以外のデータ構造で表現されていてもよい。各種情報がデータ構造に依存しないことを示すために、「xxx表」を「xxx情報」と呼ぶことがある。
 管理システムは、一又は複数の計算機で構成することができる。例えば、管理計算機が情報を処理及び表示する場合、管理計算機が管理システムである。例えば、複数の計算機で管理計算機と同等の機能が実現されている場合、当該複数の計算機(表示を表示用計算機が行う場合は表示用計算機を含んでよい)が、管理システムである。本実施形態では、管理端末240が管理システムである。
 以下の説明では、「プログラム」あるいはそのプロセスを主語として処理を説明する場合があるが、プログラムは、プロセッサ(例えば、CPU(Central Processing Unit))によって実行されることで、定められた処理を、適宜に記憶資源(例えば、メモリ)及び/又は通信インタフェース装置(例えば、通信ポート)を用いながら行うため、処理の主語がプロセッサであってもよい。プロセッサは、プログラムに従って動作することによって、所定の機能を実現する機能部として動作する。プロセッサを含む装置及びシステムは、これらの機能部を含む装置及びシステムである。
 プログラム、プロセス、又はプロセッサを主語として説明された処理は、計算機(例えば、サーバ、ストレージシステム、管理計算機、クライアント又はホスト)を主語として説明することもできる。プロセッサは、プロセッサが行う処理の一部又は全部を行うハードウェア回路を含んでもよい。コンピュータプログラムは、プログラムソースから各計算機にインストールされてもよい。プログラムソースは、例えば、プログラム配布サーバ(例えば、管理計算機)又は記憶メディアでよい。
 図1は、I/O処理の概要を示す模式図である。計算機システム10は、サーバ200とホスト210とを有する。サーバ200は、共有メモリ400とディスク装置360を有する。サーバ200では、OS600が動作し、またOS600上でストレージプログラム700が動作する。OS600は、I/O要求受信プログラム620と、I/O応答送信プログラム640と、通信ドライバプログラム500と、を有する。
 ストレージプログラム700は、複数のディスク装置360の物理的な記憶領域から、1または2以上の仮想的なディスク装置を構成し、ホスト210に提供する。以後の説明では、この仮想的なディスク装置を論理ボリューム340と呼ぶ。論理ボリューム340の構成方法には、例えば、RAID(Redundant Arrays of Inexpensive Disks)があり、複数のディスク装置360を用いることで、データ冗長化による信頼性向上や、ディスク装置360の並列動作による性能向上が期待できる。
 共有メモリ400は、Initiator-Targetキュー(ITQ)410とTarget-Initiatorキュー(TIQ)420のペア(以下「キューペア」ともいう)、またキャッシュ800を有する。
 ITQ410は、I/O要求受信プログラム620からストレージプログラム700への通信データを保持する。TIQ420は、ストレージプログラム700からI/O応答送信プログラム640への通信データを保持する。同じキューペアであるITQ410とTIQ420は、実際の処理において対として用いられる。キューペアが複数存在する場合、通信時、ストレージプログラム700は一連の通信にはペアになっているTIQ420とITQ410を使う必要がある。また、1つのキューペアを1つのストレージプログラム700が独占して処理してもよいし、複数のストレージプログラム700が1つのキューペアを共有して処理してもよい。
 図1の破線は制御情報の流れを示している。以下の説明において、制御情報は、I/O要求またはI/O応答である。また、図2は、I/O処理の概要を示すフローチャートである。図1及び図2を用いて、サーバ200がホスト210から論理ボリューム340に対するI/O要求を受信した場合におけるI/O処理の概要を、以下説明する。
 ホスト210は、サーバ200へ論理ボリューム340に対するI/O要求を送信する。サーバ200がホスト210からI/O要求を受信する際、サーバ200が有するHBA331またはNIC332が、I/O割り込み要求を発行する。CPUコア311は、I/O割り込み要求を受け取り、図2に示すI/O処理を開始する(S3000)。
 I/O割り込み要求を受け取ったCPUコア311は、I/O要求受信プログラム620を呼び出す(S3010)。CPUコア311は、I/O要求受信プログラム620を実行して、I/O要求を受信する。CPUコア311は、受信したI/O要求をメモリ320に記録し、通信ドライバプログラム500へI/O要求の到着の通知を発行する。その後、CPUコア311は、I/O要求受信プログラム620の処理を終了する。図1の破線C1は、このS3010及びS3020を実行するときの制御情報(ここではI/O要求)の流れを示している。
 次に、CPUコア311は、通信ドライバプログラム500を呼び出し(S3020)、通信ドライバプログラム500を実行して、ストレージプログラム700による処理の要否を決定する(S3030)。
 ここで、CPUコア311は、S3030においてYESの場合、すなわちストレージプログラム700の処理が必要と判断した場合、I/O要求をITQ410にエンキューする。図1の破線C2は、S3030がYesの場合における制御情報(ここではI/O要求)の流れを示している。
 ITQ410にエンキューされたI/O要求は、OS600上で動作するストレージプログラム700によって処理される(S3040)。ストレージプログラム700は、I/O応答をTIQ420にエンキューし、通信ドライバプログラム500をシステムコールする。図1の破線C3は、S3040を実行するときの制御情報(ここではI/O要求またはI/O応答)の流れを示している。
 CPUコア311は、システムコールにより呼び出された通信ドライバプログラム500を実行し、ストレージプログラム700によるI/O応答をTIQ420からデキューし、I/O応答送信プログラム640に通知する(S3050)。図1の破線C4は、S3050を実行するときの制御情報(ここではI/O応答)の流れを示している。
 一方、CPUコア311は、S3030においてNoの場合、すなわちストレージプログラム700の処理が不要と判断した場合、I/O要求をITQ410にエンキューしないことで、ストレージプログラム700にI/O要求を通知しない。この場合、CPUコア311は、通信ドライバプログラム500を実行して、I/O応答を行う。例えば、I/O要求がリード要求であれば、I/O応答送信プログラム640を呼び出し、リード対象のデータが存在するキャッシュ800のアドレス及びサイズを通知する(S3050)。図1の破線C6は、このS3030がNoの場合における制御情報(ここではI/O要求またはI/O応答)の流れを示している。
 次にCPUコア311は、I/O応答送信プログラム640を実行し、ホスト210にI/O応答を行う(S3060)。呼び出されたI/O応答送信プログラム640は、I/O要求に対する応答として、I/O完了通知をホスト210に送信する。
 例えば、I/O要求がリード要求であれば、CPUコア311は、HBA331もしくはNIC332に対し、ホスト210へリードデータの転送を指示する。この指示には、S3050のI/O応答で通知されたリード対象のデータが存在するキャッシュ800のアドレス及びサイズが含まれる。HBA331もしくはNIC332は、このキャッシュ800のアドレス及びサイズを参照し、キャッシュ800の該当領域からリードデータを読み出して、ホスト210へリードデータを転送する。そして、CPUコア311は、HBA331もしくはNIC332に対し、ホスト210へI/O処理(リード処理)の完了通知を送信することを指示する(S3170)。
 また、例えば、I/O要求がライト要求であれば、CPUコア311は、HBA331もしくはNIC332に対し、ホスト210へI/O処理(ライト処理)の完了通知を送信することを指示する。
 ホスト210へI/O処理の完了通知が送信されて、図2に示すI/O処理が完了する(S3070)。図1の破線C5は、S3060を実行するときの制御情報(ここではI/O応答)の流れを示している。
 したがって、図2のI/O処理のフローチャートにおいて、S3030がYesの場合、すなわちストレージプログラム700の処理が必要と判断された場合、図1の破線C1、C2、C3、C4、C5で示される制御情報の流れとなる。一方、S3030においてNoの場合、すなわちストレージプログラム700の処理が不要と判断された場合、図1の破線C1、C6、C5で示される制御情報の流れとなる。
 ここで、ストレージプログラム700は、OS600内部のプログラムではなく、OS600上で動作している。そのため、ストレージプログラム700がホスト210に提供する論理ボリューム340へのI/O要求の全てを、例えばストレージプログラム700で処理させると、OS600とストレージプログラム700との間の通信量が増大する。これにより、I/O帯域の不足や、CPUコア311で実行させる処理の増加により、I/O性能が低下する可能性がある。
 そこで、本実施形態においては、通信ドライバプログラム500が、ストレージプログラム700による処理の要否を決定して(S3030)、ストレージプログラム700での処理が不要な場合は、I/O要求の対象である論理ボリューム340を提供するストレージプログラム700であるにもかかわらず、ストレージプログラム700で当該I/O要求を処理しない。このように、ストレージプログラム700によるストレージ機能を使用しなくてもI/O応答が可能な場合には、通信ドライバプログラム500でI/O応答することで、ストレージプログラム700をOS600上で動作させつつ、I/O性能の低下を抑え、I/O性能を維持または向上することを可能にする。例えば、OS600は、ホスト210から論理ボリューム340に対するライト要求を受信した場合、キューペアを介してストレージプログラム700と通信する。そして、ストレージプログラム700では、ライト要求に基づく処理を実行する。一方、OS600は、ホスト210から論理ボリューム340に対するリード要求を受信した場合、キャッシュ管理表900を参照して、キャッシュ800上にリード要求に対応するデータが存在すると判定したとき、キャッシュ800上に存在するデータに基づき、ホスト210へリード要求に対する応答を実行する。
 また、図1には、1つのOS600(OSカーネル610)にI/O要求受信プログラム620のプロセスおよびI/O応答送信プログラム640のプロセスが1つずつ配置された例が示されているが、この構成に限定されることは無く、1つのOS600(OSカーネル610)内にI/O要求受信プログラム620のプロセスおよびI/O応答送信プログラム640のプロセスを複数配置することも可能である。
 図3は、計算機システム10の構成例を示す図である。計算機システム10は、サーバ200と、ホスト210と、管理端末240とを有する。サーバ200とホスト210と管理端末240は、ネットワーク220で互いに接続される。
 サーバ200は、複数のデータ通信プロトコルを処理可能な計算機である。例えば、サーバ200は、FCP(Fibre Channel Protocol)、iSCSI(Internet Small Computer System Interface)、NFS(Network File System)、CIFS(Common Internet File System)、HTTP(Hyper Text Transfer Protocol)などのデータ通信プロトコルを使い、ホスト210や管理端末240とデータ通信を行う。
 サーバ200は、例えば、ホスト210からのI/O要求を、ネットワーク220を介して受け取り、そのI/O処理を実行した後、処理結果(I/O応答)をホスト210へ返す。サーバ200は、データセンタなどの施設に固定設置される形態でもよいし、コンテナ型など移動可能であり、必要に応じて地理的な位置を変更してもよい。また、サーバ200が1つの計算機ではなく複数の計算機で構成されていてもよい。
 管理端末240は、サーバ200のソフトウェアおよび各種設定などを管理する管理計算機である。管理端末240は管理プログラムを格納しており、管理プログラムを実行することによりサーバ200の管理に関する各種処理を行う。
 ネットワーク220は、通信ネットワークであれば、その形態は問わない。ネットワーク220は、例えば、インターネット、LAN(Local Area Network)、WAN(Wide Area Network)、SAN(Storage Area Network)、無線LAN、携帯電話通信網などである。また、ネットワーク220は、単一の通信ネットワークではなく、複数種類の通信ネットワークから構成されてもよい。
 ホスト210は、データセンタなどの施設に固定設置されてもよいし、コンテナ型など移動可能とし地理的な位置を変化させてもよい。ホスト210としては例えばスマートフォンを含む携帯電話や汎用計算機などが想定される。また、ホスト210は単一の装置ではなく、複数の異なる計算機から構成されていてもよい。
 また、本実施形態では、計算機の一例としてサーバ200を例示しているが、本発明はこれに限定されることはない。他の例として、ストレージシステムを用いてもよい。本実施形態において、サーバ200は、計算機、ストレージシステム、またはストレージ装置としてもよい。
 サーバ200は、メモリ320、HBA(Host Bus Adaptor)331、NIC(Network Interface Card)332、ディスク装置360、及びそれらに接続された制御演算ユニットであるCPU310を有する。
 メモリ320に代えて、または加えて別種の記憶資源が採用されてもよい。HBA331及びNIC332に変えて、別種の通信インタフェースデバイスが採用されてもよい。
 CPU310は、メモリ320に格納されているコンピュータプログラムを実行する。CPU310は、複数の演算ユニットであるCPUコア311を有し、各コアは独立して動作することができ、並列にコンピュータプログラムを実行する。
 CPUコア311は、ストレージプログラム700、OS600、I/O要求受信プログラム620、およびI/O応答送信プログラム640を含む各種プログラムをメモリ320から読み出して実行するプロセッサコアである。CPUコア311は、プロセッサと呼んでも良い。
 メモリ320は、コンピュータプログラム及びその他のデータを記憶する。メモリ320は、ホスト210から受信したデータ及びホスト210に送信するデータを一時的に記憶するキャッシュ800を含んでいてもよい。
 HBA331は、ネットワーク220に接続され、NIC332は、LANやWAN、インターネットなどのネットワーク220に接続され、管理端末240やホスト210とのデータ通信に用いられる。
 ディスク装置360として、サーバ200の二次記憶装置であるSSD(Solid State Drive)351、HDD(Hard Disk Drive)352を有する。二次記憶装置はストレージとして、I/O処理のデータを格納する。SSD351、HDD352の個数は特に限定されず、それぞれ図3に示した数に限定されない。また、ディスク装置360は、典型的には、SSD351、HDD352であるが、ブロック形式のデータを格納できるものであれば何でもよい。本実施形態では、記憶デバイスの一例としてディスク装置360を例示しているが、本発明はこれに限定されることはない。他の例として、ディスク装置360は、テープアーカイブ、あるいはDVD、CDなどの光ディスクライブラリを備えた装置であってもよい。以下では、SSD351、HDD352を総称してディスク装置360と呼ぶことにする。本実施形態において、ディスク装置360は、記憶デバイスとしてもよい。
 図4は、サーバ200のメモリ320の構成例を示す図である。メモリ320には、ストレージプログラム700、キューペア監視プログラム1700、プロセス管理表1300、資源管理表1400、ポリシ管理表1600、OS600が格納されている。OS600はOSカーネル610を有する。OSカーネル610は、通信ドライバプログラム500、I/O要求受信プログラム620、I/O応答送信プログラム640を有する。
 また、メモリ320には、ストレージプログラム700、キューペア監視プログラム1700、OS600からアクセス可能な領域である共有メモリ400を有する。共有メモリ400は、キャッシュ800、キャッシュ管理表900、Initiator-Targetキュー(ITQ)410、Target-Initiatorキュー(TIQ)420、キューペア管理表1500、およびボリューム管理表1000を有する。図4に示すプログラムまたは管理情報は、ディスク装置360からロードされ、メモリ320へ格納される。
 通信ドライバプログラム500は、I/O要求受信プログラム620およびI/O応答送信プログラム640とストレージプログラム700との間の通信を実現する。通信ドライバプログラム500は、OSカーネル610からストレージプログラム700への通信を、TIQ420を介して伝達する。通信ドライバプログラム500は、ストレージプログラム700からOSカーネル610への通信を、ITQ410を介して伝達する。
 I/O要求受信プログラム620は、FCP/iSCSIなどの通信プロトコルを用いて、ホスト210からI/O要求を受信し、受信したI/O要求(入出力要求)を、通信ドライバプログラム500を介してストレージプログラム700へ送信する。
 I/O応答送信プログラム640は、通信ドライバプログラム500を介して、ストレージプログラム700からI/O応答を受信し、ホスト210へI/O応答を送信する。
 ストレージプログラム700は、FCP/iSCSIなどの通信プロトコルを介して、ホスト210からのI/O要求に従って、キャッシュ800を用いつつディスク装置360にデータを書き込み、またはキャッシュ800を用いつつディスク装置360からデータを読み出す。ストレージプログラム700は、OSカーネル610上で動作するプログラムであり、ストレージ(ディスク装置360)へデータを書き込む処理、またはストレージ(ディスク装置360)からデータを読み出す処理を実行するプログラムである。ストレージプログラム700は、スナップショットやRAID等のストレージ機能を実行するプログラムである。ストレージプログラム700は、ストレージ処理プログラム、ストレージプロセス、ストレージ機能と呼んでもよい。
 ストレージキャッシュ(キャッシュ)800は、ディスク装置360に書き込むデータまたはディスク装置360から読み出したブロックデータ(データ)を一時的に格納する。「ホスト210が論理ボリューム340にブロックデータを書き込む」というような説明は、実際はストレージプログラム700がキャッシュ800またはディスク装置360にブロックデータを書き込むことを意味する。同様に、「ホスト210が論理ボリューム340からブロックデータを読み出す」というような説明は、実際はストレージプログラム700がキャッシュ800またはディスク装置360からブロックデータを読み出すことを意味する。
 論理ボリューム340は、ボリューム管理表1000により管理される。
 一般に、ストレージプログラム700は、ホスト210から論理ボリューム340に対するデータを書き込む要求(ライト要求)を受信した場合、アクセス速度の速いキャッシュ800に一時的にデータを書き込んだ後、ホスト210にI/O応答として書き込み完了を通知する。そして、ホスト210からの書き込み要求とは非同期にディスク装置360に、キャッシュ800に格納されているデータを書き込む。これにより、ディスク装置360の性能が低い場合でも、キャッシュ800の性能によって、システムとしてのI/O性能を向上することができる。
 本実施例では、ストレージプログラム700は、高い応答性能と高いスループット性能を実現するため、ポーリングでI/O処理を行う。
 キャッシュ800は、ディスク装置360に書き込むデータまたはディスク装置360から読み出したブロックデータを一時的に格納するために用いられる。なお、図4の例では、キャッシュ800は、メモリ320の内部にあるが、実施形態がこれに限定されることはない。耐障害性の観点からストレージプログラム700とは別に、不揮発性の半導体メモリに格納されていてもよいし、キャッシュ800の一部として、半導体メモリより低速な記憶装置を用いてもよい。
 キャッシュ管理表900は、キャッシュ800に格納されているブロックデータの状態を管理するテーブルである。例えば、キャッシュ800に格納されているブロックデータの、キャッシュ800上のアドレス、格納先ボリュームアドレス、およびデータサイズが格納されている。キャッシュ管理表900は、キャッシュ管理情報と呼ばれてもよい。
 ボリューム管理表1000は、論理ボリューム340の情報を格納するテーブルである。例えば、各論理ボリューム340に関するボリューム番号、ボリューム属性、およびボリューム状態が格納されている。ボリューム管理表1000は、ボリューム管理情報と呼ばれても良い。
 TIQ420は、ストレージプログラム700が通信ドライバプログラム500を介してI/O応答送信プログラム640へデータを送信する際、そのデータを記録しておくための領域である。TIQ420はFIFO(First In First Out)型のデータ構造を有する。
 ITQ410は、I/O要求受信プログラム620が通信ドライバプログラム500を介してストレージプログラム700へデータを通信する際、そのデータを記録しておくための領域である。ITQ410はFIFO型のデータ構造を有する。
 プロセス管理表1300は、サーバ200内で動作しているストレージプログラム700の情報を管理するテーブルである。プロセス管理表1300には、起動中のストレージプログラム700のプロセスIDと、そのストレージプログラム700が監視するキューペアのIDが格納される。
 資源管理表1400は、サーバ200が有する資源を管理するためのテーブルである。資源管理表1400には、サーバ200内に接続されているHBA331のポート数、NIC332のポート数、メモリ320内のうち共有メモリ400として使用しているメモリ量、共有メモリ400として使用しているメモリ量のうち、キャッシュ800として使用しているメモリ量が格納される。
 キューペア管理表1500は、共有メモリ400上に格納されているTIQ420とITQ410のペア(以後、単にキューペアと呼ぶ)を管理するテーブルである。キューペア管理表1500には、キューペアに格納される情報を識別するためのキューペアID、TIQ420の先頭アドレス、ITQ410の先頭アドレス、およびキューサイズが格納される。
 ポリシ管理表1600は、キューペアを増減させるためのポリシを管理するテーブルである。ポリシ管理表1600には、どのような条件でキューペアを増加させるか、またどのような条件でキューペアを削減するかを定めたポリシが格納される。ポリシ管理表1600は、キューペア増減ポリシ管理情報と呼んでもよい。
 キューペア監視プログラム1700は、定期的にプロセス管理表1300、資源管理表1400、キューペア管理表1500、およびポリシ管理表1600を監視し、状況に応じてキューペアの数を増減させるプログラムである。キューペア監視プログラム1700は、ストレージプログラム700の一部であってもよいし、ストレージプログラム700とは別のプログラムであってもよい。
 図5は、計算機システム10の他の構成例を示す図である。図5に示すように、サーバ200でハイパーバイザ203が動作し、ハイパーバイザ203上で1または複数の仮想計算機202が稼働しても良い。仮想計算機202上で、OS600やストレージプログラム700、キューペア監視プログラム1700が動作してもよい。すなわち、図4に示す各プログラムは、物理計算機のハードウェア上で動作することもあれば、仮想計算機上で動作することもある。また、ホスト210は、仮想計算機上で動作するホストプログラムであってもよいし、物理的なホスト計算機であっても良い。OS600やストレージプログラム700、キューペア監視プログラム1700が動作する仮想計算機と、ホストプログラムが動作する仮想計算機とが、同一サーバ200上であっても、ネットワーク220を介して接続する異なるサーバ200上であってもよい。
 図6は、Initiator-Targetキュー(ITQ)410の構成例を示す図である。図7は、Target-Initiatorキュー(TIQ)420の構成例を示す図である。
 図6に示したITQ410は、先入れ先出し式すなわちFIFO型のデータ構造を有している。ITQ410には、I/O要求受信プログラム620がホスト210から受信したI/O要求が順番に詰め込まれる。
 図7に示したTIQ420も、FIFO型のデータ構造を有している。TIQ420には、ストレージプログラム700が、I/O要求受信プログラム620から通信ドライバプログラム500を介して受信したI/O要求に対して返送するI/O応答が順番にエンキューされる。I/O応答は、I/O処理完了通知と呼んでも良い。
 図6の例では、ITQ410には、2つのI/O要求が格納されている。I/O要求には、I/O要求の対象である論理ボリューム340のボリューム番号1110、I/O種別1120、ボリュームアドレス1130、データサイズ1140を示す情報が含まれていて良い。さらに、I/O種別1120がライトの場合、ライトデータが格納されたメモリ320のメモリアドレス1150を示す情報が含まれていて良い。例えば、図6によると、先に格納されたI/O要求は、対象のボリューム番号1110が「1」であり、I/O種別1120が「リード」であり、ボリュームアドレス1130が「0x100」であり、データサイズ1140が「0x100」である。後から格納されたI/O要求は、対象のボリューム番号1110が「2」であり、I/O種別1120が「ライト」であり、ボリュームアドレス1130が「0x3000」であり、データサイズ1140が「0x400」であり、メモリアドレス1150が「0x58000」である。I/O種別1120が「ライト」であるI/O要求をライト要求と呼んでも良い。I/O種別1120が「リード」であるI/O要求をリード要求と呼んでも良い。
 図7の例では、TIQ420には、2つのI/O応答(I/O処理完了通知)が格納されている。I/O応答は、I/O応答の対象である論理ボリューム340のボリューム番号1210、I/O種別1215、ボリュームアドレス1220、データサイズ1225を示す情報が含まれていて良い。さらに、I/O種別1120がリードの場合、リードデータが格納されたメモリ320(キャッシュ800)のメモリアドレス1230を示す情報が含まれていて良い。先に格納されたI/O応答は、ボリューム番号1210が「1」であり、I/O種別1215が「リード」であり、ボリュームアドレス1220が「0x100」であり、データサイズ1225が「0x100」であり、メモリアドレス1230が「0x58000」である。後から格納されたI/O応答は、ボリューム番号1210が「2」であり、I/O種別1215が「ライト」であり、ボリュームアドレス1220が「0x300」であり、データサイズ1225が「0x400」である。
 図8は、ボリューム管理表1000の構成例を示す図である。ボリューム管理表1000には、ストレージプログラム700が管理する論理ボリューム340の情報が記録される。例えば、ストレージプログラム700が論理ボリューム340を作成したときに、論理ボリューム340の情報をボリューム管理表1000に記録する。図8の例では、ボリューム管理表1000には、ストレージプログラム700が作成した論理ボリューム340の数だけ行がある。
 ボリューム管理表1000には、論理ボリューム340の情報として、ボリューム番号1010、ボリューム状態1020、ボリュームサイズ1030、ボリュームアドレス1035、ディスク装置番号1040、ディスク装置アドレス1050、ストレージ機能1060が含まれる。
 ボリューム番号1010には、論理ボリューム340を一意に識別するボリュームIDが格納される。ボリューム状態1020には、論理ボリューム340へのI/Oが可か不可かを示す情報が格納される。ここでは「I/O可」か「I/O不可」のいずれかが格納される。ボリュームサイズ1030には、論理ボリューム340の容量が格納される。
 ボリュームアドレス1035には、論理ボリューム340上の論理アドレスが格納される。ディスク装置番号1040には、論理ボリューム340を構成するディスク装置360の識別子が格納される。ディスク装置アドレス1050は、ボリュームアドレス1035に対応づけられた物理的な記憶領域のアドレスであって、ディスク装置番号1040で識別されるディスク装置360上のアドレスが格納される。なお、図8の例では、ボリュームアドレス1035から所定サイズ(例えば「0x100」)の論理ボリューム340の論理的な記憶領域と、ディスク装置アドレス1050から所定サイズのディスク装置360の物理的な記憶領域と、を対応づけている。この所定サイズの大きさは図8の例に限定されるものではないし、必ずしも所定サイズ毎の固定長で管理しなくても良い。
 ボリューム管理表1000は、論理ボリューム340の全ての記憶領域について、ディスク装置360の物理的な記憶領域と対応づけて、管理してもよい。または、論理ボリューム340のデータが格納されているディスク装置360の物理的な記憶領域と、論理ボリューム340の記憶領域との対応関係をボリューム管理表1000で管理しても良い。この場合、ストレージプログラム700は、残りの論理ボリューム340の記憶領域に対してライト要求があったときに、ディスク装置360の物理的な記憶領域を割り当て、その論理ボリューム340の記憶領域とディスク装置360の物理的な記憶領域との対応関係を、ボリューム管理表1000で管理しても良い。
 ストレージ機能1060には、論理ボリューム340に適用されるストレージ機能が格納される。ストレージ機能の例として、スナップショットやRAIDなどがある。サーバ200がI/O要求を受信した場合に、ストレージプログラム700での処理が必要となる所定のストレージ機能を論理ボリューム340に適用している場合、ストレージ機能1060には、その旨を示す情報(例えばYes)を格納しても良い。
 図8の例によると、ボリューム番号1010が「1」の論理ボリューム340は、ボリューム状態1020が「I/O可」であり、ボリュームサイズ1030が「1TB」であり、ストレージ機能1060としてRAID及びスナップショットを適用していることが示されている。
 図9は、キャッシュ管理表900の構成例を示す図である。キャッシュ管理表900の各行には、ストレージプログラム700がキャッシュ800に格納したデータに関する情報が格納される。格納される情報には、ボリューム番号910、ボリュームアドレス920、データサイズ930、メモリアドレス940、データ状況950が含まれる。
 キャッシュ管理表900には、キャッシュ800に格納されているデータの数だけ行がある。キャッシュ管理表900には、最大でキャッシュ800の容量分のデータを管理できるだけの容量がある。
 ボリューム番号910には、キャッシュ800に格納されているデータについて、データが属する論理ボリューム340の、ボリューム管理表1000で管理されているボリュームIDが格納される。
 ボリュームアドレス920には、キャッシュ800に格納されているデータについて、論理ボリューム340上でのアドレスが格納される。データサイズ930は、キャッシュ800に格納されているデータのサイズを示す。メモリアドレス940は、当該データについて、キャッシュ800上のアドレスを示す。
 データ状況950には、キャッシュ800上のデータについて、ディスク装置360へライト済みを示す「クリーン」、ディスク装置360へライト未完了を示す「ダーティ」、ストレージプログラムの処理状況を示す「リード中」、もしくは「ライト中」が格納される。
 図9には、キャッシュ800内に5つのデータが格納されている場合のキャッシュ管理表900が例示されている。例えば、ある行には、ボリューム番号910が「1」であり、ボリュームアドレス920が「0x100」であり、データサイズ930が「0x400」であり、メモリアドレス940が「0x0000」であり、データ状況950が「クリーン」であるデータが示されている。
 図10は、プロセス管理表1300の構成例を示す図である。プロセス管理表1300の各行には、起動中(実行中)のストレージプログラム700の情報が格納される。格納される情報には、プロセスID1310およびキューペアID1320が含まれる。プロセス管理表1300には、ストレージプログラム700の起動中(実行中)のプロセス数だけ行がある。
 プロセスID1310には、起動中(実行中)のストレージプログラム700のプロセスの識別子であるプロセスIDが格納される。キューペアID1320には、起動中のストレージプログラム700が使用するキューペアについての、キューペア管理表1500にて管理されているキューペアIDが格納される。
 図10には、起動中のストレージプログラム700が2個の場合のプロセス管理表1300が例示されている。例えば、行1330には、プロセスID1310が「2000」であり、キューペアID1320が「1、2」である起動中のストレージプログラム700が示されている。
 図11は、資源管理表1400の構成例を示す図である。資源管理表1400の各行には、サーバ200に接続されている資源に関する情報が示されている。資源には、メモリ320、HBA331、およびNIC332が含まれる。資源に関する情報には、各資源についての資源種別1410と資源量1420が含まれる。
 資源管理表1400には、HBA331のポート種別数、NIC332のポート種別数、共有メモリ、キャッシュの数の合計数だけ行がある。
 資源種別1410には、サーバ200に接続されているHBA331のポート種別、NIC332のポート種別、共有メモリ、キャッシュのいずれかが格納される。
 資源量1420には、サーバ200に接続されているHBA331やNIC332のポート数や、共有メモリやキャッシュ800の容量が格納されている。
 図11には、ポート種別がFCポートのHBA331と、ポート種別がEthernetポート(Ethernetは登録商標)のNIC332と、キャッシュ800とが示された資源管理表1400が例示されている。例えば、行1430には、資源種別1410が「FCポート」であり、資源量1420が「8」である資源の情報が格納されている。
 図12は、キューペア管理表1500の構成例を示す図である。キューペア管理表1500の各行には、TIQ420およびITQ410のキューペアに関する情報が記録される。記録される情報には、キューペアID1510、TIQ格納先頭アドレス1520、ITQ格納先頭アドレス1530、キューサイズ1540、および操作可否1545が含まれる。
 キューペア管理表1500には、TIQ420およびITQ410のキューペアの数だけ行がある。
 キューペアID1510には、各キューペアに割り振られたIDが格納される。
 TIQ格納先頭アドレス1520には、TIQ420が格納されているメモリ320上の先頭アドレスが格納される。
 ITQ格納先頭アドレス1530には、ITQ410が格納されているメモリ320の先頭アドレスが格納される。
 キューサイズ1540には、TIQ420およびITQ410のサイズが格納される。操作可否1545には、キューペアへの操作が可か不可を示す情報が格納される。ここでは「可」か「否」のいずれかが格納される。
 図12には、キューペアが4個ある場合のキューペア管理表1500が例示されている。例えば、行1550には、キューペアID1510が「1」であり、TIQ格納先頭アドレスが「0x800000」であり、ITQ格納先頭アドレスが「0x880000」であり、キューサイズが「0x80000」であり、操作可否が「否」であるデータが格納されている。
 図13は、ポリシ管理表1600の構成例を示す図である。ポリシ管理表1600の各行には、キューペアを増減させることを決める判定に用いるポリシの情報が格納される。ポリシの情報には、ポリシ項目1610、上限1620、および下限1630が含まれている。
 本実施形態では、ポリシ項目1610には、「ストレージプログラムが処理担当するキューペア数」、「FCポート数」、「Ethernetポート数」、「キューペア使用メモリ量」がある。「ストレージプログラムが処理担当するキューペア数」に関しては上限と下限が、「FCポート数」、「Ethernetポート数」、および「キューペア使用メモリ」に関しては上限が設定できる。
 例えば、行1640には、ポリシ項目1610が「ストレージプログラムが処理するキューペア数」であり、上限1620が「8」であり、下限1630が「1」であるポリシが設定されている。
 キューペア増減の実行要否は、ストレージプログラム700の起動中のプロセス数、および各種資源の使用量と、それぞれの上限および下限とを比較することで決定される。ストレージプログラム700の起動中のプロセス数は、プロセス管理表1300から算出することができる。
 各種資源として、FCポート数およびEthernetポート数、共有メモリ量およびキャッシュ量、およびキューペアが使用しているメモリ量がある。FCポート数およびEthernetポート数は資源管理表1400に記載されている。共有メモリ量およびキャッシュ量も資源管理表1400に記載されている。キューペアが使用しているメモリ量は、キューペア管理表1500から算出される。
 各資源の上限および下限は、ポリシ管理表1600の各ポリシ項目1610の上限あるいは下限から得られる。
 図14は、通信ドライバプログラム500のフローチャートである。CPUコア311は、I/O要求受信プログラム620からI/O要求の到着の通知を受信すると、通信ドライバプログラム500の処理を開始する。または、CPUコア311は、ストレージプログラム700がシステムコールを発行すると、通信ドライバプログラム500の処理を開始する(S3300)。
 次に、CPUコア311は、通信ドライバプログラム500がI/O要求の到着の通知を受信したか否かの判定処理を行う(S3310)。
 ステップS3310の判定で、I/O要求の到着の通知を受信していた場合(S3310:YES)、CPUコア311は、ボリューム管理表1000を参照して、I/O要求の対象となる論理ボリューム340が所定のストレージ機能1060を使用しているか判定する(S3315)。ここで、所定のストレージ機能とは、サーバ200がI/O要求を受信した場合、ストレージプログラム700での処理が必要となるストレージ機能である。所定のストレージ機能は、事前に設定されていても良い。ストレージプログラム700が備える複数のストレージ機能のうちの一部が、所定のストレージ機能であっても良い。
 ステップS3315の判定で、論理ボリューム340が所定のストレージ機能1060を使用していない場合(S3315:No)、CPUコア311は、ボリューム管理表1000を参照して、I/O要求の対象となる論理ボリューム340のボリューム状態1020がI/O可か否か判定する(S3320)。
 ステップS3320の判定で、論理ボリューム340のボリューム状態1020がI/O可である場合(S3320:YES)、CPUコア311は、I/O要求のI/O種別がリードであるかどうかを判定する(S3330)。
 ステップS3330の判定で、I/O要求の種別がリードの場合(S3330:YES)、CPUコア311は、I/O要求の対象となっている論理ボリューム340のアドレスとデータサイズについて、キャッシュ800上にデータが存在するか否かを、キャッシュ管理表900を参照して判定する(S3340)。
 ステップS3340の判定で、I/O要求対象の論理ボリューム340のアドレス範囲に対して、キャッシュ800上にデータが存在する場合(S3340:YES)、CPUコア311は、ITQ410内に、I/O要求対象の論理ボリューム340のアドレス範囲に対するデータの書き込みを要求するライト要求が存在するか否かを判定する(S3350)。
 ステップS3350の判定で、ITQ410内に、I/O要求対象の論理ボリューム340のアドレス範囲に対するライト要求が存在しない場合(S3350:YES)、CPUコア311は、I/O処理完了通知(I/O応答)を発行する(S3360)。これは、図2のS3030においてNoの場合、すなわちCPUコア311がストレージプログラム700の処理が不要と判断した場合に該当し、I/O要求をITQ410にエンキューしないことで、ストレージプログラム700にI/O要求を通知しない。CPUコア311は、I/O応答送信プログラム640を呼び出し、リード対象のデータが存在するキャッシュ800のアドレス及びサイズを通知する。CPUコア311は、ステップS3360の処理が完了次第、通信ドライバプログラム500の処理を終了する(S3400)。
 ステップS3315の判定において、所定のストレージ機能を使用している場合(S3315:YES)、I/O要求の対象となる論理ボリューム340がストレージプログラム700での処理が必要となるストレージ機能を使用しているので、CPUコア311は、ITQ410にI/O要求をエンキューする(S3370)。
 ステップS3320の判定において、論理ボリューム340のボリューム状態1020がI/O不可である場合(S3320:NO)、論理ボリューム340が障害状態である可能性や、フォーマット中である可能性があるので、CPUコア311は、ITQ410にI/O要求をエンキューする(S3370)。
 ステップS3330の判定において、I/O種別がリードでない場合(S3330:NO)、例えばI/O種別がライトである場合、キャッシュ操作処理や、RAID等のストレージ機能を使用する(または使用する可能性がある)ので、CPUコア311は、ITQ410にI/O要求をエンキューする(S3370)。
 ステップS3340の判定において、I/O要求対象のボリュームアドレス範囲についてキャッシュ800上にデータが存在しない場合(S3340:NO)、ストレージプログラム700によりディスク装置360からのデータ読み出しまたはデータ書き込みが必要となる可能性があるので、CPUコア311は、ITQ410にI/O要求をエンキューする(S3370)。
 ステップS3350の判定において、ITQ410内に、I/O要求対象の論理ボリューム340のアドレス範囲に対するライト要求が存在する場合(S3350:NO)、ストレージプログラム700で当該先行するライト要求を処理した後に、今回のI/O要求(リード要求)を処理する必要があるので、CPUコア311は、ITQ410にI/O要求をエンキューする(S3370)。
 I/O要求がITQ410にエンキューされると、ストレージプログラム700の処理が必要な状態になる。CPUコア311は、ステップS3370の処理が完了次第、通信ドライバプログラム500を終了する(S3400)。
 S3310の判定で、I/O要求を受信していない場合(S3310:NO)、すなわちシステムコールに通信ドライバプログラム500が呼び出された場合、CPUコア311は、TIQ420から、I/O応答をデキューする(S3380)。
 次に、CPUコア311は、I/O応答を、I/O応答送信プログラム640に通知する(S3390)。CPUコア311は、ステップS3390の処理が完了次第、通信ドライバプログラム500を終了する(S3400)。
 以上、ステップS3300からS3400で処理を完了する。なお、図14に示す各判断ステップS3310、S3315、S3320、S3330、S3340、S3350について、一部のステップの順序を変更しても、一部のステップを省略してもよい。
 OS600は、S3315において、ホスト210から論理ボリューム340に対するI/O要求を受信した場合、ボリューム管理表1000を参照して、I/O要求の対象となる論理ボリューム340に適用されるストレージ機能1060の情報に基づいて、ストレージプログラム700によるI/O要求の処理が必要か否かを判定する。ストレージプログラム700によるI/O要求の処理が必要と判定した場合、キューペアを介してストレージプログラム700と通信する。ストレージプログラム700では、I/O要求に基づく処理が実行される。一方、OS600は、ストレージプログラム700によるI/O要求の処理が必要でないと判定した場合、ホスト210へI/O要求に対する応答を実行する。ストレージプログラム700をOS600上で動作させつつ、I/O性能の低下を抑え、I/O性能を維持または向上することを可能にする。
 ストレージプログラム700は、データをキャッシュ800に書き込んだ後に記憶デバイス(ディスク装置360)にデステージする。I/O応答送信プログラム640は、データ出力の要求を受けると、その要求の対象のデータがキャッシュ800に存在すればキャッシュ800のデータを出力する。一方、その要求の対象のデータがキャッシュ800に存在しなければ、I/O応答送信プログラム640は、その要求をITQ410を介してストレージプログラム700に通知する。これによれば、キャッシュ800によりデータ出力の処理を高速化する構成において、キャッシュ800にデータが存在するとき、通信ドライバプログラム500が、キューペアを用いた通信およびストレージプログラム700の処理を介さず、データ出力の処理を迅速に完了させることができる。
 図15は、ストレージプログラム700のフローチャートである。CPUコア311は、サーバ200の起動時に、図15に示す処理を開始する(S3500)。CPUコア311は、まず、プロセス管理表1300を参照し、実行しているストレージプログラム700のプロセスが担当となっているキューペアの中から処理対象とするキューペアを1つ選択する。キューペアの選択方法は限定されないが、例えばラウンドロビンで複数のキューペアから順番に1つずつ選択するという方法が挙げられる。
 次にCPUコア311は、キューペア管理表1500を参照し、選択した処理対象のキューペアが操作可能な状態かどうか(操作可否1545)を判定する(S3505)。処理対象のキューペアが操作不可の場合(S3505:NO)、CPUコア311は再度ステップS3500に戻って処理をやり直す。
 処理対象のキューペアが操作可能な場合(S3505:YES)、CPUコア311は、ITQ410にエントリがあるかどうかを判定する(S3510)。
 S3510の判定で、ITQ410にエントリがない場合(S3510:NO)、CPUコア311はステップS3500に戻る。一方、S3510の判定で、ITQ410にエントリがある場合(S3510:YES)、CPUコア311は、ITQ410からI/O要求をデキューする(S3520)。
 次に、CPUコア311は、ITQ410からデキューしたI/O要求の対象となっている論理ボリューム340に対して、テスト用コマンドを発行し、論理ボリューム340へのI/Oが可能かどうか判定する処理を行う(S3530)。S3530の判定で、論理ボリューム340へのI/Oが不可の場合(S3530:NO)、CPUコア311は、TIQ420へ、I/O応答としてエラー応答をエンキューする(S3590)。
 S3530の判定で、論理ボリューム340へのI/Oが可能の場合(S3530:YES)、CPUコア311は、図16のキャッシュ操作処理を行う(S3535)。次に、CPUコア311は、ITQ410からデキューしたI/O要求のI/O種別がリードかどうかを判定する(S3540)。
 S3540の判定で、I/O種別が「リード」である場合(S3540:YES)、CPUコア311は、I/O要求の対象の論理ボリューム340のデータをディスク装置360からキャッシュ800へ転送する(S3570)。次に、CPUコア311は、キャッシュ管理表900における、I/O要求の対象の論理ボリューム340のデータ状況950を「クリーン」に更新する(S3580)。
 S3540の判定で、I/O種別が「リード」でない場合(S3540:NO)、CPUコア311は、I/O要求に基づき、キャッシュ800にデータをライトする(S3620)。次に、CPUコア311は、キャッシュ管理表900における、I/O要求の対象の論理ボリューム340のデータ状況950を「ダーティ」に更新する(S3580)。
 次に、CPUコア311は、TIQ420へ、I/O応答をエンキューする(S3590)。CPUコア311は、システムコールを発行し、TIQ420へのエンキューを行ったことを通信ドライバプログラム500へ通知する(S3600)。ステップS3600の処理が終了次第、CPUコア311はステップS3500へ戻る。
 以上、ステップS3500からS3620でストレージプログラム700の処理を実行する。
 図16は、ストレージプログラム700におけるS3535のキャッシュ操作処理のフローチャートである。
 CPUコア311は、キャッシュ800に空き領域があるかどうかを、キャッシュ管理表900を用いて判定する(S3730)。
 ステップS3730の判定において、キャッシュ800に空き領域がある場合(S3730:YES)、CPUコア311は、空き領域を使用するために、キャッシュ管理表900の空き領域を示す行の情報を更新し、使用する領域を示す行を追加することにより、キャッシュ管理表900を更新する(S3780)。
 ステップS3730の判定において、キャッシュ800に空き領域がない場合(S3730:NO)、CPUコア311は、更にキャッシュ管理表900を参照し、キャッシュ800上にクリーンデータがあるかどうかを判定する(S3740)。
 ステップS3740の判定において、クリーンデータが存在する場合(S3740:YES)、CPUコア311はキャッシュ800上のクリーンデータを破棄する(S3750)。
 次に、CPUコア311は、破棄したクリーンデータに該当するキャッシュ管理表900上の行を削除し、その領域を空き領域として使用するために、キャッシュ管理表900を更新する(S3780)。
 ステップS3740の判定において、クリーンデータが存在しない場合(S3740:NO)、CPUコア311は、キャッシュ管理表900からダーティデータを示す行を1つ選択し、選択した行のデータ状況950に「ライト中」を付加し、キャッシュ800上の当該データをディスク装置360へ書き込む(S3770)。
 次に、CPUコア311は、キャッシュ管理表900上のディスク装置360に書き込んだデータに該当する行のデータ状況950を「クリーン」へ更新し、当該領域を空き領域として使用するために、キャッシュ管理表900を更新する(S3780)。
 以上により、キャッシュ操作処理を完了する。
 図17は、複数のキューペアが存在するサーバ200の構成例を示す図である。図1のサーバ200にはキューペアが1組のみ記載されているが、図17のように、サーバ200にキューペアが複数存在してもよい。ストレージプログラム700の各プロセスは1または複数のキューペアを使用してもよい。また、キューペアは動的に増減させても良い。
 図18は、キューペア監視プログラム1700のフローチャートである。CPUコア311は、サーバ200の起動時に、図18に示す処理を開始する(S4000)。
 CPUコア311は、I/O要求受信プログラム620からストレージプログラム700への通信データを保持するITQ410と、ストレージプログラム700からI/O応答送信プログラム640への通信データを保持するTIQ420とを対として用い、そのキューペアの個数を制御する。
 その際、CPUコア311は、キューペアに関連する資源の使用量に基づいてキューペアの個数を制御する。ここでは資源の例として、ストレージプログラム700が処理するキューペア数、FCポート数、Ethernetポート数、およびキューペア使用メモリ量がある。キューペアに関連する資源の使用量に基づいてキューペアの個数を制御するので、資源の使用量を適切な範囲に維持することができる。
 また、キューペアの個数には上限数と下限数が定められ、CPUコア311は、キューペアの個数が下限数を下回ったらキューペアを増加させ、キューペアの個数が上限数を超えたらキューペアを削減する。これによれば、キューペアの個数を状況に応じて増減制御するとともに、上限と下限の間の適切な範囲に維持することができる。
 CPUコア311は、ポリシ管理表1600を読み込む。このポリシ管理表1600は、キューペアの個数の制御に用いるポリシを表わすキューペア増減ポリシ管理情報である。管理端末240は、キューペア増減ポリシ管理情報を画面表示し、入力操作により更新する。サーバ200は、管理端末240からキューペア増減ポリシ管理情報(ポリシ管理表1600)を取得してもよい。
 CPUコア311は、以下に示すように、キューペア増減ポリシ管理情報を参照してキューペアの個数を制御する。これにより、キューペアの増減制御の条件をユーザの所望により設定したり変更したりすることができる。
 CPUコア311は、資源管理表1400、キューペア管理表1500、プロセス管理表1300を読み込む。CPUコア311は、ポリシ管理表1600において、ストレージプログラムが処理するキューペア数に関するポリシを記述した行1640における下限値と、処理すべきキューペア数を意味するキューペア管理表1500の行数とを比較し、ポリシ管理表1600の行1640の下限値がキューペア管理表1500の行数を上回っているか否か判定する(S4050)。
 ステップS4050の判定で、ポリシ管理表1600の行1640の下限値がキューペア管理表1500の行数を上回っていた場合(S4050:YES)、つまり、キューペア数がポリシ上の下限値を下回っていた場合、CPUコア311は、キューペア増加処理を実行する(S4060)。その後、CPUコア311はスリープ処理を実行する(S4090)。
 ステップS4050の判定で、ポリシ管理表1600の行1640の下限値がキューペア管理表1500の行数を上回っていた場合(S4050:NO)、つまり、キューペア数がポリシ上の下限値を下回っていない場合、CPUコア311は、S4070において、キューペア管理表1500の行数(キューペア数)と、プロセス管理表1300の行数(起動中のストレージプログラム700のプロセス数)とを比較する。更に、CPUコア311は、同じS4070において、ポリシ管理表1600の行1640、行1650、および行1660の各上限値と、キューペア管理表1500の行数とを比較する。更に、CPUコア311は、同じS4070において、ポリシ管理表1600の行1670の上限値と、キューペア管理表1500から算出されるキューサイズ合計値とを比較する。
 S4070において、キューペア管理表1500から算出される行数が、ポリシ管理表1600の行数の上限値を超えている場合、もしくはキューペア管理表1500から算出されるキューサイズ合計値が、ポリシ管理表1600のキューペア使用メモリ量の上限値を超えている場合(S4070:YES)、つまり、キューペア数がポリシ上の上限値を上回っている場合、CPUコア311は、キューペア削減処理を実行する(S4080)。
 同一のキューを複数のプロセスで共有して使用する場合、あるプロセスがキューを操作している間は他のプロセスがキューを操作できないという制約が生じる。このようなキュー操作の競合により高スループットの達成が妨げられる。それに対して、本実施形態では、CPUコア311は、ストレージ処理を実行するプロセスの個数に応じてキューペアの個数を制御する。そのため、キューペアの個数が過剰になり、キューの状況を確認するキューチェック処理の負担が増えるのを抑制する一方で、キュー操作の競合を低減してスループットの低下を抑制することができる。
 キューペア管理表1500から算出される行数が、ポリシ管理表1600の行数の上限値を超えておらず、かつキューペア管理表1500から算出されるキューサイズ合計値が、ポリシ管理表1600のキューペア使用メモリ量の上限値を超えていない場合(S4070:NO)、つまり、キューペア数がポリシ上の上限値を上回っていない場合、CPUコア311は、一度処理の停止(スリープ処理)を行う(S4090)。
 また、ステップS4060またはステップS4080の処理が終了した場合も、CPUコア311は、スリープ処理を行う(S4090)。
 ステップS4090においてCPUコア311がスリープする時間は、ここでは一例として10秒である。ただし、実施形態がそれに限定されることはない。他の例として、1秒でも1分でもよい。または、スリープ時間は可変であってもよい。
 次にCPUコア311は、ステップS4090のスリープ完了後、ステップS4010に戻り、再びステップS4000からS4090まで処理を繰り返し実行する。
 本実施形態のように、ストレージ処理をOSカーネル610の一部ではなくOS600上で動作するプログラムにすると、ストレージプログラム700の可搬性が向上し、開発効率が高まる一方で、ストレージプログラム700はOS600とは別個独立に動作することとなり、ストレージプログラム700からOSカーネル610への通信が増大する。そこで、本実施形態では、通信データの消失を抑えかつ効率よく処理するために、OSカーネル610からストレージプログラムへの方向だけでなく、ストレージプログラム700からOSカーネル610への方向にも待ち行列を保持するキューを配置する。両方向にキューを用いることにより、高いスループット性能を実現することができる。
 ストレージプログラム700からOSカーネル610への通信は、その前に発生したOSカーネル610からストレージプログラム700へ要求を伝達する通信に対する応答であるため、どちらか一方の通信のスループットが低下すれば、それがボトルネックとなってストレージ処理全体のスループットが低下してしまう。しかし、本実施形態では、両方向にキューを用いているので、ストレージ処理全体を高いスループットに維持することが可能である。
 また、ストレージプログラム700からOSカーネル610への通信は、その前に発生したOSカーネル610からストレージプログラム700へ要求を伝達する通信に対する応答であるため、本実施形態では更に、OSカーネル610からストレージプログラム700への通信データを保持するキューとストレージプログラムからOSカーネル610への通信データを保持するキューをペアにし、それらの個数を連動するように制御することにより、制御を効率化している。
 図19は、キューペア監視プログラム1700におけるキューペア増加処理(S4060)のフローチャートである。CPUコア311は、キューペア監視プログラム1700から呼び出された場合、図19に示す処理を開始する(S4200)。
 CPUコア311は、まず、ポリシ管理表1600における各行に示された上限値のうちで最小のものを算出する。このとき、行1670(キューペア使用メモリ量)については、行1670(キューペア使用メモリ量)の上限値をキューペア管理表1500の先頭行のキューサイズの2倍で割った商を求めることにより、上限値をキューペア数に換算する。
 ステップS4210では、そのキューペア数に換算したキューペア使用メモリ量の上限値を他の行1640、1650、1660の上限値と比較する。そして、CPUコア311は、算出した上限値の最小値と、キューペア管理表1500の行数で表わされる現在のキューペア数との差分を算出し、その差分をキューペアの増加数とする。
 次にCPUコア311は、S4210で算出したキューペア増加数とキューサイズの積と、キャッシュ管理表900の空き容量とを比較し、空き容量が、キューペア増加分の総キューサイズを上回っているかどうかを判定する(S4220)。
 ステップS4220の判定において、空き容量が、キューペア増加分の総キューサイズを上回っている場合(S4220:YES)、CPUコア311は、キャッシュ管理表900の空き容量をキューペア増加分だけ減らした値に更新する(S4230)。空き容量が、キューペア増加分の総キューサイズを下回っている場合(S4220:NO)、CPUコア311は、キャッシュ操作処理を実施し(S4270)、キャッシュ800の空き容量を増加させる。
 次にCPUコア311は、S4210で算出した、キューペアの増加数だけキューペアを作成する(S4240)。
 次にCPUコア311は、追加したキューペアの情報でキューペア管理表1500を更新する(S4250)。
 次にCPUコア311は、プロセス管理表1300に追加したキューペアのIDを追加する(S4260)。ステップS4260の処理が完了したら、CPUコア311はキューペア増加処理を終了する。
 以上のように、CPUコア311は、キューペアを増加するとき、資源の使用量の上限量をキューペアの個数の上限数と互いに比較が可能なように変換する。更に、CPUコア311は、上限量を変換した上限数とキューペアの個数の上限数のうちの最小の上限数を求める。さらに、CPUコア311は、求めた上限数と現在のキューペアの個数との差分をキューペアの増加数と決定する。これにより、資源の使用量の上限量を上限数と比較できるように個数で表わした上限数に変換するので、個数による比較的容易な演算により、各値を制限の範囲内に維持しつつキューペアの個数を適切な個数に増加させることができる。
 図20は、キューペア監視プログラム1700におけるキューペア削減処理(S4080)のフローチャートである。CPUコア311は、キューペア監視プログラム1700から呼び出された場合に、図20の処理を開始する(S4400)。
 CPUコア311は、ポリシ管理表1600の各行の上限値のうちで、最小のものを算出する(S4410)。このとき、行1670(キューペア使用メモリ量)については、行1670(キューペア使用メモリ量)の上限値をキューペア管理表1500の先頭行のキューサイズの2倍で割った商を求めることにより、上限値をキューペア数に換算する。ステップS4410では、そのキューペア数に換算したキューペア使用メモリ量の上限値を他の行1640、1650、1660の各上限値と比較する。そして、CPUコア311は、算出した最小値と現在のキューペア数との差分をキューペアの削減数とする。
 次にCPUコア311は、キューペア管理表1500とキャッシュ管理表900を参照し、キャッシュ800の領域に最も近い側から順に、キューペア削減数分だけキューペアを選択する(S4420)。
 なお、本実施形態では、共有メモリ400が複数個ある場合、CPUコア311は、キューペアを作成するとき、可能であれば、キャッシュ800が配置されているものと同じ共有メモリ400にキューペアを配置することとする。そして、このステップS4420においては、CPUコア311は、キャッシュ800が配置されているのと同じ共有メモリ400に配置されているキューペアを選択するようにする。
 次にCPUコア311は、ステップS4420で選択したキューペアについて、キューペア管理表1500の操作可否1545の設定を更新し、キューペアの操作を禁止する(S4430)。
 次にCPUコア311は、選択したキューペア内に存在するエントリを他のキューペアへ移動させる(S4440)。選択したキューペアが空になると、次にCPUコア311は、選択したキューペアを削除する(S4450)。次にCPUコア311は、削除したキューペアに関する情報をキューペア管理表1500から削除する(S4460)。次にCPUコア311は、プロセス管理表1300のキューペアID1320から、削除したキューペアのIDを削除する(S4470)。
 最後にCPUコア311は、キャッシュ管理表900の空き容量の情報を更新して処理を終了する(S4480)。
 上述したように、共有メモリ400上にキャッシュ800が配置されている場合、CPUコア311は、キューペアを削除するとき、キャッシュ800の領域に最も近いキューペアを削除する。これによれば、キューペアを削除するときにキャッシュ800の領域に最も近いキューペアを削除するので、キューペア削除でできる空き領域を効率よくキャッシュ800に利用できる位置に作成することができる。
 また、CPUコア311は、キューペアを削減するとき、資源の使用量の上限量をキューペアの個数の上限数と互いに比較が可能なように変換する。さらに、CPUコア311は、その上限量を変換した上限数と前記キューペアの個数の上限数のうちの最小の上限数を求める。さらにCPUコア311は、求めた上限数と現在のキューペアの個数との差分をキューペアの削減数と決定する。資源の使用量の上限量を上限数と比較できるように個数に変換するので、個数による比較的容易な演算により、各値を制限の範囲内に維持しつつキューペアの個数を適切に削減することができる。
 図21は、システム設定を管理するGUI(Graphical User Interface)の一例を示す図である。管理端末240が有するCPUで実行される管理プログラムは、システム設定を行うためのGUI1900をシステム管理者に提供する。システム管理者は、GUI1900を用いてサーバ200へシステム設定に関する指示を入力する。
 GUI1900は、キューペア数増減ポリシを設定するためのGUIであり、キューペア数増減ポリシ設定部1910、更新ボタン1930、キャンセルボタン1940を含む。
 キューペア数増減ポリシ設定部1910は、サーバ200に格納しているポリシ管理表1600の情報を表示するため、あるいはサーバ200に格納するポリシ管理表1600の情報をシステム管理者に設定させるための部位である。ポリシ項目1610で示された、ストレージプログラムが処理するキューペア数、FCポート数、Ethernetポート数、およびキューペア使用メモリ量について、上限1620と下限1630には、現在設定されている値が表示され、かつその値が編集可能となっている。ポリシ項目1610とその上限1620及び下限1630のそれぞれの意味はポリシ管理表1600におけるそれぞれの意味と同じである。
 システム管理者が、キューペア数増減ポリシ設定部1910を編集し、更新ボタン1930を押すと、管理端末240からサーバ200へ更新内容が通知される。更新内容を受け取ったサーバ200は、受け取った更新内容に従って、ポリシ管理表1600の内容を更新する。
 システム管理者がキャンセルボタン1940を押すと、管理端末240は、システム設定を終了し、GUI1900を閉じる。
 以上、本発明の実施形態を説明したが、これは本発明の説明のための例示であって、本発明の範囲を上記構成に限定する趣旨ではない。本発明は、他の種々の形態でも実施することが可能である。
10 計算機システム、200 サーバ、210 ホスト、220 ネットワーク、240 管理端末、310 CPU、311 CPUコア、320 メモリ、331 HBA、332 NIC、340 論理ボリューム、351 SSD、352 HDD、360 ディスク装置、400 共有メモリ、410 Initiator-Targetキュー(ITQ)、420 Target-Initiatorキュー(TIQ)、500 通信ドライバプログラム、600 OS、610 OSカーネル、620 I/O要求受信プログラム、640 I/O応答送信プログラム、700 ストレージプログラム、800 キャッシュ、900 キャッシュ管理表、1000 ボリューム管理表、1300 プロセス管理表、1400 資源管理表、1500 キューペア管理表、1600 ポリシ管理表、1700 キューペア監視プログラム

 

Claims (13)

  1.  オペレーティングシステムと、前記オペレーティングシステム上で動作しホストに論理ボリュームを提供するストレージプログラムと、を実行するプロセッサと、
     前記オペレーティングシステムと前記ストレージプログラムとの通信データを保持するキューと、前記ストレージプログラムが提供する前記論理ボリュームに適用されるストレージ機能の情報を含むボリューム管理情報と、を有するメモリと、を備え、
     前記オペレーティングシステムは、前記ホストから前記論理ボリュームに対するI/O要求を受信した場合、前記ボリューム管理情報を参照して、前記I/O要求の対象となる前記論理ボリュームに適用されるストレージ機能の情報に基づいて、前記ストレージプログラムによる前記I/O要求の処理が必要か否かを判定し、必要と判定した場合、前記キューを介して前記ストレージプログラムと通信し、
     前記ストレージプログラムは、前記I/O要求に基づく処理を実行し、
     前記オペレーティングシステムは、前記ストレージプログラムによる前記I/O要求の処理が必要でないと判定した場合、前記ホストへ前記I/O要求に対する応答を実行する、
    計算機システム。
  2.  前記メモリは、前記論理ボリュームのデータを一時的に格納するキャッシュと、前記キャッシュ上のデータを管理するキャッシュ管理情報と、を有し、
     前記プロセッサにより実行される前記オペレーティングシステムは、前記ホストから前記論理ボリュームに対するライト要求を受信した場合、前記キューを介して前記ストレージプログラムと通信し、
     前記プロセッサにより実行される前記ストレージプログラムは、前記ライト要求に基づく処理を実行し、
     前記オペレーティングシステムは、前記ホストから前記論理ボリュームに対するリード要求を受信した場合、前記キャッシュ管理情報を参照して、前記キャッシュ上に前記リード要求に対応するデータが存在すると判定したとき、前記キャッシュ上に存在するデータに基づき、前記ホストへ前記リード要求に対する応答を実行する、
    請求項1に記載の計算機システム。
  3.  前記プロセッサにより実行される前記オペレーティングシステムは、前記リード要求の対象となる前記論理ボリュームのアドレス範囲を対象とするライト要求が、前記キューに存在する場合、前記キューを介して前記ストレージプログラムと通信し、
     前記プロセッサにより実行される前記ストレージプログラムは、前記リード要求に基づく処理を実行し、
     前記オペレーティングシステムは、前記リード要求の対象となる前記論理ボリュームのアドレス範囲を対象とするライト要求が、前記キューに存在しない場合、前記リード要求に対する前記応答を実行する、
    請求項2に記載の計算機システム。
  4.  前記プロセッサは、前記オペレーティングシステムから前記ストレージプログラムへの通信データを保持する第1キューと、前記ストレージプログラムから前記オペレーティングシステムへの通信データを保持する第2キューとを対として用い、前記第1キューと前記第2キューの対であるキューペアの個数を制御する、
    請求項3に記載の計算機システム。
  5.  前記プロセッサは、前記ストレージプログラムのプロセスの個数に応じて、前記キューペアの個数を制御する、
    請求項4に記載の計算機システム。
  6.  前記プロセッサは、前記キューペアに関連する資源の使用量に基づいて、前記キューペアの個数を制御する、
    請求項4に記載の計算機システム。
  7.  前記ストレージプログラムと前記オペレーティングシステムが共有する前記メモリの領域上に前記キャッシュ及び前記キューペアが配置され、
     前記プロセッサは、前記キューペアを削除するとき、前記キャッシュの領域に最も近いキューペアを削除する、
    請求項4に記載の計算機システム。
  8.  前記キューペアの個数には上限数と下限数が定められ、
     前記プロセッサは、前記キューペアの個数が前記下限数を下回ったら前記キューペアを増加させ、前記キューペアの個数が前記上限数を超えたら前記キューペアを削減する、
    請求項4に記載の計算機システム。
  9.  前記資源の使用量には上限量が設定されており、
     前記プロセッサは、キューペアを増加するとき、前記資源の使用量の前記上限量を前記キューペアの個数の上限数と互いに比較が可能なように変換し、前記上限量を変換した上限数と前記キューペアの個数の上限数のうちの最小の上限数を求め、求めた前記上限数と現在の前記キューペアの個数との差分を前記キューペアの増加数と決定する、
    請求項6に記載の計算機システム。
  10.  前記資源の使用量には上限量が設定されており、
     前記プロセッサは、キューペアを削減するとき、前記資源の使用量の上限量を前記キューペアの個数の上限数と互いに比較が可能なように変換し、前記上限量を変換した上限数と前記キューペアの個数の上限数のうちの最小の上限数を求め、求めた前記上限数と現在の前記キューペアの個数との差分を前記キューペアの削減数と決定する、
    請求項6に記載の計算機システム。
  11.  前記プロセッサは、前記キューペアの個数の制御に用いるポリシを表わすキューペア増減ポリシ管理情報を画面表示し入力操作により更新する管理計算機から、該キューペア増減ポリシ管理情報を取得し、該キューペア増減ポリシ管理情報を参照して前記キューペアの個数を制御する、
    請求項4に記載の計算機システム。
  12.  オペレーティングシステムと、前記オペレーティングシステム上で動作しホストに論理ボリュームを提供するストレージプログラムと、を実行するプロセッサと、
     前記オペレーティングシステムと前記ストレージプログラムとの通信データを保持するキューと、前記ストレージプログラムが提供する前記論理ボリュームに適用されるストレージ機能の情報を含むボリューム管理情報と、を有するメモリと、を備え、
     前記オペレーティングシステムは、前記ホストから前記論理ボリュームに対するI/O要求を受信した場合、前記ボリューム管理情報を参照して、前記I/O要求の対象となる前記論理ボリュームに適用されるストレージ機能の情報に基づいて、前記ストレージプログラムによる前記I/O要求の処理が必要か否かを判定し、必要と判定した場合、前記キューを介して前記ストレージプログラムと通信し、
     前記ストレージプログラムは、前記I/O要求に基づく処理を実行し、
     前記オペレーティングシステムは、前記ストレージプログラムによる前記I/O要求の処理が必要でないと判定した場合、前記ホストへ前記I/O要求に対する応答を実行する、
    計算機。
  13.  前記ホストは、前記プロセッサにより実行されるホストプログラムである、
    請求項12の計算機。

     
PCT/JP2016/051788 2016-01-22 2016-01-22 計算機システム、計算機 WO2017126097A1 (ja)

Priority Applications (4)

Application Number Priority Date Filing Date Title
CN201680069764.3A CN108292278B (zh) 2016-01-22 2016-01-22 计算机系统和计算机
PCT/JP2016/051788 WO2017126097A1 (ja) 2016-01-22 2016-01-22 計算機システム、計算機
US15/772,098 US10740040B2 (en) 2016-01-22 2016-01-22 System and computer for controlling caching for logical storage
JP2017562396A JP6524267B2 (ja) 2016-01-22 2016-01-22 計算機システム、計算機

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2016/051788 WO2017126097A1 (ja) 2016-01-22 2016-01-22 計算機システム、計算機

Publications (1)

Publication Number Publication Date
WO2017126097A1 true WO2017126097A1 (ja) 2017-07-27

Family

ID=59362552

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/JP2016/051788 WO2017126097A1 (ja) 2016-01-22 2016-01-22 計算機システム、計算機

Country Status (4)

Country Link
US (1) US10740040B2 (ja)
JP (1) JP6524267B2 (ja)
CN (1) CN108292278B (ja)
WO (1) WO2017126097A1 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102536637B1 (ko) * 2018-03-29 2023-05-26 에스케이하이닉스 주식회사 메모리 컨트롤러 및 그 동작 방법

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009223793A (ja) * 2008-03-18 2009-10-01 Fujitsu Ltd 情報処理装置、情報処理装置の制御方法及びコンピュータプログラム
JP2015022553A (ja) * 2013-07-19 2015-02-02 株式会社日立製作所 計算機の制御方法及び計算機

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4480479B2 (ja) 2004-06-15 2010-06-16 株式会社日立製作所 ストレージシステム
US8868831B2 (en) * 2009-09-14 2014-10-21 Oracle International Corporation Caching data between a database server and a storage system
CN101441655B (zh) * 2008-12-24 2011-01-19 深圳市迅雷网络技术有限公司 读取数据的方法及装置
JP4585599B1 (ja) * 2009-07-17 2010-11-24 株式会社東芝 データ記憶装置及びキャッシュ制御方法
CN102117184B (zh) * 2010-01-05 2017-06-27 联想(北京)有限公司 用于多存储器的控制器、终端设备及其启动和访问方法
US8595522B2 (en) * 2010-09-30 2013-11-26 Intel Corporation Monitoring transaction requests using a policy engine within a storage drive driver to change power capability and latency settings for a storage drive
US8788742B2 (en) * 2011-05-23 2014-07-22 International Business Machines Corporation Using an attribute of a write request to determine where to cache data in a storage system having multiple caches including non-volatile storage cache in a sequential access storage device
WO2014015409A1 (en) * 2012-07-24 2014-01-30 Institute Of Computer Science Of The Foundation For Research And Technology - Hellas (Ics-Forth) System and method for implementing ssd-based i/o caches
CN103823636B (zh) * 2012-11-19 2017-04-05 苏州捷泰科信息技术有限公司 Io调度方法及装置
US10884924B2 (en) * 2015-03-04 2021-01-05 Hitachi, Ltd. Storage system and data writing control method

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009223793A (ja) * 2008-03-18 2009-10-01 Fujitsu Ltd 情報処理装置、情報処理装置の制御方法及びコンピュータプログラム
JP2015022553A (ja) * 2013-07-19 2015-02-02 株式会社日立製作所 計算機の制御方法及び計算機

Also Published As

Publication number Publication date
CN108292278A (zh) 2018-07-17
JP6524267B2 (ja) 2019-06-05
US10740040B2 (en) 2020-08-11
JPWO2017126097A1 (ja) 2018-09-27
US20180314466A1 (en) 2018-11-01
CN108292278B (zh) 2021-02-26

Similar Documents

Publication Publication Date Title
US11070479B2 (en) Dynamic resource allocation based upon network flow control
US7593948B2 (en) Control of service workload management
US8930746B1 (en) System and method for LUN adjustment
US8271749B2 (en) Storage subsystem and method of executing commands by controller
US10169948B2 (en) Prioritizing storage operation requests utilizing data attributes
US8843613B2 (en) Information processing system, and management method for storage monitoring server
JP7105870B2 (ja) データアクセス方法、装置およびシステム
TW201840149A (zh) 提供資料複製於跨光纖非揮發性記憶乙太網路固態硬碟之系統及方法
US9465547B2 (en) Processing input/output requests using proxy and owner storage systems
JP2007179156A (ja) 記憶制御装置及び方法
US8205014B2 (en) Information apparatus and method of generating tuning plan for resource configuration of storage system
US8904119B2 (en) Method and structures for performing a migration of a logical volume with a serial attached SCSI expander
US10374868B2 (en) Distributed command processing in a flash storage system
US9304951B1 (en) Policy based input/output dispatcher
US8214587B2 (en) Storage apparatus and method for controlling storage apparatus
US9990148B2 (en) Storage control device and storage system for data backup
JP6524267B2 (ja) 計算機システム、計算機
JP2023142021A (ja) ネットワークインタフェース及びそのバッファ制御方法
US8966173B1 (en) Managing accesses to storage objects
US11481147B1 (en) Buffer allocation techniques
US9658803B1 (en) Managing accesses to storage
US11972148B2 (en) Proactive storage operation management using thermal states
US20150143041A1 (en) Storage control apparatus and control method
US20150205526A1 (en) Queuing latency feedback mechanism to improve i/o performance

Legal Events

Date Code Title Description
121 Ep: the epo has been informed by wipo that ep was designated in this application

Ref document number: 16886338

Country of ref document: EP

Kind code of ref document: A1

WWE Wipo information: entry into national phase

Ref document number: 15772098

Country of ref document: US

ENP Entry into the national phase

Ref document number: 2017562396

Country of ref document: JP

Kind code of ref document: A

NENP Non-entry into the national phase

Ref country code: DE

122 Ep: pct application non-entry in european phase

Ref document number: 16886338

Country of ref document: EP

Kind code of ref document: A1