WO2017056220A1 - 計算機システム、コマンド転送方法、及び、転送デバイス - Google Patents

計算機システム、コマンド転送方法、及び、転送デバイス Download PDF

Info

Publication number
WO2017056220A1
WO2017056220A1 PCT/JP2015/077694 JP2015077694W WO2017056220A1 WO 2017056220 A1 WO2017056220 A1 WO 2017056220A1 JP 2015077694 W JP2015077694 W JP 2015077694W WO 2017056220 A1 WO2017056220 A1 WO 2017056220A1
Authority
WO
WIPO (PCT)
Prior art keywords
protocol
command
queue
nvme
fcp
Prior art date
Application number
PCT/JP2015/077694
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 PCT/JP2015/077694 priority Critical patent/WO2017056220A1/ja
Publication of WO2017056220A1 publication Critical patent/WO2017056220A1/ja

Links

Images

Classifications

    • 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

Definitions

  • the present invention generally relates to command transfer, for example, command transfer between node devices.
  • Fiber Channel Protocol is known as a protocol used for Storage Area Network (SAN).
  • NVMe NVM Express
  • SATA Serial Advanced Technology Attachment
  • HDD Hard Disk Drive
  • NVMe non-supporting function which is a function not supported by NVMe, may be supported by FCP (an example of another protocol that supports NVMe non-supporting function). Therefore, for example, a PCI Express (PCIe) bus card that can use FCP and a PCIe bus card that can use NVMe are mounted on the server device.
  • PCIe PCI Express
  • This configuration uses two bus slots of the server device. Since the server device occupies one bus slot for FCP, the bandwidth of the bus slot cannot be used for I / O in the NVMe protocol.
  • hardware conforming to the NVMe standard can be controlled by a standard driver provided by the OS vendor. If hardware that conforms to the NVMe standard is developed, it is not necessary to develop device driver software, but it is difficult to expand functions that are not defined in the NVMe standard.
  • any of the protocols including NVMe and FCP can be used for command transfer (from one node device to the other node device). It may be possible to use a transfer device that performs command transfer. However, if any of a plurality of protocols can be used in command transfer, it is considered that at least one of processing and configuration is more complicated than using only one protocol, and therefore, a decrease in throughput is a concern. Is done.
  • FCP is an example of the first protocol
  • NVMe is an example of the second protocol.
  • the above problem can also be caused by a protocol other than at least one of NVMe and FCP.
  • a transfer device for transferring commands between node devices is common to a plurality of processor cores, two or more first protocol queues respectively associated with two or more of the plurality of processor cores, and a plurality of processor cores. And a second protocol queue.
  • Each of the two or more first protocol queues is a queue of first protocol command information that is information including at least one of the first protocol command and meta information of the first protocol command.
  • the second protocol queue is a queue of second protocol command information that is information including at least one of the second protocol command and meta information of the second protocol command.
  • Each of the two or more processor cores acquires the first protocol command information from the first protocol queue associated with the processor core, and is included in the acquired information or in the meta information in the acquired information.
  • the processor core that has acquired the second protocol command information from the second protocol queue initiates transfer of the second protocol command included in the acquired information or associated with the meta information in the acquired information.
  • the first protocol command is a command according to the first protocol.
  • the second protocol command is a command according to the second protocol.
  • the second protocol is a protocol different from the first protocol, and supports an I / O command and one or more types of special commands (for example, Admin command in the NVMe standard).
  • One or more types of special commands are one or more types of commands different from I / O commands, and include high-load special commands that require more processing for transfer than I / O commands.
  • a queue is prepared for each of two or more processor cores, but the second protocol that supports special commands that require a lot of processing for transfer is common to a plurality of processor cores.
  • a queue is prepared. Thereby, it is possible to avoid a decrease in transfer throughput of other second protocol commands due to the processor core to which such special commands are allocated.
  • 2 shows a configuration example of a server device and a storage device in a computer system related to Example 1.
  • 2 shows a configuration example of an interface device according to the first embodiment. An example of the device mode of an interface device is shown. A part of an example of the flow of communication between a server apparatus and a storage apparatus is shown. The remainder of an example of the flow of communication between a server apparatus and a storage apparatus is shown.
  • summary of the queue control which concerns on Example 1 is shown.
  • summary of the FCP queue control which concerns on Example 1 is shown.
  • summary of NVMe queue control which concerns on Example 1 is shown.
  • summary of the FCP queue control which concerns on Example 2 is shown. An example of the outline of NVMe queue control concerning a modification is shown.
  • 2 shows an example of the configuration of a computer system related to Example 1.
  • the process may be described with “program” as the subject, but the program is executed by a processor (for example, CPU (Central Processing Unit)), so that the determined processing is appropriately performed. Since the processing is performed using a storage unit (for example, a memory) and / or an interface device (for example, a communication port), the subject of processing may be a processor.
  • the processing described with the program as the subject may be processing performed by a processor or an apparatus or system having the processor.
  • the processor may include a hardware circuit that performs a part or all of the processing.
  • the program may be installed in a computer-like device from a program source.
  • the program source may be, for example, a storage medium that can be read by a program distribution server or a computer.
  • the program distribution server may include a processor (for example, a CPU) and a storage unit, and the storage unit may further store a distribution program and a program to be distributed. Then, the processor of the program distribution server executes the distribution program, so that the processor of the program distribution server may distribute the distribution target program to other computers.
  • a processor for example, a CPU
  • the storage unit may further store a distribution program and a program to be distributed. Then, the processor of the program distribution server executes the distribution program, so that the processor of the program distribution server may distribute the distribution target program to other computers.
  • two or more programs may be realized as one program, or one program may be realized as two or more programs.
  • NVM-Express Non-Volatile Memory
  • PCI-Express Peripheral Component Interconnect Express: It is also applicable to successor standards (abbreviated as PCIe). If terms related to NVMe or PCIe are used, they should also be considered to indicate equivalent terms in the successor standards.
  • the embodiment is described for NVMe targeting the current Block access. However, if access in byte or word units is defined by the NVMe standard, this embodiment can also be applied to those accesses. Needless to say.
  • nonvolatile memory devices using flash memory
  • nonvolatile memories other than flash memory such as FeRAM (Ferroelectric Random Access Memory), MRAM (Magnetoresistive Random Access Memory), phase change memory (Ovonic Unified Memory), non-volatile memory devices using RRAM (registered trademark, Resistance RAM) may be applied.
  • FeRAM Feroelectric Random Access Memory
  • MRAM Magneticoresistive Random Access Memory
  • phase change memory Ovonic Unified Memory
  • RRAM registered trademark, Resistance RAM
  • command information is information including at least one of the command itself and meta information of the command.
  • command meta information is meta information (metadata) of a command, and includes, for example, command identification information.
  • the command meta information (for example, identification information) may include, for example, command position information (for example, an address) that is information indicating a position where the command is stored.
  • the command position information may include, for example, a base address and an offset value from the base address.
  • command information is managed in a queue.
  • a queue is an example of a data structure (data holding structure).
  • Information such as information on commands may be managed in a data structure other than the queue.
  • FCP is an example of the first protocol
  • NVMe is an example of the second protocol
  • the first protocol may be a vendor-specific protocol (for example, a protocol that enables vendor customization at least more than the second protocol).
  • the second protocol such as NVMe is based on the standardization method of creating a queue in the server memory (memory in the server device) and a method for causing the interface device (an example of a transfer device) to read the queue in the server memory.
  • a predetermined protocol may be used.
  • the node device may not be aware that there are a plurality of processor cores (for example, a processor core that interprets a command) in the interface device. May be concealed).
  • each of a plurality of processor cores for example, a processor core that interprets a command
  • each of a plurality of processor cores may be recognized by a node device (a program executed by the node device).
  • FIG. 11 illustrates a configuration example of the computer system according to the first embodiment.
  • the computer system 50 includes one or more server devices 100 and one or more storage devices 300 as an example of a plurality of node devices.
  • One or more server apparatuses 100 are accommodated in one or more chassis (hereinafter referred to as server chassis) 52, and one or more storage apparatuses 300 are accommodated in one or more chassis (hereinafter referred to as storage chassis) 54.
  • one server chassis 52 includes a plurality of server apparatuses 100 and a PCIe-MUX (multiplexer that relays communication according to PCIe) 51
  • one storage chassis 54 includes one storage apparatus 300.
  • Each of the plurality of server apparatuses 100 includes an interface device 200.
  • Each interface device 200 is an example of a transfer device, and performs command transfer between the server apparatus 100 and the storage apparatus 300.
  • One or more server apparatuses 100 and one or more storage apparatuses 300 may be mounted in the same chassis.
  • FIG. 1 shows a configuration example of the server device 100 and the storage device 300.
  • the symbol alphabet may be omitted when it is not necessary to distinguish the elements according to the symbol alphabet.
  • the server apparatus 100 includes a memory 110, a CPU 120, and an interface device 200.
  • the storage apparatus 300 includes a plurality of controllers (hereinafter referred to as CTL) 400 and a plurality of storage devices 320.
  • the plurality of storage devices 320 include flash memory devices (eg, SSDs).
  • the plurality of storage devices may include an HDD.
  • the storage apparatus 300 of this embodiment includes two CTLs 400 (CTL # 0 and # 1).
  • the computer system 50 is preferably a Converged Platform.
  • Converged Platform is also called Converged Infrastructure and Converged System.
  • Converged may be replaced by the term “vertical integration”. In the present embodiment, these are hereinafter collectively referred to as a converged platform (sometimes abbreviated as CPF).
  • CPF is a product including, for example, a server device, a storage device (including a CTL and a storage device), and an interface device that connects them.
  • a server device including a CTL and a storage device
  • an interface device that connects them.
  • an administrator of a company introduces a server device and a storage device individually, an operation verification represented by such a connection check between the server device and the storage device has been performed on the administrator side.
  • the vendor who sells the product performs the operation verification in advance, so that the operation verification by the manager of the customer who installs and uses the product is unnecessary or can be reduced.
  • CPFs may include a management subsystem that executes a management program for collectively setting server devices, storage devices, and interface devices.
  • This management subsystem can quickly provide an execution environment (virtual machine (VM), DBMS (Database Management System), Web server, etc.) desired by the administrator.
  • VM virtual machine
  • DBMS Database Management System
  • Web server etc.
  • the management program requests allocation of necessary resources to the server device and the storage device, and requests the hypervisor to create a VM using the allocated resources. Request.
  • the memory 110 stores a program and data for processing of the server device 100.
  • the CPU 120 is connected to the memory 110 via an internal bus, and executes processing of the server device 100 according to a program stored in the memory 110.
  • the CTL 400 is connected to the interface device 200 and performs processing according to an I / O command from the interface device 200.
  • the CTL 400 includes a memory 828, a microprocessor (hereinafter referred to as MP) 420, and a drive interface 430.
  • the memory 828 stores a program and data for processing of the CTL 400.
  • the MP 420 is connected to the memory 828 via an internal bus, and executes the processing of the CTL 400 according to a program stored in the memory 828.
  • the drive interface 430 is connected to the MP 420 and the storage device 320, and controls communication between the CTL 400 and the storage device 320.
  • the storage device 320 stores data, is connected to the CTL 400, and is accessed from the CTL 400.
  • the storage apparatus 300 of this embodiment includes at least two storage devices 320 (a boot device (BOOT) 320a and a data device (DATA) 320b).
  • the boot device 320a stores a program for the server device 100.
  • the data device 320b stores data from the CTL 400.
  • the interface device 200 is connected to the CPU 120 via the server-side bus and is connected to the storage device 300 via the storage-side bus, and controls communication between the server device 100 and the storage device 300.
  • the server side bus and the storage side bus in this embodiment are PCIe buses.
  • the interface device 200 in this embodiment is connected to two CTLs 400 via two storage-side buses.
  • the interface device 200 is a board (add-on card) that is inserted into a PCIe bus slot of the server apparatus 100.
  • the storage-side bus may be a PCIe bus cable or a board.
  • the interface device 200 may be located outside the server device 100 and connected via a PCIe bus cable connected to the PCIe bus slot of the server device 100.
  • the interface device 200 may be mounted on the storage apparatus 300 instead of the server apparatus 100.
  • the memory 110 stores a boot driver 111, an OS 112, an application (application program) 113, and a driver 114 (device driver).
  • the boot driver 111 is, for example, a program based on BIOS (Basic Input / Output System) or EFI (Extensible Firmware Interface).
  • BIOS Basic Input / Output System
  • EFI Extensible Firmware Interface
  • the boot driver 111 is read into the memory 110 when the server apparatus 100 is powered on and executed by the CPU 120.
  • the OS 112 is stored in the boot device 320a in the storage apparatus 300, read out to the memory 110 in the server apparatus 100 by the boot driver 111, and executed by the CPU 120.
  • the boot driver 111 issues an I / O command that instructs reading of the OS 112 in the boot device to the interface device 200 in accordance with FCP.
  • the plurality of drivers 114 include an FCP driver (driver using FCP) 114a and an NVMe driver (driver using NVMe) 114b.
  • FCP driver driver using FCP
  • NVMe driver driver using NVMe
  • vendor proprietary software not included in the OS 112 is used as the FCP driver 114 a
  • the FCP driver 114 a includes a function for controlling the interface device 200.
  • a standard driver included in the OS 112 can be used as the NVMe driver 114b.
  • TCP-IP Transmission Control Protocol-Internet Protocol
  • the application 113 is stored in the data device 320b in the storage apparatus 300, read out to the memory 110 in the server apparatus 100 by the user of the server apparatus 100 or the OS 112, and executed by the CPU 120.
  • the application 113 issues a command related to data to the driver 114.
  • the driver 114 manages a queue 115 that stores commands from the application 113. Based on the command from the application 113, the driver 114 issues an I / O command using a corresponding protocol to the interface device 200.
  • a plurality of server apparatuses 100 may share the storage device 320 of the storage apparatus 300. Further, the CTL 400 of the storage apparatus 300 may be one or three or more.
  • FIG. 2 shows a configuration example of the interface device 200.
  • the interface device 200 includes a communication processor 230, a DMA controller 240, an FCP queue control circuit 257a, an NVMe queue control circuit 257b, a plurality of bus control circuits 260, and a storage unit 270. These elements are connected via an internal bus.
  • the communication processor 230 includes a plurality of processor cores 231. Hereinafter, the processor core is referred to as “LRP”.
  • the LRP 231 may be a processor.
  • the DMA controller 240 includes a plurality of DMA cores (XDMA) 241.
  • the storage unit 270 includes at least one memory such as a volatile memory and a nonvolatile memory.
  • the storage unit 270 includes, for example, a flash memory.
  • the flash memory is an example of a nonvolatile memory, includes a storage area corresponding to a PCIe expansion ROM (Read Only Memory) space provided to the server apparatus 100, and stores the boot driver 111 described above in the storage area.
  • the server device 100 reads the boot driver 111 from the flash memory to the memory 110 of the server device 100 by designating the expansion ROM space at the time of startup, and executes the boot driver 111.
  • the boot driver 111 may be stored in a non-volatile memory in the server device 100 or the storage device 300.
  • the queue control circuit 257 is connected to the CPU 120 of the server apparatus 100 via the server side bus.
  • the FCP queue control circuit 257a is a control circuit that provides a register space (hereinafter referred to as FCP register space) 210a accessed from the FCP driver 114a.
  • the NVMe queue control circuit 257b is a control circuit that provides a register space (hereinafter, NVMe register space) 210b accessed from the NVMe driver 114b.
  • Each of the register spaces 210a and 210b is allocated to an MMIO (Memory Mapped Input / Output) space in an address space used by the CPU 120.
  • the FCP register space 210 a includes a register 211 a for each LRP 231.
  • the NVMe register space 210b includes a register 211b used by the NVMe driver 114b.
  • the register 211a is referred to as “FCP register 211a”
  • the register 211b is referred to as “NVMe register 211b”.
  • the FCP register 211 a exists for each LRP 231. Therefore, four FCP registers # 0 to # 3 respectively associated with LRP # 0 to # 3 are in the FCP register space 210a.
  • the NVMe registers 211b may be more or less than the LRP 231, and in the present embodiment, 64 NVMe registers # 0 to # 63 are in the NVMe register space 210b.
  • the FCP queue control circuit 257a has an FCP queue 220a that is a queue for FCP commands (commands according to FCP), and the NVMe queue control circuit 257b has an NVMe queue 220b that is a queue for NVMe commands (commands according to NVMe).
  • an FCP queue 220a exists for each LRP 231 (that is, FCP queues # 0 to # 3 associated with LRP # 0 to # 3, respectively), and an NVMe queue 220b includes LRP # 0 to LRP # 0 to # 3. Common to # 3.
  • the control of each of the FCP queue 220a and the NVMe queue 220b will be described in detail later.
  • the queue 220 is a queue for command information.
  • the queue 115, the register 211, and the queue 220 are elements related to commands from the server apparatus 100 to the storage apparatus 300, but are elements related to responses from the storage apparatus 300 to the server apparatus 100.
  • the same element as at least one of the queue 115, the register 211, and the queue 220 may be prepared, and the response from the storage apparatus 300 to the server apparatus 100 may be performed using the prepared element. .
  • the bus control circuit 260 is provided for each storage-side bus.
  • the bus control circuit 260 is connected to the MP 420 of the CTL 400 of the storage apparatus 300 via the storage side bus.
  • Bus control circuit 260 includes a control circuit (not shown) and a storage register (not shown) accessed by CTL 400.
  • the control circuit controls the storage register and storage unit 270.
  • the interface device 200 communicates with the storage apparatus 300 via the PCIe-MUX 51 shown in FIG. However, the PCIe-MUX 51 may not be provided.
  • the server device 100 (specifically, for example, the CPU 120) becomes the root complex, and the interface device 200 becomes the endpoint.
  • CTL 400 (specifically, for example, MP420) is a root complex, and interface device 200 is an endpoint.
  • the communication processor 230 issues a request (for example, an I / O request) based on a command (or a command associated with meta information in the command information) included in the command information extracted from the queue 220 to the storage apparatus 300. To do. Further, the communication processor 230 acquires information for DMA (for example, information including at least one of a transfer source address and a transfer destination address) from the server apparatus 100 and the storage apparatus 300, and based on the acquired information The DMA instruction is issued to the DMA controller 240. The DMA controller 240 performs burst transfer between the memory 110 in the server apparatus 100 and the memory 828 in the storage apparatus 300 based on an instruction from the communication processor 230.
  • a request for example, an I / O request
  • a command or a command associated with meta information in the command information included in the command information extracted from the queue 220 to the storage apparatus 300.
  • the communication processor 230 acquires information for DMA (for example, information including at least one of a transfer source address and a transfer destination address) from
  • the interface device 200 in the present embodiment includes four LRPs, includes four DMA cores, and includes two target ports.
  • the target port is a port to which the storage-side bus is connected in the interface device 200, and is provided for each CTL 400.
  • One, two, or four functions are set for the interface device 200.
  • the “function” mentioned here is a function of the PCIe device. Since one PCIe device has a plurality of functions, it can operate as a plurality of PCIe devices.
  • the function of this embodiment is either an FCP function that processes an FCP command (for example, an I / O command according to FCP) or an NVMe function that processes an NVMe command (for example, an I / O command according to NVMe).
  • Each of the four LRPs is assigned to one or more functions.
  • the server apparatus 100 can access data in the storage apparatus 300 using a plurality of protocols.
  • FCP can be used.
  • the interface device 200 stores the boot driver 111 in the nonvolatile memory allocated to the expansion ROM area, so that the server device 100 can read the boot driver 111 via the PCIe bus.
  • the server side bus is shared by a plurality of protocols, so that the bus slot consumption of the server apparatus 100 can be reduced.
  • the server device 100 reads and boots the OS via the server-side bus according to the specific protocol, and after the boot, performs data transfer via the server-side bus according to the NVMe protocol, so that the server-side bus used according to the specific protocol is used. Can be used for the NVMe protocol, and the bandwidth of the server side bus can be used effectively.
  • the function is determined by the device mode.
  • the administrator of the computer system can set any one of a plurality of device modes for the interface device 200.
  • the queue control circuit 257 reads device mode information stored in advance in the storage unit 270 (for example, a flash memory) at the time of startup, and sets the device mode by the time of PCIe Link Up.
  • the device mode of the interface device 200 may be set from the server device 100, a management subsystem connected to the computer system, an external pin provided in the interface device 200, or the like.
  • FIG. 3 shows an example of the device mode of the interface device 200.
  • the interface device 200 is set to any one of the device modes # 1 to # 4.
  • Device mode # 1 can be referred to as a 1FCP mode.
  • the interface device 200 has a function # 0 which is one FCP function, and four LRPs are assigned to the one function.
  • Device mode # 2 can be referred to as a 2FCP mode.
  • the interface device 200 has two FCP functions # 0 and # 1, and assigns two LRPs to each function.
  • Device mode # 3 can be referred to as a 1FCP / 1NVMe mode.
  • the interface device 200 has one function # 0 that is an FCP function and one function # 2 that is one NVMe function, and assigns four LRPs to each function.
  • Device mode # 4 can be referred to as a 2FCP / 2NVMe mode.
  • the interface device 200 has two FCP functions # 0 and # 1, and two NVMe functions # 2 and # 3, and assigns two LRPs to each function.
  • FCP function and NVMe function can share the same LRP in a time-sharing manner.
  • the server side bus may be multipath.
  • the interface device 200 includes two functions of the same protocol corresponding to two paths, respectively, and the server apparatus 100 controls the two functions, respectively.
  • the I / O commands can be distributed to a plurality of paths.
  • the maximum performance per path of the server-side bus is limited to the performance of the two LRPs.
  • the communication processor 230 may distribute I / O requests to a plurality of CTLs 400.
  • each of the two NVMe functions need not use two LRPs, and one NVMe function can use four LRPs.
  • the interface device 200 provides two FCP functions # 0 and # 1 to the server apparatus 100.
  • the FCP function # 0 starts I / O
  • it issues an I / O request to the CTL # 0
  • FCP It may be set to issue an I / O request to CTL # 1 when the function # 1 starts I / O.
  • the communication processor 230 sets the bandwidth usage status of each CTL 400, the address in the access destination storage apparatus 300, and the like.
  • the communication processor 230 acquires information indicating whether or not the current CTL 400 is busy (busy) from each CTL 400 as the bandwidth usage status, and if it is determined that one CTL 400 is busy, A request is issued to the other CTL 400.
  • the communication processor 230 may issue the same data write request to the plurality of CTLs 400 to make the data redundantly written to improve the reliability of the data.
  • the communication processor 230 is connected to a plurality of target ports, and the plurality of target ports are respectively connected to the plurality of CTLs 400, so that the communication processor 230 can issue I / O request destinations according to the status of the plurality of CTLs 400.
  • CTL400 can be selected, and the performance of the computer system can be improved.
  • the interface device 200 provides a plurality of functions of the same protocol respectively corresponding to a plurality of paths, so that the server apparatus 100 selects a path and issues an I / O command. be able to.
  • the driver 114 writes a command in the memory 110 in response to a request from the application 113 of the server apparatus 100.
  • the driver 114 secures a storage area in the memory 110 necessary for data transfer as a server-side storage area, creates a Scatter / Gather List (SGL) indicating the address of the server-side storage area, and stores the SGL in the memory. 110 is written.
  • SGL Scatter / Gather List
  • the driver 114 writes write data (write target data accompanying the write command) in the server-side storage area.
  • the processing of S210 to S250 is performed. That is, in S210, the FCP driver 114a writes the meta information of the I / O command to the FCP register # 0 (an example of the write destination FCP register 211a), and the FCP queue control circuit 257a sets the write destination FCP register # 0.
  • the I / O command meta information is added to the FCP queue # 0 associated with.
  • the I / O command meta information is acquired from the FCP queue # 0 by LRP # 0.
  • LRP # 0 sets the address of the I / O command in XDMA 241 based on the I / O command meta information.
  • the XDMA 241 to which the address is set reads an I / O command from the set address (memory 110 in the server apparatus 100), and writes the I / O command in the storage unit 270.
  • the XDMA 241 notifies the LRP # 0 that the I / O command has been read (for example, the write destination address of the I / O command (the address in the storage unit 270)).
  • LRP # 1 an example of an LRP to which the NVMe function is assigned refers to the NVMe queue 220b by interruption (or polling), and the command information (the command itself in this embodiment) is stored in the NVMe queue 220b. It is determined whether or not it exists (that is, the NVMe queue control circuit 257b is periodically inquired whether or not there is command information in the NVMe queue 220b).
  • the LRP # 1 waits.
  • the NVMe driver 114b writes the meta information of the I / O command into the NVMe register # 1 (an example of the write destination NVMe register 211b).
  • the NVMe register is a doorbell register as will be described later, and an interrupt is generated when information is written to the register.
  • the NVMe queue control circuit 257b reads the I / O command associated with the I / O command meta information from the memory 110 in the server device 100, and adds the I / O command to the NVMe queue 220b.
  • LRP # 1 refers to the NVMe queue 220b again by polling to determine whether command information exists.
  • LRP # 1 issues a command read request to the NVMe queue control circuit 257b.
  • the NVMe queue control circuit 257b may receive a plurality of command read requests within the same time. In this case, one command read request is performed by an arbiter (not shown). To decide. The determined transmission source of the command read request is LPR # 1.
  • the NVMe queue control circuit 257b allocates the I / O command in the NVMe queue 220b to LRP # 1 (the I / O command is read to LPR # 1).
  • a notification such as S220 may be performed, or the polling of S340 and the notification of S220 may be used in combination.
  • the LRP 231 converts the read I / O command into an I / O request using the protocol of the storage apparatus 300. Then, the I / O request is written into the storage unit 270.
  • the protocol of the storage apparatus 300 may be a standardized predetermined protocol or a vendor / proprietary protocol.
  • the bus control circuit 260 writes the I / O request to the memory 828 in the CTL 400.
  • the CTL 400 reads and analyzes the I / O request from the memory 828, and secures a storage area in the memory 828 necessary for transfer as a storage-side storage area.
  • the CTL 400 creates an SGL indicating the address of the storage side storage area and writes the SGL into the memory 828.
  • the I / O request is a read request
  • the CTL 400 reads the read data (read target data according to the read request) from the storage device 320 and writes the read data to the storage-side storage area.
  • the CTL 400 In S520, the CTL 400 generates a DMA request for requesting transfer between the memory 110 in the server apparatus 100 and the memory 828 in the CTL 400, and writes the DMA request in the memory 828.
  • the CTL 400 writes the meta information of the DMA request to the storage register in the bus control circuit 260 in the interface device 200.
  • the bus control circuit 260 reads the DMA request from the memory 828 in the CTL 400 based on the meta information, and writes the DMA request in the storage unit 270.
  • the bus control circuit 260 notifies the LRP 231 of the DMA request.
  • the LRP 231 writes in the storage unit 270 an SGL read request requesting to read the SGL in the memory 110 of the server device 100.
  • the LRP 231 writes an SGL read request for requesting to read the SGL in the memory 828 of the CTL 400 into the storage unit 270.
  • the queue control circuit 257 reads the SGL from the memory 110 of the server device 100, and writes the read SGL in the storage unit 270. In S640, the queue control circuit 257 notifies the LRP 231 that the SGL has been read from the server apparatus 100. In S650, the bus control circuit 260 reads the SGL from the memory 828 of the CTL 400, and writes the read SGL in the storage unit 270. In S660, the bus control circuit 260 notifies the LRP 231 that the SGL has been read from the CTL 400.
  • the LRP 231 In S670, the LRP 231 generates a request parameter for requesting DMA between the server-side storage area and the storage-side storage area based on the SGL read from the server apparatus 100 and the SGL read from the CTL 400. . In S680, the LRP 231 instructs the DMA controller 240 to perform DMA using the generated request parameter.
  • the DMA controller 240 executes DMA based on the request parameter.
  • the I / O command is a write command
  • the DMA controller 240 transfers the write data stored in the server-side storage area to the storage-side storage area.
  • the I / O command is a read command
  • the DMA controller 240 transfers the read data stored in the storage side storage area to the server side storage area.
  • the DMA controller 240 when the DMA controller 240 completes the DMA, it notifies the LRP 231 of the completion of the DMA.
  • the LRP 231 writes a DMA completion notification in the storage unit 270 as a response to the DMA request.
  • the bus control circuit 260 writes the DMA completion notification in the memory 828 in the CTL 400.
  • the CTL 400 reads the DMA completion notification from the memory 828, writes information indicating completion to the memory 828 as a response to the I / O request, and writes meta information of the response to the storage register in the interface device 200.
  • the bus control circuit 260 reads a response from the memory 828 in the CTL 400 based on the meta information, and writes the response in the storage unit 270. In S770, the bus control circuit 260 notifies the LRP 231 of the response.
  • the LRP 231 creates response parameters for the server device 100 and the storage device 300, and writes the response parameters in the storage unit 270.
  • the LRP 231 requests the queue control circuit 257 to notify the completion of response parameter creation.
  • the queue control circuit 257 writes the response parameter stored in the storage unit 270 to the memory 110 in the server device 100.
  • the queue control circuit 257 issues a PCIe interrupt to the server apparatus 100.
  • the driver 114 in the server apparatus 100 reads the response parameter stored in the memory 110 in response to the interrupt, and writes a notification of reception of the response parameter in the register 211.
  • the LRP 231 requests the bus control circuit 260 to notify the completion of response parameter creation.
  • the bus control circuit 260 writes the response parameter stored in the storage unit 270 to the memory 828 in the CTL 400.
  • the bus control circuit 260 writes the notification of the response parameter to the memory 828 in the CTL 400.
  • the CTL 400 reads the response parameter stored in the memory 828 and writes the reception of the response parameter into the storage register.
  • the interface device 200 converts the I / O command from the server device 100 into an I / O request of the protocol of the storage device 300, and the I / O request is stored in the storage device. Issue to device 300. For this reason, it is not necessary to change the protocol of the storage apparatus 300 in accordance with the protocol of the server apparatus 100. Further, the server device 100 and the storage device 300 create SGL indicating the storage areas of the DMA transfer source and transfer destination, so that the interface device 200 has the memory 110 in the server device 100 and the memory 828 in the storage device 300. DMA can be performed between. When the interface device 200 performs DMA, the server apparatus 100 can transfer data without using the protocol of the storage apparatus 300, and the storage apparatus 300 can transfer data without using the protocol of the server apparatus 100.
  • queue control is performed in the interface device 200.
  • one application 113 may be able to write commands to both the queue 115a of the FCP driver 114a and the queue 115b of the NVMe driver 114b.
  • the first application may write a command only to the queue 115a of the FCP driver 114a
  • the second application may write a command only to the queue 115b of the NVMe driver 114b.
  • any of the LRPs # 0 to # 3 may be configured to transfer both the FCP command and the NVMe command.
  • two or more LRPs (for example, all LRPs) of LRP # 0 to # 3 can transfer FCP commands, and some of some LRPs can transfer NVMe commands. It may be.
  • FIG. 6 shows an example of an outline of queue control.
  • the memory 110 in the server apparatus 100 includes an FCP area 410a that is a storage area in which an FCP command is written (an area in which the queue 115a is stored) and a storage area in which an NVMe command is written (an area in which the queue 115b is stored).
  • a certain NVMe area 410b is secured by the CPU 120, for example.
  • the plurality of queues 115b include an Admin queue that is a queue for Admin commands and an I / O queue that is a queue for I / O commands.
  • the queue 115b and the NVMe register 211b may be associated by 1: 1, but may be associated by m: 1, 1: n, or m: n.
  • FCP queue 220a exists for each LRP 231. That is, FCP queues 220 # 0 to # 3 are associated with LRPs # 0 to # 3 (for example, LRPs # 0 to # 3 capable of initiating transfer of FCP commands), respectively.
  • the NVMe queue 220b is shared by a plurality of LRPs 231 (for example, LRPs # 0 to # 3 capable of initiating transfer of NVMe commands). This configuration is preferable in the following points, for example.
  • FCP is a protocol that has a larger range that can be customized by the vendor than at least NVMe, and is a protocol that allows the server apparatus 100 to recognize the LRP 231 individually. For this reason, the FCP driver 114a of the server apparatus 100 can control the allocation of commands to the LRP 231 (which command can be distributed to which LRP).
  • the FCP driver 114a determines the queue 115a to which the FCP command is written, thereby assigning the LRP 231 (FCP queue 220a to which the FCP command is allocated). ) Can be decided. Therefore, the configuration according to the present embodiment that can provide a simple execution environment is useful.
  • NVMe queue 220b is a queue shared by a plurality of LRPs 231.
  • NVMe supports types of commands that have a higher processing load than I / O commands, specifically, Admin commands that require more processing to transfer than I / O commands.
  • Admin commands that require more processing to transfer than I / O commands.
  • a queue 220b is prepared for each LRP 231, the load of the LRP 231 that processes such an Admin command increases, and the I / O command existing in the queue of the LRP 231 increases.
  • NVMe is a protocol in which a method for causing the interface device 200 to read the queue 115 in the memory 110 is determined by a standardization standard. From this point of view, when NVMe queues are prepared for each LRP 231, it is preferable to employ command allocation logic (for example, round robin) that simplifies the configuration of the control circuit 257 b (for example, firmware thereof). An untransferred I / O command may be added to the queue of the LRP 231 having a high load during processing of the Admin command.
  • command allocation logic for example, round robin
  • NVMe is conscious of the interface between the queue 220 and the memory 110 (determined by specifications), but the LRP 231 is not conscious of the server device 100 (hidden from the server device 100).
  • the NVMe queue 220b is a queue shared by a plurality of LRPs 231.
  • NVMe queue 220b is a shared queue for a plurality of LRPs 231 is that the "Admin command that requires more processing for transfer than the I / O command" is supported for NVMe.
  • Admin command for example, there is an Identify Namespace Data Structure command. Identify Namespace Data Structure is a command for acquiring the information of Namespace specified by the command from Target.
  • LU is an abbreviation for a logical unit as a logical volume provided by the storage apparatus 300.
  • the “Admin command” is a kind of NVMe command, and is an example of a special command (for example, a management command) that is a command different from the I / O command according to NVMe.
  • the NVMe command is issued from, for example, the NVMe driver 114b.
  • Other examples of Admin commands include commands that do not interact with Target, such as the Delete I / O submission Queue command and the Create I / O submission Queue command.
  • the server apparatus 100 can issue an FCP command for executing a function that is not supported by NVMe. That is not limited to reading the OS of the server apparatus 100.
  • the application 113 issues a command for collecting RAS information via the FCP driver 114a, and the RAS information is returned to the server apparatus 100 as a response to the FCP command. May be returned.
  • failure information acquisition that is not supported by NVMe (for example, acquisition of failure information recorded in a predetermined storage area in the interface device 200) may be performed in accordance with FCP.
  • failure information for example, information indicating a RAM correctable failure of RAM (Random Access Memory) included in the storage unit 270
  • an interrupt is generated.
  • the CPU 120 may issue an FCP command for collecting fault information by the FCP driver 114a.
  • FIG. 7 shows an example of an outline of FCP queue control.
  • the FCP command meta information is stored in the FCP queue 220a as the FCP command information.
  • the FCP command meta information is meta information of the FCP command, for example, 4B (byte) information.
  • the meta information includes FCP command position information, and the position information may include, for example, an offset value from the base address and an identification number of the queue 115a to which the FCP command 701 is added.
  • the FCP command 701 When the FCP command 701 is added to the queue 115a of the FCP area 410a, the meta information of the FCP command 701 is added to the FCP queue 220a.
  • the FCP command meta information is acquired by the LRP 231 associated with the FCP queue 220a (S21). Specifically, for example, information including a base address and FCP command position information (for example, an offset value from the base address) included in the FCP command meta information is acquired.
  • the LRP 231 sets an address (address where the FCP command 701 is located) according to the information in the XDMA 241 (S22).
  • the XDMA 241 reads the FCP command 701 from the set address (S23), and allocates the read FCP command 701 to the LRP 231 (S24).
  • the LRP 231 may set the transfer source address and the transfer destination address in the XDMA 22, the transfer source address may be the address where the FCP command 701 is located, and the transfer destination address is The address of the area in the storage unit 270 may be used.
  • the XDMA 241 transfers the FCP command 701 from the transfer source address to the transfer destination address by DMA, notifies the transfer completion to the LAP 231, and the LRP 231 responds to the notification from the transfer destination address area to the FCP.
  • the command 701 may be acquired.
  • the LRP 231 can acquire the FCP command 701 associated with the meta information added to the FCP queue 220a associated with the LRP 231 by DMA.
  • FIG. 8 shows an example of an outline of NVMe queue control.
  • the NVMe queue control circuit 257b has a plurality of interface units 651 (# 0 to # 3) respectively associated with a plurality of LRPs 231 (# 0 to # 3).
  • Each interface unit 651 is an area referred to by the LRP 231 associated with the interface unit 651.
  • the information is a kind of index information, and includes, for example, a head address (base address) of the NVMe queue 220b and a rear end address (tail address) of the NVMe queue 220b.
  • each interface unit 651 is updated by the NVMe queue control circuit 257b in accordance with the increase or decrease of the NVMe command in the NVMe queue 220b.
  • Each NVMe register 211b is a doorbell register.
  • an interrupt is generated in the NVMe queue control circuit 257b for the NVMe register 211b.
  • the NVMe driver 114b adds the NVMe command 601 to the queue 115b in the NVMe area 410b
  • the meta information of the NVMe command 601 is written in the NVMe register 211b determined based on the identification number of the queue 115b.
  • the meta information includes, for example, information indicating the position of the NVMe command 601, and the information may include an identification number of the queue 115b to which the NVMe command 601 is added.
  • the NVMe queue control circuit 257b receives the NVMe command 601 associated with the meta information written to the NVMe register 211b. Read from the NVMe area 410b and add the read NVMe command 601 to the NVMe queue 220b.
  • the NVMe queue control circuit 257b has an arbiter (not shown).
  • the arbiter determines (selects) one acquisition request from the plurality of acquisition requests.
  • each LRP (more specifically, for example, each LRP defined to process an NVMe command) 231 determines whether there is an NVMe command in the NVMe queue 220b.
  • the interface unit 651 associated with the LRP 231 is periodically referred to (polling).
  • the LRP 231 that performs such a reference is typically an LRP that can initiate transfer of the NVMe command (for example, an LRP that has a load lower than a predetermined value).
  • the LRP 231 detects that the NVMe command exists in the NVMe queue 220b, the LRP 231 transmits an NVMe command acquisition request to the NVMe queue control circuit 257b (S71).
  • NVMe queue control circuit 257b may receive a plurality of acquisition requests simultaneously as shown in the figure. When a plurality of acquisition requests are received, the NVMe queue control circuit 257b sends an NVMe queue to the LRP 231 (LRP # 3 in the example of FIG. 8) of the acquisition request determined by the arbiter among the plurality of acquisition requests. Allocate NVMe command in 220b. Specifically, for example, the NVMe queue control circuit 257b returns a notification indicating success (Valid) to LRP # 3 that is the transmission source of the acquisition request determined by the arbiter (S73W), and sends an NVMe command from the NVMe queue 220b.
  • a notification indicating success (Valid)
  • the NVMe command is assigned to LRP # 3 (S75).
  • the NVMe queue control circuit 257b returns a notification indicating failure to each of the LRPs # 0 to # 2 not determined by the arbiter (S73L).
  • the NVMe commands are aggregated in the queue 220b common to the plurality of LRPs 231.
  • the NVMe queue control circuit 257b responds to a request from the LRP 231 in a state where the NVMe command transfer can be initiated.
  • the NVMe command may be allocated from the queue 220b. For this reason, it can be avoided that an I / O command is allocated to the LRP 231 with a high load, and an improvement in throughput can be expected as a whole.
  • the NVMe queue control circuit 257b does not require logic to allocate an NVMe command without a request from the LRP 231, it can be expected that the logic (for example, firmware) of the NVMe queue control circuit 257b has a simple configuration.
  • Example 2 will be described. At that time, differences from the first embodiment will be mainly described, and description of common points with the first embodiment will be omitted or simplified.
  • FIG. 9 shows an example of an outline of FCP queue control according to the second embodiment.
  • the hypervisor that executes one or more VMs is executed by the CPU of the server device.
  • a part of the FCP queues 220a among the plurality of FCP queues 220a is associated with each VM.
  • a part of the VMs 901 among the plurality of VMs 901 is associated with each FCP queue 220a.
  • a server apparatus issues an FCP command according to a request issued by one of the VMs 901 to the FCP driver 114a, and the FCP driver 114a sends the FCP command to the queue 115a (specifically, in the FCP area 410a). Specifically, for example, it is added to the queue 115a) corresponding to the FCP register 211a associated with the FCP queue 220a associated with the request issuing VM, and the meta information of the FCP command is added to the FCP register 211a.
  • a server apparatus issues an FCP command according to a request issued by one of the VMs 901 to the FCP driver 114a, and the FCP driver 114a sends the FCP command to the queue 115a (specifically, in the FCP area 410a). Specifically, for example, it is added to the queue 115a) corresponding to the FCP register 211a associated with the FCP queue 220a associated with the request issuing VM, and the meta information of the FCP command is added to the
  • the FCP queue control circuit adds the FCP command (command according to the request from the VM 901) associated with the meta information in the FCP register 211a to the FCP queue 220a corresponding to the FCP register 211a. As a result, the FCP command according to the request from the VM 901 is added to the FCP queue 220a associated with the VM 901.
  • the command according to the request from the VM 901 is an FCP command. This is because a command (for example, an I / O command) according to a request (for example, an I / O request) from a part of the VM 901 with which the FCP queue 220a is associated is added to the FCP queue 220a for each LRP 231, and the FCP queue This is because a command according to a request from the VM 901 to which 220a is not associated is not added, and a high I / O throughput is expected.
  • a command for example, an I / O command
  • a request for example, an I / O request
  • the interface device 200 is not included in the server apparatus 100 described so far, but may be included in the storage apparatus 300, or may be included in neither the server apparatus 100 nor the storage apparatus 300. .
  • the NVMe area 410b (set of the queue 115b) may exist for each function.
  • the plurality of queues 115b in the plurality of NVMe areas 410b are renumbered by the NVMe queue control circuit 1257b so that the identification numbers do not overlap (virtualization of the identification numbers of the queues 115b).
  • a part of the LRPs 231 is associated with each function. For example, LRP # 0 and # 2 are associated with function # 0, and LRP # 1 and # 3 are associated with function # 1. Reboot or recovery is required for each function, but since the LRP restricted by the reboot or recovery is limited to a part, it can be expected to avoid a decrease in throughput.

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Transfer Systems (AREA)

Abstract

ノード装置間のコマンド転送を行う転送デバイスは、複数のプロセッサコア(以下、コア)と、2以上のコアにそれぞれ関連付けられた2以上の第1プロトコル(例えばFCP(Fibre Channel Protocol))キューと、複数のコアに共通の第2プロトコル(例えばNVMe)キューとを有する。第2プロトコルキューから情報を取得したコアが、その取得した情報に含まれている又はその取得した情報内のメタ情報に関連付いた第2プロトコルコマンドを転送することをイニシエートする。第2プロトコルは、I/Oコマンドと1種類以上の特殊コマンドとをサポートするプロトコルである。1種類以上の特殊コマンドは、I/Oコマンドよりも転送に多くの処理を必要とするコマンドを含む。

Description

計算機システム、コマンド転送方法、及び、転送デバイス
 本発明は、概して、コマンド転送に関し、例えば、ノード装置間のコマンド転送に関する。
 Storage Area Network(SAN)に用いられるプロトコルとして、Fibre Channel Protocol(FCP)が知られている。また、不揮発性メモリをターゲットデバイスとしてインターフェースレジスタを最適化したプロトコルであるNVM Express(NVMe)が知られている。NVMeは、FCPに比べて低負荷で高速なInput/Output(I/O)を可能にする。非特許文献1には、NVMeプロトコルをサポートするSolid State Drive(SSD)が開示されている。ここでは、従来のHard Disk Drive(HDD)で使用されていたSerial Advanced Technology Attachment(SATA)等のプロトコルを用いるSSDと比較して、NVMeを用いるSSDが低レイテンシのI/Oを可能にすることが述べられている。
"NVM Express: Unlock Your Solid State Drives Potential," http://www.nvmexpress.org/wp-content/uploads/2013-FMS-NVMe-Track.pdf
 NVMeでサポートされていないファンクションであるNVMe非サポートファクションが、FCP(NVMe非サポートファンクションをサポートする他のプロトコルの一例)でサポートされていることがある。そこで、例えば、FCPを使用可能なPCI Express(PCIe)バス・カードと、NVMeを使用可能なPCIeバス・カードとを、サーバ装置に搭載する。この構成は、サーバ装置のバス・スロットを2スロット使用する。サーバ装置は、FCPのためにバス・スロットを1本占有してしまうため、そのバス・スロットが持つ帯域をNVMeプロトコルでのI/Oに使用できない。
 また、NVMe規格に準拠したハードウェアは、OSベンダより提供される標準ドライバにより制御することができる。NVMe規格に準拠したハードウェアを開発すれば、デバイスドライバソフトウェアの開発は不要であるが、NVMe規格に規定されていない機能の拡張が困難である。
 NVMeではサポートされていないファンクションをサポートするためのソリューションの1つとして、NVMeとFCPとを含んだ複数のプロトコルのうちのいずれのプロトコルも、コマンド転送(一方のノード装置から他方のノード装置へのコマンド転送)を行う転送デバイスが使用できるようにすることが考えられる。しかし、コマンド転送において複数のプロトコルのいずれも使用可能であると、1つのプロトコルだけを使用することに比べて処理及び構成のうちの少なくとも1つが複雑になると考えられ、故に、スループットの低下が懸念される。
 FCPは、第1プロトコルの一例であり、NVMeは、第2プロトコルの一例である。以上の課題は、NVMeとFCPのうちの少なくとも1つ以外のプロトコルについてもあり得る。
 ノード装置間のコマンド転送を行う転送デバイスは、複数のプロセッサコアと、複数のプロセッサコアのうちの2以上のプロセッサコアにそれぞれ関連付けられた2以上の第1プロトコルキューと、複数のプロセッサコアに共通の第2プロトコルキューとを有する。2以上の第1プロトコルキューの各々は、第1プロトコルコマンドとその第1プロトコルコマンドのメタ情報とのうちの少なくとも1つを含んだ情報である第1プロトコルコマンド情報のキューである。第2プロトコルキューは、第2プロトコルコマンドとその第2プロトコルコマンドのメタ情報とのうちの少なくとも1つを含んだ情報である第2プロトコルコマンド情報のキューである。2以上のプロセッサコアの各々は、そのプロセッサコアに関連付けられている第1プロトコルキューから第1プロトコルコマンド情報を取得し、その取得した情報に含まれている又はその取得した情報内のメタ情報に関連付いた第1プロトコルコマンドを転送することをイニシエートする。第2プロトコルキューから第2プロトコルコマンド情報を取得したプロセッサコアが、その取得した情報に含まれている又はその取得した情報内のメタ情報に関連付いた第2プロトコルコマンドを転送することをイニシエートする。第1プロトコルコマンドは、第1プロトコルに従うコマンドである。第2プロトコルコマンドは、第2プロトコルに従うコマンドである。第2プロトコルは、第1プロトコルと異なるプロトコルであって、I/Oコマンドと1種類以上の特殊コマンド(例えば、NVMe規格でいうAdmin command)とをサポートするプロトコルである。1種類以上の特殊コマンドは、I/Oコマンドと異なる1種類以上のコマンドであり、I/Oコマンドよりも転送に多くの処理を必要とするコマンドである高負荷特殊コマンドを含む。
 第1プロトコルについては、2以上のプロセッサコアの各々についてキューが用意されるが、転送に多くの処理を必要とする特殊コマンドをサポートしている第2プロトコルについては、複数のプロセッサコアに共通のキューが用意される。これにより、そのような特殊コマンドが割り振られたプロセッサコアのために他の第2プロトコルコマンドの転送スループットが低下してしまうことを回避できる。
実施例1に係る計算機システムにおけるサーバ装置及びストレージ装置の構成例を示す。 実施例1に係るインターフェースデバイスの構成例を示す。 インターフェースデバイスのデバイスモードの一例を示す。 サーバ装置とストレージ装置間の通信の流れの一例の一部を示す。 サーバ装置とストレージ装置間の通信の流れの一例の残りを示す。 実施例1に係るキュー制御の概要の一例を示す。 実施例1に係るFCPキュー制御の概要の一例を示す。 実施例1に係るNVMeキュー制御の概要の一例を示す。 実施例2に係るFCPキュー制御の概要の一例を示す。 変形例に係るNVMeキュー制御の概要の一例を示す。 実施例1に係る計算機システムの構成例を示す。
 以下、図面を参照しながら幾つかの実施例を説明する。
 なお、以下の説明では、「プログラム」を主語として処理を説明する場合があるが、プログラムは、プロセッサ(例えばCPU(Central Processing Unit))によって実行されることで、定められた処理を、適宜に記憶部(例えばメモリ)及び/又はインターフェースデバイス(例えば通信ポート)等を用いながら行うため、処理の主語がプロセッサとされてもよい。プログラムを主語として説明された処理は、プロセッサあるいはそのプロセッサを有する装置又はシステムが行う処理としてもよい。また、プロセッサは、処理の一部または全部を行うハードウェア回路を含んでもよい。プログラムは、プログラムソースから計算機のような装置にインストールされてもよい。プログラムソースは、例えば、プログラム配布サーバまたは計算機が読み取り可能な記憶メディアであってもよい。プログラムソースがプログラム配布サーバの場合、プログラム配布サーバはプロセッサ(例えばCPU)と記憶部を含み、記憶部はさらに配布プログラムと配布対象であるプログラムとを記憶してよい。そして、プログラム配布サーバのプロセッサが配布プログラムを実行することで、プログラム配布サーバのプロセッサは配布対象のプログラムを他の計算機に配布してよい。また、以下の説明において、2以上のプログラムが1つのプログラムとして実現されてもよいし、1つのプログラムが2以上のプログラムとして実現されてもよい。
 また、以下の説明は、今後登場するであろうNVMe(NVM-Express(Non-Volatile Memory))の後継規格に対しても適用可能であり、同様にPCI-Express(Peripheral Component Interconnect Express:以下、PCIeと省略)の後継規格に対しても適用可能である。NVMeやPCIeに関連する用語が用いられた場合、その後継規格の同等の用語も指し示すと考えるべきである。同様に実施例は現在のBlockアクセスをターゲットとしたNVMeを対象として説明しているが、仮にバイトやワード単位のアクセスがNVMe規格で規定された場合はそれらアクセスについても本実施例が適用できることは言うまでもない。同様に、実施例は、フラッシュメモリを用いる不揮発メモリデバイスを対象として説明しているが、フラッシュメモリ以外の不揮発メモリ、例えばFeRAM(Ferroelectric Random Access Memory)、MRAM(Magnetoresistive Random Access Memory)、相変化メモリ(Ovonic Unified Memory)、RRAM(登録商標、Resistance RAM)を用いる不揮発メモリデバイスに適用してもよい。
 また、以下の説明では、「コマンド情報」とは、コマンドそれ自体と、そのコマンドのメタ情報とのうちの少なくとも1つを含んだ情報である。
 また、以下の説明では、「コマンドメタ情報」とは、コマンドのメタ情報(メタデータ)であり、例えば、コマンドの識別情報を含む。コマンドメタ情報(例えば識別情報)は、例えば、コマンドが格納されている位置を表す情報であるコマンド位置情報(例えばアドレス)を含んでよい。コマンド位置情報は、例えば、ベースアドレスと、ベースアドレスからのオフセット値とを含んでよい。
 また、以下の説明では、コマンド情報は、キューで管理される。キューは、データ構造(データ保持構造)の一例である。コマンドに関する情報等の情報が、キュー以外のデータ構造で管理されてもよい。
 また、以下の説明では、FCPは、第1プロトコルの一例であり、NVMeは、第2プロトコルの一例である。
 或る観点から言えば、第1プロトコルは、ベンダ固有のプロトコル(例えば、ベンダカスタマイズを少なくとも第2プロトコルよりも可能なプロトコル)でよい。一方、NVMeのような第2プロトコルは、サーバメモリ(サーバ装置内のメモリ)内のキューの作り方と、サーバメモリ内のキューをインターフェースデバイス(転送デバイスの一例)に読み出させる方式が標準化規格によって決まっているプロトコルでよい。
 別の観点から言えば、第2プロトコルによれば、インターフェースデバイス内に複数のプロセッサコア(例えばコマンドを解釈するプロセッサコア)が存在することは、ノード装置に意識されないでよい(インターフェースデバイスによってノード装置に対して隠蔽されてよい)。一方、第1プロトコルによれば、インターフェースデバイス内の複数のプロセッサコア(例えばコマンドを解釈するプロセッサコア)の各々がノード装置(ノード装置で実行されるプログラム)により認識されてよい。
 図11は、実施例1に係る計算機システムの構成例を示す。
 計算機システム50は、複数のノード装置の一例として、1以上のサーバ装置100と1以上のストレージ装置300とを有する。1以上のサーバ装置100は、1以上のシャーシ(以下、サーバシャーシ)52に収納されており、1以上のストレージ装置300は、1以上のシャーシ(以下、ストレージシャーシ)54に収納されている。図示の例では、1つのサーバシャーシ52が、複数のサーバ装置100と、PCIe-MUX(PCIeに従う通信を中継するマルチプレクサ)51とを有し、1つのストレージシャーシ54が、1つのストレージ装置300を有する。複数のサーバ装置100の各々が、インターフェースデバイス200を有する。各インターフェースデバイス200は、転送デバイスの一例であり、サーバ装置100とストレージ装置300間のコマンド転送を行う。1以上のサーバ装置100と1以上のストレージ装置300が同一のシャーシに搭載されてもよい。
 図1は、サーバ装置100及びストレージ装置300の構成例を示す。なお、以下の説明では、符号のアルファベットによって要素を区別する必要がない場合、符号のアルファベットを省略することがある。
 サーバ装置100は、メモリ110と、CPU120と、インターフェースデバイス200とを含む。ストレージ装置300は、複数のコントローラ(以下、CTL)400と、複数の記憶デバイス320とを含む。複数の記憶デバイス320は、フラッシュメモリデバイス(例えばSSD)を含む。なお、複数の記憶デバイスは、HDDを含んでもよい。本実施例のストレージ装置300には、2個のCTL400(CTL#0及び#1)が含まれる。
 なお、本実施例に係る計算機システム50は、Converged Platformであることが好ましい。なお、Converged PlatformはConverged Infrastructure、Converged Systemとも呼ばれ、日本語では「Converged」が「垂直統合」という用語に置き換わる場合がある。なお、本実施例では以下、これらをConverged Platform(CPFと省略することもある)に統一して呼ぶ。
 CPFは、例えば、サーバ装置、ストレージ装置(CTLと記憶デバイスを含む)、及びこれらを接続するインターフェースデバイスを含む製品である。企業の管理者が個別にサーバ装置とストレージ装置を導入する場合、こうしたサーバ装置とストレージ装置の接続確認に代表される動作検証は管理者側で行われていた。しかし、CPFを導入する場合、製品を販売するベンダが事前に動作検証を行うため、製品を設置して使用する顧客の管理者による動作検証が不要又は削減できる。
 なお、一部のCPFは、サーバ装置、ストレージ装置、及びインターフェースデバイスの設定を一括して行う管理プログラムを実行する管理サブシステムを含む場合がある。この管理サブシステムは、管理者が希望する実行環境(仮想マシン(VM)、DBMS(Database Management System)、Webサーバ等)を迅速に提供することができる。例えば、管理プログラムは、必要なリソース量の仮想マシンを提供するために、サーバ装置及びストレージ装置に必要なリソースの割り当てをリクエストし、割り当てられたリソースを用いてVMを作成するようにハイパーバイザにリクエストする。
 さて、サーバ装置100において、メモリ110は、サーバ装置100の処理のためのプログラム及びデータを格納する。CPU120は、内部バスを介してメモリ110に接続され、メモリ110に格納されたプログラムに従ってサーバ装置100の処理を実行する。
 ストレージ装置300において、CTL400は、インターフェースデバイス200に接続され、インターフェースデバイス200からのI/Oコマンドに応じて処理を行う。CTL400は、メモリ828と、マイクロプロセッサ(以下、MP)420と、ドライブインターフェース430とを含む。メモリ828は、CTL400の処理のためのプログラム及びデータを格納する。MP420は、内部バスを介してメモリ828に接続され、メモリ828に格納されたプログラムに従ってCTL400の処理を実行する。ドライブインターフェース430は、MP420及び記憶デバイス320に接続され、CTL400と記憶デバイス320の間の通信を制御する。記憶デバイス320は、データを格納し、CTL400に接続され、CTL400からアクセスされる。また、本実施例のストレージ装置300には、少なくとも2個の記憶デバイス320(ブートデバイス(BOOT)320a及びデータデバイス(DATA)320b)が含まれる。ブートデバイス320aは、サーバ装置100のためのプログラムを格納する。データデバイス320bは、CTL400からのデータを格納する。
 インターフェースデバイス200は、サーバ側バスを介してCPU120に接続され、ストレージ側バスを介してストレージ装置300に接続され、サーバ装置100及びストレージ装置300間の通信を制御する。本実施例におけるサーバ側バス及びストレージ側バスは、PCIeバスである。本実施例におけるインターフェースデバイス200は、2本のストレージ側バスを介して2個のCTL400にそれぞれ接続されている。例えば、インターフェースデバイス200は、サーバ装置100のPCIeバス・スロットへ挿入される基板(アドオンカード)である。ストレージ側バスは、PCIeバス・ケーブルであってもよいし、基板であってもよい。また、インターフェースデバイス200は、サーバ装置100の外部に位置し、サーバ装置100のPCIeバス・スロットに接続されたPCIeバス・ケーブルを介して接続されてもよい。また、インターフェースデバイス200は、サーバ装置100に代えてストレージ装置300に搭載されてもよい。
 メモリ110は、ブートドライバ111と、OS112と、アプリケーション(アプリケーションプログラム)113と、ドライバ114(デバイスドライバ)を格納する。ブートドライバ111は、例えば、BIOS(Basic Input/Output System)又はEFI(Extensible Firmware Interface)に基づくプログラム等である。ブートドライバ111は、サーバ装置100の電源投入時にメモリ110へ読み出され、CPU120により実行される。OS112は、ストレージ装置300内のブートデバイス320aに格納され、ブートドライバ111によりサーバ装置100内のメモリ110へ読み出され、CPU120により実行される。ブートドライバ111は、FCPに従って、ブートデバイス内のOS112の読み出しを指示するI/Oコマンドをインターフェースデバイス200へ発行する。
 複数のドライバ114は、FCPドライバ(FCPを用いるドライバ)114aと、NVMeドライバ(NVMeを用いるドライバ)114bとを含む。FCPドライバ114aとして、例えば、OS112に含まれないベンダ・プロプライエタリ・ソフトウェアを用い、FCPドライバ114aは、インターフェースデバイス200を制御する機能を含む。これにより、NVMeドライバ114bとして、OS112に含まれる標準ドライバを用いることができる。なお、FCPの代わりに、TCP-IP(Transmission Control Protocol-Internet Protocol)等、他のプロトコル(具体的には、例えば、サーバ装置100がブートに用いることができる他のプロトコル)が用いられてもよい。
 アプリケーション113は、ストレージ装置300内のデータデバイス320bに格納され、サーバ装置100のユーザ又はOS112により、サーバ装置100内のメモリ110へ読み出され、CPU120により実行される。アプリケーション113は、データに関するコマンドをドライバ114へ発行する。ドライバ114は、アプリケーション113からのコマンドを格納するキュー115を管理する。ドライバ114は、アプリケーション113からのコマンドに基づいて、対応するプロトコルを用いるI/Oコマンドをインターフェースデバイス200へ発行する。
 なお、複数のサーバ装置100がストレージ装置300の記憶デバイス320を共有してもよい。また、ストレージ装置300のCTL400は1個でもよく、3個以上でもよい。
 図2は、インターフェースデバイス200の構成例を示す。
 インターフェースデバイス200は、通信プロセッサ230と、DMAコントローラ240と、FCPキュー制御回路257aと、NVMeキュー制御回路257bと、複数のバス制御回路260と、記憶部270とを含む。これらの要素は、内部バスを介して接続されている。通信プロセッサ230は、複数のプロセッサコア231を含む。以下、プロセッサコアを、「LRP」と言う。なお、LRP231は、プロセッサであってもよい。DMAコントローラ240は、複数のDMAコア(XDMA)241を含む。記憶部270は、揮発性メモリ及び不揮発性メモリのようなメモリを少なくとも1つ含む。記憶部270は、例えば、フラッシュメモリを含む。フラッシュメモリは、不揮発メモリの一例であり、サーバ装置100へ提供されるPCIeの拡張ROM(Read Only Memory)空間に対応する記憶領域を含み、その記憶領域に前述のブートドライバ111を格納する。サーバ装置100は、起動時に、拡張ROM空間を指定することにより、フラッシュメモリからサーバ装置100のメモリ110へブートドライバ111を読み出し、ブートドライバ111を実行する。なお、ブートドライバ111は、サーバ装置100又はストレージ装置300内の不揮発性メモリに格納されていてもよい。
 キュー制御回路257は、サーバ側バスを介してサーバ装置100のCPU120に接続される。FCPキュー制御回路257aは、FCPドライバ114aからアクセスされるレジスタ空間(以下、FCPレジスタ空間)210aを提供する制御回路である。NVMeキュー制御回路257bは、NVMeドライバ114bからアクセスされるレジスタ空間(以下、NVMeレジスタ空間)210bを提供する制御回路である。レジスタ空間210a及び210bは、それぞれ、CPU120により用いられるアドレス空間におけるMMIO(Memory Mapped Input/Output)空間に割り当てられている。FCPレジスタ空間210aは、LRP231毎のレジスタ211aを含む。NVMeレジスタ空間210bは、NVMeドライバ114bにより使用されるレジスタ211bを含む。以下、レジスタ211aを、「FCPレジスタ211a」と言い、レジスタ211bを、「NVMeレジスタ211b」と言う。本実施例では、FCPレジスタ211aは、LRP231毎に存在する。このため、LRP#0~#3にそれぞれ関連付けられた4個のFCPレジスタ#0~#3がFCPレジスタ空間210aにある。一方、NVMeレジスタ211bは、LRP231より多くても少なくてもよく、本実施例では、64個のNVMeレジスタ#0~#63がNVMeレジスタ空間210bにある。
 FCPキュー制御回路257aは、FCPコマンド(FCPに従うコマンド)に関するキューであるFCPキュー220aを有し、NVMeキュー制御回路257bは、NVMeコマンド(NVMeに従うコマンド)に関するキューであるNVMeキュー220bを有する。後述するように、FCPキュー220aは、LRP231毎に存在し(すなわち、LRP#0~#3にそれぞれ関連付けられたFCPキュー#0~#3が存在し)、NVMeキュー220bは、LRP#0~#3に共通である。FCPキュー220a及びNVMeキュー220bの各々の制御については、後に詳述する。キュー220は、コマンド情報のキューである。
 また、図1及び図2において、キュー115、レジスタ211及びキュー220は、サーバ装置100からストレージ装置300へのコマンドに関わる要素であるが、ストレージ装置300からサーバ装置100への応答に関わる要素として、キュー115、レジスタ211及びキュー220のうちの少なくとも1つと同様の要素が用意されていて、その用意された要素を使用して、ストレージ装置300からサーバ装置100への応答が行われてもよい。
 バス制御回路260は、ストレージ側バス毎に設けられる。バス制御回路260は、ストレージ側バスを介してストレージ装置300のCTL400のMP420に接続される。バス制御回路260は、制御回路(図示せず)と、CTL400によりアクセスされるストレージ用レジスタ(図示せず)とを含む。制御回路は、ストレージ用レジスタ及び記憶部270を制御する。なお、図2(及び図1)には示されていないが、本実施例では、インターフェースデバイス200は、図11に示したPCIe-MUX51経由でストレージ装置300と通信する。しかし、PCIe-MUX51は無くてもよい。
 サーバ側バスにおいて、サーバ装置100(具体的には、例えば、CPU120)がRoot Complexとなり、インターフェースデバイス200がEndpointとなる。ストレージ側バスにおいて、CTL400(具体的には、例えば、MP420)がRoot Complexとなり、インターフェースデバイス200がEndpointとなる。
 通信プロセッサ230は、キュー220から取り出したコマンド情報に含まれているコマンド(又はそのコマンド情報内のメタ情報に関連付いているコマンド)に基づくリクエスト(例えばI/Oリクエスト)をストレージ装置300へ発行する。更に、通信プロセッサ230は、サーバ装置100及びストレージ装置300からDMAのための情報(例えば、転送元アドレス及び転送先アドレスのうちの少なくとも1つを含んだ情報)を取得し、取得した情報に基づいてDMAの指示をDMAコントローラ240へ発行する。DMAコントローラ240は、通信プロセッサ230からの指示に基づいて、サーバ装置100内のメモリ110とストレージ装置300内のメモリ828との間でバースト転送を行う。
 本実施例におけるインターフェースデバイス200は、4個のLRPを含み、4個のDMAコアを含み、2個のターゲットポートを含む。ターゲットポートは、インターフェースデバイス200において、ストレージ側バスが接続されるポートであり、CTL400毎に設けられる。インターフェースデバイス200に対して1個、2個、又は4個のファンクションが設定される。ここで言う「ファンクション」は、PCIeデバイスのファンクションである。1個のPCIeデバイスが、複数のファンクションを持つことにより、複数のPCIeデバイスとして動作することができる。本実施例のファンクションは、FCPコマンド(例えばFCPに従うI/Oコマンド)を処理するFCPファンクションと、NVMeコマンド(例えばNVMeに従うI/Oコマンド)を処理するNVMeファンクションとのいずれかである。4個のLRPの各々は、1以上のファンクションに割り当てられる。
 この構成によれば、サーバ装置100は、複数のプロトコルを用いてストレージ装置300内のデータにアクセスすることができる。また、NVMeに加えて、FCPを用いることができる。また、インターフェースデバイス200が拡張ROM領域に割り当てられた不揮発性メモリにブートドライバ111を格納することにより、サーバ装置100は、PCIeバスを介してブートドライバ111を読み出すことができる。また、プロトコル毎のバスを用いる場合に比べ、複数のプロトコルでサーバ側バスを共用することにより、サーバ装置100のバス・スロットの消費を削減できる。また、サーバ装置100が特定プロトコルによりサーバ側バスを介してOSを読み出してブートし、ブート後に、NVMeプロトコルによりサーバ側バスを介してデータ転送を行うことにより、特定プロトコルにより使用されたサーバ側バスの帯域をNVMeプロトコルに使用することができ、サーバ側バスの帯域を有効に利用することができる。
 ファンクションは、デバイスモードにより決定される。計算機システムの管理者は、インターフェースデバイス200に対し、複数のデバイスモードの何れか一つを設定することができる。例えば、キュー制御回路257は、予め記憶部270(例えばフラッシュメモリ)に格納されたデバイスモードの情報を、起動時に読み出し、PCIeのLink Up時までにデバイスモードを設定する。また、サーバ装置100、計算機システムに接続される管理サブシステム、インターフェースデバイス200に設けられる外部ピン等から、インターフェースデバイス200のデバイスモードを設定してもよい。
 以下、インターフェースデバイス200のファンクションを設定するデバイスモードについて説明する。
 図3は、インターフェースデバイス200のデバイスモードの一例を示す。
 本実施例において、インターフェースデバイス200は、デバイスモード#1~#4の何れか一つに設定される。デバイスモード#1は、1FCPモードと呼ぶことができる。このデバイスモードにおいてインターフェースデバイス200は、1個のFCPファンクションであるファンクション#0を持ち、その1個のファンクションに4個のLRPを割り当てる。デバイスモード#2は、2FCPモードと呼ぶことができる。このデバイスモードにおいてインターフェースデバイス200は、2個のFCPファンクションであるファンクション#0、#1を持ち、各ファンクションに2個のLRPを割り当てる。デバイスモード#3は、1FCP/1NVMeモードと呼ぶことができる。このデバイスモードにおいてインターフェースデバイス200は、1個のFCPファンクションであるファンクション#0と、1個のNVMeファンクションであるファンクション#2とを持ち、各ファンクションに4個のLRPを割り当てる。デバイスモード#4は、2FCP/2NVMeモードと呼ぶことができる。このデバイスモードにおいてインターフェースデバイス200は、2個のFCPファンクションであるファンクション#0、#1と、2個のNVMeファンクションであるファンクション#2、#3とを持ち、各ファンクションに2個のLRPを割り当てる。FCPファンクションとNVMeファンクションは同じLRPを時分割でシェアできる。
 サーバ側バスは、マルチパスであってもよい。この場合、デバイスモード#2、#4のように、インターフェースデバイス200が、2個のパスにそれぞれ対応する同一プロトコルの2個のファンクションを含み、サーバ装置100が、それら2個のファンクションをそれぞれ制御する2個のNVMeドライバ114bを実行し、それら2個のNVMeドライバ114bを選択するパスマネージャプログラムを実行することにより、I/Oコマンドを複数のパスに振り分けることができる。これらのデバイスモードにおいては、ファンクション当たりの通信プロセッサ数が2個になるため、サーバ側バスのパス当たりの最大性能は、2個のLRPの性能が上限となる。
 なお、通信プロセッサ230が、複数のCTL400へI/Oリクエストを振り分けてもよい。この場合、2個のNVMeファンクションのそれぞれが2個のLRPを使う必要はなく、1個のNVMeファンクションが4個のLRPを使うことができる。また、インターフェースデバイス200が2個のFCPファンクション#0、#1をサーバ装置100へ提供し、FCPファンクション#0がI/Oを起動した場合にI/OリクエストをCTL#0へ発行し、FCPファンクション#1がI/Oを起動した場合にI/OリクエストをCTL#1へ発行するように設定されてもよい。また、インターフェースデバイス200が1個のプロトコルに対して1個のファンクションをサーバ装置100へ提供する場合、通信プロセッサ230が各CTL400の帯域の使用状況や、アクセス先のストレージ装置300内のアドレス等に基づいて、CTL#0、#1のいずれにI/Oリクエストを発行するかを決定してもよい。例えば、通信プロセッサ230は、帯域の使用状況として、各CTL400から現在転送中(ビジー)であるか否かを示す情報を取得し、一方のCTL400がビジーであると判定された場合、I/Oリクエストを他方のCTL400へ発行する。また、通信プロセッサ230は、同一のデータのライトリクエストを複数のCTL400へ発行することにより、そのデータを冗長化して書き込み、そのデータの信頼性を高めてもよい。
 ストレージ装置300が複数のCTL400を含むことにより、或るCTL400に障害が発生しても、他のCTL400へI/Oリクエストを発行することにより、計算機システムの信頼性を向上させることができる。また、通信プロセッサ230が複数のターゲットポートに接続され、複数のターゲットポートが複数のCTL400にそれぞれ接続されることにより、通信プロセッサ230は、複数のCTL400の状況に応じてI/Oリクエストの発行先のCTL400を選択することができ、計算機システムの性能を向上させることができる。デバイスモード#2、#4のように、インターフェースデバイス200が複数のパスにそれぞれ対応する同一プロトコルの複数のファンクションを提供することにより、サーバ装置100がパスを選択してI/Oコマンドを発行することができる。
 以下、図4及び図5を参照して、サーバ装置100とストレージ装置300間の通信の流れの一例を説明する。なお、図4及び図5の説明では、コマンドは、I/Oコマンドであるとする。また、図4及び図5の説明では、インターフェースデバイス200についてデバイスモード#3が設定されているとする。
 S110において、サーバ装置100のアプリケーション113からのリクエストに応じて、ドライバ114が、メモリ110にコマンドを書き込む。ここで、ドライバ114は、データ転送に必要なメモリ110内の記憶領域をサーバ側記憶領域として確保し、サーバ側記憶領域のアドレスを示すScatter/Gather List(SGL)を作成し、そのSGLをメモリ110に書き込む。I/Oコマンドがライトコマンドの場合、ドライバ114は、サーバ側記憶領域にライトデータ(そのライトコマンドに付随するライト対象のデータ)を書き込む。
 アプリケーション113がFCPドライバ114aに対するI/Oコマンド(FCPコマンドの一例)をメモリ110(例えばいずれかのキュー115a)に書き込んだ場合、S210~S250の処理が行われる。すなわち、S210において、FCPドライバ114aは、I/Oコマンドのメタ情報をFCPレジスタ#0(書込み先のFCPレジスタ211aの一例)に書き込み、FCPキュー制御回路257aは、その書込み先のFCPレジスタ#0に関連付けられているFCPキュー#0に、そのI/Oコマンドメタ情報を追加する。S220において、LRP#0により、FCPキュー#0からそのI/Oコマンドメタ情報が取得される。S230において、LRP#0は、そのI/Oコマンドメタ情報に基づいて、XDMA241に、I/Oコマンドのアドレスを設定する。S240において、アドレスが設定されたXDMA241が、設定されたアドレス(サーバ装置100内のメモリ110)からI/Oコマンドを読み出し、そのI/Oコマンドを記憶部270に書き込む。S250において、XDMA241は、I/Oコマンドを読み出したこと(例えば、I/Oコマンドの書込み先アドレス(記憶部270におけるアドレス))をLRP#0へ通知する。
 アプリケーション113が、NVMeドライバ114bに対するI/Oコマンド(NVMeコマンドの一例)をメモリ110(例えばいずれかのキュー115b)に書き込んだ場合、S310~S360の処理が行われる。すなわち、S310において、LRP#1(NVMeファンクションを割り当てられたLRPの一例)は、割込み(又はポーリング)により、NVMeキュー220bを参照しコマンド情報(本実施例ではコマンドそれ自体)がNVMeキュー220bに存在するか否かを判定している(すなわち、定期的に、NVMeキュー220bにコマンド情報が有るか否かを定期的にNVMeキュー制御回路257bに問い合わせている)。コマンド情報が無いと判定された場合、LRP#1は、待機する。S320において、NVMeドライバ114bは、I/Oコマンドのメタ情報をNVMeレジスタ#1(書込み先のNVMeレジスタ211bの一例)に書き込む。NVMeレジスタは、後述するようにドアベルレジスタであり、そのレジスタに情報が書き込まれると割込みが発生する。S330において、NVMeキュー制御回路257bは、そのI/Oコマンドメタ情報に関連付いているI/Oコマンドを、サーバ装置100内のメモリ110から読み出し、そのI/OコマンドをNVMeキュー220bに追加する。S340において、LRP#1は、ポーリングにより、再びNVMeキュー220bを参照しコマンド情報が存在するか否かを判定する。コマンド情報が有ると判定された場合、S350において、LRP#1は、コマンドリードリクエストをNVMeキュー制御回路257bへ発行する。NVMeファンクションに複数のLRPが割り当てられている場合、NVMeキュー制御回路257bは、同じ時間内に複数のコマンドリードリクエストを受信することがあるが、その場合、図示しないアービタにより、1つのコマンドリードリクエストを決定する。決定されたコマンドリードリクエストの送信元を、LPR#1とする。S360において、NVMeキュー制御回路257bは、NVMeキュー220b内のI/OコマンドをLRP#1へ割り振る(LPR#1に、I/Oコマンドが読み出される)。なお、S340のポーリングの代替として、S220のような通知が行われてもよいし、S340のポーリングとS220の通知が併用されてもよい。
 S250又はS360の後、S410において、LRP231(上記の例でいえば、LRP#0又は#1)は、読み出されたI/Oコマンドを、ストレージ装置300のプロトコルを用いたI/Oリクエストに変換し、そのI/Oリクエストを記憶部270へ書き込む。ストレージ装置300のプロトコルは、規格化された所定のプロトコルであってもよいし、ベンダ・プロプライエタリのプロトコルであってもよい。S420において、バス制御回路260は、そのI/OリクエストをCTL400内のメモリ828へ書き込む。
 S510において、CTL400は、メモリ828からI/Oリクエストを読み出して解析し、転送に必要なメモリ828内の記憶領域をストレージ側記憶領域として確保する。ここで、CTL400は、ストレージ側記憶領域のアドレスを示すSGLを作成し、そのSGLをメモリ828へ書き込む。I/Oリクエストがリードリクエストの場合、CTL400は、記憶デバイス320からリードデータ(そのリードリクエストに従うリード対象のデータ)を読み出し、ストレージ側記憶領域へリードデータを書き込む。
 S520において、CTL400は、サーバ装置100内のメモリ110とCTL400内のメモリ828との間の転送を要求するDMAリクエストを生成し、そのDMAリクエストをメモリ828へ書き込む。S530において、CTL400は、そのDMAリクエストのメタ情報を、インターフェースデバイス200内のバス制御回路260内のストレージ用レジスタへ書き込む。S540において、バス制御回路260は、そのメタ情報に基づいて、CTL400内のメモリ828からDMAリクエストを読み出し、そのDMAリクエストを記憶部270に書き込む。S550において、バス制御回路260は、そのDMAリクエストをLRP231へ通知する。
 S610において、LRP231は、サーバ装置100のメモリ110内のSGLを読み出すことを要求するSGLリードリクエストを記憶部270に書き込む。S620において、LRP231は、CTL400のメモリ828内のSGLを読み出すことを要求するSGLリードリクエストを記憶部270に書き込む。
 S630において、キュー制御回路257は、サーバ装置100のメモリ110からSGLを読み出し、読み出されたSGLを記憶部270に書き込む。S640において、キュー制御回路257は、サーバ装置100からSGLを読み出したことをLRP231へ通知する。S650において、バス制御回路260は、CTL400のメモリ828からSGLを読み出し、読み出されたSGLを記憶部270に書き込む。S660において、バス制御回路260は、CTL400からSGLを読み出したことをLRP231へ通知する。
 S670において、LRP231は、サーバ装置100から読み出されたSGLと、CTL400から読み出されたSGLとに基づいて、サーバ側記憶領域とストレージ側記憶領域の間のDMAを要求するリクエストパラメータを生成する。S680において、LRP231は、生成されたリクエストパラメータを用いてDMAコントローラ240へDMAを指示する。
 S710において、DMAコントローラ240は、リクエストパラメータに基づいてDMAを実行する。I/Oコマンドがライトコマンドの場合、DMAコントローラ240は、サーバ側記憶領域に格納されたライトデータを、ストレージ側記憶領域へ転送する。I/Oコマンドがリードコマンドの場合、DMAコントローラ240は、ストレージ側記憶領域に格納されたリードデータを、サーバ側記憶領域へ転送する。
 S720において、DMAコントローラ240は、DMAを完了すると、DMAの完了をLRP231へ通知する。S730において、LRP231は、DMAリクエストの応答としてDMA完了通知を記憶部270に書き込む。S740において、バス制御回路260は、そのDMA完了通知をCTL400内のメモリ828に書き込む。S750において、CTL400は、メモリ828からDMA完了通知を読み出し、完了を示す情報をI/Oリクエストに対する応答としてメモリ828に書き込み、その応答のメタ情報を、インターフェースデバイス200内のストレージ用レジスタに書き込む。S760において、バス制御回路260は、そのメタ情報に基づいて、CTL400内のメモリ828から応答を読み出し、その応答を記憶部270に書き込む。S770において、バス制御回路260は、その応答をLRP231へ通知する。
 S810において、LRP231は、サーバ装置100及びストレージ装置300への応答パラメータを作成し、応答パラメータを記憶部270に書き込む。
 S820において、LRP231は、応答パラメータの作成の完了の通知をキュー制御回路257へ要求する。S830において、キュー制御回路257は、記憶部270に格納された応答パラメータをサーバ装置100内のメモリ110に書き込む。S840において、キュー制御回路257は、サーバ装置100へPCIeの割込みを発行する。S850において、サーバ装置100内のドライバ114は、その割込みに応じて、メモリ110に格納された応答パラメータを読み出し、応答パラメータの受信の通知をレジスタ211に書き込む。
 S920において、LRP231は、応答パラメータの作成の完了の通知をバス制御回路260へ要求する。S930において。バス制御回路260は、記憶部270に格納された応答パラメータをCTL400内のメモリ828に書き込む。S940において、バス制御回路260は、CTL400内のメモリ828へ応答パラメータの通知を書き込む。S950において、CTL400は、その通知に応じて、メモリ828に格納された応答パラメータを読み出し、応答パラメータの受信をストレージ用レジスタに書き込む。
 以上、図4及び図5を参照した説明によれば、インターフェースデバイス200がサーバ装置100からのI/Oコマンドをストレージ装置300のプロトコルのI/Oリクエストに変換し、そのI/Oリクエストをストレージ装置300へ発行する。このため、サーバ装置100のプロトコルに合わせて、ストレージ装置300のプロトコルを変更する必要がない。また、サーバ装置100及びストレージ装置300が、DMAの転送元及び転送先の記憶領域を示すSGLを作成することにより、インターフェースデバイス200は、サーバ装置100内のメモリ110とストレージ装置300内のメモリ828との間でDMAを行うことができる。インターフェースデバイス200がDMAを行うことにより、サーバ装置100がストレージ装置300のプロトコルを用いることなく、ストレージ装置300がサーバ装置100のプロトコルを用いることなくデータを転送することができる。
 サーバ装置100とストレージ装置300間の通信では、インターフェースデバイス200においてキュー制御が行われる。以下、キュー制御に関して、詳細に説明する。なお、以下の説明では、1つのアプリケーション113が、FCPドライバ114aのキュー115aとNVMeドライバ114bのキュー115bのどちらにもコマンドを書き込むことができるようになっていてもよい。また、第1のアプリケーションがFCPドライバ114aのキュー115aにのみコマンドを書き込むことができて、第2のアプリケーションがNVMeドライバ114bのキュー115bにのみコマンドを書き込むことができるようになっていてもよい。また、LRP#0~#3のいずれも、FCPコマンドとNVMeコマンドのいずれも転送できるようになっていてもよい。また、LRP#0~#3のうちの2以上のLRP(例えば全てのLRP)が、FCPコマンドを転送できるようになっていて、一部の複数のLRPが、NVMeコマンドを転送できるようになっていてもよい。
 図6は、キュー制御の概要の一例を示す。
 サーバ装置100内のメモリ110には、FCPコマンドが書き込まれる記憶領域(キュー115aが格納される領域)であるFCP領域410aと、NVMeコマンドが書き込まれる記憶領域(キュー115bが格納される領域)であるNVMe領域410bとが、例えばCPU120によりそれぞれ確保される。複数のキュー115bは、AdminコマンドのキューであるAdminキューと、I/OコマンドのキューであるI/Oキューとを含む。Adminキュー及びI/Oキューの各々は、1個以上存在する。本実施例では、1個のAdminキュー#0と、63個のI/Oキュー#1~#63とが存在する。キュー115bとNVMeレジスタ211bは、1:1で関連付けられてよいが、m:1、1:n、又は、m:nで関連付けられてもよい。m及びnは、それぞれ自然数であり、同じ値(m=n)であっても異なる値(m≠n)であってもよい。
 FCPキュー220aが、LRP231毎に存在する。すなわち、FCPキュー220#0~#3は、それぞれ、LRP#0~#3(例えば、FCPコマンドの転送のイニシエートが可能なLRP#0~#3)に関連付けられている。一方、NVMeキュー220bは、複数のLRP231(例えば、NVMeコマンドの転送のイニシエートが可能なLRP#0~#3)に共有である。この構成は、例えば以下の点で好ましい。
 すなわち、LRP231毎にキューが関連付けられていると、キューの排他ロジックが不要であり、故に、シンプルな実行環境(例えば処理又は構成)とすることが期待できる。このため、FCPドライバ114a及びFCPキュー制御回路257aのうちの少なくとも1つの構成をシンプルな構成とすることが期待できる。特に、FCPは、少なくともNVMeよりも、ベンダがカスタマイズできる範囲が大きいプロトコルであり、また、LRP231を個々にサーバ装置100に認識させることができるプロトコルである。このため、LRP231へのコマンドの割り振りを(いずれのコマンドをいずれのLRPに振り分けられるようにするかを)、サーバ装置100のFCPドライバ114aが制御できる。例えば、キュー115aとFCPレジスタ211aが1:1で対応付けられていれば、FCPドライバ114aは、FCPコマンドの書込み先のキュー115aを決めることで、そのFCPコマンドの割り振り先のLRP231(FCPキュー220a)を決めることができる。このため、シンプルな実行環境を提供できる本実施例に係る構成は有用である。
 この観点からすれば、FCPキュー220aだけでなくNVMeキュー220bもLRP231毎に関連付けることが好ましいと考えられる。しかし、本実施例では、NVMeについては、そのような構成は採用されず、NVMeキュー220bは複数のLRP231に共有のキューとされる。なぜなら、NVMeには、処理の負荷がI/Oコマンドよりも高い種類のコマンド、具体的には、I/Oコマンドよりも転送に多くの処理を必要とするAdminコマンドがサポートされており、そのようなコマンドがサポートされているNVMeについても、キュー220bをLRP231毎に用意すると、そのようなAdminコマンドを処理しているLRP231の負荷が高くなり、そのLRP231のキューに存在するI/Oコマンドの処理がしばらく開始されず、全体として、スループットが低下するおそれがあるためである。特に、NVMeは、メモリ110内のキュー115をインターフェースデバイス200に読み出させる方式が標準化規格によって決まっているプロトコルである。その観点から、LRP231毎にNVMeキューが用意された場合、制御回路257b(例えばそれのファームウェア)の構成がシンプルになるようなコマンド割振り論理(例えばラウンドロビン)を採用することが好ましいが、そうすると、Adminコマンドを処理中の負荷の高いLRP231のキューに未転送のI/Oコマンドが追加されることになり得る。更にNVMeは、キュー220とメモリ110間のインターフェースは意識されている(仕様上決まっている)ものの、LRP231がサーバ装置100からは意識されない(サーバ装置100に対して隠蔽される)。以上のうちの少なくとも1つの理由から、本実施例では、NVMeキュー220bは複数のLRP231に共有のキューとされる。
 なお、「I/Oコマンドよりも転送に多くの処理を必要とするAdminコマンド」がNVMeについてはサポートされていることが、NVMeキュー220bが複数のLRP231に共有のキューとされている理由の1つであるが、そのようなAdminコマンドとしては、例えば、Identify Namespace Data Structureコマンドがある。Identify Namespace Data Structureは、そのコマンドで指定されたNamespaceの情報をTargetから取得するためのコマンドである。具体的には、例えば、このコマンドによれば、(1)LU存在確認(Test Unit Readyを1回以上(例えば最大3回)実行してLUがアクセス可能であるかを確認すること)、(2)LU容量取得(Read Capacityコマンドの送信(LUの容量の問合せ))、(3)NAA情報取得(第1のInquiryコマンドの送信(LUの識別子(NAA)の問合せ))、及び、(4)使用量情報取得(第2のInquiryコマンドの送信(LUの使用中容量の問合せ))が実行されることになる。なお、「LU」とは、ストレージ装置300が提供する論理ボリュームとしての論理ユニットの略である。また、「Adminコマンド」は、NVMeコマンドの一種であり、NVMeに従うI/Oコマンドと異なるコマンドである特殊コマンド(例えば管理系コマンド)の一例である。NVMeコマンドは、例えばNVMeドライバ114bから発行される。Adminコマンドの他の例として、Delete I/O Submission QueueコマンドやCreate I/O Submission Queueコマンドのように、Targetとのやりとりが発生しないコマンドもある。
 また、本実施例によれば、サーバ装置100が、NVMeでサポートされていないファンクションの実行のためのFCPコマンドを発行することができる。それは、サーバ装置100のOSの読み出しに限らないでよい。例えば、NVMeでRAS(Reliability Availability Serviceability)情報収集がサポートされていない場合、アプリケーション113が、RAS情報収集のためのコマンドをFCPドライバ114a経由で発行し、FCPコマンドに対する応答としてRAS情報がサーバ装置100に返されてもよい。また、NVMeでサポートされていない障害情報取得が(例えば、インターフェースデバイス200における所定の記憶領域に記録されている障害情報の取得が)、FCPに従い行われてもよい。具体的には、例えば、障害情報(例えば、記憶部270に含まれるRAM(Random Access Memory)のRAMコレクタブル障害を表す情報)がインターフェースデバイス200における所定の記憶領域に書き込まれた場合に、割込みがCPU120に送られ、CPU120が、FCPドライバ114aにより、障害情報採取のためのFCPコマンドを発行してもよい。
 図7は、FCPキュー制御の概要の一例を示す。
 上述したように、FCPキュー220aには、FCPコマンド情報として、FCPコマンドメタ情報が格納される。FCPコマンドメタ情報は、FCPコマンドのメタ情報であり、例えば4B(バイト)の情報である。メタ情報は、FCPコマンド位置情報を含んでおり、その位置情報は、例えば、ベースアドレスからのオフセット値と、FCPコマンド701が追加されたキュー115aの識別番号とを含んでよい。
 FCP領域410aのキュー115aにFCPコマンド701が追加された場合、そのFCPコマンド701のメタ情報が、FCPキュー220aに追加される。FCPコマンドメタ情報がFCPキュー220aに追加された場合、そのFCPコマンドメタ情報が、そのFCPキュー220aに関連付けられているLRP231により取得される(S21)。具体的には、例えば、ベースアドレスと、FCPコマンドメタ情報が含むFCPコマンド位置情報(例えば、ベースアドレスからのオフセット値)とを含んだ情報が取得される。LRP231は、その情報に従うアドレス(FCPコマンド701が位置するアドレス)を、XDMA241に設定する(S22)。XDMA241が、その設定されたアドレスからFCPコマンド701を読み出し(S23)、読み出したFCPコマンド701をLRP231に割り振る(S24)。この一連の処理では、例えば、S22において、LRP231が、XDMA22に転送元アドレスと転送先アドレスとを設定してよく、転送元アドレスが、FCPコマンド701が位置するアドレスでよく、転送先アドレスが、記憶部270における領域のアドレスでよい。S23及びS24では、XDMA241が、転送元アドレスから転送先アドレスへFCPコマンド701をDMAにより転送し、その転送完了をLAP231に通知し、LRP231が、その通知に応答して転送先アドレスの領域からFCPコマンド701を取得してもよい。
 以上のFCPキュー制御によれば、LRP231は、そのLRP231に関連付いているFCPキュー220aに追加されたメタ情報に関連付いているFCPコマンド701をDMAにより取得することができる。
 図8は、NVMeキュー制御の概要の一例を示す。
 NVMeキュー制御回路257bは、複数のLRP231(#0~#3)にそれぞれ関連付けられた複数のインターフェース部651(#0~#3)を有している。各インターフェース部651は、そのインターフェース部651に関連付けられているLRP231から参照される領域であって、例えば、NVMeキュー220bにNVMeコマンド(例えば、I/Oコマンド、Adminコマンド)が存在するか否かを表す情報を記憶する。その情報は、図示の通り、一種のインデックス情報であり、例えば、NVMeキュー220bの先頭アドレス(ベースアドレス)と、NVMeキュー220bの後端アドレス(テールアドレス)とを含む。先頭アドレスと後端アドレスに差があれば、少なくとも1つのNVMeコマンドがNVMeキュー220bに存在するということである。各インターフェース部651が有する情報は、NVMeキュー220bにおけるNVMeコマンドの増減に応じて、NVMeキュー制御回路257bにより更新される。
 各NVMeレジスタ211bは、ドアベルレジスタである。NVMeレジスタ211bに情報が書き込まれると、そのNVMeレジスタ211bについて割込みがNVMeキュー制御回路257bに発生する。例えば、NVMeドライバ114bが、NVMe領域410b内のキュー115bにNVMeコマンド601を追加した場合、そのキュー115bの識別番号を基に決定されたNVMeレジスタ211bに、そのNVMeコマンド601のメタ情報を書き込む。そのメタ情報は、例えば、NVMeコマンド601の位置を表す情報を含み、その情報は、NVMeコマンド601が追加されたキュー115bの識別番号を含んでよい。
 NVMeレジスタ211bにNVMeコマンド601のメタ情報が書き込まれたことにより発生した割込みに応答して、NVMeキュー制御回路257bは、そのNVMeレジスタ211bに書き込まれたメタ情報に関連付けられているNVMeコマンド601をNVMe領域410bから読み出し、その読み出したNVMeコマンド601を、NVMeキュー220bに追加する。
 NVMeキュー制御回路257bは、図示しないアービタを有する。アービタは、複数の取得リクエストから1つの取得リクエストを決定(選択)する。具体的には、例えば、各LRP(より具体的には、例えば、NVMeコマンドを処理することが定義された各LRP)231が、NVMeキュー220bにNVMeコマンドが存在するか否かを判定するために、定期的に、そのLRP231に関連付いているインターフェース部651を参照する(ポーリング)。このような参照を行うLRP231は、典型的には、NVMeコマンドの転送をイニシエートできる状態にあるLRP(例えば負荷が所定値より低い状態にあるLRP)である。LRP231は、NVMeキュー220bにNVMeコマンドが存在することを検出した場合、NVMeコマンドの取得リクエストをNVMeキュー制御回路257bに送信する(S71)。
 NVMeキュー制御回路257bは、図示の通り、複数の取得リクエストを同時に受けることがある。複数の取得リクエストを受信した場合、NVMeキュー制御回路257bは、その複数の取得リクエストのうちアービタにより決定した取得リクエストの送信元のLRP231(図8の例ではLRP#3)に対して、NVMeキュー220b内のNVMeコマンドを割り振る。具体的には、例えば、NVMeキュー制御回路257bは、アービタにより決定した取得リクエストの送信元のLRP#3に、成功(Valid)を意味する通知を返し(S73W)、NVMeキュー220bからNVMeコマンドを読み出し(S74)、そのNVMeコマンドをLRP#3に割り振る(S75)。一方、アービタにより決定されなかったLRP#0~#2の各々には、NVMeキュー制御回路257bは、失敗を意味する通知を返す(S73L)
 以上のNVMeキュー制御によれば、複数のLRP231に共通のキュー220bにNVMeコマンドが集約され、NVMeキュー制御回路257bは、NVMeコマンドの転送をイニシエート可能な状態にあるLRP231からのリクエストに応答して、キュー220bからNVMeコマンドを割り振ればよい。このため、負荷の高いLRP231にI/Oコマンドが割り振られるといったことを回避でき、全体として、スループットの向上が期待できる。更に、NVMeキュー制御回路257bは、LRP231からのリクエスト無しにNVMeコマンドを割り振る論理を必要としないので、NVMeキュー制御回路257bの論理(例えばファームウェア)をシンプルな構成にすることが期待できる。
 実施例2を説明する。その際、実施例1との相違点を主に説明し、実施例1との共通点については説明を省略又は簡略する。
 図9は、実施例2に係るFCPキュー制御の概要の一例を示す。
 サーバ装置のCPUにより、1以上のVM(仮想マシン)を実行するハイパバイザが実行される。各VMに、複数のFCPキュー220aのうちの一部のFCPキュー220aが関連付けられる。言い換えれば、各FCPキュー220aに、複数のVM901のうちの一部のVM901が関連付けられる。
 サーバ装置(例えばハイパバイザ)が、いずれかのVM901ら発行されたリクエストに従うFCPコマンドを、FCPドライバ114aに対して発行し、FCPドライバ114aが、そのFCPコマンドを、FCP領域410a内のキュー115a(具体的には、例えば、リクエスト発行元のVMが関連付けられているFCPキュー220aに関連付いたFCPレジスタ211aに対応しているキュー115a)に追加し、そのFCPコマンドのメタ情報を、FCPレジスタ211aに書き込む。FCPキュー制御回路が、そのFCPレジスタ211a内のメタ情報に関連付いているFCPコマンド(VM901からのリクエストに従うコマンド)を、そのFCPレジスタ211aに対応しているFCPキュー220aに追加する。結果として、VM901からのリクエストに従うFCPコマンドは、そのVM901に関連付けられているFCPキュー220aに追加される。
 FCPキュー220aがLRP231毎に存在するので、VM901からのリクエストに従うコマンドは、FCPコマンドであることが好ましい。なぜなら、LRP231毎のFCPキュー220aには、そのFCPキュー220aが関連付けられている一部のVM901からのリクエスト(例えばI/Oリクエスト)に従うコマンド(例えばI/Oコマンド)が追加され、そのFCPキュー220aが関連付けられていないVM901からのリクエストに従うコマンドは追加されることがないため、高いI/Oスループットが期待されるからである。
 以上、幾つかの実施例を説明したが、本発明は、それらの実施例に限定されるものでなく、その趣旨から逸脱しない範囲で、他の様々な形に変更することができる。
 例えば、インターフェースデバイス200はこれまで説明してきたサーバ装置100に含まれる形態ではなく、ストレージ装置300に含まれる形態でもよく、サーバ装置100とストレージ装置300いずれにも含まれない形態であってもよい。
 また、例えば、NVMe領域410b(キュー115bのセット)は、ファンクション毎に存在してもよい。複数のNVMe領域410bにおける複数のキュー115bは、識別番号が重複しないようNVMeキュー制御回路1257bにより再付番される(キュー115bの識別番号の仮想化)。各ファンクションに、複数のLRP231のうち一部のLRPが関連付けられる。例えば、ファンクション#0に、LRP#0及び#2が関連付けられ、ファンクション#1に、LRP#1及び#3が関連付けられる。ファンクション毎にリブート又はリカバリが必要であるが、そのリブート又はリカバリに拘束されるLRPが一部に制限されるので、スループットの低下の回避が期待できる。
100…サーバ装置 200…インターフェースデバイス 300…ストレージ装置

Claims (15)

  1.  複数のノード装置と、
     ノード装置間のコマンド転送を行う転送デバイスと
    を有し、
     前記転送デバイスは、少なくとも1つのノード装置と、前記複数のノード装置の外部とのうちのいずれかに設けられており、
     前記転送デバイスは、
      複数のプロセッサコアと、
      前記複数のプロセッサコアのうちの2以上のプロセッサコアにそれぞれ関連付けられた2以上の第1プロトコルキューと、
      前記複数のプロセッサコアに共通の第2プロトコルキューと
    を有し、
     前記2以上の第1プロトコルキューの各々は、第1プロトコルコマンドとその第1プロトコルコマンドのメタ情報とのうちの少なくとも1つを含んだ情報である第1プロトコルコマンド情報のキューであり、
     前記第2プロトコルキューは、第2プロトコルコマンドとその第2プロトコルコマンドのメタ情報とのうちの少なくとも1つを含んだ情報である第2プロトコルコマンド情報のキューであり、
     前記2以上のプロセッサコアの各々は、そのプロセッサコアに関連付けられている第1プロトコルキューから第1プロトコルコマンド情報を取得し、その取得した情報に含まれている又はその取得した情報内のメタ情報に関連付いた第1プロトコルコマンドを転送することをイニシエートし、
     前記第2プロトコルキューから第2プロトコルコマンド情報を取得したプロセッサコアが、その取得した情報に含まれている又はその取得した情報内のメタ情報に関連付いた第2プロトコルコマンドを転送することをイニシエートし、
     前記第1プロトコルコマンドは、第1プロトコルに従うコマンドであり、
     前記第2プロトコルコマンドは、第2プロトコルに従うコマンドであり、
     前記第2プロトコルは、前記第1プロトコルと異なるプロトコルであって、I/Oコマンドと1種類以上の特殊コマンドとをサポートするプロトコルであり、
     前記1種類以上の特殊コマンドは、I/Oコマンドと異なる1種類以上のコマンドであり、I/Oコマンドよりも転送に多くの処理を必要とするコマンドである高負荷特殊コマンドを含む、
    計算機システム。
  2.  前記複数のノード装置は、サーバ装置とストレージ装置とを含み、
     前記第2プロトコルは、NVMe(NVM-Express(Non-Volatile Memory))であり、
     前記1種類以上の特殊コマンドは、複数種類のAdminコマンドであり、
     前記高負荷特殊コマンドは、Identify Namespace Data Structureコマンドである、
    請求項1記載の計算機システム。
  3.  前記サーバ装置が、前記サーバ装置において1以上の仮想マシンを実行するハイパバイザを実行し、
     前記第1プロトコルは、FCP(Fibre Channel Protocol)であり、
     前記1以上の仮想マシンの各々に、2以上のFCPキューのうちの一部のFCPキューが関連付けられ、
     前記サーバ装置が、いずれかの仮想マシンから発行されたリクエストに従うコマンドを、FCPコマンドとし、
     前記転送デバイスが、そのFCPコマンドを、そのリクエストの発行元の仮想マシンに関連付けられているFCPキューに追加する、
    請求項2記載の計算機システム。
  4.  前記サーバ装置が、NVMeでサポートされていないファンクションの実行のためのFCPコマンドを発行する、
    請求項3記載の計算機システム。
  5.  前記サーバ装置が、メモリと、FCPドライバと、NVMeドライバとを有し、
     前記転送デバイスが、
      前記2以上のプロセッサコアにそれぞれ関連付けられた2以上のレジスタである2以上のFCPレジスタと、
      1以上のNVMeレジスタと
    を有し、
     前記複数のプロセッサコアの各々が、
      前記転送デバイス内のNVMeキューにNVMeコマンド情報があるか否かを監視し、
      前記NVMeキューにNVMeコマンド情報があることを検出した場合、NVMeコマンドの取得リクエストを発行し、
     前記FCPドライバに対するFCPコマンドが前記メモリに書き込まれた場合、
      前記FCPドライバが、そのFCPコマンドのメタ情報を、いずれかのFCPレジスタに書き込み、
      前記転送デバイスが、そのFCPレジスタに書き込まれたFCPコマンドメタ情報に関連付けられているFCPコマンドを前記メモリから読み出し、その読み出したFCPコマンドを、そのFCPレジスタが関連付けられているFCPキューに追加し、そのFCPキューにFCPコマンドを追加したことの通知を、そのFCPキューが関連付けられているプロセッサコアに送信し、
     前記通知を受けたプロセッサコアが、そのプロセッサコアに関連付けられているFCPキューからFCPコマンド情報を取得し、
     前記NVMeドライバに対するNVMeコマンドが前記メモリに書き込まれた場合、
      前記NVMeドライバが、そのNVMeコマンドのメタ情報を、いずれかのNVMeレジスタに書き込み、
      前記転送デバイスが、そのNVMeレジスタに書き込まれたNVMeコマンドメタ情報に関連付けられているNVMeコマンドを前記メモリから読み出し、その読み出したNVMeコマンドを、前記NVMeキューに追加し、
     前記転送デバイスは、複数の取得リクエストから1つの取得リクエストを選択するアービタを有し、
     前記転送デバイスは、2以上の取得リクエストを受信した場合、その2以上の取得リクエストのうち前記アービタにより決定した取得リクエストの送信元のプロセッサコアに対して、前記NVMeキュー内のNVMeコマンド情報を割り振る、
    請求項4記載の計算機システム。
  6.  前記転送レジスタは、
      前記2以上のFCPレジスタを含み前記2以上のFCPキューを制御する制御回路であるFCPキュー制御回路と、
      前記1以上のNVMeレジスタと前記アービタとを含み前記NVMeキューを制御する制御回路であるNVMeキュー制御回路と
    を有し、
     前記1以上のNVMeレジスタの各々は、前記NVMeキュー制御回路に対する割込みを発生するドアベルレジスタであり、
     前記1以上のNVMeレジスタのいずれかにNVMeコマンドメタ情報が書き込まれたことにより発生した割込みに応答して、前記NVMeキュー制御回路は、
      そのNVMeコマンドメタ情報に関連付いているNVMeコマンドを前記メモリから読み出し、
      その読み出されたNVMeコマンドを前記NVMeキューに追加し、
     前記2以上のFCPキューの各々には、FCPコマンドメタ情報が追加されるようになっており、
     前記2以上のプロセッサコアの各々は、
      そのプロセッサコアに関連付けられているFCPキューからFCPコマンドメタ情報を取得し、
      その取得したFCPコマンドメタ情報に関連付いた第1プロトコルコマンドを転送することをイニシエートする、
    請求項5記載の計算機システム。
  7.  前記転送デバイスは、DMA(Direct Memory Access)コントローラを有し、
     第1プロトコルコマンドの転送のイニシエートとは、前記取得したFCPコマンドメタ情報から特定されるアドレスであって、そのFCPコマンドメタ情報に関連付いた第1プロトコルコマンドのアドレスを、前記DMAコントローラに通知することであり、
     前記DMAコントローラは、その通知されたアドレスにある第1プロトコルコマンドであって前記メモリにある第1プロトコルコマンドを読み出す、
    請求項6記載の計算機システム。
  8.  ノード装置間のコマンド転送方法であって、
     いずれかのノード装置に書き込まれた第1プロトコルコマンドとその第1プロトコルコマンドのメタ情報とのうちの少なくとも1つを含んだ情報である第1プロトコルコマンド情報を、コマンド転送をイニシエートする複数のプロセッサコアのうちの2以上のプロセッサコアにそれぞれ関連付けられた2以上の第1プロトコルキューのうちのいずれかに追加し、
     その第1プロトコルキューに関連付けられているプロセッサコアにより、その第1プロトコルキューから第1プロトコルコマンド情報を取得し、その取得した情報に含まれている又はその取得した情報内のメタ情報に関連付いた第1プロトコルコマンドを転送することをイニシエートし、
     いずれかのノード装置に書き込まれた第2プロトコルコマンドとその第2プロトコルコマンドのメタ情報とのうちの少なくとも1つを含んだ情報である第2プロトコルコマンド情報を、前記複数のプロセッサコアに共通の第2プロトコルキューに追加し、
     前記第2プロトコルキューから第2プロトコルコマンド情報を取得したプロセッサコアにより、その取得した情報に含まれている又はその取得した情報内のメタ情報に関連付いた第2プロトコルコマンドを転送することをイニシエートし、
     
    を有し、
     前記2以上の第1プロトコルキューの各々は、のキューであり、
     前記第2プロトコルキューは、のキューであり、
     前記2以上のプロセッサコアの各々は、そのプロセッサコアに関連付けられている第1プロトコルキューから第1プロトコルコマンド情報を取得し、その取得した情報に含まれている又はその取得した情報内のメタ情報に関連付いた第1プロトコルコマンドを転送することをイニシエートし、
     前記第1プロトコルコマンドは、第1プロトコルに従うコマンドであり、
     前記第2プロトコルコマンドは、第2プロトコルに従うコマンドであり、
     前記第2プロトコルは、前記第1プロトコルと異なるプロトコルであって、I/Oコマンドと1種類以上の特殊コマンドとをサポートするプロトコルであり、
     前記1種類以上の特殊コマンドは、I/Oコマンドと異なる1種類以上のコマンドであり、I/Oコマンドよりも転送に多くの処理を必要とするコマンドである高負荷特殊コマンドを含む、
    コマンド転送方法。
  9.  ノード装置間のコマンド転送を行う転送デバイスであって、
     複数のプロセッサコアと、
     前記複数のプロセッサコアのうちの2以上のプロセッサコアにそれぞれ関連付けられた2以上の第1プロトコルキューと、
     前記複数のプロセッサコアに共通の第2プロトコルキューと
    を有し、
     前記2以上の第1プロトコルキューの各々は、第1プロトコルコマンドとその第1プロトコルコマンドのメタ情報とのうちの少なくとも1つを含んだ情報である第1プロトコルコマンド情報のキューであり、
     前記第2プロトコルキューは、第2プロトコルコマンドとその第2プロトコルコマンドのメタ情報とのうちの少なくとも1つを含んだ情報である第2プロトコルコマンド情報のキューであり、
     前記2以上のプロセッサコアの各々は、そのプロセッサコアに関連付けられている第1プロトコルキューから第1プロトコルコマンド情報を取得し、その取得した情報に含まれている又はその取得した情報内のメタ情報に関連付いた第1プロトコルコマンドを転送することをイニシエートし、
     前記第2プロトコルキューから第2プロトコルコマンド情報を取得したプロセッサコアが、その取得した情報に含まれている又はその取得した情報内のメタ情報に関連付いた第2プロトコルコマンドを転送することをイニシエートし、
     前記第1プロトコルコマンドは、第1プロトコルに従うコマンドであり、
     前記第2プロトコルコマンドは、第2プロトコルに従うコマンドであり、
     前記第2プロトコルは、前記第1プロトコルと異なるプロトコルであって、I/Oコマンドと1種類以上の特殊コマンドとをサポートするプロトコルであり、
     前記1種類以上の特殊コマンドは、I/Oコマンドと異なる1種類以上のコマンドであり、I/Oコマンドよりも転送に多くの処理を必要とするコマンドである高負荷特殊コマンドを含む、
    転送デバイス。
  10.  前記複数のノード装置は、サーバ装置とストレージ装置とを含み、
     前記第2プロトコルは、NVMe(NVM-Express(Non-Volatile Memory))であり、
     前記1種類以上の特殊コマンドは、複数種類のAdminコマンドであり、
     前記高負荷特殊コマンドは、Identify Namespace Data Structureコマンドである、
    請求項9記載の転送デバイス。
  11.  前記複数のノード装置は、サーバ装置を含み、
     前記サーバ装置が、前記サーバ装置において1以上の仮想マシンを実行するハイパバイザを実行し、
     前記1以上の仮想マシンの各々に、2以上の第1プロトコルキューのうちの一部の第1プロトコルキューが関連付けられ、
     いずれかの仮想マシンから発行されたリクエストに従うコマンドは、第1プロトコルコマンドであり、
     前記第1プロトコルは、前記第2プロトコルよりもベンダカスタマイズが可能なプロトコルであり、
     前記転送デバイスが、その第1プロトコルコマンドを、そのリクエストの発行元の仮想マシンに関連付けられている第1プロトコルキューに追加する、
    請求項9記載の転送デバイス。
  12.  少なくとも1つの第1プロトコルコマンドが、前記第2プロトコルでサポートされていないファンクションの実行のための第1プロトコルコマンドである、
    請求項9記載の転送デバイス。
  13.  前記2以上のプロセッサコアにそれぞれ関連付けられた2以上のレジスタである2以上の第1プロトコルレジスタを含み前記2以上の第1プロトコルキューを制御する制御回路である第1プロトコルキュー制御回路と、
     1以上の第2プロトコルレジスタを含み前記第2プロトコルキューを制御する制御回路である第2プロトコルキュー制御回路と
    を有し、
     前記複数のプロセッサコアの各々が、
      前記転送デバイス内の第2プロトコルキューに第2プロトコルコマンド情報があるか否かを監視し、
      前記第2プロトコルキューに第2プロトコルコマンド情報があることを検出した場合、第2プロトコルコマンドの取得リクエストを発行し、
     第1プロトコルコマンドのメタ情報がいずれかの第1プロトコルレジスタに書き込まれた場合、前記第1プロトコルキュー制御回路が、
      その第1プロトコルレジスタに書き込まれた第1プロトコルコマンドメタ情報に関連付けられている第1プロトコルコマンドを読み出し、
      その読み出した第1プロトコルコマンドを、その第1プロトコルレジスタに関連付けられている第1プロトコルキューに追加し、
      その第1プロトコルキューに第1プロトコルコマンドを追加したことの通知を、その第1プロトコルキューが関連付けられているプロセッサコアに送信し、
     前記通知を受けたプロセッサコアが、そのプロセッサコアに関連付けられている第1プロトコルキューから第1プロトコルコマンド情報を取得し、
     第2プロトコルコマンドのメタ情報がいずれかの第2プロトコルレジスタに書き込まれた場合、前記第2プロトコルキュー制御回路が、
      その第2プロトコルレジスタに書き込まれた第2プロトコルコマンドメタ情報に関連付けられている第2プロトコルコマンドを読み出し、
      その読み出した第2プロトコルコマンドを、前記第2プロトコルキューに追加し、
     前記第2プロトコルキュー制御回路は、複数の取得リクエストから1つの取得リクエストを選択するアービタを有し、
     前記第2プロトコルキュー制御回路は、2以上の取得リクエストを受信した場合、その2以上の取得リクエストのうち前記アービタにより決定した取得リクエストの送信元のプロセッサコアに対して、前記第2プロトコルキュー内の第2プロトコルコマンド情報を割り振る、
    請求項9記載の転送デバイス。
  14.  前記1以上の第2プロトコルレジスタの各々は、前記第2プロトコルキュー制御回路に対する割込みを発生するドアベルレジスタであり、
     前記1以上の第2プロトコルレジスタのいずれかに第2プロトコルコマンドメタ情報が書き込まれたことにより発生した割込みに応答して、前記第2プロトコルキュー制御回路は、
      その第2プロトコルコマンドメタ情報に関連付いている第2プロトコルコマンドを読み出し、
      その読み出された第2プロトコルコマンドを前記第2プロトコルキューに追加し、
     前記2以上の第1プロトコルキューの各々には、第1プロトコルコマンドメタ情報が追加されるようになっており、
     前記2以上のプロセッサコアの各々は、
      そのプロセッサコアに関連付けられている第1プロトコルキューから第1プロトコルコマンドメタ情報を取得し、
      その取得した第1プロトコルコマンドメタ情報に関連付いた第1プロトコルコマンドを転送することをイニシエートする、
    請求項13記載の転送デバイス。
  15.  DMA(Direct Memory Access)コントローラを有し、
     前記複数のノード装置は、サーバ装置とストレージ装置とを含み、
     前記第1プロトコルは、FCP(Fibre Channel Protocol)であり、
     前記第2プロトコルは、NVMe(NVM-Express(Non-Volatile Memory))であり、
     前記1種類以上の特殊コマンドは、複数種類のAdminコマンドであり、
     第1プロトコルコマンドの転送のイニシエートとは、前記取得した第1プロトコルコマンドメタ情報から特定されるアドレスであって、その第1プロトコルコマンドメタ情報に関連付いた第1プロトコルコマンドのアドレスを、前記DMAコントローラに通知することであり、
     前記DMAコントローラは、その通知されたアドレスにある第1プロトコルコマンドであって前記メモリにある第1プロトコルコマンドを読み出す、
    請求項14記載の転送デバイス。
PCT/JP2015/077694 2015-09-30 2015-09-30 計算機システム、コマンド転送方法、及び、転送デバイス WO2017056220A1 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
PCT/JP2015/077694 WO2017056220A1 (ja) 2015-09-30 2015-09-30 計算機システム、コマンド転送方法、及び、転送デバイス

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2015/077694 WO2017056220A1 (ja) 2015-09-30 2015-09-30 計算機システム、コマンド転送方法、及び、転送デバイス

Publications (1)

Publication Number Publication Date
WO2017056220A1 true WO2017056220A1 (ja) 2017-04-06

Family

ID=58423077

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/JP2015/077694 WO2017056220A1 (ja) 2015-09-30 2015-09-30 計算機システム、コマンド転送方法、及び、転送デバイス

Country Status (1)

Country Link
WO (1) WO2017056220A1 (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112114741A (zh) * 2019-06-20 2020-12-22 株式会社日立制作所 存储系统
JP2021099732A (ja) * 2019-12-23 2021-07-01 株式会社日立製作所 ストレージシステム及びストレージシステムのキュー制御方法
CN113608784A (zh) * 2021-08-19 2021-11-05 湖南国科微电子股份有限公司 NVMe控制装置和方法
TWI764493B (zh) * 2020-06-29 2022-05-11 日商鎧俠股份有限公司 半導體記憶裝置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07105120A (ja) * 1993-10-06 1995-04-21 Oki Electric Ind Co Ltd 入出力制御装置
JP2008134775A (ja) * 2006-11-28 2008-06-12 Hitachi Ltd 記憶サブシステム及びこれを利用したリモートコピーシステム
WO2015008352A1 (ja) * 2013-07-17 2015-01-22 株式会社日立製作所 ストレージ装置及びコマンド制御方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07105120A (ja) * 1993-10-06 1995-04-21 Oki Electric Ind Co Ltd 入出力制御装置
JP2008134775A (ja) * 2006-11-28 2008-06-12 Hitachi Ltd 記憶サブシステム及びこれを利用したリモートコピーシステム
WO2015008352A1 (ja) * 2013-07-17 2015-01-22 株式会社日立製作所 ストレージ装置及びコマンド制御方法

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112114741A (zh) * 2019-06-20 2020-12-22 株式会社日立制作所 存储系统
CN112114741B (zh) * 2019-06-20 2024-05-24 株式会社日立制作所 存储系统
JP2021099732A (ja) * 2019-12-23 2021-07-01 株式会社日立製作所 ストレージシステム及びストレージシステムのキュー制御方法
JP7084374B2 (ja) 2019-12-23 2022-06-14 株式会社日立製作所 ストレージシステム及びストレージシステムのキュー制御方法
TWI764493B (zh) * 2020-06-29 2022-05-11 日商鎧俠股份有限公司 半導體記憶裝置
CN113608784A (zh) * 2021-08-19 2021-11-05 湖南国科微电子股份有限公司 NVMe控制装置和方法
CN113608784B (zh) * 2021-08-19 2024-05-03 湖南国科微电子股份有限公司 NVMe控制装置和方法

Similar Documents

Publication Publication Date Title
JP6181304B2 (ja) ストレージ装置およびインタフェース装置
JP6286542B2 (ja) 計算機システム
US11068171B2 (en) High availability storage access using quality of service based path selection in a storage area network environment
JP6273353B2 (ja) 計算機システム
KR20200017363A (ko) 호스트 스토리지 서비스들을 제공하기 위한 NVMe 프로토콜에 근거하는 하나 이상의 호스트들과 솔리드 스테이트 드라이브(SSD)들 간의 관리되는 스위칭
US9495172B2 (en) Method of controlling computer system and computer system
WO2017056220A1 (ja) 計算機システム、コマンド転送方法、及び、転送デバイス
KR102570943B1 (ko) PCIe 디바이스 및 그 동작 방법
JP6068676B2 (ja) 計算機システム及び計算機システムの制御方法
US11995019B2 (en) PCIe device with changeable function types and operating method thereof
US8694698B2 (en) Storage system and method for prioritizing data transfer access
US20140282584A1 (en) Allocating Accelerators to Threads in a High Performance Computing System
KR102568909B1 (ko) PCIe 펑션 및 그 동작 방법
US10331581B2 (en) Virtual channel and resource assignment
EP3388937A1 (en) Local disks erasing mechanism for pooled physical resources
WO2019043815A1 (ja) ストレージシステム
JP2013054434A (ja) I/o制御装置およびi/o制御方法
WO2016139749A1 (ja) 計算機システム、及び、記憶制御方法
US20070174034A1 (en) Transparent intellectual network storage device
US10713171B2 (en) Computer system
JP2018101440A (ja) 計算機システム
US20220317910A1 (en) Array-based copy mechanism for migration, replication, and backup
WO2016189636A1 (ja) 計算機システム
US20170177485A1 (en) Storage system, storage control method, and relay device

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: 15905374

Country of ref document: EP

Kind code of ref document: A1

NENP Non-entry into the national phase

Ref country code: DE

122 Ep: pct application non-entry in european phase

Ref document number: 15905374

Country of ref document: EP

Kind code of ref document: A1

NENP Non-entry into the national phase

Ref country code: JP