WO2017203645A1 - 計算機システム、及び、データ制御方法 - Google Patents

計算機システム、及び、データ制御方法 Download PDF

Info

Publication number
WO2017203645A1
WO2017203645A1 PCT/JP2016/065532 JP2016065532W WO2017203645A1 WO 2017203645 A1 WO2017203645 A1 WO 2017203645A1 JP 2016065532 W JP2016065532 W JP 2016065532W WO 2017203645 A1 WO2017203645 A1 WO 2017203645A1
Authority
WO
WIPO (PCT)
Prior art keywords
server
address
queue
storage device
offset
Prior art date
Application number
PCT/JP2016/065532
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 US16/083,899 priority Critical patent/US10698634B2/en
Priority to PCT/JP2016/065532 priority patent/WO2017203645A1/ja
Priority to JP2018518877A priority patent/JPWO2017203645A1/ja
Publication of WO2017203645A1 publication Critical patent/WO2017203645A1/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/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • G06F13/1673Details of memory controller using buffers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • 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/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1605Handling requests for interconnection or transfer for access to memory bus based on arbitration
    • 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/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
    • 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/14Handling requests for interconnection or transfer
    • G06F13/36Handling requests for interconnection or transfer for access to common bus or bus system
    • 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/38Information transfer, e.g. on bus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • G06F3/0611Improving I/O performance in relation to response time
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/20Employing a main memory using a specific memory technology
    • G06F2212/202Non-volatile memory

Definitions

  • the present invention relates to data control in a computer system.
  • the computer system includes a server, an IO hub, an IO card connected to the IO hub, a switch to which the server and the IO hub are connected, and the server is configured to be exclusively usable for the IO card. ing.
  • the IO hub assigns a virtual MMIO address unique to the server to a physical MMIO (Memory Mapped Input / Output) address corresponding to the IO card, and the assigned virtual MMIO address, physical MMIO address, and server identifier Assignment information indicating the relationship between the access request and the server, when an access request to the IO card is transmitted from the server, the assignment information is referred to, the server identifier is extracted from the access request, and the access request source server is identified. . Further, the IO hub converts the DMA address included in the DMA (Direct Memory Access) request from the IO card into an address corresponding to the identified server requesting the DMA request, and from the IO card based on the converted address. The transmitted DMA request is transferred to the memory space of the server (Patent Documents 1 and 2).
  • DMA Direct Memory Access
  • the command including the memory address of the server to which the DMA is stored is stored in the memory of the server, and the storage device fetches the command by issuing a read request to the memory of the server. Set in the address register. Further, in the NVMe specification, when a plurality of designated server addresses do not fit in one command, the storage device sequentially fetches the memory addresses of servers in a list form. In such a configuration, it is difficult to convert the DMA address included in the DMA request into an address corresponding to the requesting server on the IO hub as in the conventional technology.
  • the DMA address that must be converted by the IO hub is included in the completion of the read request issued by the storage device, and the IO hub sends the read request sent by the storage device to the data transfer of the IO operation. This is because it must be determined whether it is equivalent to command fetch. In order to realize such a determination on the IO hub, the mechanism of the IO hub is complicated and the latency is increased.
  • an object of the present invention is to realize a computer system in which a plurality of servers share an NVMe-compatible storage device with a relatively simple mechanism, and to suppress an increase in latency.
  • the computer system includes a storage device corresponding to NVMe, an intermediate device connected to the storage device, and a plurality of servers connected to the intermediate device.
  • Each server has a driver related to the storage device and a queue in which commands for the storage device are stored.
  • the server driver converts the memory address of the server into an offset address based on the offset value corresponding to the server, and stores a command including the offset address in the queue.
  • the storage device acquires a command from the server queue and issues an access request to the offset address included in the acquired command.
  • the intermediate device traps the access request issued from the storage device, specifies the server based on the offset address included in the trapped access request, and determines the offset address based on the offset value corresponding to the specified server. Is returned to the original address, and the access request including the restored address is transferred to the specified server.
  • a computer system in which a plurality of servers share a storage device compatible with NVMe can be realized with a relatively simple mechanism, and an increase in latency can be suppressed.
  • the structural example of a computer system is shown.
  • An example of the server configuration is shown.
  • middle apparatus is shown.
  • An overview of IO queue generation processing will be described.
  • the structural example of an IO queue generation command is shown.
  • An overview of IO command issue processing will be described.
  • An overview of IO command execution processing is shown. It is a flowchart which shows an example of the initial setting process of a representative server. It is a flowchart which shows an example of the initial setting process of servers other than a representative server. It is a flowchart which shows an example of IO processing of the server with respect to a memory
  • information may be described in terms of “xxx table”, “xxx queue”, or “xxx list”, but the information may be expressed in any data structure. That is, in order to show that the information does not depend on the data structure, the “xxx table”, “xxx queue”, or “xxx list” can be called “xxx information”.
  • the process may be described using “program” as a subject.
  • the program is executed by a processor (for example, a CPU (Central Processing Unit)), so that a predetermined process is appropriately performed. Since the processing is performed using at least one of a storage resource (for example, a memory) and a communication interface device, the subject of the processing may be a processor and an apparatus having the processor. Part or all of the processing performed by the processor may be performed by a hardware circuit.
  • the computer program may be installed from a program source.
  • the program source may be a program distribution server or a storage medium (for example, a portable storage medium).
  • server 4A when different types of elements are described separately, reference numerals are used, such as “server 4A” and “server 4B”, and the same types of elements are not distinguished. In some cases, only a common number among the reference symbols is used, such as “server”.
  • the constituent elements are not necessarily indispensable unless otherwise specified or apparently indispensable in principle.
  • FIG. 1 shows a configuration example of a computer system 1 according to the embodiment.
  • the computer system 1 has a plurality of servers 4 (first server 4A and second server 4B), an intermediate device 6, and a storage device 8.
  • An example of the storage device 8 is an SSD (Solid State Drive) corresponding to NVMe.
  • the first server 4A and the second server 4B are capable of two-way communication via the predetermined network 3.
  • Examples of the network 3 are WAN (Wide Area Network), LAN (Local Area Network), VPN (Virtual Private Network), and the like.
  • the first server 4A and the second server 4B are connected to the intermediate device 6 so as to be capable of bidirectional communication.
  • the connection method may be PCIe (PCI-Express).
  • the intermediate device 6 is connected to the storage device 8 so as to be capable of bidirectional communication.
  • the connection method may also be PCIe. Details of the intermediate device 6 will be described later (see FIG. 3).
  • FIG. 2 shows a configuration example of the server 4.
  • the server 4 includes a CPU 14, a memory 12, a PCIe card 16, and a NIC (Network Interface Card) 14. These components may be connected by an internal bus 18 capable of bidirectional communication. There may be a plurality of these components.
  • the NIC 14 controls data relating to the IP transmitted and received by the server 4 via the network 3.
  • the PCIe card 16 controls data related to PCIe that the server 4 transmits and receives to and from the intermediate device 6.
  • the PCIe card 16 may include a plurality of PCIe ports.
  • the CPU 10 implements various functions of the server 4 by reading and processing programs and data from the memory 12.
  • the memory 12 stores programs and data. Examples of the memory 12 include DRAM (Dynamic Random Access Memory), MRAM (Magnetic Resistant Random Access Memory), FeRAM (Ferroelectric Random Access Memory), and the like.
  • DRAM Dynamic Random Access Memory
  • MRAM Magnetic Resistant Random Access Memory
  • FeRAM Feroelectric Random Access Memory
  • the memory 12 may store a device driver (represented as “driver”) 100 as a program.
  • the driver 100 provides a function for an application of the server 4 to access the storage device 8.
  • the operation mainly performed by the server 4 in the description of the present embodiment may be performed mainly by the driver 100 of the server 4 or by the CPU 10 that executes the driver 100.
  • the memory 12 may store a QID free list 110 as data.
  • the QID free list 110 has an unassigned (that is, assignable) queue ID (referred to as “QID”).
  • QID queue ID management information.
  • a queue related to NVMe may be configured. Examples of queues are Admin submission Queue (referred to as “Admin SQ”) 120, Admin Completion Queue (referred to as “Admin CQ”) 122, IO submission Queue (referred to as “IO SQ”) 130, and IO Completion Queuing (“IO CompleteQ”). 132.
  • Admin SQ Admin submission Queue
  • Admin CQ Admin Completion Queue
  • IO SQ IO submission Queue
  • IO CompleteQ IO Completion Queuing
  • the buffer 140 may be secured in the memory 12 as necessary.
  • the buffer 140 may store write data for the storage device 8, read data from the storage device 8, or the like.
  • FIG. 3 shows a configuration example of the intermediate device 6.
  • the intermediate device 6 includes a controller 20, a memory 22, and PCIe cards 24A and 24B. These components may be connected by an internal bus 28 capable of bidirectional communication. There may be a plurality of these components.
  • the PCIe card 24 ⁇ / b> A controls data related to PCIe that the intermediate apparatus 6 transmits and receives to and from the server 4.
  • the PCIe card 24 ⁇ / b> B controls data related to PCIe that the intermediate device 6 transmits and receives to and from the storage device 8.
  • the PCIe card 24 may be provided with a plurality of PCIe ports.
  • the controller 20 realizes various functions of the intermediate device 6.
  • the operation mainly performed by the intermediate device 6 may be performed by the controller 20 of the intermediate device 6.
  • the routing management table 200 may be stored in the memory 22 as data. Details of the routing management table 200 will be described later (see FIG. 4).
  • FIG. 4 shows an overview of the IO queue generation process.
  • FIG. 5 shows a configuration example of the IO queue generation command.
  • the server 4 needs to generate an IO queue in the memory 12 in order to exchange IO commands with the NVMe compatible storage device 8.
  • a command for generating the IO queue is an IO queue generation command.
  • the IO queue generation command may include a command ID, a queue base address, a queue size, a NameSpace ID, and a QID (Queue ID).
  • the command ID is an ID for identifying the command.
  • the command ID stores an ID corresponding to “Create IO SQ Command” in the NVMe specification, an ID corresponding to “Create IO CQ Command”, and the like.
  • the queue base address indicates the head address 132 of the IO queue 130 generated in the memory 12.
  • the queue size indicates the size of the IO queue generated in the memory 12.
  • NameSpaceID is an ID for identifying the NameSpace to which the command is issued.
  • QID is an ID for uniquely identifying the IO queue generated in the memory 12.
  • the server 4 can exchange IO data with the storage device 8 by generating an IO queue in the memory 12 and issuing an IO queue generation command to the storage device 8. Issuing an IO queue generation command to the storage device 8 is performed through Admin SQ.
  • Admin SQ the number of servers 4 that can generate the Admin SQ, respectively.
  • the computer system 1 has a configuration in which one server among the plurality of servers 4 represents the IO queue generation command to the storage device 8 as a representative.
  • one server among the plurality of servers 4 represents the IO queue generation command to the storage device 8 as a representative.
  • an outline of processing for generating an IO queue in the second server 4B when the first server 4A is a representative server and the second server 4B is a server other than the representative will be described with reference to FIG.
  • the driver 100 of the second server 4B generates “Create IO SQ Command” 400B.
  • the driver 100 of the second server 4B adds an offset value associated with the second server 4B to the queue base address 132B of the IO SQ 130B generated in the memory 12B of the second server 4B. (Referred to as “offset address”) may be stored in the queue base address 420 of the “Create IO SQ Command” 400B.
  • Each server may be associated with an offset value that can uniquely identify the server.
  • “0x0000_0000_0000_C000” corresponds to the queue base address 132B of the IO SQ 130B generated in the memory 12B
  • “0x8002_0000_0000_0000” corresponds to the offset value associated with the second server 4B
  • “0x8002_0000_0000_C000” corresponds to the offset value associated with the second server 4B
  • “0x8002_0000_0000_C000” corresponds to the offset address obtained by adding them.
  • the offset value may be expressed only by the head address (0x8002).
  • the actual queue base address 132B of the IO SQ 130B generated in the memory 12B may be expressed as a “queue real address”
  • an offset address obtained by adding an offset value to the real address may be expressed as a “queue offset address”.
  • an offset value for adding and subtracting the upper 16 bits of the 64-bit memory space is used.
  • Such a value may be used.
  • the driver 100 of the second server 4B may store a dummy QID (eg, “0x00”) in the QID 422B of the “Create IO SQ Command” 400B.
  • the regular QID is assigned by the first server that is the representative server.
  • the driver 100 of the second server 4B requests the first server 4A, which is the representative server, to issue the generated “Create IO SQ Command” 400B.
  • the driver 100 of the second server 4B may transmit the “Create IO SQ Command” 400B to the first server 4A as it is, or issue a command issuance request including the content of “Create IO SQ Command” as the first. You may transmit to the server 4A.
  • the driver 100 of the first server 4A Upon receiving the “Create IO SQ Command” 400B from the second server 4B, the driver 100 of the first server 4A receives one of the QIDs in the QID free list 110 for the “Create IO SQ Command” 400B. Assign. In the example of FIG. 4, the dummy QID 422B “0x00” is replaced with the QID “0x02” in the QID free list 110.
  • the driver 100 of the first server 4A enqueues the “Create IO SQ Command” 400B in the Admin SQ 120 of the memory 12A of the first server 4A.
  • the driver 100 of the first server 4A updates the Doorbell register related to the Admin SQ 120 of the storage device 8.
  • the storage device 8 When the storage device 8 detects the update of the Doorbell register related to the Admin SQ 120 of (A4), the storage device 8 issues a read request for fetching “Create IO SQ Command” 400B from the Admin SQ 120 of the first server 4A. At this time, the storage device 8 may include the offset address of the Admin SQ 120 in the read request.
  • the offset address of the Admin SQ 120 may be an address obtained by adding the offset value (0x8000) associated with the first server 4A to the real address of the Admin SQ 120 of the first server 4A.
  • the offset address of the Admin SQ 120 may be transmitted to the storage device 8 when the first server 4A generates the Admin SQ 120, and may be registered in the internal register 220 of the storage device 8.
  • the intermediate device 6 traps the read request issued from the storage device 8. Then, the intermediate device 6 refers to the routing management table 200 and specifies that the routing destination of the read request is the first server 4A from the offset value (0x8000) of the offset address included in the read request. Then, the intermediate device 6 converts the offset address of the read request into a real address and transfers it to the first server 4A. Converting the offset address to the real address may be subtracting the offset value from the offset address. Alternatively, the offset value of the offset address may be “NULL”. The same applies to other conversions.
  • the first server 4A receives the read request of (A7), and returns the “Create IO SQ Command” 400B in the Admin SQ120 stored in the real address included in the read request to the storage device 8. .
  • the storage device 8 acquires “Create IO SQ Command” 400B of (A8), associates the QID and the offset address included in the command, and registers them in the internal register 220.
  • this offset address is an address obtained by adding the offset value (0x8002) associated with the second server 4B to the real address 132B of the IO SQ 130 generated in the memory 12B of the second server 4B.
  • the driver 100 of the first server 4A may notify the second server 4B of the QID assigned to the dummy QID of the “Create IO SQ Command” of the second server 4B at a predetermined timing. For example, notification may be made at the timing of receiving “Command Completion” corresponding to “Create IO SQ Command” or the timing after execution of (A3) above.
  • the offset address of the IO queue generated in the memory of the server other than the representative server can be registered in the storage device 8.
  • the representative server when registering the offset address of the IO queue generated in the memory of the representative server in the storage device 8, the representative server generates “Create IO SQ Command” including the offset address and stores it in the Admin SQ 120 of its own memory. Enqueue.
  • “Create IO SQ Command” has been described above, the same applies to “Create IO CQ Command” and the like.
  • FIG. 6 shows an overview of the IO command issue processing.
  • the server 4 issues an IO command to the NVMe compatible storage device 8 by enqueuing the IO command to the IO queue generated in the memory 12.
  • IO commands are “Write Command” and “Read Command” in the NVMe specification.
  • the driver 100 of the second server 4B generates a “Read Command” 402.
  • the driver 100 of the second server 4B uses an offset value (0x8002) associated with the second server 4B with respect to the base address of the buffer 140B reserved for storing Read data in the memory 12B of the second server 4B.
  • the “Read Command” 402 may include the offset address 430 obtained by adding “”.
  • “0x0000_0000_0000_A000” corresponds to the base address of the buffer 140B secured in the memory 12B
  • “0x8002_0000_0000_A000” corresponds to the offset address 430 of the buffer added with the offset value.
  • the actual base address of the buffer 140B secured in the memory 12B may be expressed as “buffer actual address”
  • the address obtained by adding the offset value to the base address of the buffer 140B may be expressed as “buffer offset address”.
  • the driver 100 of the second server 4B may include the QID 432 (“0x02” in the example of FIG. 6) corresponding to the IO SQ 130B of the second server 4B in the “Read Command” 402.
  • the driver 100 of the second server 4B updates the Doorbell register related to the IO SQ130B of the second server 4B of the storage device 8.
  • the storage device 8 When the storage device 8 detects the update of the Doorbell register related to the IO SQ 130B of (B3), the storage device 8 issues a read request for fetching the “Read Command” 402 from the IO SQ 130B of the second server 4B. At this time, the storage device 8 may include the offset address of the IO SQ 130B in the read request.
  • the offset address of the IO SQ 130B may be an address obtained by adding the offset value (0x8002) associated with the second server 4B to the real address of the IO SQ 130B of the second server 4B.
  • the offset address of the IO SQ 130B may be transmitted to the storage device 8 when the second server 4B generates the IO SQ 130B, and may be registered in the internal register 220 of the storage device 8.
  • the intermediate device 6 traps the read request issued from the storage device 8. Then, the intermediate device 6 refers to the routing management table 200 and specifies that the routing destination of the read request is the second server 4B from the offset value (0x8002) of the offset address included in the read request. Then, the intermediate device 6 converts the offset address of the read request into a real address and transfers it to the second server 4B.
  • the second server 4B receives the read request of (B5), and returns the “Read Command” 402B in the IO SQ 130B stored in the real address included in the read request to the storage device 8. The subsequent processing will be described below with reference to FIG.
  • FIG. 7 shows an overview of IO command execution processing.
  • the storage device 8 acquires the “Read Command” 402B in (B6) above, and registers the offset address of the buffer 140B included in the “Read Command” 402B in the internal register 240.
  • the storage device 8 sends the read data to the offset address of the buffer 140B.
  • the intermediate device 6 traps the read data sent from the storage device 8. Then, the intermediate device 6 refers to the routing management table 200 and identifies the routing destination as the second server 4B from the offset value (0x8002) in the offset address of the buffer 140B that is the destination of the read data. Then, the intermediate device 6 converts the destination of the read data from the offset address of the buffer 140B to the real address and transfers it to the second server 4B.
  • the write data stored in the buffer 140B is transferred to the storage device 8 and written therein.
  • the driver 100 of the second server 4B can read data from the storage device 8 or write data to the storage device 8.
  • FIG. 8 is a flowchart showing an example of the initial setting process of the representative server.
  • the first server 4A which is the representative server, generates Admin SQ120 and Admin CQ122, and IO SQ130 and IO CQ132 in its own memory 12A by the initialization setting process. Details will be described below.
  • the driver 100 of the first server 4A generates an Admin CQ 122 in the memory 12A (S100).
  • the driver 100 of the first server 4A adds the offset value (0x8000) associated with the first server 4A to the generated actual address of the Admin CQ 122, and calculates the offset address of the Admin CQ 122. Then, the driver 100 of the first server 4A transmits the offset address of the Admin CQ 122 to the storage device 8 (S102).
  • the storage device 8 registers the offset address of the transmitted Admin CQ 122 in the internal register 220 (S104).
  • the driver 100 and the storage device 8 of the first server 4A perform the same processing as S100 and S102 on the Admin SQ 120 (S110).
  • the driver 100 of the first server 4A generates an IO CQ 132 in the memory 12B (S116).
  • the driver 100 of the first server 4A selects one QID from the QID free list 110. Then, the driver 100 of the first server 4A deletes the selected QID from the QID free list 110 (S118).
  • the driver 100 of the first server 4A adds the offset value (0x8000) associated with the first server 4A to the generated real address of the IO CQ 132, and calculates the offset address of the IO CQ 132. Then, the driver 100 of the first server 4A generates “Create IO CQ Command” including the calculated offset address and the QID selected in S118 (S120).
  • the driver 100 of the first server 4A enqueues the generated “Create IO CQ Command” in the Admin SQ 120 (S122).
  • the driver 100 of the first server 4A updates the Doorbell register related to the Admin SQ 120 in the storage device 8 (S124).
  • the tail address at this time may be an address obtained by adding an offset address. The same applies to the update of the other Doorbell registers.
  • the storage device 8 When the storage device 8 detects the update of the Doorbell register, the storage device 8 issues a read request for fetching “Create IO CQ Command” from the Admin SQ 120 (S144).
  • the intermediate device 6 traps the S144 read request issued from the storage device 8. Then, the intermediate device 6 refers to the routing management table 200 and specifies that the offset value (0x8000) of the offset address included in the read request is associated with the first server 4A. Then, the intermediate device 6 converts the offset address into a real address. For example, the offset value (0x8000) is subtracted from the offset address. Then, the intermediate device 6 transfers the read request after the conversion to the identified first server 4A (S146).
  • the first server 4A Upon receiving the transferred read request, the first server 4A returns “Create IO CQ Command” from the Admin SQ 120 related to the real address to the storage device 8 (S148).
  • the storage device 8 executes the returned “Create IO CQ Command” (S150). That is, the storage device 8 registers the QID included in “Create IO CQ Command” and the offset address of the IO CQ 132 in association with each other in the internal register 220.
  • the storage device 8 issues “Command Completion” to the Admin CQ 122 of the first server 4A (S152).
  • the destination address of this “Command Completion” is an offset address corresponding to Admin CQ122.
  • Intermediate device 6 traps the “Command Completion”. Then, the intermediate device 6 refers to the routing management table 200 and specifies that the offset value (0x8000) of the offset address that is the destination address of the “Command Completion” is associated with the first server 4A. Then, the intermediate device 6 converts the offset address of “Command Completion” into a real address. Then, the intermediate device 6 transfers the “Command Completion” after the conversion to the identified first server 4A (S154).
  • the driver 100 of the first server 4A dequeues the “Command Completion” from the Admin CQ 122 and completes the execution of the “Create IO CQ Command” enqueued in S122 (S156).
  • the driver 100 and the storage device 8 of the first server 4A execute the same processing as S116 to S156 on the IO SQ130 (S160).
  • Admin CQ 122, Admin SQ 120, IO CQ 132, and IO SQ 130 are generated in the memory 12A of the first server 4A. Also, QIDs and offset addresses are registered in the internal register 220 of the storage device 8 for the Admin CQ 122, the Admin SQ 120, the IO CQ 132, and the IO SQ 130, respectively.
  • FIG. 9 is a flowchart showing an example of an initial setting process for servers other than the representative server.
  • the second server 4B which is a server other than the representative server, generates the IO SQ 130 and the IO CQ 132 in its own memory 12B by the initial setting process. Details will be described below.
  • the driver 100 of the second server 4B generates an IO CQ 132 in the memory 12B (S200).
  • the driver 100 of the second server 4B adds the offset value (0x8002) associated with the second server 4B to the generated real address of the IO CQ 132, and calculates the offset address of the IO CQ 132. Then, the driver 100 of the second server 4B creates “Create IO CQ Command” including the offset address and the dummy QID (S202).
  • the driver 100 of the second server 4B transmits an execution request for “Create IO CQ Command” created in S202 to the first server 4A, which is a representative server (S204).
  • the driver 100 of the first server 4A When the driver 100 of the first server 4A receives the execution request of S204, the driver 100 selects one QID from the QID free list 110. Then, the driver 100 of the first server 4A deletes the selected QID from the QID free list 110. Then, the driver 100 of the first server 4A replaces the dummy QID of the “Create IO CQ Command” requested for execution with the selected QID (S208).
  • the driver 100 of the first server 4A enqueues the “Create IO CQ Command” in the Admin SQ 120 (S210).
  • the driver 100, the intermediate device 6, and the storage device 8 of the first server 4A perform the same processing as S116 to S156 of FIG. 8 (S212). Thereby, the offset address of the IO CQ 132 of the memory 12B of the second server 4B and the QID are associated with each other and registered in the internal register 220 of the storage device 8.
  • the driver 100 of the first server 4A receives “Command Completion” corresponding to “Create IO CQ Command” from the intermediate device 6 and transmits it to the driver 100 of the second server 4B (S214).
  • This “Command Completion” may include the QID selected in S208.
  • the driver 100 of the second server 4B receives this “Command Completion” and completes the processing of “Create IO CQ Command”.
  • the driver 100 of the second server 4B also generates an IO SQ 130 by the same processing as S200 to S214 (S240).
  • the IO CQ 132 and the IO SQ 132 are generated in the memory 12B of the second server 4B.
  • FIG. 10 is a flowchart showing an example of server IO processing for the storage device 8.
  • the driver 100 of the second server 4B secures the buffer 140 in the memory 12B (S300).
  • the driver 100 of the second server 4B adds the offset value (0x8002) associated with the second server 4B to the real address of the reserved buffer 140 to calculate the offset address of the buffer 140. Then, the driver 100 of the second server 4B creates “IO Command” including the offset address of the buffer 140 (S302). This “IO Command” may be “Read Command” or “Write Command”.
  • the driver 100 of the second server 4B enqueues the created “IO Command” in the IO SQ 130B of its own memory 12B (S304).
  • the driver 100 of the second server 4B updates the Doorbell register related to the IO SQ 130B in the storage device 8 (S306).
  • the storage device 8 When the storage device 8 detects the update of the Doorbell register, it issues a read request for fetching “IO Command” from the IO SQ 130B (S310).
  • the intermediate device 6 traps the read request of S310 issued from the storage device 8. Then, the intermediate device 6 refers to the routing management table 200 and specifies that the offset value (0x8002) of the offset address included in the read request is associated with the second server 4B. Then, the intermediate device 6 converts the offset address into a real address. Then, the intermediate device 6 transfers the converted read request to the specified second server 4B (S312).
  • the second server 4B When the second server 4B receives the transferred read request, the second server 4B returns the “IO Command” in the IO SQ 130B stored in the real address to the storage device 8 (S314).
  • the storage device 8 executes the returned “IO Command” (S316). That is, when the “IO Command” is “Read Command”, the storage device 8 attempts to write the read data to the offset address buffer of the second server 4B. When “IO Command” is “Write Command”, the storage device 8 attempts to read the write data from the offset address buffer of the second server 4B.
  • the intermediate device 6 traps access to the offset address of the buffer 140B of the second server 4B from the storage device 8 in S316. Then, the intermediate device 6 refers to the routing management table 200 and specifies that the offset value (0x8002) of the offset address included in the access is associated with the second server 4B. Then, the intermediate device 6 converts the offset address included in the access into a real address. Then, the intermediate device 6 transfers the converted access to the specified second server 4B (S318). Thereby, when “IO Command” is “Read Command”, the read data is stored in the buffer 140B of the second server 4B. When “IO Command” is “Write Command”, the write data stored in the buffer 140B of the second server 4B is acquired by the storage device 8.
  • the storage device 8 issues “Command Completion” to the IO CQ 132B of the second server 4B after completing the execution of “IO Command” (S320).
  • Intermediate device 6 traps “Command Completion” in S320. Then, the intermediate device 6 refers to the routing management table 200 and specifies that the offset value (0x8002) of the offset address that is the destination address of the “Command Completion” is associated with the second server 4B. Then, the intermediate device 6 converts the offset address that is the destination of the “Command Completion” into a real address. Then, the intermediate device 6 transfers the “Command Completion” after the conversion to the specified second server (S322).
  • the driver 100 of the second server 4B dequeues the “Command Completion” from the IO CQ 132B, and completes the execution of the “IO Command” enqueued in S304 (S324).
  • the second server 4B can read data from the storage device 8 or write data to the storage device 8.
  • the offset value may be subtracted from the actual address to convert to the offset address, and the offset value may be added to the offset address to return to the actual address.

Abstract

サーバのドライバは、当該サーバの有するメモリのアドレスを、当該サーバに対応するオフセット値に基づいて、オフセットアドレスに変換し、そのオフセットアドレスを含むコマンドをキューに格納する。記憶装置は、サーバのキューからコマンドを取得し、その取得したコマンドに含まれるオフセットアドレスに対してアクセス要求を発行する。中間装置は、記憶装置から発行されたアクセス要求をトラップし、そのトラップしたアクセス要求に含まれるオフセットアドレスに基づいてサーバを特定し、その特定したサーバに対応するオフセット値に基づいて、そのオフセットアドレスを元のアドレスに戻し、その元に戻したアドレスを含むアクセス要求を、その特定したサーバへ転送する。

Description

計算機システム、及び、データ制御方法
 本発明は、計算機システムにおけるデータ制御に関する。
 複数のサーバが記憶装置を共有する計算機システムにおいて、サーバと記憶装置との間のIO(Input/Output)を振り分ける技術として、次のような技術が知られている。計算機システムは、サーバと、IOハブと、当該IOハブに接続されているIOカードと、サーバ及びIOハブが接続されているスイッチとを備え、サーバがIOカードを専有して使用可能に設定されている。そして、IOハブが、IOカードに対応する物理MMIO(Memory Mapped Input/Output)アドレスに対してサーバに固有な仮想MMIOアドレスを割り当て、その割り当てられた仮想MMIOアドレスと、物理MMIOアドレスと、サーバ識別子との関係を示す割り当て情報を保持し、サーバからIOカードへのアクセス要求が送信されたときに、割り当て情報を参照して、アクセス要求からサーバ識別子を抽出し、アクセス要求元のサーバを識別する。さらにIOハブが、IOカードからのDMA(Direct Memory Access)要求に含まれるDMAアドレスを、識別されたDMA要求元のサーバに対応したアドレスに変換し、その変換したアドレスに基づいて、IOカードから送信されたDMA要求をサーバのメモリ空間に転送する(特許文献1、2)。
特開2008-21252号公報 特開2007-148621号公報
 しかし、上記の従来技術を、NVMe(Non-Volatile Memory Express)対応の記憶装置を備える計算機システムに適用した場合、記憶装置のIO性能を十分に発揮させることができない。以下にその理由を述べる。
 NVMeの仕様では、DMA先のサーバのメモリアドレスを含むコマンドは、サーバのメモリに格納されており、記憶装置は、サーバのメモリに対してリードリクエストを発行することによりコマンドをフェッチし、内部のアドレスレジスタに設定する。また、NVMeの仕様では、指定された複数のサーバアドレスが1つのコマンドに収まらない場合、記憶装置は、リスト状になったサーバのメモリアドレスを次々とフェッチする。このような構成では、従来技術のようにIOハブ上でDMA要求に含まれるDMAアドレスを要求元サーバに対応したアドレスに変換することは、困難である。なぜならば、IOハブが変換しなければならないDMAアドレスは、記憶装置が発行したリードリクエストに対するコンプリーションの中に含まれることとなり、IOハブは記憶装置が送出した前記リードリクエストがIO動作のデータ転送なのか、コマンドフェッチに相当するものなのかを判断しなければならないからである。このような判断をIOハブ上で実現するためには、IOハブの機構が複雑になる上、レイテンシの増大も招く。
 そこで、本発明の目的は、複数のサーバがNVMe対応の記憶装置を共有する計算機システムを比較的簡易な機構で実現し、レイテンシの増大を抑制することにある。
 実施形態に係る計算機システムは、NVMeに対応する記憶装置と、記憶装置と接続されている中間装置と、中間装置と接続されている複数のサーバと、を有する。
 各サーバは、記憶装置に係るドライバと、記憶装置に対するコマンドが格納されるキューと、を有する。
 サーバのドライバは、当該サーバの有するメモリのアドレスを、当該サーバに対応するオフセット値に基づいてオフセットアドレスに変換し、そのオフセットアドレスを含むコマンドをキューに格納する。
 記憶装置は、サーバのキューからコマンドを取得し、その取得したコマンドに含まれるオフセットアドレスに対してアクセス要求を発行する。
 中間装置は、記憶装置から発行されたアクセス要求をトラップし、そのトラップしたアクセス要求に含まれるオフセットアドレスに基づいてサーバを特定し、その特定したサーバに対応するオフセット値に基づいて、そのオフセットアドレスを元のアドレスに戻し、その元に戻したアドレスを含むアクセス要求を、その特定したサーバへ転送する。
 本発明によれば、複数のサーバがNVMe対応の記憶装置を共有する計算機システムを比較的簡易な機構で実現し、レイテンシの増大を抑制することができる。
計算機システムの構成例を示す。 サーバの構成例を示す。 中間装置の構成例を示す。 IOキュー生成処理の概要を示す。 IOキュー生成コマンドの構成例を示す。 IOコマンド発行処理の概要を示す。 IOコマンド実行処理の概要を示す。 代表サーバの初期設定処理の一例を示すフローチャートである。 代表サーバ以外のサーバの初期設定処理の一例を示すフローチャートである。 記憶装置に対するサーバのIO処理の一例を示すフローチャートである。
 以下、実施形態を説明する。
 以下の説明では、「xxxテーブル」、「xxxキュー」又は「xxxリスト」の表現にて情報を説明することがあるが、情報は、どのようなデータ構造で表現されていてもよい。すなわち、情報がデータ構造に依存しないことを示すために、「xxxテーブル」、「xxxキュー」又は「xxxリスト」を「xxx情報」と呼ぶことができる。
 また、以下の説明では、「プログラム」を主語として処理を説明する場合があるが、プログラムは、プロセッサ(例えばCPU(Central Processing Unit))によって実行されることで、定められた処理を、適宜に記憶資源(例えばメモリ)及び通信インターフェイスデバイスのうちの少なくとも1つを用いながら行うため、処理の主語が、プロセッサ、そのプロセッサを有する装置とされてもよい。プロセッサが行う処理の一部又は全部が、ハードウェア回路で行われてもよい。コンピュータプログラムは、プログラムソースからインストールされてよい。プログラムソースは、プログラム配布サーバ又は記憶メディア(例えば可搬型の記憶メディア)であってもよい。
 また、以下の説明では、同種の要素を区別して説明する場合には、「サーバ4A」、「サーバ4B」のように、参照符号を使用し、同種の要素を区別しないで説明する場合には、「サーバ」のように参照符号のうちの共通番号のみを使用することがある。
 なお、以下の実施形態においては便宜上その必要があるときは、複数のセクションまたは実施の形態に分割して説明するが、特に明示した場合を除き、それらはお互いに無関係なものではなく、一方は他方の一部または全部の変形例、詳細、補足説明などの関係にある。
 また、以下の実施形態において、要素の数等(個数、数値、量、範囲等を含む)に言及する場合、特に明示した場合及び原理的に明らかに特定の数に限定される場合などを除き、その特定の数に限定されるものではなく、特定の数以上でも以下でも良いものとする。
 さらに、以下の実施形態において、その構成要素(要素ステップなどを含む)は、特に明示した場合及び原理的に明らかに必須であると考えられる場合などを除き、必ずしも必須のものではない。
 図1は、実施形態に係る計算機システム1の構成例を示す。
 計算機システム1は、複数のサーバ4(第1サーバ4A及び第2サーバ4B)と、中間装置6と、記憶装置8とを有する。記憶装置8の例は、NVMeに対応するSSD(Solid State Drive)である。中間装置6及び記憶装置8は、複数であってもよい。
 第1サーバ4A及び第2サーバ4Bは、所定のネットワーク3を介して、双方向通信可能である。ネットワーク3の例は、WAN(Wide Area Network)、LAN(Local Area Network)、及びVPN(Virtual Private Network)などである。
 第1サーバ4A及び第2サーバ4Bは、中間装置6と双方向通信可能に接続されている。当該接続方式はPCIe(PCI-Express)であってよい。
 中間装置6は、記憶装置8と双方向通信可能に接続されている。当該接続方式もPCIeであってよい。中間装置6の詳細については後述する(図3参照)。
 図2は、サーバ4の構成例を示す。
 サーバ4は、CPU14と、メモリ12と、PCIeカード16と、NIC(Network Interface Card)14とを有する。これらの構成要素は、双方向通信可能な内部バス18で接続されてよい。これらの構成要素は、複数であってもよい。
 NIC14は、サーバ4がネットワーク3を介して送受信するIPに係るデータを制御する。
 PCIeカード16は、サーバ4が中間装置6と送受信するPCIeに係るデータを制御する。PCIeカード16は、複数のPCIeポートを備えてよい。
 CPU10は、メモリ12からプログラム及びデータを読み出して処理することにより、サーバ4の有する様々な機能を実現する。
 メモリ12には、プログラム及びデータが格納される。メモリ12の例は、DRAM(Dynamic Random Access Memory)、MRAM(Magnetoresistive Random Access Memory)、FeRAM(Ferroelectric Random Access Memory)などである。
 メモリ12には、プログラムとして、デバイスドライバ(「ドライバ」と表現する)100が格納されてよい。ドライバ100は、サーバ4のアプリケーションが記憶装置8にアクセスするための機能を提供する。本実施形態の説明におけるサーバ4が主体の動作は、サーバ4のドライバ100が主体であってよいし、そのドライバ100を実行するCPU10が主体であってもよい。
 メモリ12には、データとして、QIDフリーリスト110が格納されてよい。QIDフリーリスト110は、未割り当ての(つまり割り当て可能な)キューのID(「QID」という)を有する。QIDフリーリスト110は、キューID管理情報と表現してもよい。
 メモリ12には、NVMeに係るキューが構成されてよい。キューの例は、Admin Submission Queue(「Admin SQ」という)120、Admin Completion Queue(「Admin CQ」という)122、IO Submission Queue(「IO SQ」という)130、IO Completion Queue(「IO CQ」という)132である。
 メモリ12には、必要に応じてバッファ140が確保されてよい。バッファ140には、記憶装置8に対するライトデータ、又は、記憶装置8からのリードデータなどが格納されてよい。
 図3は、中間装置6の構成例を示す。
 中間装置6は、コントローラ20と、メモリ22と、PCIeカード24A、24Bとを有する。これらの構成要素は、双方向通信可能な内部バス28で接続されてよい。これらの構成要素は、複数であってもよい。
 PCIeカード24Aは、中間装置6がサーバ4と送受信するPCIeに係るデータを制御する。PCIeカード24Bは、中間装置6が記憶装置8と送受信するPCIeに係るデータを制御する。PCIeカード24には、複数のPCIeポートが備えられてよい。
 コントローラ20は、中間装置6の有する様々な機能を実現する。本実施形態における中間装置6が主体の動作は、中間装置6のコントローラ20が主体であってよい。
 メモリ22には、データとして、ルーティング管理テーブル200が格納されてよい。ルーティング管理テーブル200の詳細については後述する(図4参照)。
 図4は、IOキュー生成処理の概要を示す。図5は、IOキュー生成コマンドの構成例を示す。
 サーバ4は、NVMe対応の記憶装置8とIOコマンドをやり取りするために、メモリ12にIOキューを生成する必要がある。そのIOキューを生成するためのコマンドが、IOキュー生成コマンドである。
 IOキュー生成コマンドには、図5に示すように、コマンドID、キューベースアドレス、キューサイズ、NameSpaceID、QID(QueueID)が含まれてよい。
 コマンドIDは、当該コマンドを識別するためのIDである。当該コマンドIDには、NVMe仕様における「Create IO SQ Command」に対応するIDや、「Create IO CQ Command」に対応するIDなどが格納される。
 キューベースアドレスは、メモリ12に生成されたIOキュー130の先頭アドレス132を示す。
 キューサイズは、メモリ12に生成されたIOキューのサイズを示す。
 NameSpaceIDは、コマンドの発行先のNameSpaceを識別するためのIDである。
 QIDは、メモリ12に生成されたIOキューを一意に識別するためのIDである。
 サーバ4は、メモリ12にIOキューを生成し、記憶装置8に対してIOキュー生成コマンドを発行することにより、記憶装置8とIOデータをやり取りできるようになる。記憶装置8に対するIOキュー生成コマンドの発行は、Admin SQを通じて行われる。しかし、NVMe仕様では、記憶装置8は1つのAdmin SQしか管理しないので、複数のサーバ4が、それぞれ、Admin SQを生成することはできない。
 そこで、本実施形態に係る計算機システム1は、複数のサーバ4のうち1つのサーバが代表して、記憶装置8に対してIOキュー生成コマンドを発行する構成を有する。以下、図4を参照しながら、第1サーバ4Aが代表サーバ、第2サーバ4Bが代表以外のサーバである場合における、第2サーバ4BにIOキューを生成する処理の概要を述べる。
 (A1)第2サーバ4Bのドライバ100は、「Create IO SQ Command」400Bを生成する。このとき、第2サーバ4Bのドライバ100は、第2サーバ4Bのメモリ12Bに生成されたIO SQ130Bのキューベースアドレス132Bに対して、第2サーバ4Bに対応付けられているオフセット値を加算したアドレス(「オフセットアドレス」という)を、当該「Create IO SQ Command」400Bのキューベースアドレス420に格納してよい。なお、各サーバには、そのサーバを一意に識別可能なオフセット値が対応付けられてよい。
 図4の例では、「0x0000_0000_0000_C000」がメモリ12Bに生成されたIO SQ130Bのキューベースアドレス132Bに相当し、「0x8002_0000_0000_0000」が第2サーバ4Bに対応付けられているオフセット値に相当し、「0x8002_0000_0000_C000」がそれらを加算したオフセットアドレスに相当する。本実施形態において、オフセット値を先頭のアドレス(0x8002)のみで表現することがある。また、メモリ12Bに生成したIO SQ130Bの実際のキューベースアドレス132Bを「キューの実アドレス」、実アドレスにオフセット値を加算したオフセットアドレスを「キューのオフセットアドレス」と表現してもよい。
 また、本実施形態では、64ビットのメモリ空間の上位16ビットに対して加算及び減算を行うオフセット値を用いているが、物理的に搭載されているメモリ領域と重複しない限り、オフセット値はどのような値であってもよい。
 また、第2サーバ4Bのドライバ100は、「Create IO SQ Command」400BのQID422Bに、ダミーのQID(例えば「0x00」)を格納してよい。この場合、正規のQIDは、代表サーバである第1サーバで付与される。
 (A2)第2サーバ4Bのドライバ100は、その生成した「Create IO SQ Command」400Bの発行を、代表サーバである第1サーバ4Aに依頼する。このとき、第2サーバ4Bのドライバ100は、「Create IO SQ Command」400Bをそのまま第1サーバ4Aへ送信しても良いし、「Create IO SQ Command」の内容を含むコマンドの発行依頼を第1サーバ4Aへ送信してもよい。
 (A3)第1サーバ4Aのドライバ100は、第2サーバ4Bから「Create IO SQ Command」400Bを受領すると、その「Create IO SQ Command」400Bに対して、QIDフリーリスト110内のQIDの1つを割り当てる。図4の例では、ダミーのQID422B「0x00」を、QIDフリーリスト110内のQID「0x02」に置き換えている。
 (A4)第1サーバ4Aのドライバ100は、その「Create IO SQ Command」400Bを、当該第1サーバ4Aのメモリ12AのAdmin SQ120にエンキューする。
 (A5)第1サーバ4Aのドライバ100は、記憶装置8のAdmin SQ120に係るDoorbellレジスタを更新する。
 (A6)記憶装置8は、(A4)のAdmin SQ120に係るDoorbellレジスタの更新を検知すると、第1サーバ4AのAdmin SQ120から「Create IO SQ Command」400Bをフェッチするためのリードリクエストを発行する。このとき記憶装置8は、当該リードリクエストに、Admin SQ120のオフセットアドレスを含めてよい。Admin SQ120のオフセットアドレスは、第1サーバ4AのAdmin SQ120の実アドレスに、第1サーバ4Aに対応付けられているオフセット値(0x8000)を加算したアドレスであってよい。Admin SQ120のオフセットアドレスは、第1サーバ4AがAdmin SQ120を生成する際に記憶装置8に伝えられ、記憶装置8の内部レジスタ220に登録されてよい。
 (A7)中間装置6は、記憶装置8から発行されたリードリクエストをトラップする。そして、中間装置6は、ルーティング管理テーブル200を参照し、当該リードリクエストに含まれるオフセットアドレスのオフセット値(0x8000)から、当該リードリクエストのルーティング先が第1サーバ4Aであると特定する。そして、中間装置6は、当該リードリクエストのオフセットアドレスを実アドレスに変換し、第1サーバ4Aに転送する。オフセットアドレスを実アドレスに変換することは、オフセットアドレスからオフセット値を減算することであってよい。又は、オフセットアドレスのオフセット値を「NULL」にすることであってもよい。これは他の変換においても同様である。
 (A8)第1サーバ4Aは、(A7)のリードリクエストを受領し、そのリードリクエストに含まれる実アドレスに格納されているAdmin SQ120内「Create IO SQ Command」400Bを、記憶装置8に返送する。
 (A9)記憶装置8は、(A8)の「Create IO SQ Command」400Bを取得し、当該コマンドに含まれるQIDとオフセットアドレスとを対応付けて、内部レジスタ220に登録する。このオフセットアドレスは、上述の通り、第2サーバ4Bのメモリ12Bに生成されたIO SQ130の実アドレス132Bに、第2サーバ4Bに対応付けられているオフセット値(0x8002)を加算したアドレスである。
 (A10)なお、第1サーバ4Aのドライバ100は、第2サーバ4Bの「Create IO SQ Command」のダミーQIDに対して付与したQIDを、所定のタイミングで第2サーバ4Bに通知してよい。例えば、「Create IO SQ Command」に対応する「Command Completion」を受領したタイミング、又は、上記(A3)の実行後のタイミングなどに通知してよい。
 以上の処理により、代表サーバ以外のサーバのメモリに生成されたIOキューのオフセットアドレスを、記憶装置8に登録させることができる。なお、代表サーバのメモリに生成されたIOキューのオフセットアドレスを記憶装置8に登録させる場合は、代表サーバが、オフセットアドレスを含む「Create IO SQ Command」を生成し、自分のメモリのAdmin SQ120にエンキューすればよい。また、上述では「Create IO SQ Command」について説明したが、「Create IO CQ Command」などについても同様である。
 図6は、IOコマンド発行処理の概要を示す。
 サーバ4は、メモリ12に生成したIOキューにIOコマンドをエンキューすることにより、NVMe対応の記憶装置8に対してIOコマンドを発行する。IOコマンドの例は、NVMe仕様における「Write Command」及び「Read Command」などである。
 以下、図6を参照しながら、代表以外のサーバである第2サーバ4Bが、「Read Command」を発行する処理の概要を述べる。なお、以下の処理は、「Write Command」であっても同様である。
 (B1)第2サーバ4Bのドライバ100は、「Read Command」402を生成する。このとき、第2サーバ4Bのドライバ100は、第2サーバ4Bのメモリ12BにReadデータ格納用に確保したバッファ140Bのベースアドレスに対して第2サーバ4Bに対応付けられているオフセット値(0x8002)を加算したオフセットアドレス430を、「Read Command」402に含めてよい。
 図6の例では、「0x0000_0000_0000_A000」がメモリ12Bに確保したバッファ140Bのベースアドレスに相当し、「0x8002_0000_0000_A000」がオフセット値を加算したバッファのオフセットアドレス430に相当する。メモリ12Bに確保したバッファ140Bの実際のベースアドレスを「バッファの実アドレス」、バッファ140Bのベースアドレスにオフセット値を加算したアドレスを「バッファのオフセットアドレス」と表現してもよい。また、第2サーバ4Bのドライバ100は、第2サーバ4BのIO SQ130Bに対応するQID432(図6の例では「0x02」)を「Read Command」402に含めてよい。
 (B2)第2サーバ4Bのドライバ100は、その生成した「Read Command」402を、第2サーバ4Bのメモリ12BのIO SQ130Bにエンキューする。
 (B3)第2サーバ4Bのドライバ100は、記憶装置8の第2サーバ4BのIO SQ130Bに係るDoorbellレジスタを更新する。
 (B4)記憶装置8は、(B3)のIO SQ130Bに係るDoorbellレジスタの更新を検知すると、第2サーバ4BのIO SQ130Bから「Read Command」402をフェッチするためのリードリクエストを発行する。このとき記憶装置8は、当該リードリクエストに、IO SQ130Bのオフセットアドレスを含めてよい。IO SQ130Bのオフセットアドレスは、第2サーバ4BのIO SQ130Bの実アドレスに、第2サーバ4Bに対応付けられているオフセット値(0x8002)を加算したアドレスであってよい。IO SQ130Bのオフセットアドレスは、第2サーバ4BがIO SQ130Bを生成する際に記憶装置8に伝えられ、記憶装置8の内部レジスタ220に登録されてよい。
 (B5)中間装置6は、記憶装置8から発行されたリードリクエストをトラップする。そして、中間装置6は、ルーティング管理テーブル200を参照し、当該リードリクエストに含まれるオフセットアドレスのオフセット値(0x8002)から、当該リードリクエストのルーティング先が第2サーバ4Bであると特定する。そして、中間装置6は、当該リードリクエストのオフセットアドレスを実アドレスに変換し、第2サーバ4Bに転送する。
 (B6)第2サーバ4Bは、(B5)のリードリクエストを受領し、そのリードリクエストに含まれる実アドレスに格納されているIO SQ130B内「Read Command」402Bを、記憶装置8に返送する。以下、図7を参照しながらこの後の処理を説明する。
 図7は、IOコマンド実行処理の概要を示す。
 図6に引き続き、IOコマンドが「Read Command」の場合の処理について述べる。
 (C1)記憶装置8は、上記(B6)の「Read Command」402Bを取得し、当該「Read Command」402Bに含まれるバッファ140Bのオフセットアドレスを内部レジスタ240に登録する。
 (C2)記憶装置8は、バッファ140Bのオフセットアドレス宛にリードデータを送出する。
 (C3)中間装置6は、記憶装置8から送出されたリードデータをトラップする。そして、中間装置6は、ルーティング管理テーブル200を参照し、当該リードデータの宛先であるバッファ140Bのオフセットアドレス内のオフセット値(0x8002)から、ルーティング先を第2サーバ4Bと特定する。そして、中間装置6は、当該リードデータの宛先を、バッファ140Bのオフセットアドレスから実アドレスに変換し、第2サーバ4Bに転送する。
 (C4)その転送されたリードデータは、宛先のバッファ140Bの実アドレスに書き込まれる。
 なお、IOコマンドが「Write Command」の場合、バッファ140Bに格納されたライトデータが、記憶装置8に転送されて書き込まれる。
 以上の処理により、第2サーバ4Bのドライバ100は、記憶装置8からデータをリードしたり、記憶装置8にデータをライトしたりすることができる。
 図8は、代表サーバの初期設定処理の一例を示すフローチャートである。
 代表サーバである第1サーバ4Aは、初期化設定処理により、自分のメモリ12AにAdmin SQ120及びAdmin CQ122、並びに、IO SQ130及びIO CQ132を生成する。以下詳細を説明する。
 第1サーバ4Aのドライバ100は、メモリ12AにAdmin CQ122を生成する(S100)。
 第1サーバ4Aのドライバ100は、その生成したAdmin CQ122の実アドレスに、第1サーバ4Aと対応付けられているオフセット値(0x8000)を加算し、Admin CQ122のオフセットアドレスを算出する。そして、第1サーバ4Aのドライバ100は、そのAdmin CQ122のオフセットアドレスを記憶装置8に送信する(S102)。
 記憶装置8は、この送信されたAdmin CQ122のオフセットアドレスを、内部レジスタ220に登録する(S104)。
 第1サーバ4Aのドライバ100及び記憶装置8は、Admin SQ120について、上記S100及びS102と同様の処理を実行する(S110)。
 第1サーバ4Aのドライバ100は、メモリ12BにIO CQ132を生成する(S116)。
 第1サーバ4Aのドライバ100は、QIDフリーリスト110の中からQIDを1つ選択する。そして、第1サーバ4Aのドライバ100は、その選択したQIDを、QIDフリーリスト110から削除する(S118)。
 第1サーバ4Aのドライバ100は、その生成したIO CQ132の実アドレスに、第1サーバ4Aと対応付けられているオフセット値(0x8000)を加算し、IO CQ132のオフセットアドレスを算出する。そして、第1サーバ4Aのドライバ100は、その算出したオフセットアドレスとS118で選択したQIDとを含む「Create IO CQ Command」を生成する(S120)。
 第1サーバ4Aのドライバ100は、この生成した「Create IO CQ Command」を、Admin SQ120にエンキューする(S122)。
 第1サーバ4Aのドライバ100は、記憶装置8におけるAdmin SQ120に係るDoorbellレジスタを更新する(S124)。このときのTailアドレスは、オフセットアドレスを加算したアドレスであってよい。他のDoorbellレジスタの更新についても同様である。
 記憶装置8は、このDoorbellレジスタの更新を検知すると、Admin SQ120から「Create IO CQ Command」をフェッチするためのリードリクエストを発行する(S144)。
 中間装置6は、記憶装置8から発行されたS144のリードリクエストをトラップする。そして、中間装置6は、ルーティング管理テーブル200を参照し、そのリードリクエストに含まれるオフセットアドレスのオフセット値(0x8000)が、第1サーバ4Aに対応付けられていることを特定する。そして、中間装置6は、そのオフセットアドレスを実アドレスに変換する。例えば、オフセットアドレスからオフセット値(0x8000)を減算する。そして、中間装置6は、その変換後のリードリクエストを、その特定した第1サーバ4Aへ転送する(S146)。
 第1サーバ4Aは、その転送されたリードリクエストを受領すると、その実アドレスに係るAdmin SQ120から「Create IO CQ Command」を、記憶装置8へ返送する(S148)。
 記憶装置8は、その返送された「Create IO CQ Command」を実行する(S150)。すなわち、記憶装置8は、「Create IO CQ Command」に含まれるQIDとIO CQ132のオフセットアドレスとを対応付けて内部レジスタ220に登録する。
 そして、記憶装置8は、第1サーバ4AのAdmin CQ122に対して「Command Completion」を発行する(S152)。この「Command Completion」の宛先アドレスは、Admin CQ122に対応するオフセットアドレスである。
 中間装置6は、その「Command Completion」をトラップする。そして、中間装置6は、ルーティング管理テーブル200を参照し、その「Command Completion」の宛先アドレスであるオフセットアドレスのオフセット値(0x8000)が、第1サーバ4Aに対応付けられていることを特定する。そして、中間装置6は、その「Command Completion」のオフセットアドレスを実アドレスに変換する。そして、中間装置6は、その変換後の「Command Completion」を、その特定した第1サーバ4Aに転送する(S154)。
 第1サーバ4Aのドライバ100は、Admin CQ122から、その「Command Completion」をデキューし、S122でエンキューした「Create IO CQ Command」の実行を完了する(S156)。
 第1サーバ4Aのドライバ100及び記憶装置8は、IO SQ130について、上記S116乃至S156と同様の処理を実行する(S160)。
 以上の処理により、第1サーバ4Aのメモリ12Aに、Admin CQ122、Admin SQ120、IO CQ132、及びIO SQ130が生成される。また、記憶装置8の内部レジスタ220に、Admin CQ122、Admin SQ120、IO CQ132、及びIO SQ130について、それぞれ、QID及びオフセットアドレスが登録される。
 図9は、代表サーバ以外のサーバの初期設定処理の一例を示すフローチャートである。
 代表サーバ以外のサーバである第2サーバ4Bは、初期設定処理により、自分のメモリ12BにIO SQ130及びIO CQ132を生成する。以下詳細を説明する。
 第2サーバ4Bのドライバ100は、メモリ12BにIO CQ132を生成する(S200)。
 第2サーバ4Bのドライバ100は、その生成したIO CQ132の実アドレスに、第2サーバ4Bと対応付けられているオフセット値(0x8002)を加算し、IO CQ132のオフセットアドレスを算出する。そして、第2サーバ4Bのドライバ100は、そのオフセットアドレスとダミーのQIDとを含む「Create IO CQ Command」を作成する(S202)。
 第2サーバ4Bのドライバ100は、代表サーバである第1サーバ4Aに、S202で作成した「Create IO CQ Command」の実行依頼を送信する(S204)。
 第1サーバ4Aのドライバ100は、S204の実行依頼を受領すると、QIDフリーリスト110からQIDを1つ選択する。そして、第1サーバ4Aのドライバ100は、その選択したQIDを、QIDフリーリスト110から削除する。そして、第1サーバ4Aのドライバ100は、その実行依頼された「Create IO CQ Command」のダミーのQIDを、その選択したQIDに置き換える(S208)。
 第1サーバ4Aのドライバ100は、その「Create IO CQ Command」を、Admin SQ120にエンキューする(S210)。
 第1サーバ4Aのドライバ100、中間装置6及び記憶装置8は、図8のS116乃至S156と同様の処理を行う(S212)。これにより、第2サーバ4Bのメモリ12BのIO CQ132のオフセットアドレスとQIDとが対応付けられて、記憶装置8の内部レジスタ220に登録される。
 第1サーバ4Aのドライバ100は、中間装置6から「Create IO CQ Command」に対応する「Command Completion」を受領し、第2サーバ4Bのドライバ100へ送信する(S214)。この「Command Completion」には、S208で選択したQIDが含まれて良い。第2サーバ4Bのドライバ100は、この「Command Completion」を受領し、「Create IO CQ Command」の処理を完了する。
 第2サーバ4Bのドライバ100は、上記S200乃至S214と同様の処理によって、IO SQ130も生成する(S240)。
 以上の処理により、第2サーバ4Bのメモリ12Bに、IO CQ132及びIO SQ132が生成される。
 図10は、記憶装置8に対するサーバのIO処理の一例を示すフローチャートである。
 以下、第2サーバ4BのIO処理について説明するが、第1サーバ4Aや他のサーバについても同様であってよい。
 第2サーバ4Bのドライバ100は、メモリ12Bにバッファ140を確保する(S300)。
 第2サーバ4Bのドライバ100は、その確保したバッファ140の実アドレスに、第2サーバ4Bと対応付けられているオフセット値(0x8002)を加算し、バッファ140のオフセットアドレスを算出する。そして、第2サーバ4Bのドライバ100は、そのバッファ140のオフセットアドレスを含む「IO Command」を作成する(S302)。この「IO Command」は、「Read Command」又は「Write Command」であってよい。
 第2サーバ4Bのドライバ100は、その作成した「IO Command」を、自分のメモリ12BのIO SQ130Bにエンキューする(S304)。
 第2サーバ4Bのドライバ100は、記憶装置8におけるIO SQ130Bに係るDoorbellレジスタを更新する(S306)。
 記憶装置8は、このDoorbellレジスタの更新を検知すると、IO SQ130Bから「IO Command」をフェッチするためのリードリクエストを発行する(S310)。
 中間装置6は、記憶装置8から発行されたS310のリードリクエストをトラップする。そして、中間装置6は、ルーティング管理テーブル200を参照し、そのリードリクエストに含まれるオフセットアドレスのオフセット値(0x8002)が、第2サーバ4Bに対応付けられていることを特定する。そして、中間装置6は、そのオフセットアドレスを実アドレスに変換する。そして、中間装置6は、その変換後のリードリクエストを、その特定した第2サーバ4Bに転送する(S312)。
 第2サーバ4Bは、その転送されたリードリクエストを受領すると、その実アドレスに格納されているIO SQ130B内「IO Command」を、記憶装置8へ返送する(S314)。
 記憶装置8は、その返送された「IO Command」を実行する(S316)。すなわち、記憶装置8は、「IO Command」が「Read Command」の場合、第2サーバ4Bのオフセットアドレスのバッファへリードデータを書き込もうとする。記憶装置8は、「IO Command」が「Write Command」の場合、第2サーバ4Bのオフセットアドレスのバッファからライトデータを読み出そうとする。
 中間装置6は、S316の、記憶装置8から第2サーバ4Bのバッファ140Bのオフセットアドレスに対するアクセスをトラップする。そして、中間装置6は、ルーティング管理テーブル200を参照し、そのアクセスに含まれるオフセットアドレスのオフセット値(0x8002)が、第2サーバ4Bに対応付けられていることを特定する。そして、中間装置6は、そのアクセスに含まれるオフセットアドレスを実アドレスに変換する。そして、中間装置6は、その変換後のアクセスを、その特定した第2サーバ4Bに転送する(S318)。これにより、「IO Command」が「Read Command」の場合、第2サーバ4Bのバッファ140Bに、リードデータが格納される。また、「IO Command」が「Write Command」の場合、第2サーバ4Bのバッファ140Bに格納されているライトデータが、記憶装置8に取得される。
 記憶装置8は、「IO Command」の実行完了後、第2サーバ4BのIO CQ132Bに対して「Command Completion」を発行する(S320)。
 中間装置6は、S320の「Command Completion」をトラップする。そして、中間装置6は、ルーティング管理テーブル200を参照し、その「Command Completion」の宛先アドレスであるオフセットアドレスのオフセット値(0x8002)が、第2サーバ4Bに対応付けられていることを特定する。そして、中間装置6は、その「Command Completion」の宛先であるオフセットアドレスを実アドレスに変換する。そして、中間装置6は、その変換後の「Command Completion」を、その特定した第2サーバに転送する(S322)。
 第2サーバ4Bのドライバ100は、IO CQ132Bから、その「Command Completion」をデキューし、S304でエンキューした「IO Command」の実行を完了する(S324)。
 以上の処理により、第2サーバ4Bは、記憶装置8からデータをリードしたり、記憶装置8にデータをライトしたりすることができる。
 上述した実施形態は、本発明の説明のための例示であり、本発明の範囲を実施形態にのみ限定する趣旨ではない。当業者は、本発明の要旨を逸脱することなしに、他の様々な態様で本発明を実施することができる。
 例えば、実アドレスからオフセット値を減算してオフセットアドレスに変換し、オフセットアドレスにオフセット値を加算して実アドレスに戻してもよい。
 1:計算機システム 4:サーバ 6:中間装置 8:記憶装置

Claims (8)

  1.  NVMe(Non-Volatile Memory Express)に対応する記憶装置と、
     前記記憶装置と接続されている中間装置と、
     前記中間装置と接続されている複数のサーバと、
    を有する計算機システムであって、
     各サーバは、
      前記記憶装置に係るドライバと、
      前記記憶装置に対するコマンドが格納されるキューと、
    を有し、
     サーバのドライバは、
      当該サーバの有するメモリのアドレスを、当該サーバに対応するオフセット値に基づいてオフセットアドレスに変換し、
      そのオフセットアドレスを含むコマンドを、前記キューに格納し、
     前記記憶装置は、
      サーバのキューからコマンドを取得し、
      その取得したコマンドに含まれるオフセットアドレスに対してアクセス要求を発行し、
     前記中間装置は、
      前記記憶装置から発行されたアクセス要求をトラップし、
      そのトラップしたアクセス要求に含まれるオフセットアドレスに基づいてサーバを特定し、
      その特定したサーバに対応するオフセット値に基づいて、そのオフセットアドレスを元のアドレスに戻し、
      その元に戻したアドレスを含むアクセス要求を、その特定したサーバへ転送する
    計算機システム。
  2.  前記複数のサーバの内の第1のサーバのドライバは、
      当該第1のサーバの有するメモリにAdminキューを生成し、
      その生成したAdminキューに係るアドレスを、当該第1のサーバに対応するオフセット値に基づいて、オフセットアドレスに変換する
    請求項1に記載の計算機システム。
  3.  前記第1のサーバのドライバは、
      当該第1のサーバの有するメモリにIOキューを生成し、
      その生成したIOキューに係るアドレスを、当該第1のサーバに対応するオフセット値に基づいて、オフセットアドレスを変換し、
      その変換したオフセットアドレスを含むIOキュー生成コマンドを、前記Adminキューに格納する
    請求項2に記載の計算機システム。
  4.  前記複数のサーバの内の第2のサーバのドライバは、
      当該第2のサーバの有するメモリにIOキューを生成し、
      その生成したIOキューに係るアドレスを、当該第2のサーバに対応するオフセット値に基づいて、オフセットアドレスに変換し、
      その変換したオフセットアドレスを含むIOキュー生成コマンドを、前記第1のサーバへ送信し、
     前記第1のサーバのドライバは、
      前記第2のサーバから受領したIOキュー生成コマンドを、前記Adminキューに格納する
    請求項3に記載の計算機システム。
  5.  前記第1のサーバは、未割り当てのキューIDを管理するための未割り当てキューID管理情報を有し、
     前記第1のサーバのドライバは、
      前記第2のサーバから受領したIOキュー生成コマンドに対して、前記未割り当てキューID管理情報に含まれるキューIDを割り当て、
      その割り当てたキューIDを、前記第2のサーバへ通知する
    請求項4に記載の計算機システム。
  6.  前記中間装置は、前記複数のサーバと複数のオフセット値とがそれぞれ対応付けられているルーティング管理情報を有する
    請求項1に記載の計算機システム。
  7.  前記オフセット値は、メモリのアドレス空間の上位から所定のビットを変換する値である
    請求項1に記載の計算機システム。
  8.  NVMe(Non-Volatile Memory Express)に対応する記憶装置と、
     前記記憶装置と接続されている中間装置と、
     前記中間装置と接続されている複数のサーバと、
    を有する計算機システムにおける記憶制御方法であって、
     各サーバは、
      前記記憶装置に係るドライバと、
      前記記憶装置に対するコマンドが格納されるキューと、
    を有し、
     サーバのドライバが、
      当該サーバの有するメモリのアドレスを、当該サーバに対応するオフセット値に基づいて、オフセットアドレスに変換し、
      そのオフセットアドレスを含むコマンドを、前記キューに格納し、
     前記記憶装置が、
      サーバのキューからコマンドを取得し、
      その取得したコマンドに含まれるオフセットアドレスに対してアクセス要求を発行し、
     前記中間装置が、
      前記記憶装置から発行されたアクセス要求をトラップし、
      そのトラップしたアクセス要求に含まれるオフセットアドレスに基づいてサーバを特定し、
      その特定したサーバに対応するオフセット値に基づいて、そのオフセットアドレスを元のアドレスに戻し、
      その元に戻したアドレスを含むアクセス要求を、その特定したサーバへ転送する
    記憶制御方法。
PCT/JP2016/065532 2016-05-26 2016-05-26 計算機システム、及び、データ制御方法 WO2017203645A1 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
US16/083,899 US10698634B2 (en) 2016-05-26 2016-05-26 Computer system and data control method utilizing NVMe and storing commands including an offset address corresponding to a server in a queue
PCT/JP2016/065532 WO2017203645A1 (ja) 2016-05-26 2016-05-26 計算機システム、及び、データ制御方法
JP2018518877A JPWO2017203645A1 (ja) 2016-05-26 2016-05-26 計算機システム、及び、データ制御方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2016/065532 WO2017203645A1 (ja) 2016-05-26 2016-05-26 計算機システム、及び、データ制御方法

Publications (1)

Publication Number Publication Date
WO2017203645A1 true WO2017203645A1 (ja) 2017-11-30

Family

ID=60412218

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/JP2016/065532 WO2017203645A1 (ja) 2016-05-26 2016-05-26 計算機システム、及び、データ制御方法

Country Status (3)

Country Link
US (1) US10698634B2 (ja)
JP (1) JPWO2017203645A1 (ja)
WO (1) WO2017203645A1 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2016206012A1 (en) * 2015-06-24 2016-12-29 Intel Corporation Systems and methods for isolating input/output computing resources
JP2021028762A (ja) 2019-08-09 2021-02-25 キオクシア株式会社 情報処理装置および制御方法
CN117666925A (zh) * 2022-08-26 2024-03-08 中兴通讯股份有限公司 执行指令的方法、装置、服务器及系统

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010079816A (ja) * 2008-09-29 2010-04-08 Hitachi Ltd Pciデバイス共有方法
JP2012113604A (ja) * 2010-11-26 2012-06-14 Hitachi Ltd 計算機システム、方法、及びi/oスイッチ
US20150324118A1 (en) * 2014-05-07 2015-11-12 HGST Netherlands B.V. SYSTEM AND METHOD FOR PEER-TO-PEER PCIe STORAGE TRANSFERS

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4660362B2 (ja) 2005-11-25 2011-03-30 株式会社日立製作所 計算機システム
JP2008021252A (ja) 2006-07-14 2008-01-31 Hitachi Ltd 計算機システム及びアドレス割当方法
US9760314B2 (en) * 2015-05-29 2017-09-12 Netapp, Inc. Methods for sharing NVM SSD across a cluster group and devices thereof

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010079816A (ja) * 2008-09-29 2010-04-08 Hitachi Ltd Pciデバイス共有方法
JP2012113604A (ja) * 2010-11-26 2012-06-14 Hitachi Ltd 計算機システム、方法、及びi/oスイッチ
US20150324118A1 (en) * 2014-05-07 2015-11-12 HGST Netherlands B.V. SYSTEM AND METHOD FOR PEER-TO-PEER PCIe STORAGE TRANSFERS

Also Published As

Publication number Publication date
US20190073160A1 (en) 2019-03-07
JPWO2017203645A1 (ja) 2018-11-22
US10698634B2 (en) 2020-06-30

Similar Documents

Publication Publication Date Title
US10423568B2 (en) Apparatus and method for transferring data and commands in a memory management environment
US9557922B2 (en) System and method for peer-to-peer PCIe storage transfers
US8898665B2 (en) System, method and computer program product for inviting other virtual machine to access a memory space allocated to a virtual machine
US7617376B2 (en) Method and apparatus for accessing a memory
US7320041B2 (en) Controlling flow of data between data processing systems via a memory
CN111221758B (zh) 处理远程直接内存访问请求的方法和计算机设备
US9304896B2 (en) Remote memory ring buffers in a cluster of data processing nodes
JP5347396B2 (ja) マルチプロセッサシステム
US6598144B1 (en) Arrangement for limiting access to addresses by a consumer process instigating work in a channel adapter based on virtual address mapping
WO2018035856A1 (zh) 实现硬件加速处理的方法、设备和系统
JP4755391B2 (ja) メモリを介してデータ処理システムの間でデータのフローを制御する方法および装置
US10846254B2 (en) Management controller including virtual USB host controller
WO2015061971A1 (zh) 数据处理系统和数据处理的方法
WO2016093895A1 (en) Generating and/or employing a descriptor associated with a memory translation table
US7895329B2 (en) Protocol flow control
JP2004520646A (ja) 周辺デバイスからホスト・コンピュータ・システムに割込みを転送する方法および装置
WO2021063160A1 (zh) 访问固态硬盘的方法及存储设备
WO2017203645A1 (ja) 計算機システム、及び、データ制御方法
US20100318716A1 (en) Ordered queue and methods therefor
WO2022115166A2 (en) Registering a custom atomic operation with the operating system
WO2022086789A1 (en) Method of executing programmable atomic unit resources within a multi-process system
KR20220130518A (ko) PCIe 디바이스 및 그 동작 방법
JP7056870B2 (ja) 情報処理装置、情報処理方法及びプログラム
US20060242258A1 (en) File sharing system, file sharing program, management server and client terminal
US20020049875A1 (en) Data communications interfaces

Legal Events

Date Code Title Description
WWE Wipo information: entry into national phase

Ref document number: 2018518877

Country of ref document: JP

NENP Non-entry into the national phase

Ref country code: DE

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

Ref document number: 16903127

Country of ref document: EP

Kind code of ref document: A1

122 Ep: pct application non-entry in european phase

Ref document number: 16903127

Country of ref document: EP

Kind code of ref document: A1