WO2017068770A1 - コンピュータ、デバイス割当管理方法及びプログラム記録媒体 - Google Patents

コンピュータ、デバイス割当管理方法及びプログラム記録媒体 Download PDF

Info

Publication number
WO2017068770A1
WO2017068770A1 PCT/JP2016/004595 JP2016004595W WO2017068770A1 WO 2017068770 A1 WO2017068770 A1 WO 2017068770A1 JP 2016004595 W JP2016004595 W JP 2016004595W WO 2017068770 A1 WO2017068770 A1 WO 2017068770A1
Authority
WO
WIPO (PCT)
Prior art keywords
virtual machine
identifier
assigned
interface
pci
Prior art date
Application number
PCT/JP2016/004595
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 JP2017546403A priority Critical patent/JP6753412B2/ja
Priority to US15/770,045 priority patent/US10684880B2/en
Publication of WO2017068770A1 publication Critical patent/WO2017068770A1/ja

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • G06F9/4411Configuring for operating with peripheral devices; Loading of device drivers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45575Starting, stopping, suspending or resuming virtual machine instances
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45579I/O management, e.g. providing access to device drivers or storage
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45591Monitoring or debugging support

Definitions

  • the present invention relates to a technique for managing an I / O fabric of a computer.
  • the present invention relates to a computer, a device allocation management method, and a program recording medium for connecting a number of I / O devices that cannot be accommodated in a computer case over a network.
  • VMs virtual machines
  • CPU Central Processing Unit
  • memory installed in one server
  • each virtual machine is provided with virtual hardware, that is, a virtual CPU, memory, disk device, I / O device, etc., and each virtual machine is as if it were real hardware. As if, use these virtual hardware. Therefore, when each virtual machine uses virtual hardware, a management program called a hypervisor or virtual machine monitor (VMM: Virtual Machine Monitor), which is one of the main components of server virtualization technology, Trap access to virtual machine hardware and provide appropriate access to real hardware resources. For this reason, when the virtual machine performs some processing, the overhead of the virtual machine monitor is added, so that the performance of the virtual machine is generally lower than that of an OS running on real hardware.
  • VMM Virtual Machine Monitor
  • PCI passthrough allows a specific virtual machine to have direct access to an I / O device connected to the PCI bus or PCI-Express fabric, reducing the overhead of the virtual machine monitor.
  • the PCI pass-through technique will be described below.
  • an I / O device is assumed to refer to an endpoint in PCI-Express.
  • SR-IOV Single Root-I / O Virtualization
  • An I / O device compatible with SR-IOV includes a plurality of host interfaces, and each host interface is assigned to a virtual machine, thereby enabling a single I / O device to be shared from a plurality of virtual machines.
  • SR-IOV is often used in an Ethernet (registered trademark) NIC (Network Interface Controller), and is rarely used in an I / O device other than a NIC, such as a disk controller or a graphics card.
  • PCI pass-through and SR-IOV are collectively referred to as “pass-through technology”
  • pass-through technology is not only in terms of performance, but also allows the virtual machine to use the functions provided by the hardware of the I / O device.
  • Virtual hardware normally used by virtual machines is often imitated from older hardware, and generally has only simple functions. For example, a TCP (Transmission Control Protocol) offload function, etc., as provided in a high-end Ethernet (registered trademark) NIC cannot be used.
  • TCP Transmission Control Protocol
  • an I / O device is directly assigned to a virtual machine, so that the virtual machine can use such an offload function.
  • FIG. 24 shows an example of a PCI-Express fabric.
  • the PCI-Express fabric 200 includes the PCI-Express Root Complex 201 as the root of the fabric, the PCI-Express Root Complex 201, the PCI-Express endpoints 202 to 207, and the PCI-Express switches 208 to 207. 209 is connected via PCI-Express links 210-217.
  • PCI-Express Root Complex PCI-Express end point
  • PCI-Express switch PCI-Express switch
  • the initial setting method described below is a method performed by a general-purpose OS such as a general PC (Personal Computer) and Linux (registered trademark), but other initial setting methods are also possible. .
  • BIOS Basic Input / Output System
  • OS searches the PCI-Express fabric 200. This search is performed to detect and set all the PCI-Express devices in the PCI-Express fabric 200.
  • a PCI-Express device is identified by three numbers called BDF (Bus, Device, Function) (bus number (0 to 255), device number (0 to 31), and function number (0 to 7)).
  • BDF Bus, Device, Function
  • the function number is a number used for identifying each function when the same PCI-Express device has a plurality of functions.
  • FIG. 25 is a block diagram schematically showing the internal configuration of the PCI-Express Root Complex 201.
  • the PCI-Express Root Complex 201 includes a PCI Compatible Host Bridge Device, a PCI-PCI Bridge (Root PCI-Express Port), and a Root Complex Register (Root Complex Register). Due to these connections, the PCI-Express Root Complex consumes one bus number internally. Since the PCI-Express Root Complex is a device located at the root of the PCI-Express fabric, the bus number to be consumed is “0”.
  • FIG. 26 is a block diagram simply showing the internal configuration of the PCI-Express switches 208-209.
  • PCI-Express switches 208 to 209 include PCI-PCI Bridge (Upstream PCI-Express Port, upstream port), PCI-PCI Bridge (Downstream PCI-Express Port, downstream port). Due to these connections, the PCI-Express switches 208 to 209 consume one bus number internally.
  • upstream means a direction approaching the PCI-Express Root Complex 201 side on the PCI-Express fabric.
  • the downstream means a direction away from the PCI-Express Root Complex 201 on the PCI-Express fabric.
  • FIG. 26 shows the case where there are two downstream ports, but there may be three downstream ports.
  • PCI-Express devices are not connected by bus, but are point-to-point connection by switches, so PCI-to-PCI Bridge of PCI-Express Root Complex 201 or PCI-Express switch 208-209.
  • PCI-PCI Bridge Downstream PCI-Express Port
  • PCI-Express switch a different bus number is assigned to each link.
  • An initial setting program such as BIOS or OS performs a process of reading a vendor ID (IDentification) of a PCI-Express device to each device number of bus number 0.
  • the vendor ID is stored in a register group called a PCI configuration space of the PCI-Express device. If this value is not 0xFFFF (0x is a prefix indicating a hexadecimal number), it indicates that some PCI-Express device is connected.
  • the initial setting program executes the setting for the PCI-Express device.
  • Read class code The class code is also stored in the PCI configuration space. The type of the device such as whether the PCI-Express device is a video output device is known from the class code.
  • the class code is a device that connects links of different bus numbers such as a PCI-Express switch, it can be seen that there may be another PCI-Express device downstream of the currently searched bus number.
  • the initial setting program stores an I / O area, a memory in the PCI-Express endpoint. Allocate space. This assignment is realized by setting a BAR (Base Address Register) included in the PCI configuration space of the PCI-Express device.
  • BAR Base Address Register
  • the BAR of the PCI-Express endpoint is provided with a maximum of 6 from 0 to 5, and holds information on the I / O area and memory area required by the PCI-Express endpoint.
  • the initial setting program writes 0xFFFFFF to BAR0 and reads the value of BAR0. Then, it can be determined from the read value whether an I / O area or a memory area is required, how much area is required, and the like.
  • the initial setting program writes the base address in BAR0 according to the request. The range from this base address to the value obtained by adding the size requested by the PCI-Express endpoint to the base address is the I / O area or memory area allocated to this PCI-Express endpoint.
  • the BAR is set so that there is no overlap between PCI-Express end points.
  • the initial setting program performs the same processing for BAR1 to BAR5. Furthermore, the initial setting program also sets the command register, cache line size register, and latency timer register in the PCI configuration space.
  • the initial setting program is a PCI-Express end.
  • BAR is set in the same way as the point. In the case of a bridge device, the maximum number of BARs is 0 to 1.
  • the initial setting program sets the command register, cache line size register, and latency timer register in the PCI configuration space of the bridge device. Further, the primary bus number register, secondary bus number register, and subordinate bus number register are set.
  • the primary bus number refers to the number of the bus existing on the upstream side of the own bridge device
  • the secondary bus number refers to the number of the bus existing on the downstream side of the own bridge device.
  • the subordinate bus number indicates the bus number of the link having the largest bus number among the links existing downstream of the own bridge device. Since detection of all devices has not been completed at this point, the maximum value 0xFF is set as the subordinate number.
  • the initial setting program sets the memory base address register and the I / O base address register.
  • the memory base address register indicates the start address of the memory space allocated to the secondary bus side
  • the I / O base address register indicates the start address of the I / O space allocated to the secondary bus side.
  • the initial setting program searches for a PCI-Express device connected downstream of this device.
  • the final subordinate bus number is determined in the order of the PCI-Express switches 209 and 208.
  • the values of the memory limit address and the I / O limit address are also determined, and these are stored in appropriate positions of the PCI configuration register.
  • the memory limit address is the size of the memory space allocated to the secondary bus side
  • the I / O limit address is the size of the I / O space allocated to the secondary bus side.
  • the initial setting program completes the setting of the PCI-Express fabric.
  • the initial setting program first sets the PCI-Express Root Complex 201. Subsequently, the initial setting program includes a PCI-Express endpoint 202, a PCI-Express endpoint 203, a PCI-Express switch 208, a PCI-Express endpoint 204, a PCI-Express switch 209, a PCI-Express endpoint 206, and a PCI- Setting is made in the order of the Express end point 207 and the PCI-Express switch 209.
  • an I / O limit address, a memory limit address, and a subordinate number are set.
  • the initial setting program performs setting in the order of the PCI-Express end point 205 and the PCI-Express switch 208.
  • an I / O limit address, a memory limit address, and a subordinate number are set.
  • the initial setting program sets an I / O limit address, a memory limit address, and a subordinate number for the PCI-Express Root Complex 201.
  • the initial setting program when the initial setting program accesses the PCI configuration space of the PCI-Express device, the initial setting program issues a configuration read request or a configuration write request.
  • a BDF number is written as information for identifying a destination device.
  • the PCI Express device side holds the destination BDF number included in the configuration write request as its own BDF number.
  • This BDF number is written in the request as information indicating the source PCI-Express device when a request such as a memory read request or a memory write request is issued from the PCI-Express device side.
  • the number of virtual machines running on one server will gradually increase, and if one or more I / O devices are to be assigned to each virtual machine using PCI pass-through or SR-IOV, it will be necessary for the server and PC chassis It is expected that a large number of I / O devices cannot be provided.
  • the server is 2U (case thickness: 8.89 cm)
  • 5 to 6 I / O devices can be installed, but the number of I / O devices that can be installed is too large compared to the number of virtual machines. Few.
  • Non-Patent Document 1 and Non-Patent Document 2 disclose products based on such technology.
  • Non-Patent Document 1 is based on an I / O card simulating the upstream function of a PCI-Express switch, an I / O expansion box simulating a downstream function, and an Ethernet (registration) for connecting them.
  • the PCI-Express fabric extends outside the housing.
  • the technique disclosed in Non-Patent Document 2 is to extend a PCI-Express fabric out of a casing with an I / O card and a cable that extend a PCI-Express signal.
  • Non-Patent Documents 1 and 2 there is a problem that a necessary number of I / O devices may not be allocated to a virtual machine using the pass-through technology. The reason will be described below.
  • the I / O device is identified by the BDF number in the PCI-Express fabric.
  • a unique BDF number is also assigned to a bridge device that connects PCI-Express links having different bus numbers.
  • the function number is a number for distinguishing functions when the same PCI-Express device has a plurality of functions (functions). Therefore, the unit of I / O device is identified by the bus number (B) and device number (D) among the BDF numbers.
  • Non-Patent Documents 1 and 2 are technologies for increasing the number of I / O devices that can be mounted on one server or PC, and the number of I / O devices that can be connected to the PCI-Express fabric is increased. It is not a technology to increase. Therefore, the above problem cannot be solved. The same problem may occur in a PCI fabric in which the number of connected I / O devices is limited by a predetermined specification, not limited to the PCI-Express fabric.
  • the present invention has been made in view of the above-described problems, and is a computer and device allocation management method capable of increasing the number of I / O devices connected to a PCI fabric whose specifications are determined in advance. And a program recording medium for causing a computer to execute the program.
  • the computer of the present invention provides: A storage unit that holds an I / O device list for managing assignment of I / O devices connected to the computer via a network to a virtual machine operating on the computer; A virtual machine monitor that identifies an I / O device necessary for the operation of the virtual machine; If there is an I / O device that can be assigned to the virtual machine by determining whether or not the I / O device specified by the virtual machine monitor can be assigned to the virtual machine with reference to the I / O device list.
  • An I / O device that allocates the I / O device to the virtual machine and registers an identifier assigned to the I / O device based on a predetermined specification together with the identifier of the virtual machine in the storage unit With the manager, It is the structure which has.
  • the device allocation management method of the present invention is a device allocation management method by a computer, Storing an I / O device list for managing allocation to a virtual machine operating on the computer with respect to an I / O device connected to the computer via a network; Identify the I / O devices necessary for the operation of the virtual machine, Determining whether the specified I / O device can be assigned to the virtual machine with reference to the I / O device list; When there is an I / O device that can be assigned to the virtual machine, the I / O device is assigned to the virtual machine, and an identifier assigned to the I / O device based on a predetermined specification is assigned to the virtual machine. It is registered in the storage unit together with the machine identifier.
  • the program recording medium of the present invention is stored in a computer.
  • the I / O device is assigned to the virtual machine, and an identifier assigned to the I / O device based on a predetermined specification is assigned to the virtual machine.
  • a program for executing a procedure to be registered in the storage unit is recorded together with the machine identifier.
  • the number of I / O devices that can be connected can be increased without being limited to a specification predetermined for the PCI fabric.
  • 2 shows an example of the configuration of an address range table according to the first embodiment of the present invention.
  • 3 shows an example of the configuration of a BDF number correspondence table according to the first embodiment of the present invention.
  • It is a block diagram which shows the example of 1 structure of the I / O device manager which concerns on the 1st Embodiment of this invention.
  • 2 shows a configuration example of a MAC address table according to the first embodiment of the present invention.
  • FIG. 2 shows an example of the configuration of an I / O device setting content holding table according to the first embodiment of the present invention.
  • 3 shows an example of the configuration of an I / O device list according to the first embodiment of the present invention.
  • 2 shows a configuration example of a MAC address reverse lookup table according to the first embodiment of the present invention.
  • FIG. 3 is a sequence diagram showing operations of a virtual machine monitor, a virtual machine, an I / O device manager, an I / O side network interface, and an I / O device when starting a virtual machine according to the first embodiment of the present invention. It is.
  • FIG. 5 is a sequence diagram illustrating a processing flow when a memory read / write request is issued from the virtual machine to the I / O device according to the first embodiment of the present invention.
  • FIG. 5 is a sequence diagram illustrating a processing flow when a memory read / write request is issued from the I / O device to the virtual machine according to the first embodiment of the present invention. It is a block diagram which shows the example of 1 structure of the virtual machine monitor which concerns on the 2nd Embodiment of this invention.
  • 7 shows an example of the configuration of a BDF number table according to the second embodiment of the present invention. 7 shows an example of the configuration of an I / O device allocation list according to the second embodiment of the present invention. 2 shows an example of the configuration of an I / O device manager according to a second embodiment of the present invention.
  • FIG. 10 is a sequence diagram illustrating operations of a virtual machine monitor, a virtual machine, an I / O device manager, and an I / O device when starting a virtual machine according to the second embodiment of the present invention.
  • FIG. 10 is a sequence diagram illustrating a processing flow when a memory read / write request is issued from a virtual machine to an I / O device according to the second embodiment of the present invention. It is a block diagram which shows the example of 1 structure of the computer system which concerns on the 3rd Embodiment of this invention. It is a block diagram which shows the example of 1 structure of the computer system which concerns on the 4th Embodiment of this invention.
  • FIG. 25 is a block diagram schematically showing an internal configuration of a PCI-Express Root Complex shown in FIG. 24.
  • FIG. 25 is a block diagram schematically showing an internal configuration of a PCI-Express switch shown in FIG. 24.
  • FIG. 1 is a block diagram showing a configuration example of a computer system according to the first embodiment of the present invention.
  • a computer system 1 includes a hardware 2, a virtual machine monitor 3, a virtual machine 4, an I / O device manager 5, an I / O side network interface 6, a network 7, and an I / O. O device 8.
  • the I / O device 8 is a PCI-Express endpoint, and the network 7 is an Ethernet (registered trademark).
  • the present invention an essential element. It is not intended to be limiting.
  • the hardware 2 includes a CPU, a memory, a disk device, and a network interface card (NIC) 21 which are basic elements (not shown) constituting the computer.
  • FIG. 1 shows that in the hardware 2, the virtual machine 4, the I / O device manager 5, and the virtual machine monitor 3 are virtually configured by the CPU executing a program.
  • the virtual machine monitor 3 has a function of providing virtual hardware to the virtual machine 4 and allocating resources of the hardware 2 when the virtual machine 4 uses the virtual hardware.
  • a method for realizing the virtual machine monitor 3 as software that operates on a general-purpose OS such as Linux (registered trademark), and a method for realizing it as dedicated software that also has functions of an OS that operates on a computer.
  • the former include KVM (Kernel-based Virtual Machine), and examples of the latter include XenServer and VMware. The following description is based on the former configuration, but this is not intended to limit the present invention to a server virtualization environment having such a configuration.
  • the virtual machine 4 is a virtual machine environment that operates under the control of the virtual machine monitor 3.
  • the OS By installing the OS on the virtual hardware provided from the virtual machine monitor 3, it is possible to use the OS as if it is operating in a real computer environment.
  • control by the virtual machine monitor 3 intervenes.
  • a virtual address guest virtual address (Guest Virtual Address)
  • a physical address guest physical address (Guest Physical Address)
  • the virtual machine monitor 3 detects memory access of the virtual machine 4 using the guest physical address, and the virtual address (host virtual address, Host Virtual address) of the virtual machine monitor is detected as the guest physical address. Address), or a physical address (host physical address, Host Physical Address).
  • guest virtual address Guest Virtual address
  • Host Physical Address guest physical address
  • the virtual machine monitor 3 detects memory access of the virtual machine 4 using the guest physical address, and the virtual address (host virtual address, Host Virtual address) of the virtual machine monitor is detected as the guest physical address. Address), or a physical address (host physical address, Host Physical Address).
  • When converted to a host virtual address it is further converted to a host physical address. Through such conversion, the virtual machine 4 can perform memory access.
  • the I / O device manager 5 is a module that manages the I / O device 8.
  • the I / O device 8 is connected to the I / O device manager 5 via the I / O side network interface 6, the network 7 and the NIC 21.
  • the I / O device manager 5 performs initial setting of the I / O device 8 and control of data transfer requests with the I / O device 8.
  • the initial setting of the I / O device 8 refers to setting of a value in a PCI configuration space register such as a BAR that the I / O device 8 has.
  • the data transfer request between the I / O device manager 5 and the I / O device 8 includes types of memory read / write request, I / O read / write request, message request, and completion. Each of these has its own format.
  • the memory read / write request means a memory read request and a memory write request.
  • the I / O read / write request means an I / O read request and an I / O write request.
  • the I / O device manager 5 In response to a request, the I / O device manager 5 generates a packet (TLP (Transaction Layer Protocol) packet) according to each format, encapsulates the TLP packet in an Ethernet frame, and transmits the encapsulated frame. Do. The I / O device manager 5 extracts the TLP packet from the Ethernet frame received from the I / O device 8 and notifies the virtual machine monitor 3 of the content of the TLP packet.
  • TLP Transaction Layer Protocol
  • the I / O device manager 5 is shown as a separate component from the virtual machine monitor 3, but the I / O device manager 5 may be included in the virtual machine monitor 3. It is.
  • the I / O side network interface 6 is an interface for connecting the I / O device 8 to the network 7.
  • the I / O side network interface 6 is provided for each I / O device 8.
  • Ethernet registered trademark
  • the I / O side network interface 6 has a unique MAC (Media Access Control) address.
  • the I / O side network interface 6 has a function of extracting a TLP packet from the Ethernet frame transmitted from the I / O device manager 5.
  • the I / O side network interface 6 has a function of encapsulating the TLP packet from the I / O device 8 with an Ethernet frame and transmitting it to the I / O device manager 5.
  • the I / O side network interface 6 has a function of holding the MAC address of the NIC 21 so that the I / O device 8 can transmit a TLP packet. Further, the I / O side network interface 6 can reset (initialize) the connected I / O device 8 in response to a request from the I / O device manager 5 side.
  • the network 7 is a general-purpose computer network, and is Ethernet (registered trademark) in this embodiment.
  • the network 7 is composed of cables and switches.
  • the network 7 connects the NIC 21 and the I / O side network interface 6.
  • the I / O device 8 is originally an I / O device connected to an expansion bus of a computer, and corresponds to a PCI-Express endpoint in this embodiment.
  • Examples of the I / O device 8 include a NIC, a GPU (Graphics Processing Unit) card, a RAID (Redundant Arrays of Independent Disks) controller, a sound card, and the like.
  • the I / O device 8 When the I / O device 8 is initialized from the I / O device manager 5, the BDF number is notified.
  • the I / O device 8 is identified by a set of an identifier of the I / O side network interface 6 and a BDF number.
  • the identifier of the I / O side network interface 6 is a MAC address.
  • the I / O side network interface 6 is a network interface corresponding to the network, and an identifier defined by the network is an identifier of the I / O side network interface 6.
  • the I / O side network interface 6 is a network interface corresponding to the InfiniBand protocol, and has an identifier called GUID (Globally Unique Identifier).
  • FIG. 2 is a block diagram showing a configuration example of the virtual machine monitor according to the first embodiment of the present invention.
  • the virtual machine monitor 3 includes a virtual machine interface 31, a request issue destination determination unit 32, an I / O device allocation unit 33, an I / O device manager interface 34, an address range table 35, and a BDF number correspondence table 36. , A NIC driver 37, and a resource file holding unit 38.
  • the virtual machine interface 31 is an interface for exchanging data between the virtual machine 4 and the virtual machine monitor 3. For example, the virtual machine interface 31 is used to notify the virtual machine 4 of information on resources to be allocated to the virtual machine 4 when the virtual machine monitor 3 starts the virtual machine 4. The virtual machine interface 31 is used for the virtual machine monitor 3 to receive a request from the virtual machine 4 when the virtual machine 4 uses the I / O device 8.
  • the request issuance destination determination unit 32 is configured to manage the request issuance destination by the virtual machine monitor 3 based on information included in the request. Whether the I / O device or the I / O device 8 managed by the I / O device manager 5 is determined.
  • the request issue destination determination unit 32 determines whether the virtual machine monitor 3 and the I / O device manager 5 are based on the BDF number or the memory address according to the request type from the virtual machine 4 to the I / O device 8. It is determined which is a request to the managed I / O device.
  • the I / O device allocation unit 33 has a function of allocating the I / O device 8 managed by the I / O device manager 5 to the virtual machine 4.
  • the virtual machine monitor 3 designates an identifier (BDF number or the like) of the I / O device to be allocated by the PCI pass-through technology.
  • the designation method includes a method of performing an operation on a GUI (Graphical User Interface) tool designated by a command line option.
  • the I / O device allocation unit 33 allocates the I / O device 8 managed by the I / O device manager 5 to the virtual machine 4, the I / O device allocation unit 33 assigns the I / O device 8 to any virtual machine 4 by any method and any type / spec of I / O. Information about whether to allocate the O device 8 is received from an external module (not shown) of the I / O device allocation unit 33.
  • the I / O device allocation unit 33 inquires of the I / O device manager 5 whether or not the I / O device 8 of the type / spec specified by the external module can be used. When the I / O device allocation unit 33 is notified from the I / O device manager 5 that it can be used, the I / O device manager 5 performs a search for an I / O device when the virtual machine 4 is started. The virtual machine 4 is notified of the presence of the I / O device 8 by using the identifier and resource information of the I / O device 8 included in the notification from.
  • the I / O device manager interface 34 is an interface for exchanging data between the virtual machine monitor 3 and the I / O device manager 5.
  • the I / O device manager interface 34 can be realized by a communication interface such as a socket.
  • the I / O device manager interface 34 is used when the virtual machine monitor 3 inquires of the I / O device manager 5 whether the I / O device 8 assigned to the virtual machine 4 is available.
  • the I / O device manager interface 34 transfers a request when a request from the virtual machine 4 to the I / O device is addressed to the I / O device 8 managed by the I / O device manager 5. used.
  • the address range table 35 shown in FIG. 2 will be described.
  • the address range table 35 is a table that holds information set in the BAR of the I / O device 8 assigned to the virtual machine 4.
  • the address range table 35 is provided for each virtual machine 4. An entry is added to the address range table 35 when the virtual machine monitor 3 traps data transmitted and received when the virtual machine 4 sets the BAR of the I / O device 8 when the virtual machine 4 is started. .
  • FIG. 3 shows a configuration example of the address range table according to the first embodiment of the present invention.
  • the address range table 35 includes a start address, an end address, a physical BDF number, and a BAR number information as a set. If there is an entry in this table, it means that the I / O device 8 managed by the I / O device manager 5 has been accessed.
  • the address range table 35 receives an address value and outputs a physical BDF number and a BAR number corresponding to an address range in which the address is not less than the start address and not more than the end address.
  • the start address is an address set in the BAR
  • the end address is an address obtained by adding the size requested by the I / O device 8 having the BAR to the start address.
  • the physical BDF number is a BDF number set in the BAR of the I / O device 8 by the I / O device manager 5.
  • the BDF number used by the virtual machine 4 is referred to as a virtual BDF number.
  • the BAR number means a number from 0 to 5 of a BAR provided in a plurality of I / O devices 8.
  • the BDF number correspondence table 36 shown in FIG. 2 will be described.
  • the BDF number correspondence table 36 is a table that holds correspondence between virtual BDF numbers and physical BDF numbers.
  • the BDF number correspondence table 36 is provided for each virtual machine 4.
  • the BDF number correspondence table 36 is entered by the virtual machine monitor 3 trapping data transmitted when the virtual machine 4 sets the PCI configuration register of the I / O device 8 when the virtual machine 4 is started. Is added.
  • FIG. 4 shows a configuration example of the BDF number correspondence table according to the first embodiment of the present invention.
  • the BDF number correspondence table 36 includes information on virtual BDF numbers and physical BDF numbers as a set.
  • the virtual BDF number is input and the physical BDF number is output.
  • the NIC driver 37 and the resource file holding unit 38 shown in FIG. 2 will be described.
  • the NIC driver 37 is a driver for the NIC 21.
  • the resource file holding unit 38 has a function of holding the value set in the PCI configuration register of the I / O device 8 by the I / O device manager 5 as a resource file.
  • the resource file is managed as a combination of the identifier of the virtual machine 4 and the physical BDF number assigned to the I / O device 8.
  • the file configuration and file format of the resource file can conform to the file configuration and file format of the resource file of the I / O device locally connected to the virtual machine monitor 3.
  • the virtual machine monitor 3 is constructed with a Linux (registered trademark) -based system, it is assumed that the file system and file format under the / sys / bus / pci / devices / ⁇ BDF number> directory are followed. Can do.
  • FIG. 5 is a block diagram showing a configuration example of the I / O device manager according to the first embodiment of the present invention.
  • the I / O device manager 5 includes a virtual machine monitor interface 51, an I / O device setting unit 52, a request control unit 53, a NIC driver interface 54, a MAC address table 55, an I / O An O device setting content holding table 56, an I / O device list 57, and a MAC address reverse lookup table 58 are included.
  • the virtual machine monitor interface 51 is an interface for exchanging data between the virtual machine monitor 3 and the I / O device manager 5.
  • the virtual machine monitor interface 51 can be realized by a communication interface such as a socket.
  • the virtual machine monitor interface 51 is used when the virtual machine monitor 3 receives an inquiry from the virtual machine monitor 3 as to whether the I / O device 8 assigned to the virtual machine 4 is available.
  • the virtual machine monitor interface 51 is used to receive a request addressed to the I / O device 8 from the virtual machine 4 via the virtual machine monitor 3.
  • the I / O device setting unit 52 has a function of performing initial setting of the I / O device 8.
  • the initial setting of the I / O device 8 means setting a value in the PCI configuration register and assigning a physical BDF number.
  • the physical BDF number can have an independent number space for each virtual machine 4 and can be set so that the same physical BDF number is used between the virtual machines 4.
  • the I / O device setting unit 52 searches the I / O device list 57 in response to an inquiry from the virtual machine monitor 3 as to whether the I / O device 8 is available, and the I / O device 8 that matches the condition. Perform initial settings for. Further, the I / O device setting unit 52 reflects the initial setting contents in the MAC address table 55, the I / O device setting contents holding table 56, and the MAC address reverse lookup table 58.
  • the request control unit 53 has a function of processing an access request to the I / O device 8 from the virtual machine 4 and a request from the I / O device 8 received via the virtual machine monitor 3.
  • the request is an I / O read / write request, a memory read / write request, a configuration read / write request, or a message request defined by PCI-Express.
  • the request control unit 53 has a function of constructing a TLP packet based on an access request from the virtual machine 4 received via the virtual machine monitor 3 and constructing an Ethernet frame using the TLP packet as a payload.
  • Data set in the headers of these packets and frames includes information included in the access request from the virtual machine 4 received via the virtual machine monitor 3, and the MAC address table 55 and the I / O device setting content holding table 56. Obtained from the information held.
  • the request control unit 53 has a function of decapsulating a frame when receiving a frame obtained by encapsulating a TLP packet having the I / O device 8 as a transmission source in an Ethernet frame.
  • the request control unit 53 has a function of extracting information such as an access destination memory address from the extracted TLP packet and transferring it to the virtual machine monitor 3.
  • the NIC driver interface 54 is an interface for sending an Ethernet frame transmission request to the NIC driver 37, and an interface for receiving an Ethernet frame from the NIC driver 37.
  • this interface is an interface provided by a general-purpose OS such as Windows (registered trademark) or Linux (registered trademark).
  • the MAC address table 55 will be described.
  • the MAC address table 55 holds information in which a virtual machine identifier, a physical BDF number, and a MAC address of the I / O-side network interface 6 to which the I / O device 8 having the physical BDF number is connected are associated with each other. It is a table to do.
  • FIG. 6 shows a configuration example of the MAC address table according to the first embodiment of the present invention.
  • the MAC address table 55 receives a virtual machine identifier and a physical BDF number as inputs, and outputs a MAC address.
  • the I / O device setting content holding table 56 will be described.
  • the I / O device setting content holding table 56 is a table that holds values set in the PCI configuration register of the I / O device 8.
  • the I / O device setting content holding table 56 is provided for each virtual machine 4.
  • FIG. 7 shows a configuration example of the I / O device setting content holding table according to the first embodiment of the present invention.
  • the I / O device setting content holding table 56 receives the physical BDF number and the register number, and outputs the setting value for the register of the input register number for the I / O device 8 corresponding to the input physical BDF number.
  • the register numbers are described by register names such as BAR0 and BAR1, but in addition to specifying by register name, a method of using the address in the PCI configuration register of each register is also conceivable. .
  • the I / O device list 57 shown in FIG. 5 will be described.
  • the I / O device list 57 includes the device type and specification of the I / O device 8, the MAC address of the I / O side network interface 6 to which the I / O device 8 is connected, and the I / O device 8 It has a function of holding information with the identifier of the allocation destination virtual machine 4 as a set.
  • FIG. 8 shows a configuration example of the I / O device list according to the first embodiment of the present invention.
  • the I / O device list 57 the device type and specifications are input, and the MAC address and the allocation status of the I / O device 8 are obtained as output.
  • the device type is information indicating the type of the I / O device 8, such as the type of the I / O device 8, that is, NIC, GPU, SSD (Solid State Drive), disk controller, and the like.
  • Spec is information indicating the performance, memory capacity, disk capacity, etc. of the I / O device 8.
  • the transfer speed is for NIC, the number of GPU core clocks and memory capacity for GPU, the generation of GPU, and the capacity for reading and writing data for SSD.
  • What information is written in the specification column is defined by the designer of the computer system 1 or the operator.
  • the identifier of the virtual machine 4 indicates that it is not assigned. Value is set.
  • the MAC address reverse lookup table 58 shown in FIG. 5 will be described.
  • the MAC address reverse lookup table 58 acquires information on the identifier of the virtual machine 4 that uses the I / O device 8 connected to the I / O side network interface 6 having the MAC address based on the MAC address information. It is a table for.
  • FIG. 9 shows a configuration example of the MAC address reverse lookup table according to the first embodiment of the present invention.
  • the MAC address reverse lookup table 58 receives a MAC address as an input and outputs a virtual machine identifier as an output.
  • a storage unit such as a memory provided in the hardware 2
  • the resource file holding unit 38 corresponds to a part of the storage unit. This also applies to other embodiments described later, and detailed description thereof is omitted.
  • FIG. 10 illustrates operations of the virtual machine monitor, the virtual machine, the I / O device manager, the I / O side network interface, and the I / O device when starting the virtual machine according to the first embodiment of the present invention. It is the sequence diagram shown.
  • the I / O device allocation unit 33 provided in the virtual machine monitor 3 checks whether the I / O device 8 necessary for the operation of the virtual machine 4 is present, the identifier of the virtual machine 4 and the virtual machine 4
  • the I / O device manager 5 is notified of the type and specifications of the I / O device 8 to be allocated to the I / O device (step S30a).
  • the I / O device setting unit 52 provided in the I / O device manager 5 refers to the I / O device list 57 and searches whether or not the corresponding I / O device 8 is available (step S50a). When an available device is found, the I / O device setting unit 52 refers to the I / O device list 57 and refers to the identifier of the allocation destination virtual machine 4 in the entry corresponding to the available I / O device 8. The default value described in the column is changed to the identifier of the virtual machine 4 notified from the virtual machine monitor 3.
  • the I / O device setting unit 52 performs initial setting of the I / O device 8 (step S52a).
  • the I / O device setting unit 52 determines the BDF number (physical BDF number) to be assigned to the I / O device 8, and obtains information on the identifier, physical BDF number, and MAC address of the virtual machine 4. A set is registered in the MAC address table 55. Further, the I / O device setting unit 52 registers the MAC address and the identifier information of the virtual machine 4 as a set in the MAC address reverse lookup table 58. The MAC address is read to the I / O device setting unit 52 when the I / O device setting unit 52 accesses the I / O device list 57 in step S50a of FIG. Then, the I / O device setting unit 52 constructs a TLP packet for a configuration read / write request using the physical BDF number, and constructs an Ethernet frame using the constructed TLP packet as a payload.
  • BDF number physical BDF number
  • the I / O device setting unit 52 reads from the vendor ID register and the class code register among the PCI configuration registers of the I / O device 8, and sets the values to the BAR, command register, cache line size register, and latency timer register. Set up.
  • the read / written information is held in the I / O device setting unit 52 in order to pass it to the virtual machine monitor 3 as I / O device information.
  • the information set in the BAR includes information indicating whether the address space required by the I / O device 8 is an I / O space or a memory space, and the size of the space required by the I / O device 8 Is included. These pieces of information are necessary when the virtual machine 4 performs the initial setting of the PCI-Express fabric at the time of startup.
  • the BDF number assigned to the I / O device 8 by the I / O device setting unit 52 and the values set in the BAR are the I / O devices 8 assigned to the same virtual machine 4. Any value can be set as long as the values do not overlap. That is, the BDF number space, the memory space, and the I / O space are independent for each virtual machine 4. This is because the I / O device setting unit 52 uses the identifier of the virtual machine 4 to identify the I / O device 8.
  • the I / O device setting unit 52 After performing the initial setting in step S52a, the I / O device setting unit 52 sends a TLP packet of a configuration write request to the I / O device 8 via the NIC driver interface 54, the NIC driver 37, and the NIC 21. Send Ethernet frame as payload.
  • the I / O side network interface 6 When the I / O side network interface 6 receives the Ethernet frame from the I / O device manager 5, the I / O side network interface 6 decapsulates the Ethernet frame and extracts the TLP packet. After processing the request content according to the TLP packet, the I / O device 8 transmits a completion TLP packet to the I / O device manager 5 (step S80a).
  • the TLP packet is encapsulated in an Ethernet frame at the I / O side network interface 6 and then transferred to the I / O device manager 5 via the network 7.
  • the MAC address of the NIC 21 may be set in the I / O side network interface 6 in advance. Further, when the I / O side network interface 6 communicates with the I / O device manager 5 for authentication, the MAC address of the NIC 21 that is a communication partner may be notified to the I / O side network interface 6.
  • the I / O device setting unit 52 sets the value set in the register together with the physical BDF number and the register number to the I / O device. It is registered in the device setting content holding table 56 (step S53a).
  • the I / O device setting unit 52 generates virtual PCI-PCI Bridge setting information for each BDF number assigned to the I / O device 8 for each bus number, and stores the I / O device setting content holding table 56. Register with. This is because, as described in the background art, at the time of initial setting of the PCI-Express fabric, if a bridge device such as a PCI-Express switch device is not detected, the downstream bus is not searched. is there.
  • the downstream bus search is not performed when the virtual machine 4 performs the initial setting of the PCI-Express fabric at the time of startup. As a result, the I / O device 8 assigned with the bus number of the downstream bus is not recognized by the virtual machine 4.
  • virtual PCI-PCI Bridge setting information is generated.
  • This setting information includes BDF number, vendor ID register, class code register, BAR, command register, cache line size register, latency timer register, primary bus register, secondary bus register, subordinate bus register, memory base address register, Information on at least an I / O base address register, a memory limit address register, and an I / O limit address register is included.
  • the I / O device setting unit 52 When the I / O device setting unit 52 receives all the completion packets for the configuration write request issued to the I / O device 8, the I / O device setting unit 52 displays the setting contents together with the identifier of the virtual machine 4 and the physical BDF number in the virtual machine monitor. 3 is notified (step S54a).
  • the I / O device allocating unit 33 stores the value read / written from the PCI configuration register in the information notified in step S54a of FIG. 10 in the resource file holding unit 38 as a resource file. (Step S31a).
  • the virtual machine monitor 3 starts the virtual machine 4 (step S32a).
  • the virtual machine 4 performs an initial setting process of a PCI-Express fabric (virtual machine recognized by the virtual machine 4) when it is activated (step S40a). This is trapped by the virtual machine monitor 3, and the request issuance destination determination unit 32 provided in the virtual machine monitor 3 performs initial setting processing based on the setting information of the I / O device 8 held by the resource file holding unit 38. respond.
  • the virtual machine 4 passes through not only the I / O device 8 managed by the I / O device manager 5 but also the virtual device prepared by the virtual machine monitor 3 and the I / O device provided in the hardware 2 through the PCI pass-through. In most cases. Therefore, for example, when the virtual machine monitor 3 detects that all of the initial settings of these virtual devices and hardware 2 have been completed, the I / O device manager 5 thereafter The initial setting of the managed I / O device 8 is performed.
  • the PCI-Express fabric is initialized by in / out instructions.
  • the virtual machine monitor 3 traps this in / out instruction.
  • the request issuance destination determination unit 32 acquires related information from the resource file holding unit 38 based on the register number of the access destination of the virtual machine 4. Then, the request issue destination determination unit 32 notifies the virtual machine 4 of the vendor ID and the class code. Further, the request issuance destination determination unit 32 does not reflect the setting of the I / O device 8 already set by the I / O device manager 5 such as the latency timer register to the I / O device 8 as if it is an I / O device 8. It behaves as if it has been set in the corresponding register of the O device 8, or emulates a BAR setting sequence.
  • the request issuance destination determination unit 32 sets the BDF number (virtual BDF number) that the virtual machine 4 tried to set to the I / O device 8 when setting the latency timer register number and the BDF number together with the physical BDF number. It is registered in the correspondence table 36 (step S34a). Further, the request issue destination determination unit 32 uses the value that the virtual machine 4 tried to set to the BAR of the I / O device 8 as a start address when emulating the BAR setting sequence, and read the BAR from the resource file. A value obtained by adding the size requested by the method to the start address is used as the end address. Then, the request issuance destination determination unit 32 registers these start address and end address together with the physical BDF number and BAR number in the address range table 35 (step S34a).
  • the request issuance destination determination unit 32 registers these start address and end address together with the physical BDF number and BAR number in the address range table 35 (step S34a).
  • the request issuance destination determination unit 32 provided in the virtual machine monitor 3 reflects the setting in the resource file holding unit 38 and the I / O device manager 5
  • a request for issuing a configuration read / write request to the / O device 8 is issued (step S36a). Whether or not a configuration read request needs to be issued depends on the setting method of the register of the setting destination.
  • the request issue destination determination unit 32 When it is necessary to issue a configuration read request, the request issue destination determination unit 32 indicates the identifier of the virtual machine 4, the physical BDF number of the target I / O device 8 (obtained from the BDF number correspondence table 36), and the access type.
  • the issue request is issued along with the information.
  • the access type mentioned here is information indicating whether it is a configuration read request or a configuration write request.
  • the request issuance destination determination unit 32 physically searches for the I / O device 8 or PCI-PCI Bridge of the resource file passed from the I / O device manager 5 in response to the search for the PCI-Express device from the virtual machine 4. It responds in order of BDF number. In this way, by responding to the search, initialization can be performed up to the I / O device 8 connected downstream of the PCI-PCI Bridge.
  • the request issue destination determination unit 32 When the configuration read / write request from the virtual machine 4 is a configuration to the PCI-PCI Bridge, the request issue destination determination unit 32 does not notify the I / O device manager 5 of the request, The value is returned to the virtual machine 4. This is because PCI-PCI Bridge is a virtual device and there is no actual setting target.
  • the request control unit 53 provided in the I / O device manager 5 receives a request issuance request from the virtual machine monitor 3, it constructs a TLP packet based on the request issuance request. Then, the request control unit 53 constructs an Ethernet frame using the TLP packet as a payload, and transmits the Ethernet frame to the I / O device 8 (step S56a). Information such as the MAC address and physical BDF number set in the header of the TLP packet and the Ethernet frame is information included in the request from the virtual machine monitor 3, and the result of referring to the MAC address table 55 using this information Obtained from. The request control unit 53 holds the request contents until a response (completion TLP packet) indicating that the setting has been normally performed for the Ethernet frame is returned from the I / O device 8.
  • the I / O device 8 When the I / O device 8 receives the TLP packet decapsulated by the I / O side network interface 6 from the I / O side network interface 6, the I / O device 8 sets the PCI configuration register according to the contents described in the packet. After the setting is completed, the I / O device 8 transmits a completion packet to the I / O device manager 5 (step S82a).
  • the request control unit 53 When the request control unit 53 receives the completion packet sent from the I / O device 8, the request control unit 53 registers the setting contents together with the physical BDF number and the register number in the I / O device setting contents holding table 56. Then, the request control unit 53 notifies the virtual machine monitor 3 that the setting has been completed (step S58a). This notification includes at least the identifier of the virtual machine 4 and the physical BDF number. If the request from the virtual machine monitor 3 is a configuration read request, the read data is also included. The identifier of the virtual machine 4 can be obtained by referring to the MAC address reverse lookup table 58 using the source MAC address of the Ethernet header given when the received completion packet is encapsulated.
  • the request issue destination determination unit 32 When receiving a notification that the setting is completed from the I / O device manager 5, the request issue destination determination unit 32 notifies the virtual machine 4 that the setting is completed or that the read data is received (step S38a). .
  • FIG. 11 is a sequence diagram showing the flow of processing when a memory read / write request is issued from the virtual machine to the I / O device according to the first embodiment of the present invention.
  • the virtual machine 4 issues an access request to the memory area of the I / O device 8 (step S40b). This access request is trapped in the virtual machine monitor 3.
  • the virtual machine monitor 3 obtains the identifier of the virtual machine 4, the type of access request (here, memory access or I / O access), and access destination information (memory address) from the virtual machine 4.
  • the request issue destination determination unit 32 determines that the access request is a memory access from the type of the access request. Then, the request issue destination determination unit 32 refers to the address range table 35 using the identifier of the virtual machine 4 and the access destination information (memory address), and obtains the physical BDF number and the BAR number (step S30b). Then, the request issue destination determination unit 32 uses the value of the start address in the address range table 35 to obtain an address offset value. The address offset value is obtained by subtracting the value of the start address from the access destination information (memory address).
  • the virtual machine 4 sends the identifier of the virtual machine 4, the type of access request (configuration), and the information of the access destination (
  • the request issuance destination determination unit 32 is notified of the virtual BDF number) and the access destination register number.
  • the request issue destination determination unit 32 refers to the BDF number correspondence table 36 using the identifier of the virtual machine 4 and the virtual BDF number, and obtains a physical BDF number.
  • the request issuance destination determination unit 32 notifies the I / O device manager 5 of the identifier, access type, physical BDF number, BAR number, and address offset value of the virtual machine 4 (step S32b).
  • the request control unit 53 provided in the I / O device manager 5 refers to the MAC address table 55 using the identifier of the virtual machine 4 and the physical BDF number received from the virtual machine monitor 3, and obtains a MAC address (step S50b).
  • the request control unit 53 refers to the I / O device setting content holding table 56 using the physical BDF number and the BAR number, and obtains a value set in the BAR to be accessed (step S52b). The request control unit 53 obtains the address value of the access destination by adding the address offset value to the value set in the BAR.
  • the request control unit 53 uses the information received from the virtual machine monitor 3, the MAC address obtained by referring to the MAC address table 55 and the I / O device setting content holding table 56, and the address value of the access destination to generate a TLP packet.
  • An Ethernet frame with the payload as a payload is constructed (step S54b).
  • the request control unit 53 transmits the constructed Ethernet frame to the I / O device 8 via the network 7 (step S56b).
  • the I / O side network interface 6 When receiving the Ethernet frame from the I / O device manager 5, the I / O side network interface 6 decapsulates the Ethernet frame to obtain a TLP packet. Then, the I / O side network interface 6 passes the acquired TLP packet to the I / O device 8. When receiving the TLP packet from the I / O side network interface 6, the I / O device 8 processes the request (step S80b).
  • the I / O device 8 When the processing of the request is completed, the I / O device 8 generates a TLP packet of a completion packet (in the case of a memory read request and an I / O read / write request), and sends the TLP packet to the I / O device manager 5 Transmit (step S82b).
  • the TLP packet is encapsulated in an Ethernet frame by the I / O side network interface 6.
  • the request control unit 53 When receiving the completion packet from the I / O device 8, the request control unit 53 notifies the virtual machine monitor 3 to that effect (step S58b).
  • the request that is the basis of the access request issued by the virtual machine 4 is a memory read request or an I / O read request, since the read data is stored in the completion packet, the read data is also virtual Passed to the machine monitor 3.
  • the virtual machine monitor 3 When the virtual machine monitor 3 receives information from the I / O device manager 5 that the completion has been received from the I / O device 8, the virtual machine monitor 3 notifies the virtual machine 4 to that effect (step S34b). When the virtual machine monitor 3 also receives the read data from the I / O device manager 5, the virtual machine monitor 3 stores the data in an appropriate memory area.
  • the appropriate memory area is, for example, a host physical address corresponding to a memory area (guest physical address) designated by the virtual machine 4 as a read destination.
  • FIG. 12 is a sequence diagram showing a processing flow when a memory read / write request is issued from the I / O device to the virtual machine according to the first embodiment of the present invention.
  • a memory read / write request from the I / O device 8 is performed by DMA (Direct Memory Access) transfer.
  • DMA Direct Memory Access
  • the I / O device 8 since the memory read / write request from the I / O device 8 needs to be handled by the I / O device manager 5, the I / O device 8 is provided with the memory ( (Not shown) is not directly accessed.
  • the I / O device 8 first, the I / O device 8 generates a TLP packet for a memory read / write request. Subsequently, the I / O side network interface 6 connected to the I / O device 8 encapsulates the generated TLP packet into an Ethernet frame (step S80c). At the time of encapsulation, the I / O side network interface 6 uses the MAC address of the NIC 21 acquired and held in advance as information on the destination of the Ethernet frame.
  • the I / O side network interface 6 transmits the Ethernet frame generated in step S80c of FIG. 12 to the I / O device manager 5 (step S82c).
  • the request control unit 53 provided in the I / O device manager 5 receives the Ethernet frame including the request information from the I / O-side network interface 6, it decapsulates the request included in the Ethernet frame (step S50c). .
  • the request control unit 53 refers to the MAC address reverse lookup table 58 using the MAC address value indicating the transmission source of the Ethernet frame, and obtains the identifier of the virtual machine 4 (step S52c).
  • the request control unit 53 notifies the virtual machine monitor 3 of the destination address included in the request, the identifier of the virtual machine 4 obtained in step S52c of FIG. 12, and information such as the size of data to be read or the size of data to be written (step). S54c). If the request is a memory write request, the request control unit 53 also notifies the virtual machine monitor 3 of data to be written.
  • the virtual machine monitor 3 processes the request from the I / O device 8 based on the information received from the request control unit 53 (step S30c). As described above, since a memory read / write request from the I / O device 8 is generally performed by DMA transfer, it is necessary to notify the I / O device 8 in advance of the memory address to be accessed. Since the information on the destination address included in the request is a physical address (guest physical address) designated by the virtual machine 4 and a physical address for the virtual memory allocated by the virtual machine monitor 3, the actual physical memory Different from the location (host physical address). Therefore, the virtual machine monitor 3 performs a memory access by performing address conversion from a guest physical address to a host physical address by using a function imitating an IOMMU (I / O Memory Management Unit).
  • IOMMU I / O Memory Management Unit
  • an I / O device 8 managed in a BDF number space different from the BDF number space managed by the virtual machine monitor 3 can be assigned to the virtual machine 4 and can be used.
  • the virtual machine monitor 3 detects a process in which the virtual machine 4 disconnects the target I / O device 8, and the I / O device allocation unit 33 obtains a physical BDF number from the BDF number correspondence table 36.
  • the I / O device allocating unit 33 uses the virtual machine identifier and the physical BDF number as the entry of the target I / O device 8, and the address range table 35, the BDF number correspondence table 36, and the resource file holding unit 38. And the specified entry is deleted from each table.
  • the I / O device allocation unit 33 notifies the I / O device manager 5 of the physical BDF number of the I / O device 8 to be deleted and the identifier of the virtual machine.
  • the I / O device manager 5 receives notification of removal of the I / O device 8 from the virtual machine monitor 3.
  • the I / O device setting unit 52 refers to the MAC address table 55 based on the notified virtual machine identifier and physical BDF number, and the I / O side network interface 6 to which the target I / O device 8 is connected. Get the MAC address. Then, the I / O device setting unit 52 deletes the target entry from the MAC address table 55.
  • the I / O device setting unit 52 deletes the entry in which the virtual machine identifier matches the physical BDF number from the I / O device setting content holding table 56. Also, the I / O device setting unit 52 refers to the MAC address reverse lookup table 58 using the MAC address, and deletes the entry with the matching MAC address.
  • the I / O device setting unit 52 issues a reset notification including an instruction to reset the I / O device 8 to be removed to the I / O side network interface 6. Further, the I / O device setting unit 52 sets the assignment destination virtual machine ID of the I / O device list 57 to “I / O device list 57” for the device whose MAC address matches the I / O side network interface 6 in the I / O device list 57. Change to “Unassigned”.
  • the I / O side network interface 6 resets the I / O device 8 when receiving a reset notification of the I / O device 8 from the I / O device manager 5.
  • the I / O device 8 can be removed while the virtual machine 4 is operating.
  • step S32a the processing in step S32a is not “virtual machine activation” but “notification that I / O device 8 has been added”.
  • the virtual machine monitor 3 uses another I / O device 8 used by the same virtual machine 4 in the BDF number assigned to the I / O device 8 to be added, the I / O space set in the BAR, and the memory space. Set to not be the same as. In other words, the virtual machine monitor 3 prevents the BDF number, the I / O space set in the BAR, and the memory space from overlapping between a plurality of I / O devices used by the same virtual machine 4.
  • the I / O device 8 assigned to the virtual machine 4 is managed in an independent BDF number space for each virtual machine 4.
  • the virtual machine monitor 3 can use the I / O device 8 by the virtual machine monitor 3 converting the BDF number space independent for each virtual machine 4 and the BDF number used by the virtual machine 4.
  • each virtual machine 4 can be provided with the maximum number of I / O devices 8 supported by the BDF number space, and a large number of virtual machines 4 are running on one server. Even in this case, the necessary number of I / O devices 8 can be connected.
  • FIG. 13 is a block diagram showing a configuration example of a virtual machine monitor according to the second embodiment of the present invention.
  • the virtual machine monitor 3 of the present embodiment does not have the BDF number correspondence table 36 and the resource file holding unit 38 as compared with the configuration shown in FIG. 36d and an I / O device allocation list 39.
  • the BDF number table 36d will be described.
  • the BDF number table 36d is a table that is provided for each virtual machine 4 and stores the BDF number of the I / O device 8 assigned to the virtual machine.
  • FIG. 14 shows a configuration example of a BDF number table according to the second embodiment of the present invention.
  • the BDF number table 36d is configured to register a BDF number as an entry.
  • This BDF number is a BDF number assigned by the virtual machine 4.
  • the I / O device allocation list 39 will be described.
  • the I / O device allocation list 39 is a list in which the virtual machine 4 recognizes the vendor ID and class code of the I / O device 8 to be allocated to the virtual machine 4 to be started.
  • FIG. 15 shows a configuration example of an I / O device allocation list according to the second embodiment of the present invention.
  • the I / O device allocation list 39 is a list of information composed of a set of a vendor ID and a class code.
  • FIG. 16 is a block diagram showing a configuration example of the I / O device manager according to the second embodiment of the present invention.
  • the I / O device manager 5 of the present embodiment does not have the I / O device setting content holding table 56 as compared with the configuration shown in FIG.
  • a device setting list 59 is included.
  • the I / O device setting list 59 will be described.
  • the I / O device setting list 59 is selected from the I / O devices 8 registered in the I / O device list 57 when the virtual machine monitor 3 inquires about the availability of the I / O device. This is a list in which a set of a class code and a vendor ID of the I / O device 8 is registered.
  • FIG. 17 is a sequence diagram showing operations of the virtual machine monitor, the virtual machine, the I / O device manager, and the I / O device when starting the virtual machine according to the second embodiment of the present invention.
  • Step 17 and FIG. 10 are different in the present embodiment in that the I / O device manager 5 does not set / save the I / O device 8 before starting the virtual machine 4 (step S52a in FIG. 10). Step S80a, Step S53a).
  • the setting of the I / O device 8 is performed in accordance with the initial setting of the PCI-Express fabric that is performed when the virtual machine 4 is activated.
  • the I / O device allocation unit 33 provided in the virtual machine monitor 3 inquires of the I / O device manager 5 about the availability of the I / O device (step S30d).
  • the I / O device allocating unit 33 inquires the I / O device manager 5 by sorting the I / O devices 8 in the order in which the virtual machines 4 are to be recognized.
  • the I / O device setting unit 52 provided in the I / O device manager 5 responds to the inquiry about availability of the I / O device from the virtual machine monitor 3 with respect to the I / O device 8 corresponding to the condition included in the inquiry.
  • the I / O device list 57 is searched for whether there is any (step S50d).
  • the I / O device setting unit 52 notifies the virtual machine monitor 3 of the vendor ID and class code of the I / O device 8 obtained as a result of the search (step S54d).
  • the vendor ID and class code may be registered in the I / O device list 57 in advance after expanding the vendor ID and class code in the I / O device list 57.
  • the vendor ID and class code may be read by the I / O device setting unit 52 each time an inquiry is received from the virtual machine monitor 3 (see FIG. 17). Shows the former case). In the latter case, the I / O device setting unit 52 acquires the corresponding MAC address from the I / O device list 57, and uses the TLP packet (configuration read request) for reading the vendor ID and the class code as the payload.
  • a frame is constructed and transmitted to the I / O device 8.
  • the I / O device setting unit 52 can obtain the values of the vendor ID and the class code from the payload portion of the completion from the I / O device 8.
  • the vendor ID and class code included in the notification to the virtual machine monitor 3 are the IDs of the I / O devices described in the inquiry from the virtual machine monitor 3. Sorted in order.
  • the I / O device allocation unit 33 does not insert the virtual PCI-PCI Bridge vendor ID and class code into the notification from the I / O device setting unit 52 to the virtual machine monitor 3. It is also possible to insert the notification after receiving the notification from the O device manager 5. In this case, since the virtual machine monitor 3 knows how many virtual devices are allocated to the virtual machine from the configuration information of the virtual machine 4, the vendor ID and class code of PCI-PCI Bridge are listed. Can be inserted at an appropriate position.
  • the I / O device setting unit 52 holds the notification to the virtual machine monitor 3 in the I / O device setting list 59 except for the information of the inserted virtual PCI-PCI Bridge.
  • the I / O device allocation unit 33 When the I / O device allocation unit 33 receives a list of vendor IDs and class codes of the I / O devices 8 allocated to the virtual machine 4 from the I / O device manager 5, the I / O device allocation unit 33 stores them in the I / O device allocation list 39 ( Step S31d).
  • the I / O device allocation unit 33 activates the virtual machine 4 (step S32d).
  • the virtual machine 4 performs initial setting of the PCI-Express fabric (step S40d).
  • step S36d When the virtual machine monitor 3 has finished allocating all devices other than the I / O device 8 managed by the I / O device manager 5, the request issue destination determination unit 32 registers in the I / O device allocation list 39.
  • the assigned I / O device 8 is assigned (steps S36d to S58d). The procedure from step S36d to step S58d will be described in detail.
  • the request issue destination determination unit 32 acquires the identifier and BDF number of the virtual machine 4 acquired when the virtual machine monitor 3 traps the virtual machine monitor 3. Is used to determine whether the I / O device having the BDF number is an I / O device 8 managed by the I / O device manager 5 or not. If the BDF number is registered in the BDF number table 36d, it means that the I / O device is the I / O device 8 managed by the I / O device manager 5.
  • the request issuance destination determination unit 32 issues a PCI configuration register setting request to the I / O device manager 5 (step S36d).
  • the request issue destination determination unit 32 notifies the I / O device manager 5 of the identifier of the virtual machine, the access type, and the BDF number of the access destination I / O device 8.
  • the request issuance destination determination unit 32 sends the BDF number and the BAR number to the BAR. Hold until setup is complete.
  • the request issue destination determination unit 32 determines the content of the data to be written as the BDF number and the BAR. Keep a pair with the number.
  • the request control unit 53 provided in the I / O device manager 5 issues a configuration read / write request to the I / O device 8 in accordance with the notification from the virtual machine monitor 3, and Setting is performed (step S56d).
  • the request control unit 53 accesses the MAC address table 55 using the virtual machine identifier and the BDF number, and obtains the MAC address of the request transmission destination.
  • the request control unit 53 constructs an Ethernet frame using the TLP packet as a payload from the acquired MAC address, the access type included in the notification from the virtual machine monitor 3, and the BDF number of the I / O device 8 to be accessed. To do.
  • the request control unit 53 transmits the constructed Ethernet frame to the I / O device 8.
  • the I / O device 8 receives the TLP packet (configuration read / write) decapsulated by the I / O side network interface 6 via the I / O side network interface 6. Then, the I / O device 8 processes the request based on the TLP packet, and transmits the completion TLP packet to the I / O device manager 5 (step S82d).
  • the completion TLP packet is encapsulated in an Ethernet frame by the I / O side network interface 6 and then transmitted to the I / O device manager 5.
  • the I / O device manager 5 When receiving the completion from the I / O device 8, the I / O device manager 5 notifies the virtual machine monitor 3 of the notification (step S58d).
  • the request from the virtual machine monitor 3 is a read request to the PCI configuration register, since the read result is included in the payload portion of the completion TLP packet, the I / O device manager 5 also displays the read result. Notify the virtual machine monitor 3.
  • the request issue destination determination unit 32 determines the read data (the size of the space requested by the BAR, the size of the space Type, etc.) are held together with the BAR number and BDF number held in step S36d of FIG.
  • the setting request to the PCI configuration register from the virtual machine 4 is for the BAR and is a write request for the BAR (setting of the base address of the BAR)
  • the setting to the BAR is made when the completion is notified. Completed.
  • the request issuance destination determination unit 32 sets the start address (value written in the BAR), end address (value obtained by adding the value read from the BAR to the value written in the BAR), the BDF number, and the BAR number in the address range table. 35 (step S37d).
  • the request issuance destination determination unit 32 notifies the virtual machine 4 that the request to the PCI configuration register is completed (step S38d).
  • FIG. 18 is a sequence diagram showing a processing flow when a memory read / write request is issued from the virtual machine to the I / O device according to the second embodiment of the present invention.
  • the request issue destination determination unit 32 When the virtual machine 4 issues an access request to the I / O device 8 (step S40e), the request issue destination determination unit 32 provided in the virtual machine monitor 3 determines the address according to the identifier of the virtual machine and the type of the access request.
  • the address range table 35 is referred to by value (or the BDF number table is referred to by the BDF number), and it is confirmed whether or not an entry exists in the table (step S30e). If the entry exists, the request issuance destination determination unit 32 determines that the access request is an access to the I / O device 8.
  • the request issuance destination determination unit 32 notifies the I / O device manager 5 of the virtual machine identifier, access type, BDF number (or address value), and size of data to be accessed (step S32e).
  • the request control unit 53 provided in the I / O device manager 5 refers to the MAC address table 55, and acquires the MAC address using the virtual machine identifier and the BDF number (step S50e).
  • the request control unit 53 uses the MAC address acquired in step S50e of FIG. 18 and the information notified from the virtual machine monitor 3 to generate an Ethernet frame having a TLP packet as a payload (step S54e).
  • the request control unit 53 transmits the Ethernet frame generated in step S54e in FIG. 18 to the I / O device 8 (step S56e).
  • the I / O device 8 When the I / O device 8 receives the TLP packet decapsulated by the I / O side network interface 6 from the I / O side network interface 6, it processes the request based on the TLP packet (step S80e).
  • the I / O device 8 transmits the completion TLP packet to the I / O device manager 5 (step S82e).
  • This TLP packet is encapsulated in an Ethernet frame by the I / O side network interface 6.
  • the I / O device manager 5 When receiving the completion notification from the I / O device 8, the I / O device manager 5 notifies the virtual machine monitor 3 that the completion notification has been received together with the identifier of the virtual machine 4 (step S58e).
  • the identifier of the virtual machine 4 can be obtained by referring to the MAC address reverse lookup table 58 using the source MAC address of the received notification (Ethernet frame using the completion TLP packet as a payload).
  • the virtual machine monitor 3 When the virtual machine monitor 3 receives the completion notification from the I / O device manager 5, the virtual machine 4 having the identifier of the virtual machine 4 included in the notification has completed the access request to the I / O device 8. Is notified (step S34e).
  • the I / O device 8 assigned to the virtual machine 4 is managed in an independent BDF number space for each virtual machine 4. Since the virtual machine 4 can arbitrarily determine how to use this independent BDF number space, the virtual machine monitor 3 does not need to convert the BDF number or calculate the offset of the address value. As a result, even when a large number of virtual machines 4 are operating on one server, it is possible to connect the necessary number of I / O devices 8 while simplifying the configuration of the virtual machine monitor 3.
  • FIG. 19 is a block diagram showing a configuration example of a computer system according to the third embodiment of the present invention.
  • the computer system 1 a includes the I / O device 8 in one I / O side network interface 6 among the plurality of I / O side network interfaces 6. Instead, a PCI-Express switch 9 is connected. Further, an I / O device 8 is connected to the PCI-Express switch 9.
  • the PCI-Express switch 9 is used when a plurality of I / O devices 8 are connected under the I / O side network interface 6. Similarly to the I / O device 8, a BDF number is assigned to the PCI-Express switch 9 from the I / O device manager 5.
  • FIG. 19 shows a case where there are two I / O devices 8 connected to the PCI-Express switch 9, but the number of I / O devices 8 is not limited to two.
  • the PCI-Express switch 9 has a function equivalent to PCI-PCI Bridge inside. For this reason, in the computer system 1a shown in FIG. 19, a virtual PCI-PCI Bridge inserted in the PCI-Express fabric according to the actual PCI-PCI Bridge and the number of I / O devices 8 allocated to the virtual machine 4 and the like. Will exist.
  • the I / O device manager 5 when executing the process of assigning the I / O device 8 to the virtual machine 4, the I / O device manager 5 passes the setting information to the virtual machine monitor 3 (the diagram in the first embodiment). 10 corresponds to step S54a), and a flag indicating a virtual device is added to the entry of virtual PCI-PCI Bridge in the setting information.
  • the I / O device manager 5 passes the I / O device list to the virtual machine monitor 3 (corresponding to step S54d of FIG. 17 in the second embodiment)
  • the I / O device list virtual PCI-PCI Bridge A flag indicating that it is a virtual device is assigned to the entry.
  • the virtual machine monitor 3 When the virtual machine monitor 3 receives the initial setting signal from the virtual machine 4, the virtual machine monitor 3 refers to the setting information or the flag given to the I / O device list, and when the initial setting target is the virtual PCI-PCI Bridge, Information on the initial setting of the I / O device 8 from the virtual machine 4 is not notified to the I / O device manager 5.
  • the virtual machine monitor 3 receives the initial setting signal from the virtual machine 4, the virtual machine monitor 3 refers to the setting information or the flag added to the I / O device list, and the initial setting target is the actual PCI-PCI Bridge. The information received from the virtual machine 4 is notified to the I / O device manager 5.
  • the I / O device 8 connected to the PCI-Express switch 9 is initialized after completion of the initial setting of the PCI-Express switch 9. Specifically, in the case of the first embodiment, the I / O device 8 is initialized by the I / O device allocation unit 33. In the case of the second embodiment, the I / O device 8 is initialized by the virtual machine 4. This can also be realized by a method similar to the operation at the time of initial setting of a standard PCI-Express fabric.
  • a flag indicating a virtual device is assigned to the virtual PCI-PCI Bridge used for causing the virtual machine 4 to recognize the I / O device 8 having a different bus number.
  • the virtual PCI-PCI Bridge and the actual PCI-PCI Bridge can be identified, and the PCI-Express switch 9 is connected to the end of the I / O-side network interface 6, and a plurality of I / Os are connected to the end.
  • a system in which the device 8 is connected can also be supported.
  • FIG. 20 is a block diagram showing a configuration example of a computer system according to the fourth embodiment of the present invention.
  • the computer system 1b has a configuration in which a global I / O device manager 10 is added to the configuration shown in FIG.
  • the global I / O device manager 10 determines the type and specification of the I / O device 8, the MAC address of the I / O side network interface 6 connected to the I / O device 8, and the assignment of the I / O device 8.
  • An I / O device list for managing the identifier of the previous virtual machine monitor 3 and the identifier of the virtual machine 4 to which the I / O device 8 is assigned is held.
  • the global I / O device manager 10 searches for an I / O device 8 in response to an I / O device 8 allocation request from all the virtual machine monitors 3 operating on the hardware 2 connected to the network 7. Then, allocation is performed and the information is notified to the I / O device manager 5.
  • the I / O device list will be described with reference to FIG.
  • the global I / O device manager 10 shown in FIG. 20 will be described.
  • FIG. 21 is a block diagram showing a configuration example of the global I / O device manager according to the fourth embodiment of the present invention.
  • the global I / O device manager 10 includes an I / O device setting unit 52 and an I / O device list 57.
  • the I / O device setting unit 52 is connected to the virtual machine monitor 3 and the I / O device manager 5 illustrated in FIG. 20 via the network 7.
  • the I / O device list 57 shown in FIG. 21 will be described.
  • FIG. 22 shows a configuration example of an I / O device list according to the fourth embodiment of the present invention.
  • the I / O device list 57 of this embodiment includes the type and specification of the I / O device 8, the MAC address of the I / O side network interface 6 connected to the I / O device 8, and the I / O device. 8 manages the identifier of the allocation destination virtual machine monitor 3 and the identifier of the allocation destination virtual machine 4 of the I / O device 8.
  • the I / O device manager 5 shown in FIG. 20 will be described.
  • FIG. 23 is a block diagram showing a configuration example of an I / O device manager according to the fourth embodiment of the present invention.
  • the I / O device manager 5 of the present embodiment has a configuration excluding the I / O device list 57 and the I / O device setting unit 52 from the configuration of the I / O device manager 5 described in the first embodiment. It has become.
  • the I / O device setting unit 52 When the I / O device setting unit 52 provided in the global I / O device manager 10 receives an inquiry about the availability of the I / O device from the virtual machine monitor 3 (step S30a in FIG. 10, step S30d in FIG. 17), The I / O device list 57 is searched (step S50a in FIG. 10 and step S50d in FIG. 17). Subsequently, the I / O device setting unit 52 stores information on the I / O device 8 that satisfies the specification conditions included in the inquiry with the same hardware as that of the virtual machine monitor 3 as the inquiry source. 5 (only the notification in step S54a in FIG. 10 and step S54d in FIG. 17). In addition to the information described in the first to third embodiments, the inquiry includes the identifier of the inquiry source virtual machine monitor 3.
  • the I / O device manager 5 performs initial setting of the I / O device (step S52a to step S53a in FIG. 10) according to the notification from the global I / O device manager 10. It is also conceivable that the global I / O device manager 10 notifies the virtual machine monitor 3 directly. In this case, the virtual machine monitor 3 registers information on the I / O device 8 based on the notification from the global I / O device manager 10 (step S31d in FIG. 17).
  • a global I / O device manager 10 that centrally manages the I / O devices 8 is provided.
  • the I / O device 8 can be assigned to the virtual machine 4 operating on each virtual machine monitor 3.
  • the computer of this embodiment may have the following configuration.
  • a computer A storage unit that holds an I / O device list for managing assignment of I / O devices connected to the computer via a network to a virtual machine operating on the computer;
  • a virtual machine monitor that identifies an I / O device necessary for the operation of the virtual machine; If there is an I / O device that can be assigned to the virtual machine by determining whether or not the I / O device specified by the virtual machine monitor can be assigned to the virtual machine with reference to the I / O device list.
  • An I / O device that allocates the I / O device to the virtual machine and registers an identifier assigned to the I / O device based on a predetermined specification together with the identifier of the virtual machine in the storage unit With the manager, Having a computer.
  • the storage unit includes an identifier of the virtual machine, the identifier of the I / O device assigned to the virtual machine, and an interface identifier that is an identifier of an interface connected between the I / O device and the network. It further has an address table for managing information consisting of The I / O device list includes the type and specification of the I / O device, the interface identifier of the interface connected to the I / O device, and the identifier of the virtual machine to which the I / O device is allocated.
  • the I / O device manager determines that the I / O device can be allocated to the virtual machine
  • the I / O device list and the address are determined using the identifier of the virtual machine and the identifier of the I / O device.
  • Update the table execute the initial setting of the I / O device assigned to the virtual machine before starting the virtual machine, notify the virtual machine monitor of the initial setting information
  • the virtual machine monitor holds initial setting information of the I / O device notified from the I / O device manager, starts the virtual machine, and then sends the I / O device sent from the virtual machine.
  • a computer which responds to the initial setting process by the virtual machine based on the held initial setting information of the I / O device when trapping the initial setting signal for the / O device.
  • the storage unit associates, with respect to the I / O device assigned to the virtual machine, information on a virtual identifier that is an identifier assigned by the virtual machine and the identifier assigned by the I / O device manager. It further has a number correspondence table to be held, When the virtual machine monitor receives an access request from the virtual machine to the I / O device, the virtual machine monitor reads the virtual identifier of the I / O device included in the access request, and corresponds to the read virtual identifier. A computer that identifies an identifier in the number correspondence table and notifies the I / O device manager of the access request including information on the identified identifier.
  • the storage unit A set of information including an identifier of the virtual machine, the identifier of the I / O device assigned to the virtual machine, and an interface identifier that is an identifier of an interface connected between the I / O device and the network. And an address table for managing A number table that holds the identifier of the I / O device assigned to the virtual machine;
  • the I / O device list includes the type and specification of the I / O device, the interface identifier of the interface connected to the I / O device, and the identifier of the virtual machine to which the I / O device is allocated.
  • the identifier of the I / O device is given by the virtual machine;
  • the virtual machine monitor starts the virtual machine and then traps a setting request signal from the virtual machine, the virtual machine monitor determines whether the target of the setting request is an I / O device registered in the number table.
  • the identifier of the virtual machine and the identifier of the I / O device included in the trapped signal are displayed Notify the manager,
  • the I / O device manager reads an interface identifier specified in the address table by the notified identifier of the virtual machine and the identifier of the I / O device, and transmits the I / O via the interface having the interface identifier.
  • a computer that performs initial configuration for a device.
  • the storage unit further includes an address reverse lookup table that associates and holds an interface identifier of the interface and an identifier of the virtual machine to which an I / O device connected to the interface is allocated,
  • the I / O device manager uses the information included in the request to Constructing a packet according to the specification of the fabric to which the packet belongs, transmitting a frame encapsulating the packet based on the specification of the network to the I / O device via the network and the interface
  • the I / O device manager receives a frame from the I / O device via the interface and the network
  • the I / O device manager decapsulates the packet of the frame based on the specification of the network, and transmits the packet from the packet after decapsulation
  • An interface identifier indicating the virtual machine registered in correspondence with the interface identifier, referring to the address reverse look
  • the I / O device manager is a computer that inserts virtual device information into the I / O device list based on a specification of a fabric to which the I / O device belongs.
  • the virtual machine monitor is a computer that does not notify information on a device to which information indicating that the virtual device is assigned even if an initial setting signal is received from the virtual machine.
  • a plurality of computers each including a virtual machine monitor including a virtual machine monitor that identifies an I / O device necessary for the operation of the virtual machine;
  • a storage unit holding an I / O device list for managing allocation to the virtual machine, and an I specified by the virtual machine monitor Whether or not an O / O device can be allocated to the virtual machine is searched from the I / O device list, and if there is an I / O device that can be allocated, the I / O device is allocated to the virtual machine,
  • a global I / O device manager including a device setting unit that assigns an identifier to the I / O device based on the specifications and registers the virtual machine monitor identifier and the virtual machine identifier in the I / O device list.
  • the device allocation management method of the present embodiment may have the following configuration.
  • a device allocation management method using a computer Storing an I / O device list for managing allocation to a virtual machine operating on the computer with respect to an I / O device connected to the computer via a network; Identify the I / O devices necessary for the operation of the virtual machine, Determining whether the specified I / O device can be assigned to the virtual machine with reference to the I / O device list; When there is an I / O device that can be assigned to the virtual machine, the I / O device is assigned to the virtual machine, and an identifier assigned to the I / O device based on a predetermined specification is assigned to the virtual machine.
  • the I / O device list includes the type and specification of the I / O device, the interface identifier of the interface connected to the I / O device, and the identifier of the virtual machine to which the I / O device is allocated. Information is stored in pairs, A set of information including an identifier of the virtual machine, the identifier of the I / O device assigned to the virtual machine, and an interface identifier that is an identifier of an interface connected between the I / O device and the network.
  • An address table for management is stored in the storage unit, When it is determined that the I / O device can be allocated to the virtual machine, the I / O device list and the address table are updated using the identifier of the virtual machine and the identifier of the I / O device, Before starting the virtual machine, execute the initial setting of the I / O device assigned to the virtual machine, and retain the initial setting information, After the virtual machine is activated, when the initial setting signal sent from the virtual machine to the I / O device is trapped, the virtual machine is based on the stored initial setting information of the I / O device.
  • a device allocation management method that responds to initial setting processing by a machine.
  • the I / O device list includes the type and specification of the I / O device, the interface identifier of the interface connected to the I / O device, and the identifier of the virtual machine to which the I / O device is allocated. Information is stored in pairs, The identifier of the I / O device is given by the virtual machine; A set of information including an identifier of the virtual machine, the identifier of the I / O device assigned to the virtual machine, and an interface identifier that is an identifier of an interface connected between the I / O device and the network.
  • An address table for managing and a number table for holding the identifier of the I / O device assigned to the virtual machine are stored in the storage unit. After starting the virtual machine, when a setting request signal is trapped from the virtual machine, it is determined whether the target of the setting request is an I / O device registered in the number table, When it is determined that the setting request target is an I / O device registered in the number table, the identifier of the virtual machine and the identifier of the I / O device included in the trapped signal are read out, An interface identifier is specified in the address table by the read identifier of the virtual machine and the identifier of the I / O device, A device allocation management method for executing initial setting for the I / O device via an interface having a specified interface identifier.
  • the program of this embodiment may have the following configuration.
  • the I / O device list includes the type and specification of the I / O device, the interface identifier of the interface connected to the I / O device, and the identifier of the virtual machine to which the I / O device is allocated. Information is stored in pairs, A set of information including an identifier of the virtual machine, the identifier of the I / O device assigned to the virtual machine, and an interface identifier that is an identifier of an interface connected between the I / O device and the network.
  • Storing an address table for management in the storage unit Determining that the I / O device can be assigned to the virtual machine, updating the I / O device list and the address table using the identifier of the virtual machine and the identifier of the I / O device; Before starting the virtual machine, execute an initial setting of the I / O device assigned to the virtual machine, and retain the information of the initial setting; After the virtual machine is activated, when the initial setting signal sent from the virtual machine to the I / O device is trapped, the virtual machine is based on the stored initial setting information of the I / O device. And a procedure for responding to initialization processing by the machine.
  • Appendix 15 In the program described in Appendix 14, For the I / O device assigned to the virtual machine, a number correspondence table that holds information on the virtual identifier that is an identifier assigned by the virtual machine and the identifier of the I / O device in association with each other. The procedure of storing in the storage unit; When an access request to the I / O device is received from the virtual machine, the virtual identifier of the I / O device included in the access request is read, and the identifier corresponding to the read virtual identifier is displayed in the number correspondence table.
  • a program further comprising:
  • the I / O device list includes the type and specification of the I / O device, the interface identifier of the interface connected to the I / O device, and the identifier of the virtual machine to which the I / O device is allocated. Information is stored in pairs, The identifier of the I / O device is given by the virtual machine; A set of information including an identifier of the virtual machine, the identifier of the I / O device assigned to the virtual machine, and an interface identifier that is an identifier of an interface connected between the I / O device and the network.
  • the present invention can be applied to an application in which a hardware function of an I / O device is used for a large number of virtual machines in a computer system using server virtualization technology.

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Stored Programmes (AREA)

Abstract

予め仕様が決められたPCIファブリックに接続するI/Oデバイスの数を増加させることを可能にしたコンピュータを提供する。コンピュータは、コンピュータとネットワークを介して接続されたI/Oデバイスについて、コンピュータで動作する仮想マシンへの割り当てを管理するためのI/Oデバイスリストを保持する記憶部と、仮想マシンの動作に必要なI/Oデバイスを特定する仮想マシンモニタと、仮想マシンモニタによって特定されたI/Oデバイスが仮想マシンに割り当て可能か否かをI/Oデバイスリストを参照して判定し、仮想マシンに割り当て可能なI/Oデバイスがあると、仮想マシンにI/Oデバイスを割り当て、I/Oデバイスに対して予め決められた仕様に基づいて付与された識別子を仮想マシンの識別子とともに記憶部に登録するI/Oデバイスマネージャーと、を有する。

Description

コンピュータ、デバイス割当管理方法及びプログラム記録媒体
 本発明は、計算機のI/Oファブリックを管理する技術に関する。特に、本発明は、計算機の筐体に収容できない数のI/Oデバイスをネットワーク越しに接続するコンピュータ、デバイス割当管理方法及びプログラム記録媒体に関する。
 サーバ仮想化技術によって、1台の計算機に複数の独立したOS(Operating System)を仮想マシン(VM:Virtual Machine)として動かし、1台の計算機をあたかも複数の計算機として使用できるようになった。1台のサーバに搭載されるCPU(Central Processing Unit)コア数及びメモリ量の増加により、1台のサーバ上で稼働する仮想マシン数は増加し、場合によっては、1台のサーバ上で100を超す仮想マシンを稼働させることもある。
 このようなサーバ仮想化技術では、各仮想マシンに仮想的なハードウェア、すなわち仮想的なCPU、メモリ、ディスク装置、I/Oデバイス、などを提供し、各仮想マシンはあたかも実ハードウェアであるかのように、これらの仮想的なハードウェアを利用する。
そのため、各仮想マシンが仮想的なハードウェアを利用する場合、サーバ仮想化技術の主要な構成要素の1つであるハイパーバイザ、あるいは仮想マシンモニタ(VMM:Virtual Machine Monitor)と呼ばれる管理プログラムが、仮想マシンのハードウェアへのアクセスをトラップし、実ハードウェアのリソースへの適切なアクセスを行う。そのため、仮想マシンが何らかの処理を行う場合、仮想マシンモニタのオーバヘッドが加わるため、一般に実ハードウェア上で稼働するOSよりも、仮想マシンの方が性能が低くなる。
 オーバヘッドを回避するために、仮想マシンに実ハードウェアリソースを直接割り当てる技術が提案され、実現されている。その技術の1つがPCI(Peripheral Component Interconnect)パススルーである。PCIパススルーでは、特定の仮想マシンに、PCIバス又はPCI-Expressファブリックに接続されたI/Oデバイスへの直接のアクセスを可能にし、仮想マシンモニタのオーバヘッドを削減できる。以下に、PCIパススルー技術について説明するが、本明細書では、I/OデバイスをPCI-Expressにおけるエンドポイントを指すものとする。
 しかし、PCIパススルーでは、対象のI/Oデバイスが特定の仮想マシンに占有されてしまうため、他の仮想マシンからは利用できないという課題がある。そこで、1つのI/Oデバイスを複数の仮想マシンから直接アクセス可能にする技術が提案された。それがSR-IOV(Single Root-I/O Virtualization)である。SR-IOVに対応したI/Oデバイスは、複数のホストインタフェースを備え、各ホストインタフェースを仮想マシンに割り当てることで、複数の仮想マシンから単一のI/Oデバイスの共有を可能にしている。SR-IOVはイーサネット(登録商標)用NIC(Network Interface Controller)に採用される例が多く、NIC以外のI/Oデバイス、例えばディスクコントローラやグラフィックスカードに採用される例はまれである。
 PCIパススルー及びSR-IOV(以下では、これらの技術を「パススルー技術」と総称する)のメリットは性能面だけでなく、I/Oデバイスのハードウェアが備える機能を仮想マシンが利用できるようになるという、機能面のメリットも存在する。仮想マシンが通常使用する仮想的なハードウェアは、世代の古いハードウェアを模したものが多く、一般的にシンプルな機能のみを備えている。例えばハイエンドなイーサネット(登録商標)用NICが備えるようなTCP(Transmission Control Protocol)のオフロード機能などは利用できない。PCIパススルー技術では、I/Oデバイスを直接仮想マシンに割り当てるため、仮想マシンはこのようなオフロード機能を利用することができるようになる。
 ここで、図24を用いて、PCI-Expressファブリックの初期設定について説明する。図24はPCI-Expressファブリックの一例を示したものである。
 図24に示すように、PCI-Expressファブリック200は、PCI-Express Root Complex201をファブリックの根本(Root)として、PCI-Express Root Complex201、PCI-Expressエンドポイント202~207、及びPCI-Expressスイッチ208~209がPCI-Expressリンク210~217を介して接続された構成である。
 本明細書では、PCI-Express Root Complex、PCI-Expressエンドポイント、PCI-Expressスイッチを総称してPCI-Expressデバイスと称する。なお、以下に説明する初期設定方法は、一般的なPC(Personal Computer)と、Linux(登録商標)などの汎用OSで行われている方法であるが、これ以外の初期設定方法も可能である。
 まず、PCに電源が投入されると、BIOS(Basic Input/Output System)又はOSがPCI-Expressファブリック200内のサーチを行う。このサーチは、PCI-Expressファブリック200内の全てのPCI-Expressデバイスを検出し、設定を行うために行われる。PCI-Expressでは、PCI-ExpressデバイスはBDF(Bus、Device、Function)という3つの番号(バス番号(0~255)、デバイス番号(0~31)、ファンクション番号(0~7))で識別される。なお、ファンクション番号は、同一のPCI-Expressデバイスが複数の機能を備えている場合に、各機能を識別できるようにするために使用される番号である。
 ここで、PCI-Express Root Complex201と、PCI-Expressスイッチ208~209について説明する。
 図25は、PCI-Express Root Complex201の内部の構成を簡易的に示したブロック図である。
 図25を参照すると、PCI-Express Root Complex201は、PCI Compatible Host Bridge Deviceと、PCI-PCI Bridge(Root PCI-Express Port)と、Root Complex Register Block(ただしOptional)とを有する。
これらの接続のために、PCI-Express Root Complexは、内部でバス番号を1つ消費する。PCI-Express Root Complexは、PCI-Expressファブリックの根本(Root)に位置するデバイスであるため、消費するバス番号は「0」である。
 図26は、PCI-Expressスイッチ208~209の内部の構成を簡易的に示したブロック図である。
 図26を参照すると、PCI-Expressスイッチ208~209は、PCI-PCI Bridge(Upstream PCI-Express Port、上流ポート)と、PCI-PCI Bridge(Downstream PCI-Express Port、下流ポート)とを有する。これらの接続のために、PCI-Expressスイッチ208~209は、内部でバス番号を1つ消費する。ここで、上流とは、PCI-Expressファブリック上で、PCI-Express Root Complex201側に近づく方向を意味する。下流とは、PCI-Expressファブリック上で、PCI-Express Root Complex201から離れる方向を意味する。図26は、下流ポートが2本の場合を示しているが、下流ポートが3本であってもよい。
 PCI-Expressでは、PCI-Expressデバイス間はバス接続ではなく、スイッチによるPoint-to-Point接続であるため、PCI-Express Root Complex201のPCI-to-PCI Bridge、又はPCI-Expressスイッチの208~209の各PCI-PCI Bridge(Downstream PCI-Express Port)に、1つだけPCI-Expressエンドポイント、又はPCI-Expressスイッチが接続され、各リンクに異なるバス番号が割り当てられる。
 サーチの際には、バス番号0からサーチを行っていく。BIOS又はOSなどの初期設定プログラムは、バス番号0の各デバイス番号宛に、PCI-ExpressデバイスのベンダーID(IDentification)を読み出す処理を行う。ベンダーIDは、PCI-ExpressデバイスのPCIコンフィギュレーション空間と呼ばれるレジスタ群に保存されている。この値が0xFFFF(0xは16進数を示すプレフィックス)でなければ、何らかのPCI-Expressデバイスが接続されていることを示す。
 次に、何らかのPCI-Expressデバイスが接続されていることを検出すると(図24のPCI-Expressエンドポイント202~203、PCI-Expressスイッチ208)、初期設定プログラムは、そのPCI-Expressデバイスに対して、クラスコードの読み出しを実行する。クラスコードもPCIコンフィギュレーション空間に保存されている。クラスコードによって、そのPCI-Expressデバイスが映像出力用のデバイスなのか、など、そのデバイスの種別が分かる。クラスコードがPCI-Expressスイッチなど、異なるバス番号のリンク間を接続するデバイスの場合、現在サーチしているバス番号の下流にさらにPCI-Expressデバイスが存在する可能性があることが分かる。
 次に、検出したPCI-ExpressデバイスがPCI-Expressエンドポイントの場合(図24のPCI-Expressエンドポイント202~203)、初期設定プログラムは、そのPCI-Expressエンドポイントに、I/O領域、メモリ領域の割り当てを行う。この割り当ては、PCI-ExpressデバイスのPCIコンフィギュレーション空間が備えるBAR(Base Address Register)の設定を行うことで実現される。
 PCI-ExpressエンドポイントのBARは最大で0~5の6つが備えられており、PCI-Expressエンドポイントが必要とするI/O領域、メモリ領域の情報を保持する。初期設定プログラムは、BAR0に対して、0xFFFFFFFFを書き込み、BAR0の値を読み出す。すると、読み出した値によって、I/O領域とメモリ領域のどちらを要求しているか、どのくらいのサイズの領域を必要としているか、などが判明する。初期設定プログラムは、その要求に従って、BAR0にベースアドレスを書き込む。このベースアドレスから、ベースアドレスにPCI-Expressエンドポイントが要求したサイズを加算した値までが、このPCI-Expressエンドポイントに割り当てられたI/O領域、又はメモリ領域である。BARの設定は、PCI-Expressエンドポイント間で重ならないように設定される。初期設定プログラムは、BAR1~5に対しても、同様の処理を行う。さらに、初期設定プログラムは、PCIコンフィギュレーション空間のコマンドレジスタ、キャッシュラインサイズレジスタ、レイテンシタイマレジスタの設定も行う。
 次に、検出したPCI-Expressデバイスが、PCI-Express Root ComplexやPCI-Expressスイッチのようなブリッジデバイスの場合(図24のPCI-Expressスイッチ208)、初期設定プログラムは、まず、PCI-Expressエンドポイントと同様にBARの設定を行う。ブリッジデバイスの場合、BARは最大で0~1の2つである。
 そして、初期設定プログラムは、ブリッジデバイスのPCIコンフィギュレーション空間の、コマンドレジスタ、キャッシュラインサイズレジスタ、レイテンシタイマレジスタの設定を行う。さらに、プライマリバス番号レジスタ、セカンダリバス番号レジスタ、サブオーディネートバス番号レジスタの設定を行う。プライマリバス番号とは、自ブリッジデバイスの上流側に存在するバスの番号を指し、セカンダリバス番号とは、自ブリッジデバイスの下流側に存在するバスの番号を指す。サブオーディネートバス番号とは、自ブリッジデバイスの下流に存在するリンクのうち、最大のバス番号を持つリンクのバス番号を示す。この時点では、全デバイスの検出を完了していないため、サブオーディネート番号は、最大の値である0xFFが設定される。
 そして、初期設定プログラムは、メモリベースアドレスレジスタ、I/Oベースアドレスレジスタの設定を行う。メモリベースアドレスレジスタは、セカンダリバス側に割り当てるメモリ空間の開始アドレス、I/Oベースアドレスレジスタは、セカンダリバス側に割り当てるI/O空間の開始アドレスを示す。
 続けて、初期設定プログラムは、このデバイスの下流に接続されているPCI-Expressデバイスのサーチを行う。下流側のサーチを再帰的に行い、完了すると、PCI-Expressスイッチ209、208の順で、最終的なサブオーディネートバス番号が決まる。また、メモリリミットアドレス、I/Oリミットアドレスの値も決まり、これらをPCIコンフィギュレーションレジスタの適切な位置に格納する。メモリリミットアドレスは、セカンダリバス側に割り当てるメモリ空間のサイズであり、I/Oリミットアドレスは、セカンダリバス側に割り当てるI/O空間のサイズである。初期設定プログラムは、下流側を再帰的にサーチする際に、各リンクに存在するデバイスに設定したBARの設定値を保持することで、各リンクに割り当てたメモリ空間、I/O空間のサイズを算出することができる。これにより、上流側のブリッジデバイスでのメモリリミットアドレス、I/Oリミットアドレスの値を求める。
 このようにして、初期設定プログラムは、PCI-Expressファブリックの設定を完了する。図24に示すPCI-Expressファブリック200では、まず、初期設定プログラムは、PCI-Express Root Complex201の設定を行う。続いて、初期設定プログラムは、PCI-Expressエンドポイント202、PCI-Expressエンドポイント203、PCI-Expressスイッチ208、PCI-Expressエンドポイント204、PCI-Expressスイッチ209、PCI-Expressエンドポイント206、PCI-Expressエンドポイント207、PCI-Expressスイッチ209の順で設定を行っていく。最後のPCI-Expressスイッチ209の設定では、I/Oリミットアドレス、メモリリミットアドレス、サブオーディネート番号を設定する。続いて、初期設定プログラムは、PCI-Expressエンドポイント205、PCI-Expressスイッチ208の順で設定を行っていく。PCI-Expressスイッチ208の設定では、I/Oリミットアドレス、メモリリミットアドレス及びサブオーディネート番号を設定する。その後、初期設定プログラムは、PCI-Express Root Complex201について、I/Oリミットアドレス、メモリリミットアドレス及びサブオーディネート番号を設定する。
 PCI-Expressの場合、PCI-ExpressデバイスのPCIコンフィギュレーション空間に対して初期設定プログラムがアクセスするとき、初期設定プログラムは、コンフィギュレーションリードリクエスト又はコンフィギュレーションライトリクエストを発行する。これらのリクエストでは、宛先のデバイスを識別する情報として、BDF番号が書き込まれている。PCI-Expressデバイス側は、コンフィギュレーションライトリクエストに含まれる宛先BDF番号を、自身のBDF番号として保持する。
このBDF番号は、PCI-Expressデバイス側からメモリリードリクエストやメモリライトリクエストなどのリクエストが発行される際に、送信元のPCI-Expressデバイスを示す情報として、リクエストに書き込まれる。
 今後、1台のサーバで稼働する仮想マシン数が漸増し、それぞれの仮想マシンに1つ以上のI/OデバイスをPCIパススルーやSR-IOVで割り当てようとすると、サーバやPCの筐体に必要な数のI/Oデバイスを設けることができなくなると予想される。一般に、2U(筺体の厚みが8.89cm)のサーバであれば、5~6個のI/Oデバイスを装着できるが、装着できるI/Oデバイスの数は仮想マシンの数に比べるとあまりにも少ない。
 上述した状況に対して、PC又はサーバに予め設けられたPCI-Expressスロットの数よりも多い数のI/Oデバイスを接続可能にした技術が開発されている。具体的には、サーバ又はPCの筐体内にのみ存在していたPCI-Expressファブリックを筐体外に延長し、ケーブルとスイッチで、I/Oデバイスが装着されたI/OボックスとPC又はサーバとを接続することで、PCI-Expressスロットの数よりも多い数のI/Oデバイスを接続可能にしている。このような技術に基づく製品が非特許文献1及び非特許文献2に開示されている。
 非特許文献1に開示された技術は、PCI-Expressスイッチの上流側の機能を模したI/Oカードと、下流側の機能を模したI/O拡張ボックスと、それらを接続するイーサネット(登録商標)とで、PCI-Expressファブリックを筐体外に延長するものである。非特許文献2に開示された技術は、PCI-Expressの信号を延長するI/Oカードとケーブルで、PCI-Expressファブリックを筐体外に延長するものである。
"ExpEther Products",[online],ExpEther Consortium,[2015年10月13日検索],インターネット<URL:http://www.expether.org/eproduct.html> "MAGMA ExpresBox3200",[online],MAGMA社,[2015年10月13日検索],インターネット<URL:http://magma.com/back-office/wp-content/uploads/2015/03/EB3200-Datasheet.pdf>
 以下の分析は、本発明によって与えられたものである。
 非特許文献1及び2に開示された技術では、パススルー技術を利用する仮想マシンに必要な数だけのI/Oデバイスを割り当てることができない場合があるという課題が存在する。以下に、その理由を説明する。
 I/Oデバイスは、PCI-Expressファブリック内で、BDF番号で識別される。また、異なるバス番号を持つPCI-Expressリンク同士を接続するブリッジデバイスにも、固有のBDF番号が割り振られる。ファンクション番号は、同一のPCI-Expressデバイスが複数の機能(ファンクション)を持つ場合に、機能を区別するための番号である。そのため、I/Oデバイスという単位では、BDF番号のうち、バス番号(B)とデバイス番号(D)で識別される。
 BDF番号は、その取りうる値がPCI-Expressの仕様で定められており、バス番号が0~255の256個、デバイス番号が0~31の32個である。そのため、1つのPCI-Expressファブリックで最大で256×32=8192個のPCI-Expressデバイスを収容可能である。
 しかし、仮に1台のサーバで1000個の仮想マシンを稼働させ、各仮想マシンに10個のI/Oデバイスをパススルー技術で割り当てる場合、I/OデバイスがSR-IOVに対応していなければ、PCI-Expressファブリックに収容可能なデバイス数以上のI/Oデバイスが必要になり、そのようなシステムを構成できないことになる。
 非特許文献1及び2に開示された技術は、1台のサーバ又はPCに搭載可能なI/Oデバイス数を増加させる技術であって、PCI-Expressファブリックに接続可能なI/Oデバイス数を増加させる技術ではない。そのため、上記の課題を解決できない。PCI-Expressファブリックに限らず、接続されるI/Oデバイスの数が予め決められた仕様によって制限されるPCIファブリックであれば、同じ課題が起こり得る。
 本発明は、上述した問題点に鑑みて創案されたものであって、予め仕様が決められたPCIファブリックに接続するI/Oデバイスの数を増加させることを可能にしたコンピュータ、デバイス割当管理方法、及びコンピュータに実行させるためのプログラム記録媒体を提供することを目的とする。
 上記目的を達成するための本発明のコンピュータは、
 前記コンピュータとネットワークを介して接続されたI/Oデバイスについて、前記コンピュータで動作する仮想マシンへの割り当てを管理するためのI/Oデバイスリストを保持する記憶部と、
 前記仮想マシンの動作に必要なI/Oデバイスを特定する仮想マシンモニタと、
 前記仮想マシンモニタによって特定されたI/Oデバイスが前記仮想マシンに割り当て可能か否かを前記I/Oデバイスリストを参照して判定し、該仮想マシンに割り当て可能なI/Oデバイスがあると、該仮想マシンに該I/Oデバイスを割り当て、該I/Oデバイスに対して予め決められた仕様に基づいて付与された識別子を該仮想マシンの識別子とともに前記記憶部に登録するI/Oデバイスマネージャーと、
を有する構成である。
 また、本発明のデバイス割当管理方法は、コンピュータによるデバイス割当管理方法であって、
 前記コンピュータとネットワークを介して接続されたI/Oデバイスについて、前記コンピュータで動作する仮想マシンへの割り当てを管理するためのI/Oデバイスリストを記憶部に格納し、
 前記仮想マシンの動作に必要なI/Oデバイスを特定し、
 特定されたI/Oデバイスが前記仮想マシンに割り当て可能か否かを前記I/Oデバイスリストを参照して判定し、
 前記仮想マシンに割り当て可能なI/Oデバイスがあると、該仮想マシンに該I/Oデバイスを割り当て、該I/Oデバイスに対して予め決められた仕様に基づいて付与された識別子を該仮想マシンの識別子とともに前記記憶部に登録するものである。
 さらに、本発明のプログラム記録媒体は、コンピュータに、
 前記コンピュータとネットワークを介して接続されたI/Oデバイスについて、前記コンピュータで動作する仮想マシンへの割り当てを管理するためのI/Oデバイスリストを記憶部に格納する手順と、
 前記仮想マシンの動作に必要なI/Oデバイスを特定する手順と、
 特定されたI/Oデバイスが前記仮想マシンに割り当て可能か否かを前記I/Oデバイスリストを参照して判定する手順と、
 前記仮想マシンに割り当て可能なI/Oデバイスがあると、該仮想マシンに該I/Oデバイスを割り当て、該I/Oデバイスに対して予め決められた仕様に基づいて付与された識別子を該仮想マシンの識別子とともに前記記憶部に登録する手順を実行させるプログラムを記録する。
 本発明によれば、PCIファブリックに予め決められた仕様に制限されず、接続可能なI/Oデバイス数を増加させることができる。
本発明の第1の実施形態に係るコンピュータシステムの一構成例を示すブロック図である。 本発明の第1の実施形態に係る仮想マシンモニタの一構成例を示すブロック図である。 本発明の第1の実施形態に係るアドレス範囲テーブルの構成例を示したものである。 本発明の第1の実施形態に係るBDF番号対応テーブルの構成例を示したものである。 本発明の第1の実施形態に係るI/Oデバイスマネージャーの一構成例を示すブロック図である。 本発明の第1の実施形態に係るMACアドレステーブルの構成例を示したものである。 本発明の第1の実施形態に係るI/Oデバイス設定内容保持テーブルの構成例を示したものである。 本発明の第1の実施形態に係るI/Oデバイスリストの構成例を示したものである。 本発明の第1の実施形態に係るMACアドレス逆引きテーブルの構成例を示したものである。 本発明の第1の実施形態に係る、仮想マシンを起動する際の、仮想マシンモニタ、仮想マシン、I/Oデバイスマネージャー、I/O側ネットワークインタフェース、I/Oデバイスの動作を示したシーケンス図である。 本発明の第1の実施形態に係る、仮想マシンからI/Oデバイスへメモリリード/ライトリクエストを発行した際の、処理の流れを示したシーケンス図である。 本発明の第1の実施形態に係る、I/Oデバイスから仮想マシンへメモリリード/ライトリクエストを発行した際の、処理の流れを示したシーケンス図である。 本発明の第2の実施形態に係る仮想マシンモニタの一構成例を示すブロック図である。 本発明の第2の実施形態に係るBDF番号テーブルの構成例を示したものである。 本発明の第2の実施形態に係るI/Oデバイス割当リストの構成例を示したものである。 本発明の第2の実施形態に係るI/Oデバイスマネージャーの一構成例を示したものである。 本発明の第2の実施形態に係る、仮想マシンを起動する際の、仮想マシンモニタ、仮想マシン、I/Oデバイスマネージャー、I/Oデバイスの動作を示したシーケンス図である。 本発明の第2の実施形態に係る、仮想マシンからI/Oデバイスへメモリリード/ライトリクエストを発行した際の、処理の流れを示したシーケンス図である。 本発明の第3の実施形態に係るコンピュータシステムの一構成例を示すブロック図である。 本発明の第4の実施形態に係るコンピュータシステムの一構成例を示すブロック図である。 本発明の第4の実施形態に係るグローバルI/Oデバイスマネージャーの一構成例を示すブロック図である。 本発明の第4の実施形態に係るI/Oデバイスリストの構成例を示したものである。 本発明の第4の実施形態に係るI/Oデバイスマネージャーの一構成例を示すブロック図である。 PCI-Expressファブリックの一例を示したものである。 図24に示したPCI-Express Root Complexの内部の構成を簡易的に示したブロック図である。 図24に示したPCI-Expressスイッチの内部の構成を簡易的に示したブロック図である。
 本発明の実施形態について図面を参照して説明する。なお、この説明に付記する図面や参照符号は、理解を助けるための一例として各要素に便宜上付記したものであり、本発明を図示の態様に限定することを意図するものではない。
 [第1の実施形態]
 [構成の説明]
 図1は、本発明の第1の実施形態に係るコンピュータシステムの一構成例を示すブロック図である。図1を参照すると、コンピュータシステム1は、ハードウェア2と、仮想マシンモニタ3と、仮想マシン4と、I/Oデバイスマネージャー5と、I/O側ネットワークインタフェース6と、ネットワーク7と、I/Oデバイス8と、を有する。
 本実施形態では、I/Oデバイス8はPCI-Expressエンドポイントであり、ネットワーク7はイーサネット(登録商標)であるとして説明を行うが、このことは本発明を、これらを必須要素とすることに限定することを意図するものではない。
 ハードウェア2はコンピュータを構成する基本的な要素(不図示)であるCPU、メモリ、ディスク装置及びネットワークインタフェースカード(NIC)21を含む構成である。図1は、ハードウェア2において、CPUがプログラムを実行することで、仮想マシン4、I/Oデバイスマネージャー5及び仮想マシンモニタ3が仮想的に構成されることを表している。
 仮想マシンモニタ3は、仮想マシン4に仮想的なハードウェアを提供し、仮想マシン4が仮想的なハードウェアを使用する際に、ハードウェア2のリソースを割り当てる機能を持つ。サーバ仮想化環境では、仮想マシンモニタ3を、Linux(登録商標)などの汎用OSの上で稼働するソフトウェアとして実現する方法や、コンピュータ上で稼働するOSの機能も併せ持つ専用ソフトウェアとして実現する方法が存在する。前者の例としてはKVM(Kernel-based Virtual Machine)が挙げられ、後者の例としてはXenServerやVMwareが挙げられる。以下では、前者の構成をベースとして説明するが、このことは本発明をそのような構成のサーバ仮想化環境に限定することを意図するものではない。
 仮想マシン4は、仮想マシンモニタ3の制御のもとで稼働する仮想計算機環境である。仮想マシンモニタ3から提供される仮想ハードウェア上にOSをインストールすることで、あたかも実計算機環境で稼働するOSのように利用することが可能となる。
 仮想マシン4が、仮想計算機環境上の資源を利用する際には、仮想マシンモニタ3による制御が介入する。例えば、仮想マシン4の上で稼働するアプリケーションがメモリにアクセスする場合、まず、仮想マシン4の中で、仮想アドレス(ゲスト仮想アドレス(Guest Virtual Address))と物理アドレス(ゲスト物理アドレス(Guest Physical Address))の変換が行われ、さらに、ゲスト物理アドレスを用いた仮想マシン4のメモリアクセスを仮想マシンモニタ3が検知し、そのゲスト物理アドレスを、仮想マシンモニタの仮想アドレス(ホスト仮想アドレス、Host Virtual Address)、又は物理アドレス(ホスト物理アドレス、Host Physical Address)に変換する。ホスト仮想アドレスに変換した場合は、さらにホスト物理アドレスに変換される。このような変換を経て、仮想マシン4はメモリアクセスを行うことができる。
 I/Oデバイスマネージャー5は、I/Oデバイス8を管理するモジュールである。I/Oデバイス8は、I/O側ネットワークインタフェース6、ネットワーク7及びNIC21を介してI/Oデバイスマネージャー5と接続される。
 I/Oデバイスマネージャー5は、I/Oデバイス8の初期設定や、I/Oデバイス8とのデータ転送リクエストの制御を行う。
 I/Oデバイス8の初期設定とは、I/Oデバイス8が持つBARなどのPCIコンフィギュレーション空間のレジスタへの値の設定を指す。
 PCI-Expressの場合、I/Oデバイスマネージャー5とI/Oデバイス8とのデータ転送リクエストは、メモリリード/ライトリクエスト、I/Oリード/ライトリクエスト、メッセージリクエスト、コンプリーションの種別が存在する。これらにはそれぞれ特有のフォーマットがある。メモリリード/ライトリクエストは、メモリリードリクエスト及びメモリライトリクエストを意味する。I/Oリード/ライトリクエストは、I/Oリードリクエスト及びI/Oライトリクエストを意味する。
 I/Oデバイスマネージャー5は、リクエストに応じて、それぞれのフォーマットに従ったパケット(TLP(Transaction Layer Protocol)パケット)の生成、TLPパケットのイーサネットフレームでのカプセル化、及びカプセル化したフレームの送信を行う。I/Oデバイスマネージャー5は、I/Oデバイス8から受け取るイーサネットフレームからTLPパケットを取り出し、TLPパケットの内容を仮想マシンモニタ3に通知する。
 なお、図1では、I/Oデバイスマネージャー5が仮想マシンモニタ3とは別の構成要素で示されているが、I/Oデバイスマネージャー5が仮想マシンモニタ3に含まれる構成にすることも可能である。
 I/O側ネットワークインタフェース6は、I/Oデバイス8をネットワーク7に接続するためのインタフェースである。I/O側ネットワークインタフェース6はI/Oデバイス8ごとに設けられている。本実施形態ではネットワーク7としてイーサネット(登録商標)を前提としているため、I/O側ネットワークインタフェース6は固有のMAC(Media Access Control)アドレスを持つ。
 I/O側ネットワークインタフェース6は、I/Oデバイスマネージャー5から送信されたイーサネットフレームから、TLPパケットを取り出す機能を有する。また、I/O側ネットワークインタフェース6は、I/Oデバイス8からのTLPパケットをイーサネットフレームでカプセル化してI/Oデバイスマネージャー5に送信する機能を有する。
 I/O側ネットワークインタフェース6は、I/Oデバイス8がTLPパケットを送信できるようにするために、NIC21のMACアドレスを保持する機能を有する。さらに、I/O側ネットワークインタフェース6は、I/Oデバイスマネージャー5側からの要求に応じて、接続されているI/Oデバイス8をリセット(初期化)することも可能である。
 ネットワーク7は、汎用のコンピュータネットワークであり、本実施形態ではイーサネット(登録商標)である。ネットワーク7は、ケーブル及びスイッチで構成されている。
ネットワーク7は、NIC21と、I/O側ネットワークインタフェース6とを接続する。
 I/Oデバイス8は、本来であれば、コンピュータの拡張バスに接続されるI/Oデバイスであり、本実施形態ではPCI-Expressエンドポイントに相当する。I/Oデバイス8の例として、NIC、GPU(Graphics Processing Unit)カード、RAID(Redundant Arrays of Independent Disks)コントローラ、サウンドカード、などが挙げられる。
 I/Oデバイス8は、I/Oデバイスマネージャー5から初期設定される際に、BDF番号が通知される。I/Oデバイス8は、I/O側ネットワークインタフェース6の識別子とBDF番号からなる組で識別される。
 本実施形態では、I/O側ネットワークインタフェース6の識別子とは、MACアドレスである。ネットワーク7がイーサネット(登録商標)以外のネットワークである場合、I/O側ネットワークインタフェース6をそのネットワークに対応したネットワークインタフェースとし、そのネットワークで定められた識別子をI/O側ネットワークインタフェース6の識別子とする。例えば、ネットワーク7がInfiniBandの場合、I/O側ネットワークインタフェース6はInfiniBandプロトコルに対応したネットワークインタフェースとなり、GUID(Globally Unique Identifier)という識別子を持つことになる。
 次に、図1に示した仮想マシンモニタ3の構成について説明する。
 図2は、本発明の第1の実施形態に係る仮想マシンモニタの一構成例を示すブロック図である。図2を参照すると、仮想マシンモニタ3は、仮想マシンインタフェース31、リクエスト発行先決定部32、I/Oデバイス割当部33、I/Oデバイスマネージャーインタフェース34、アドレス範囲テーブル35、BDF番号対応テーブル36、NICドライバ37、及びリソースファイル保持部38を有する。
 仮想マシンインタフェース31は、仮想マシン4と仮想マシンモニタ3の間のデータのやり取りを行うためのインタフェースである。例えば、仮想マシンインタフェース31は、仮想マシンモニタ3が仮想マシン4を起動する際、仮想マシン4に割り当てるリソースの情報を仮想マシンモニタ3から仮想マシン4に通知するために使用される。また、仮想マシンインタフェース31は、仮想マシン4がI/Oデバイス8を利用する際、仮想マシン4から仮想マシンモニタ3がリクエストを受け取ったりするために使用される。
 リクエスト発行先決定部32は、仮想マシン4からI/Oデバイス8を利用する旨のリクエストを受け取ると、リクエストに含まれる情報に基づいて、リクエストの発行先が仮想マシンモニタ3によって管理されるI/Oデバイスか、I/Oデバイスマネージャー5によって管理されるI/Oデバイス8かを判断する。
 PCI-Expressにおいては、I/Oデバイスへのアクセスは、BDF番号を用いるか、メモリアドレスを用いて行われる。そのため、リクエスト発行先決定部32は、仮想マシン4からI/Oデバイス8へのリクエスト種別に応じて、BDF番号又はメモリアドレスに基づいて、仮想マシンモニタ3とI/Oデバイスマネージャー5のうち、どちらが管理するI/Oデバイスへのリクエストかを判断する。
 I/Oデバイス割当部33は、仮想マシン4に、I/Oデバイスマネージャー5が管理するI/Oデバイス8を割り当てる機能を有する。
 一般的に、仮想マシン4にPCIパススルー技術でI/Oデバイスを割り当てる際、仮想マシンモニタ3が、PCIパススルー技術で割り当てるI/Oデバイスの識別子(BDF番号など)を指定する。指定の方法は、コマンドラインのオプションで指定する、GUI(Graphical User Interface)ツール上で操作を行う方法、などがある。I/Oデバイス割当部33も、I/Oデバイスマネージャー5が管理するI/Oデバイス8を仮想マシン4に割り当てる際、何らかの方法で、どの仮想マシン4に、どのような種類・スペックのI/Oデバイス8を割り当てるかという情報を、I/Oデバイス割当部33の外部モジュール(不図示)より受け取る。
 I/Oデバイス割当部33は、外部モジュールより指定された種類・スペックのI/Oデバイス8を利用することができるかどうかを、I/Oデバイスマネージャー5に問い合わせる。I/Oデバイス割当部33は、利用可能であることがI/Oデバイスマネージャー5から通知されると、仮想マシン4が起動する際に行うI/Oデバイスのサーチ時に、I/Oデバイスマネージャー5からの通知に含まれるI/Oデバイス8の識別子とリソース情報を用いてI/Oデバイス8の存在を仮想マシン4に通知する。
 I/Oデバイスマネージャーインタフェース34は、仮想マシンモニタ3とI/Oデバイスマネージャー5との間でデータのやり取りを行うためのインタフェースである。例えば、I/Oデバイスマネージャーインタフェース34をソケットなどの通信インタフェースで実現することができる。例えば、I/Oデバイスマネージャーインタフェース34は、仮想マシンモニタ3が、仮想マシン4に割り当てるI/Oデバイス8が利用可能かどうかをI/Oデバイスマネージャー5に問い合わせる際に使用される。また、I/Oデバイスマネージャーインタフェース34は、仮想マシン4からのI/OデバイスへのリクエストがI/Oデバイスマネージャー5が管理するI/Oデバイス8宛だった場合に、リクエストを転送するために使用される。
 図2に示したアドレス範囲テーブル35について説明する。
 アドレス範囲テーブル35は、仮想マシン4に割り当てたI/Oデバイス8のBARに設定した情報を保持するテーブルである。アドレス範囲テーブル35は、仮想マシン4ごとに設けられる。アドレス範囲テーブル35は、仮想マシン4の起動時に、仮想マシン4がI/Oデバイス8のBARを設定する際に送受信されるデータを、仮想マシンモニタ3がトラップすることで、エントリが追加される。
 図3は、本発明の第1の実施形態に係るアドレス範囲テーブルの構成例を示したものである。図3を参照すると、アドレス範囲テーブル35は、開始アドレス、終了アドレス、物理BDF番号及びBAR番号の情報が組として構成される。このテーブルにエントリが存在すると、I/Oデバイスマネージャー5が管理するI/Oデバイス8へのアクセスがあったことを意味する。
 アドレス範囲テーブル35は、アドレス値を入力とし、そのアドレスが、開始アドレス以上、終了アドレス以下のアドレス範囲に該当する物理BDF番号とBAR番号を出力とする。開始アドレスはBARに設定したアドレスであり、終了アドレスはそのBARを持つI/Oデバイス8が要求したサイズを開始アドレスに加算したアドレスである。物理BDF番号とは、I/Oデバイスマネージャー5が、I/Oデバイス8のBARに設定したBDF番号のことである。これに対し、本明細書では、仮想マシン4が使用するBDF番号を仮想BDF番号と称する。BAR番号は、I/Oデバイス8が複数備えるBARの0~5の番号を意味する。
 図2に示したBDF番号対応テーブル36について説明する。
 BDF番号対応テーブル36は、仮想BDF番号と物理BDF番号の対応を保持するテーブルである。BDF番号対応テーブル36は、仮想マシン4ごとに設けられる。
 BDF番号対応テーブル36は、仮想マシン4の起動時に、仮想マシン4がI/Oデバイス8のPCIコンフィギュレーションレジスタを設定する際に送信されるデータを、仮想マシンモニタ3がトラップすることで、エントリが追加される。
 図4は、本発明の第1の実施形態に係るBDF番号対応テーブルの構成例を示したものである。図4を参照すると、BDF番号対応テーブル36は、仮想BDF番号と物理BDF番号の情報が組として構成される。BDF番号対応テーブル36では、仮想BDF番号を入力とし、物理BDF番号を出力として得る。
 図2に示したNICドライバ37及びリソースファイル保持部38について説明する。
 NICドライバ37は、NIC21のドライバである。
 リソースファイル保持部38は、I/Oデバイスマネージャー5がI/Oデバイス8のPCIコンフィギュレーションレジスタに設定した値を、リソースファイルとして保持する機能を有する。
 リソースファイルは、仮想マシン4の識別子とI/Oデバイス8に割り当てた物理BDF番号との組で管理される。リソースファイルのファイルの構成及びファイルフォーマットは、仮想マシンモニタ3のローカルに接続されたI/Oデバイスのリソースファイルのファイル構成及びファイルフォーマットに従ったものとすることが可能である。例えば、仮想マシンモニタ3がLinux(登録商標)ベースのシステムで構築されている場合、/sys/bus/pci/devices/<BDF番号>ディレクトリ以下のファイル構成、ファイルフォーマットに従ったものとすることができる。
 次に、図1に示したI/Oデバイスマネージャー5の構成を説明する。
 図5は、本発明の第1の実施形態に係るI/Oデバイスマネージャーの一構成例を示すブロック図である。
 図5を参照すると、I/Oデバイスマネージャー5は、仮想マシンモニタインタフェース51と、I/Oデバイス設定部52と、リクエスト制御部53と、NICドライバインタフェース54と、MACアドレステーブル55と、I/Oデバイス設定内容保持テーブル56と、I/Oデバイスリスト57と、MACアドレス逆引きテーブル58と、を有する。
 仮想マシンモニタインタフェース51は、仮想マシンモニタ3とI/Oデバイスマネージャー5との間でデータのやり取りを行うためのインタフェースである。例えば、仮想マシンモニタインタフェース51はソケットなどの通信インタフェースで実現することができる。
 例えば、仮想マシンモニタインタフェース51は、仮想マシンモニタ3が、仮想マシン4に割り当てるI/Oデバイス8が利用可能かどうかの問い合わせを仮想マシンモニタ3から受信する際に使用される。また、仮想マシンモニタインタフェース51は、仮想マシンモニタ3を介して、仮想マシン4からのI/Oデバイス8宛のリクエストを受信するために使用される。
 I/Oデバイス設定部52は、I/Oデバイス8の初期設定を行う機能を有する。I/Oデバイス8の初期設定とは、PCIコンフィギュレーションレジスタへの値の設定や、物理BDF番号の割り当てを意味する。物理BDF番号は、仮想マシン4ごとに独立した番号空間を持たせることができ、仮想マシン4間で同一の物理BDF番号を使用するように設定することが可能である。
 I/Oデバイス設定部52は、仮想マシンモニタ3からのI/Oデバイス8が利用可能かどうかの問い合わせに応じて、I/Oデバイスリスト57を検索し、条件にマッチするI/Oデバイス8の初期設定を行う。また、I/Oデバイス設定部52は、初期設定内容を、MACアドレステーブル55、I/Oデバイス設定内容保持テーブル56、及びMACアドレス逆引きテーブル58に反映させる。
 リクエスト制御部53は、仮想マシンモニタ3を介して受ける、仮想マシン4からのI/Oデバイス8へのアクセス要求や、I/Oデバイス8からのリクエストを処理する機能を有する。リクエストとは、PCI-Expressで定義されている、I/Oリード/ライトリクエスト、メモリリード/ライトリクエスト、コンフィギュレーションリード/ライトリクエスト、メッセージリクエストである。
 リクエスト制御部53は、仮想マシンモニタ3を介して受ける、仮想マシン4からのアクセス要求をもとに、TLPパケットを構築し、そのTLPパケットをペイロードとしたイーサネットフレームを構築する機能を有する。これらのパケット及びフレームのヘッダに設定するデータは、仮想マシンモニタ3を介して受ける、仮想マシン4からのアクセス要求に含まれる情報、及びMACアドレステーブル55とI/Oデバイス設定内容保持テーブル56が保持する情報から得られる。
 また、リクエスト制御部53は、I/Oデバイス8を送信元とするTLPパケットをイーサネットフレームでカプセル化したフレームを受信すると、フレームのデカプセル化を行う機能を有する。また、リクエスト制御部53は、取り出したTLPパケットから、アクセス先のメモリアドレスなどの情報を取り出して仮想マシンモニタ3に転送する機能を有する。
 NICドライバインタフェース54は、NICドライバ37にイーサネットフレームの送信要求を出すためのインタフェースであり、NICドライバ37からイーサネットフレームを受信するためのインタフェースである。例えば、このインタフェースは、Windows(登録商標)やLinux(登録商標)などの汎用OSが提供するインタフェースである。
 MACアドレステーブル55について説明する。
 MACアドレステーブル55は、仮想マシンの識別子と、物理BDF番号と、その物理BDF番号を持つI/Oデバイス8が接続されたI/O側ネットワークインタフェース6のMACアドレスとを対応付けた情報を保持するテーブルである。
 図6は、本発明の第1の実施形態に係るMACアドレステーブルの構成例を示したものである。MACアドレステーブル55は、仮想マシンの識別子と物理BDF番号を入力とし、MACアドレスを出力する。
 I/Oデバイス設定内容保持テーブル56について説明する。
 I/Oデバイス設定内容保持テーブル56は、I/Oデバイス8のPCIコンフィギュレーションレジスタに設定した値を保持するテーブルである。I/Oデバイス設定内容保持テーブル56は、仮想マシン4ごとに設けられる。
 図7は、本発明の第1の実施形態に係るI/Oデバイス設定内容保持テーブルの構成例を示したものである。I/Oデバイス設定内容保持テーブル56は、物理BDF番号とレジスタ番号を入力とし、入力された物理BDF番号に対応するI/Oデバイス8について、入力されたレジスタ番号のレジスタに対する設定値を出力する。図7では、レジスタ番号をBAR0、BAR1、のように、レジスタ名で記載しているが、レジスタ名で指定するほかに、各レジスタのPCIコンフィギュレーションレジスタ内での番地を使用する方法も考えられる。
 図5に示したI/Oデバイスリスト57について説明する。
 I/Oデバイスリスト57は、I/Oデバイス8のデバイス種別及びスペックと、そのI/Oデバイス8が接続されているI/O側ネットワークインタフェース6のMACアドレスと、そのI/Oデバイス8の割当先の仮想マシン4の識別子との情報を組にして保持する機能を有する。
 図8は、本発明の第1の実施形態に係るI/Oデバイスリストの構成例を示したものである。I/Oデバイスリスト57では、デバイス種別及びスペックを入力とし、MACアドレスと、そのI/Oデバイス8の割り当て状況とを出力として得られる。
 デバイス種別とは、I/Oデバイス8の種類、すなわち、NIC、GPU、SSD(Solid State Drive)、ディスクコントローラ、など、I/Oデバイス8の分類を示す情報である。
 スペックとは、そのI/Oデバイス8が持つ性能、メモリ容量、ディスク容量、などを示す情報である。例えば、NICであれば転送速度、GPUであればGPUのコアクロック数やメモリ容量、あるいはGPUの世代、SSDであれば、容量やデータの読み書きの性能、などである。何の情報をスペックの欄に記載するかは、コンピュータシステム1の設計者、あるいは運用者が定義する。割当先の仮想マシン4の欄には、そのI/Oデバイス8が既に、いずれかの仮想マシン4に割り当て済みの場合は、仮想マシン4の識別子が、未割り当ての場合は、そのことを示す値が設定される。
 図5に示したMACアドレス逆引きテーブル58について説明する。
 MACアドレス逆引きテーブル58は、MACアドレスの情報を基に、そのMACアドレスを持つI/O側ネットワークインタフェース6に接続されたI/Oデバイス8を利用する仮想マシン4の識別子の情報を取得するためのテーブルである。
 図9は、本発明の第1の実施形態に係るMACアドレス逆引きテーブルの構成例を示したものである。MACアドレス逆引きテーブル58は、MACアドレスを入力とし、仮想マシンの識別子を出力とする。
 なお、図2及び図5に示した各種テーブル及びリストはハードウェア2に設けられたメモリ等の記憶部(不図示)で保持され、リソースファイル保持部38は記憶部の一部に相当する。このことは、後述する他の実施形態においても同様であり、その詳細な説明を省略する。
[動作の説明]
 次に、図面を参照して、本実施形態のコンピュータシステムの動作を説明する。
 はじめに、仮想マシン4を起動する際の、I/Oデバイス8の初期設定の方法を説明する。
 図10は、本発明の第1の実施形態に係る、仮想マシンを起動する際の、仮想マシンモニタ、仮想マシン、I/Oデバイスマネージャー、I/O側ネットワークインタフェース、I/Oデバイスの動作を示したシーケンス図である。
 まず、仮想マシンモニタ3に設けられたI/Oデバイス割当部33が、仮想マシン4の動作に必要なI/Oデバイス8の有無を確認するために、仮想マシン4の識別子と、仮想マシン4に割り当てるI/Oデバイス8の種別及びスペックとを、I/Oデバイスマネージャー5に通知する(ステップS30a)。
 I/Oデバイスマネージャー5に設けられたI/Oデバイス設定部52は、I/Oデバイスリスト57を参照し、該当するI/Oデバイス8が利用可能かどうかを検索する(ステップS50a)。I/Oデバイス設定部52は、利用可能なデバイスが見つかった場合、I/Oデバイスリスト57を参照し、利用可能なI/Oデバイス8に該当するエントリの、割当先仮想マシン4の識別子の欄に記載されているデフォルト値を、仮想マシンモニタ3から通知された仮想マシン4の識別子に変更する。
 I/Oデバイス設定部52は、仮想マシン4に割り当てることのできるI/Oデバイス8が見つかった場合、そのI/Oデバイス8の初期設定を行う(ステップS52a)。
 ステップS52aの初期設定の際、I/Oデバイス設定部52は、I/Oデバイス8に割り当てるBDF番号(物理BDF番号)を決定し、仮想マシン4の識別子、物理BDF番号及びMACアドレスの情報を組にしてMACアドレステーブル55に登録する。また、I/Oデバイス設定部52は、MACアドレス及び仮想マシン4の識別子の情報を組にしてMACアドレス逆引きテーブル58に登録する。MACアドレスは、図10のステップS50aにおいて、I/Oデバイス設定部52がI/Oデバイスリスト57にアクセスした際、I/Oデバイス設定部52に読み出される。そして、I/Oデバイス設定部52は、物理BDF番号を使用したコンフィギュレーションリード/ライトリクエストのTLPパケットを構築し、構築したTLPパケットをペイロードとするイーサネットフレームを構築する。
 I/Oデバイス設定部52は、I/Oデバイス8のPCIコンフィギュレーションレジスタのうち、ベンダーIDレジスタ及びクラスコードレジスタからの読み出し、BAR、コマンドレジスタ、キャッシュラインサイズレジスタ及びレイテンシタイマレジスタへの値の設定を行う。これら読み書きされた情報は、仮想マシンモニタ3にI/Oデバイスの情報として渡すために、I/Oデバイス設定部52に保持される。例えば、BARに設定される情報には、そのI/Oデバイス8が要求するアドレス空間がI/O空間か、メモリ空間か、を示す情報と、そのI/Oデバイス8が要求する空間のサイズを示す情報とが含まれる。これらの情報は、仮想マシン4が起動時にPCI-Expressファブリックの初期設定を行う際に必要となる。
 I/Oデバイス設定部52がI/Oデバイス8に割り当てるBDF番号及びBARに設定する値(メモリ空間の範囲、I/O空間の範囲)は、同一の仮想マシン4に割り当てるI/Oデバイス8間で値が重ならなければ、任意の値を設定可能である。つまり、BDF番号空間、メモリ空間、I/O空間は、仮想マシン4ごとに独立している。これは、I/Oデバイス設定部52がI/Oデバイス8の識別に仮想マシン4の識別子を用いているためである。
 I/Oデバイス設定部52は、ステップS52aの初期設定を行った後、NICドライバインタフェース54、NICドライバ37及びNIC21を介して、I/Oデバイス8に対して、コンフィギュレーションライトリクエストのTLPパケットをペイロードとするイーサネットフレーム送信する。
 I/O側ネットワークインタフェース6は、イーサネットフレームをI/Oデバイスマネージャー5から受信すると、イーサネットフレームのデカプセル化を行い、TLPパケットを取り出す。I/Oデバイス8は、TLPパケットに従ってリクエスト内容を処理すると、コンプリーションのTLPパケットをI/Oデバイスマネージャー5宛に送信する(ステップS80a)。
 このTLPパケットは、I/O側ネットワークインタフェース6においてイーサネットフレームにカプセル化された後、ネットワーク7を介して、I/Oデバイスマネージャー5に転送される。NIC21のMACアドレスは、事前にI/O側ネットワークインタフェース6に設定されていてもよい。また、I/O側ネットワークインタフェース6がI/Oデバイスマネージャー5と認証のための通信を行う際に、通信相手となるNIC21のMACアドレスがI/O側ネットワークインタフェース6に通知されてもよい。
 I/Oデバイス設定部52は、I/Oデバイス8へ発行したコンフィギュレーションライトリクエストに対するコンプリーションパケットを受信するたびに、そのレジスタに設定した値を、物理BDF番号及びレジスタ番号とともに、I/Oデバイス設定内容保持テーブル56に登録する(ステップS53a)。
 I/Oデバイス設定部52は、I/Oデバイス8に割り当てるBDF番号について、バス番号ごとに1つ、仮想的なPCI-PCI Bridgeの設定情報を生成し、I/Oデバイス設定内容保持テーブル56に登録する。これは、背景技術にて説明したように、PCI-Expressファブリックの初期設定の際には、PCI-Expressスイッチデバイスなどのブリッジデバイスが検出されないと、下流のバスへのサーチが行われないためである。
 仮に、仮想的なPCI-PCI Bridgeの設定情報を生成しないとすると、仮想マシン4が起動時にPCI-Expressファブリックの初期設定を行う際、下流のバスのサーチを行わないことになる。その結果、下流のバスのバス番号を付与したI/Oデバイス8が仮想マシン4から認識されなくなってしまう。
 PCI-Expressスイッチは、論理的にはPCI-PCI Bridgeの組み合わせであるため、本実施形態では、仮想的なPCI-PCI Bridgeの設定情報を生成する。この設定情報には、BDF番号、ベンダーIDレジスタ、クラスコードレジスタ、BAR、コマンドレジスタ、キャッシュラインサイズレジスタ、レイテンシタイマレジスタ、プライマリバスレジスタ、セカンダリバスレジスタ、サブオーディネートバスレジスタ、メモリベースアドレスレジスタ、I/Oベースアドレスレジスタ、メモリリミットアドレスレジスタ、及びI/Oリミットアドレスレジスタの情報が少なくとも含まれる。
 I/Oデバイス設定部52は、I/Oデバイス8へ発行したコンフィギュレーションライトリクエストに対する全てのコンプリーションパケットを受信すると、その設定内容を、仮想マシン4の識別子及び物理BDF番号とともに、仮想マシンモニタ3へ通知する(ステップS54a)。
 I/Oデバイス割当部33は、図10のステップS54aで通知された情報のうち、PCIコンフィギュレーションレジスタから読み出された値/書き込まれた値を、リソースファイルとして、リソースファイル保持部38に保存する(ステップS31a)。
 仮想マシンモニタ3は、仮想マシン4を起動する(ステップS32a)。
 仮想マシン4は、起動する際に(仮想マシン4が認識する仮想的な)PCI-Expressファブリックの初期設定処理を行う(ステップS40a)。これを仮想マシンモニタ3がトラップし、仮想マシンモニタ3に設けられたリクエスト発行先決定部32が、リソースファイル保持部38が保持するI/Oデバイス8の設定情報に基づいて、初期設定処理に応答する。
 仮想マシン4は、I/Oデバイスマネージャー5が管理するI/Oデバイス8だけでなく、仮想マシンモニタ3が用意する仮想的なデバイスや、ハードウェア2に設けられたI/OデバイスをPCIパススルーで利用する場合がほとんどである。そのため、例えば、仮想マシンモニタ3は、これらの仮想的なデバイスやハードウェア2に設けられたI/Oデバイスの初期設定が全て完了したことを検知すると、その後に、I/Oデバイスマネージャー5によって管理されるI/Oデバイス8の初期設定を行う。
 ここで、仮想マシン4のPCI-Expressファブリックの初期設定処理のトラップの方法について、例を用いて説明する。
 仮想マシン4がIntel社のx86アーキテクチャに基づくプロセッサを仮想的なプロセッサとして使用している場合、in/out命令によってPCI-Expressファブリックの初期設定を行う。このin/out命令を仮想マシンモニタ3がトラップする。この命令がトラップされた後、リクエスト発行先決定部32が、仮想マシン4のアクセス先のレジスタ番号を基に、リソースファイル保持部38から関連する情報を取得する。そして、リクエスト発行先決定部32は、ベンダーIDやクラスコードを仮想マシン4に通知する。また、リクエスト発行先決定部32は、レイテンシタイマレジスタなど、I/Oデバイスマネージャー5が既に設定を行ったI/Oデバイス8の設定を、I/Oデバイス8に反映せずに、あたかもI/Oデバイス8の該当するレジスタに設定できたかのようにふるまったり、BARの設定シーケンスをエミュレートしたりする。
 リクエスト発行先決定部32は、このレイテンシタイマレジスタ番号の設定などの際に、仮想マシン4がI/Oデバイス8に設定しようとしたBDF番号(仮想BDF番号)を、物理BDF番号とともに、BDF番号対応テーブル36に登録する(ステップS34a)。また、リクエスト発行先決定部32は、BARの設定シーケンスのエミュレートの際に、仮想マシン4がI/Oデバイス8のBARに設定しようとした値を開始アドレスとし、リソースファイルから読み出した、BARが要求するサイズを開始アドレスに加算した値を終了アドレスとする。そして、リクエスト発行先決定部32は、これらの開始アドレス及び終了アドレスを、物理BDF番号及びBAR番号とともに、アドレス範囲テーブル35に登録する(ステップS34a)。
 一般に、PCIコンフィギュレーションレジスタの中には、OS又は仮想マシンの起動後に、I/Oデバイス8のドライバが設定するレジスタも存在する。そのようなレジスタへの設定に対しては、仮想マシンモニタ3に設けられたリクエスト発行先決定部32が、リソースファイル保持部38にその設定を反映させるとともに、I/Oデバイスマネージャー5に、I/Oデバイス8へのコンフィギュレーションリード/ライトリクエストの発行依頼を出す(ステップS36a)。コンフィギュレーションリードリクエストの発行が必要かどうかは、設定先のレジスタの設定方法に依存する。コンフィギュレーションリードリクエストの発行が必要な場合、リクエスト発行先決定部32は、仮想マシン4の識別子、対象のI/Oデバイス8の物理BDF番号(BDF番号対応テーブル36より取得)及びアクセス種別を示す情報とともに、その発行依頼を出す。ここで言うアクセス種別とは、コンフィギュレーションリードリクエストか、コンフィギュレーションライトリクエストかという情報である。
 リクエスト発行先決定部32は、仮想マシン4からのPCI-Expressデバイスのサーチに対して、I/Oデバイスマネージャー5から渡されたリソースファイルのI/Oデバイス8、又はPCI-PCI Bridgeを、物理BDF番号の順に応答する。
このように、サーチに対して応答することで、PCI-PCI Bridgeの下流に接続されたI/Oデバイス8まで初期設定が行われ得る。
 リクエスト発行先決定部32は、仮想マシン4からのコンフィギュレーションリード/ライトリクエストが、PCI-PCI Bridgeへのコンフィギュレーションの場合、I/Oデバイスマネージャー5には、そのリクエストを通知せず、適切な値を仮想マシン4に返す。これは、PCI-PCI Bridgeが仮想的なデバイスであり、実際に設定を行う対象が存在しないためである。
 I/Oデバイスマネージャー5に設けられたリクエスト制御部53は、仮想マシンモニタ3からリクエスト発行依頼を受け取ると、リクエスト発行依頼に基づいてTLPパケットを構築する。そして、リクエスト制御部53は、このTLPパケットをペイロードとするイーサネットフレームを構築し、このイーサネットフレームをI/Oデバイス8に向けて送信する(ステップS56a)。TLPパケット及びイーサネットフレームのヘッダに設定される、MACアドレス及び物理BDF番号などの情報は、仮想マシンモニタ3からのリクエストに含まれる情報、及び、この情報を用いてMACアドレステーブル55を参照した結果から得られる。リクエスト制御部53は、そのイーサネットフレームに対する、設定が正常に行われた旨の応答(コンプリーションTLPパケット)がI/Oデバイス8から返って来るまで、このリクエスト内容を保持する。
 I/Oデバイス8は、I/O側ネットワークインタフェース6によってデカプセル化されたTLPパケットをI/O側ネットワークインタフェース6から受信すると、そのパケットに記載されている内容に従ってPCIコンフィギュレーションレジスタを設定する。
設定完了後に、I/Oデバイス8は、コンプリーションパケットをI/Oデバイスマネージャー5に向けて送信する(ステップS82a)。
 リクエスト制御部53は、I/Oデバイス8から送出されたコンプリーションパケットを受信すると、設定内容を物理BDF番号及びレジスタ番号とともに、I/Oデバイス設定内容保持テーブル56に登録する。そして、リクエスト制御部53は、設定が完了した旨を仮想マシンモニタ3に通知する(ステップS58a)。この通知には、少なくとも仮想マシン4の識別子及び物理BDF番号が含まれ、仮想マシンモニタ3からのリクエストがコンフィギュレーションリードリクエストだった場合には、読み出されたデータも含まれる。仮想マシン4の識別子は、受信したコンプリーションパケットをカプセル化した際に付与されたイーサネットヘッダのソースMACアドレスを用いてMACアドレス逆引きテーブル58を参照することで、得られる。
 リクエスト発行先決定部32は、設定を完了した旨の通知をI/Oデバイスマネージャー5から受け取ると、設定が完了した旨又は読み出したデータを受信した旨を仮想マシン4に通知する(ステップS38a)。
 次に、仮想マシン4がI/Oデバイス8にメモリリード/ライトリクエストを発行する場合の動作を説明する。
 図11は、本発明の第1の実施形態に係る、仮想マシンからI/Oデバイスへメモリリード/ライトリクエストを発行した際の、処理の流れを示したシーケンス図である。
 仮想マシン4が、I/Oデバイス8のメモリ領域へアクセス要求を発行する(ステップS40b)。このアクセス要求は仮想マシンモニタ3にトラップされる。仮想マシンモニタ3は、仮想マシン4の識別子及びアクセス要求の種別(ここでは、メモリアクセス又はI/Oアクセスとする)と、アクセス先の情報(メモリアドレス)を仮想マシン4より得る。
 アクセス要求が仮想マシンモニタ3でトラップされることで、仮想マシンモニタ3に設けられたリクエスト発行先決定部32に、仮想マシン4の識別子、アクセス要求の種別及びアクセス先の情報が仮想マシン4から渡される。リクエスト発行先決定部32は、アクセス要求の種別から、そのアクセス要求がメモリアクセスであると判別する。そして、リクエスト発行先決定部32は、仮想マシン4の識別子及びアクセス先の情報(メモリアドレス)を用いてアドレス範囲テーブル35を参照し、物理BDF番号及びBAR番号を得る(ステップS30b)。そして、リクエスト発行先決定部32は、アドレス範囲テーブル35の開始アドレスの値を用いて、アドレスのオフセット値を得る。アドレスオフセット値は、アクセス先の情報(メモリアドレス)から開始アドレスの値を引き算することで得られる。
 もし、アクセス種別が、I/Oデバイス8のPCIコンフィギュレーションレジスタへの読み書きであった場合、仮想マシン4からは、仮想マシン4の識別子、アクセス要求の種別(コンフィギュレーション)、アクセス先の情報(仮想BDF番号)及びアクセス先のレジスタ番号が、リクエスト発行先決定部32に通知される。リクエスト発行先決定部32は、仮想マシン4の識別子と仮想BDF番号とを用いてBDF番号対応テーブル36を参照し、物理BDF番号を得る。
 リクエスト発行先決定部32は、仮想マシン4の識別子、アクセス種別、物理BDF番号、BAR番号及びアドレスオフセット値をI/Oデバイスマネージャー5に通知する(ステップS32b)。
 I/Oデバイスマネージャー5に設けられたリクエスト制御部53は、仮想マシンモニタ3から受け取った仮想マシン4の識別子と物理BDF番号を用いて、MACアドレステーブル55を参照し、MACアドレスを得る(ステップS50b)。
 リクエスト制御部53は、物理BDF番号とBAR番号を用いて、I/Oデバイス設定内容保持テーブル56を参照し、アクセス対象のBARに設定された値を得る(ステップS52b)。リクエスト制御部53は、BARに設定された値にアドレスオフセット値を加えることで、アクセス先のアドレス値を得る。
 リクエスト制御部53は、仮想マシンモニタ3から受け取った情報と、MACアドレステーブル55及びI/Oデバイス設定内容保持テーブル56を参照して得たMACアドレス及びアクセス先のアドレス値を用いて、TLPパケットをペイロードとしたイーサネットフレームを構築する(ステップS54b)。
 リクエスト制御部53は、構築したイーサネットフレームをI/Oデバイス8宛にネットワーク7を介して送信する(ステップS56b)。
 I/O側ネットワークインタフェース6は、I/Oデバイスマネージャー5からイーサネットフレームを受信すると、イーサネットフレームをデカプセル化してTLPパケットを得る。そして、I/O側ネットワークインタフェース6は、取得したTLPパケットをI/Oデバイス8に渡す。I/Oデバイス8は、I/O側ネットワークインタフェース6からTLPパケットを受信すると、リクエストを処理する(ステップS80b)。
 I/Oデバイス8は、リクエストの処理が完了すると、コンプリーションパケット(メモリリードリクエスト、I/Oリード/ライトリクエストの場合)のTLPパケットを生成し、TLPパケットをI/Oデバイスマネージャー5宛で送信する(ステップS82b)。このTLPパケットは、I/O側ネットワークインタフェース6によってイーサネットフレームにカプセル化される。
 リクエスト制御部53は、I/Oデバイス8からコンプリーションパケットを受信すると、その旨を仮想マシンモニタ3に通知する(ステップS58b)。仮想マシン4で発行されたアクセス要求の基になるリクエストがメモリリードリクエスト又はI/Oリードリクエストの場合、読み出されたデータがコンプリーションパケットに格納されているため、読み出されたデータも仮想マシンモニタ3に渡される。
 仮想マシンモニタ3は、I/Oデバイス8からコンプリーションを受けた旨の情報をI/Oデバイスマネージャー5から受けると、その旨を仮想マシン4に通知する(ステップS34b)。仮想マシンモニタ3は、読み出されたデータもI/Oデバイスマネージャー5から受け取った場合、そのデータを適切なメモリ領域に格納する。適切なメモリ領域とは、例えば、仮想マシン4が読み出し先に指定したメモリ領域(ゲスト物理アドレス)に対応するホスト物理アドレスなどである。
 次に、I/Oデバイス8が仮想マシン4へメモリリード/ライトリクエストを発行した場合の動作を説明する。
 図12は、本発明の第1の実施形態に係る、I/Oデバイスから仮想マシンへメモリリード/ライトリクエストを発行した際の、処理の流れを示したシーケンス図である。
 一般的には、I/Oデバイス8からのメモリリード/ライトリクエストはDMA(Direct Memory Access)転送にて行われる。しかし、本実施形態では、I/Oデバイス8からのメモリリード/ライトリクエストはI/Oデバイスマネージャー5でのハンドリングが必要なため、I/Oデバイス8が、ハードウェア2に設けられたメモリ(不図示)に直接アクセスすることはない。
 図12を参照すると、まず、I/Oデバイス8は、メモリリード/ライトリクエストのTLPパケットを生成する。続いて、そのI/Oデバイス8に接続されたI/O側ネットワークインタフェース6は、生成されたTLPパケットのイーサネットフレームへのカプセル化を行う(ステップS80c)。カプセル化の際、I/O側ネットワークインタフェース6は、事前に取得し、保持していたNIC21のMACアドレスをイーサネットフレームの宛先の情報として使用する。
 I/O側ネットワークインタフェース6は、図12のステップS80cで生成したイーサネットフレームを、I/Oデバイスマネージャー5に送信する(ステップS82c)。
 I/Oデバイスマネージャー5に設けられたリクエスト制御部53は、リクエストの情報を含むイーサネットフレームをI/O側ネットワークインタフェース6から受信すると、イーサネットフレームに含まれるリクエストのデカプセル化を行う(ステップS50c)。それと同時に、リクエスト制御部53は、イーサネットフレームの送信元を示すMACアドレスの値を用いて、MACアドレス逆引きテーブル58を参照し、仮想マシン4の識別子を得る(ステップS52c)。
 リクエスト制御部53は、リクエストに含まれる宛先アドレス、図12のステップS52cで得た仮想マシン4の識別子、及び、読み出すデータサイズ又は書き込むデータサイズなどの情報を、仮想マシンモニタ3に通知する(ステップS54c)。リクエストがメモリライトリクエストの場合には、リクエスト制御部53は、書き込み対象のデータも仮想マシンモニタ3に通知する。
 仮想マシンモニタ3は、リクエスト制御部53から受け取った情報を基に、I/Oデバイス8からのリクエストを処理する(ステップS30c)。上述したように、一般的にはI/Oデバイス8からのメモリリード/ライトリクエストはDMA転送で行われるため、アクセス先のメモリアドレスをI/Oデバイス8に事前に通知する必要がある。この、リクエストに含まれる宛先アドレスの情報は、仮想マシン4が指定した物理アドレス(ゲスト物理アドレス)であり、仮想マシンモニタ3が割り当てた仮想的なメモリに対する物理アドレスであるため、実際の物理メモリの位置(ホスト物理アドレス)とは異なる。そのため、仮想マシンモニタ3は、IOMMU(I/O Memory Management Unit)を模した機能などで、ゲスト物理アドレスからホスト物理アドレスへのアドレス変換を行い、メモリアクセスを行う。
 このようにして、仮想マシン4に、仮想マシンモニタ3が管理するBDF番号空間とは異なるBDF番号空間で管理されたI/Oデバイス8を割り当て、利用できるようにすることができる。
 次に、仮想マシン4に割り当てたI/Oデバイス8を、仮想マシン4を起動したまま取り外す場合について説明する。
 まず、仮想マシン4が、対象のI/Oデバイス8を切り離す処理を仮想マシンモニタ3が検知し、I/Oデバイス割当部33が、BDF番号対応テーブル36から物理BDF番号を得る。
 そして、I/Oデバイス割当部33が、対象のI/Oデバイス8のエントリを、仮想マシンの識別子と物理BDF番号を用いて、アドレス範囲テーブル35、BDF番号対応テーブル36及びリソースファイル保持部38で特定し、特定したエントリを各テーブルから削除する。
 そして、I/Oデバイス割当部33が、削除対象のI/Oデバイス8の物理BDF番号と仮想マシンの識別子をI/Oデバイスマネージャー5に通知する。
 I/Oデバイスマネージャー5は、I/Oデバイス8の取り外しの通知を仮想マシンモニタ3から受け取る。I/Oデバイス設定部52は、通知された仮想マシンの識別子と物理BDF番号を基に、MACアドレステーブル55を参照し、対象のI/Oデバイス8が接続されたI/O側ネットワークインタフェース6のMACアドレスを取得する。そして、I/Oデバイス設定部52が、MACアドレステーブル55から、対象のエントリを削除する。
 I/Oデバイス設定部52は、I/Oデバイス設定内容保持テーブル56から、仮想マシンの識別子と物理BDF番号が一致するエントリを削除する。また、I/Oデバイス設定部52は、MACアドレス逆引きテーブル58を、MACアドレスを用いて参照し、MACアドレスが一致するエントリを削除する。
 そして、I/Oデバイス設定部52は、取り外し対象のI/Oデバイス8をリセットする旨の指示を含むリセット通知を、I/O側ネットワークインタフェース6に出す。また、I/Oデバイス設定部52は、I/Oデバイスリスト57において、そのI/O側ネットワークインタフェース6とMACアドレスが一致するデバイスについて、I/Oデバイスリスト57の割当先仮想マシンIDを「未割当」に変更する。
 I/O側ネットワークインタフェース6は、I/Oデバイスマネージャー5からI/Oデバイス8のリセット通知を受けると、I/Oデバイス8をリセットする。
 このようにして、仮想マシン4を稼働させつつ、I/Oデバイス8を取り外すことが可能となる。
 既に稼働中の仮想マシン4にI/Oデバイス8を追加する場合、図10に示した手順の各ステップを実行することで、I/Oデバイス8を仮想マシン4に追加することができる。ただし、図10に示した手順のうち、ステップS32aの処理内容を変更する必要がある。具体的には、ステップS32aの処理は、「仮想マシンの起動」ではなく、「I/Oデバイス8が追加されたことの通知」となる。このとき、仮想マシンモニタ3は、追加するI/Oデバイス8に割り当てられるBDF番号、BARに設定するI/O空間及びメモリ空間が、同一の仮想マシン4が使用する他のI/Oデバイス8と同じにならないように設定する。つまり、仮想マシンモニタ3は、同一の仮想マシン4が使用する複数のI/Oデバイス間でBDF番号、BARに設定するI/O空間及びメモリ空間が重ならないようにしている。
 このようにして、仮想マシン4を稼働させつつ、I/Oデバイス8を追加することが可能となる。
 次に、本実施形態の効果について説明する。
 本実施形態では、仮想マシン4に割り当てられたI/Oデバイス8が、仮想マシン4ごとに独立のBDF番号空間で管理される。この仮想マシン4ごとに独立したBDF番号空間と、仮想マシン4が使用するBDF番号との変換を仮想マシンモニタ3が行うことによって、仮想マシン4がI/Oデバイス8を利用することができる。これによって、1つ1つの仮想マシン4に、BDF番号空間がサポートする最大数のI/Oデバイス8を提供することが可能になり、1台のサーバに多数の仮想マシン4が稼働している場合でも、I/Oデバイス8を必要な数だけ接続することが可能となる。
[第2の実施形態]
 次に、本発明の第2の実施形態について、図面を参照して詳細に説明する。なお、本発明の第1の実施形態と同様の構成要素に対しては、同一の符号を付し、詳細な説明を省略する。
 図13は、本発明の第2の実施形態に係る仮想マシンモニタの一構成例を示すブロック図である。図13を参照すると、本実施形態の仮想マシンモニタ3は、図2に示した構成と比べると、BDF番号対応テーブル36及びリソースファイル保持部38を有していないが、その代わりにBDF番号テーブル36d及びI/Oデバイス割当リスト39を有する。
 BDF番号テーブル36dについて説明する。
 BDF番号テーブル36dは、仮想マシン4ごとに備えられ、仮想マシンに割り当てられたI/Oデバイス8のBDF番号を格納するテーブルである。
 図14は、本発明の第2の実施形態に係るBDF番号テーブルの構成例を示したものである。図14を参照すると、BDF番号テーブル36dは、BDF番号をエントリとして登録する構成になっている。このBDF番号は、仮想マシン4が割り当てたBDF番号である。
 I/Oデバイス割当リスト39について説明する。
 I/Oデバイス割当リスト39は、これから起動する仮想マシン4に割り当てるI/Oデバイス8のベンダーIDとクラスコードを、仮想マシン4に認識させる順番に記載したリストである。
 図15は、本発明の第2の実施形態に係るI/Oデバイス割当リストの構成例を示したものである。図15を参照すると、I/Oデバイス割当リスト39は、ベンダーIDとクラスコードの組から構成された情報のリストである。
 図16は、本発明の第2の実施形態に係るI/Oデバイスマネージャーの一構成例を示すブロック図である。図16を参照すると、本実施形態のI/Oデバイスマネージャー5は、図5に示した構成と比べると、I/Oデバイス設定内容保持テーブル56を有していないが、その代わりにI/Oデバイス設定リスト59を有している。
 I/Oデバイス設定リスト59について説明する。
 I/Oデバイス設定リスト59は、仮想マシンモニタ3から、I/Oデバイスの利用可否の問い合わせがあった際に、I/Oデバイスリスト57に登録されているI/Oデバイス8から選択されたI/Oデバイス8のクラスコードとベンダーIDの組が登録されるリストである。
 次に、本実施形態のコンピュータシステムの動作を説明する。
 はじめに、仮想マシン4を起動する際の、I/Oデバイス8の初期設定の方法を説明する。
 図17は、本発明の第2の実施形態に係る、仮想マシンを起動する際の、仮想マシンモニタ、仮想マシン、I/Oデバイスマネージャー、I/Oデバイスの動作を示したシーケンス図である。
 図17と図10を比較すると、本実施形態では、I/Oデバイスマネージャー5が、仮想マシン4の起動前にI/Oデバイス8の設定・保存を行わない点が異なる(図10のステップS52a、ステップS80a、ステップS53a)。本実施形態では、I/Oデバイス8の設定が、仮想マシン4が起動時に行うPCI-Expressファブリックの初期設定に合わせて行われる。
 図17を参照すると、まず、仮想マシンモニタ3に設けられたI/Oデバイス割当部33が、I/Oデバイスマネージャー5に、I/Oデバイス利用可否を問い合わせる(ステップS30d)。I/Oデバイス割当部33は、複数のI/Oデバイスの利用可否を問い合わせる場合、I/Oデバイス8を仮想マシン4に認識させたい順番にソートしてI/Oデバイスマネージャー5に問い合わせる。
 I/Oデバイスマネージャー5に設けられたI/Oデバイス設定部52は、仮想マシンモニタ3からのI/Oデバイス利用可否の問い合わせに対して、問い合わせに含まれる条件に該当するI/Oデバイス8があるか、I/Oデバイスリスト57で検索する(ステップS50d)。
 I/Oデバイス設定部52は、検索の結果、得られたI/Oデバイス8のベンダーIDとクラスコードを、仮想マシンモニタ3に通知する(ステップS54d)。ベンダーID及びクラスコードは、I/Oデバイスリスト57にベンダーIDとクラスコードを登録するための拡張をした上で、事前にI/Oデバイスリスト57に登録しておいてもよい。また、ベンダーID及びクラスコードは、仮想マシンモニタ3から問い合わせが来るたびに、検出されたI/Oデバイス8のベンダーIDとクラスコードをI/Oデバイス設定部52が読み出してもよい(図17は前者の場合を示したものである)。後者の場合、I/Oデバイス設定部52は、I/Oデバイスリスト57から、該当するMACアドレスを取得し、ベンダーIDとクラスコードをそれぞれ読み出すTLPパケット(コンフィギュレーションリードリクエスト)をペイロードとするイーサネットフレームを構築し、I/Oデバイス8へ送信する。I/Oデバイス設定部52は、I/Oデバイス8からのコンプリーションのペイロード部から、ベンダーIDとクラスコードの値を得ることができる。複数のI/Oデバイス8に対して問い合わせが行われた場合、仮想マシンモニタ3への通知に含まれるベンダーIDとクラスコードは、仮想マシンモニタ3からの問い合わせに記載されたI/Oデバイスの順にソートされている。
 また、I/Oデバイス設定部52は、仮想マシンモニタ3から問い合わせのあったデバイス数が、複数のバスに収容しなければならない数(=32以上)であった場合などに、仮想的なPCI-PCI BridgeのベンダーIDとクラスコードを、バス番号を変更するタイミングで、仮想マシンモニタ3への通知に挿入する。バス番号を変更するタイミングとは、例えば、要求I/Oデバイス数が32以上の場合に、31個目ごとに、PCI-PCI BridgeのベンダーIDとクラスコードを挿入することが、例として挙げられる。また、通知の最初にPCI-PCI BridgeのベンダーIDとクラスコードを挿入することで、仮想マシンモニタ3は、仮想マシン4にI/Oデバイスマネージャー5が管理するI/Oデバイス8を割り当てる際に、最初にPCI-PCI Bridgeを認識させるため、それまでに仮想マシン4が認識したI/Oデバイスとは異なるバス番号から、I/Oデバイス8の初期設定処理が行われるようにすることができる。
 なお、この仮想的なPCI-PCI BridgeのベンダーIDとクラスコードを、I/Oデバイス設定部52から仮想マシンモニタ3への通知に挿入せずに、I/Oデバイス割当部33が、I/Oデバイスマネージャー5から通知を受け取った後に、挿入することも可能である。この場合、仮想マシンモニタ3は、仮想マシンに何個の仮想的なデバイスを割り当てるかが、仮想マシン4の構成情報などから分かっているため、PCI-PCI BridgeのベンダーIDとクラスコードを、リストの適切な位置に挿入することができる。
 I/Oデバイス設定部52は、仮想マシンモニタ3への通知を、挿入した仮想的なPCI-PCI Bridgeの情報を除いて、I/Oデバイス設定リスト59に保持する。
 I/Oデバイス割当部33は、I/Oデバイスマネージャー5から、仮想マシン4に割り当てるI/Oデバイス8のベンダーIDとクラスコードのリストを受け取ると、I/Oデバイス割当リスト39に格納する(ステップS31d)。
 I/Oデバイス割当部33は、仮想マシン4を起動する(ステップS32d)。
 仮想マシン4が、PCI-Expressファブリックの初期設定を行う(ステップS40d)。
 仮想マシンモニタ3が、I/Oデバイスマネージャー5が管理するI/Oデバイス8以外の全てのデバイスを割り当て終わった段階などで、リクエスト発行先決定部32が、I/Oデバイス割当リスト39に登録されているI/Oデバイス8の割り当て処理を行う(ステップS36d~ステップS58d)。ステップS36dからステップS58dまでの手順を詳しく説明する。
 仮想マシンモニタ3は、仮想マシン4からのI/Oデバイス8への初期設定のためのアクセスをトラップすると、リクエスト発行先決定部32が、トラップした際に取得した仮想マシン4の識別子とBDF番号を用いて、BDF番号テーブル36dを参照し、そのBDF番号を持つI/Oデバイスが、I/Oデバイスマネージャー5が管理するI/Oデバイス8か否かを判断する。そのBDF番号がBDF番号テーブル36dに登録されていれば、そのI/OデバイスはI/Oデバイスマネージャー5が管理するI/Oデバイス8であることを意味する。
 次に、リクエスト発行先決定部32は、I/Oデバイスマネージャー5に対して、PCIコンフィギュレーションレジスタの設定要求を発行する(ステップS36d)。リクエスト発行先決定部32は、I/Oデバイスマネージャー5に対して、仮想マシンの識別子、アクセス種別及びアクセス先のI/Oデバイス8のBDF番号を通知する。
 また、リクエスト発行先決定部32は、仮想マシン4からのI/Oデバイス8へのアクセス先がBARであり、BARに対する読み出し要求があった場合、そのBDF番号とBAR番号を、そのBARへの設定が完了するまで保持する。また、仮想マシン4からのPCIコンフィギュレーションレジスタへの設定要求がBARに対するもので、BARに対する書き込み要求だった場合、リクエスト発行先決定部32は、その書き込み対象のデータの内容を、BDF番号及びBAR番号とともに組にして保持する。
 次に、I/Oデバイスマネージャー5に設けられたリクエスト制御部53は、仮想マシンモニタ3からの通知に従って、I/Oデバイス8へコンフィギュレーションリード/ライトリクエストを発行し、I/Oデバイス8の設定を行う(ステップS56d)。リクエスト制御部53は、仮想マシンの識別子とBDF番号を用いて、MACアドレステーブル55にアクセスし、リクエスト送信先のMACアドレスを得る。そして、リクエスト制御部53は、取得したMACアドレス、仮想マシンモニタ3からの通知に含まれるアクセス種別、及びアクセス先のI/Oデバイス8のBDF番号から、TLPパケットをペイロードとするイーサネットフレームを構築する。そして、リクエスト制御部53は、構築したイーサネットフレームをI/Oデバイス8へ送信する。
 I/Oデバイス8は、I/O側ネットワークインタフェース6によってデカプセル化されたTLPパケット(コンフィギュレーションリード/ライト)をI/O側ネットワークインタフェース6を介して受け取る。そして、I/Oデバイス8は、TLPパケットに基づいてリクエストを処理し、コンプリーションのTLPパケットをI/Oデバイスマネージャー5に送信する(ステップS82d)。コンプリーションTLPパケットは、I/O側ネットワークインタフェース6でイーサネットフレームにカプセル化された後、I/Oデバイスマネージャー5に送信される。
 I/Oデバイスマネージャー5は、I/Oデバイス8からコンプリーションを受け取ると、その通知を仮想マシンモニタ3に通知する(ステップS58d)。仮想マシンモニタ3からの要求がPCIコンフィギュレーションレジスタへの読み出し要求だった場合、その読み出し結果がコンプリーションTLPパケットのペイロード部に含まれているため、I/Oデバイスマネージャー5は、その読み出し結果も仮想マシンモニタ3へ通知する。
 リクエスト発行先決定部32は、仮想マシン4からのPCIコンフィギュレーションレジスタへの設定要求がBARに対するもので、BARに対する読み出し要求だった場合、その読み出したデータ(BARが要求する空間のサイズ、空間の種別、など)を図17のステップS36dで保持していたBAR番号及びBDF番号とともに組にして保持する。
仮想マシン4からのPCIコンフィギュレーションレジスタへの設定要求がBARに対するもので、BARに対する書き込み要求だった場合(BARのベースアドレスの設定)、コンプリーションの通知がなされた時点で、BARへの設定が完了している。そのため、リクエスト発行先決定部32は、開始アドレス(BARに書き込んだ値)、終了アドレス(BARに書き込んだ値にBARから読み出した値を加算した値)、BDF番号及びBAR番号を、アドレス範囲テーブル35に登録する(ステップS37d)。
 そして、リクエスト発行先決定部32は、仮想マシン4へPCIコンフィギュレーションレジスタへのリクエストが完了した旨を通知する(ステップS38d)。
 次に、仮想マシン4がI/Oデバイス8にメモリリード/ライトリクエストを発行する場合の動作を説明する。
 図18は、本発明の第2の実施形態に係る、仮想マシンからI/Oデバイスへメモリリード/ライトリクエストを発行した際の、処理の流れを示したシーケンス図である。
 仮想マシン4がI/Oデバイス8へアクセス要求を発行すると(ステップS40e)、仮想マシンモニタ3に設けられたリクエスト発行先決定部32は、仮想マシンの識別子及びアクセス要求の種別に応じて、アドレス値でアドレス範囲テーブル35を参照(又はBDF番号でBDF番号テーブルを参照)し、エントリがテーブルに存在するかどうかを確認する(ステップS30e)。エントリが存在すれば、リクエスト発行先決定部32は、そのアクセス要求がI/Oデバイス8へのアクセスであると判定する。
 リクエスト発行先決定部32は、仮想マシンの識別子、アクセス種別、BDF番号(又はアドレス値)及びアクセスするデータのサイズを、I/Oデバイスマネージャー5に通知する(ステップS32e)。
 I/Oデバイスマネージャー5に設けられたリクエスト制御部53は、MACアドレステーブル55を参照し、仮想マシンの識別子及びBDF番号を用いてMACアドレスを取得する(ステップS50e)。
 リクエスト制御部53は、図18のステップS50eで取得したMACアドレスと、仮想マシンモニタ3から通知された情報を用いて、TLPパケットをペイロードとするイーサネットフレームを生成する(ステップS54e)。
 リクエスト制御部53は、図18のステップS54eで生成したイーサネットフレームを、I/Oデバイス8に送信する(ステップS56e)。
 I/Oデバイス8が、I/O側ネットワークインタフェース6によってデカプセル化されたTLPパケットをI/O側ネットワークインタフェース6から受け取ると、TLPパケットに基づいてリクエストを処理する(ステップS80e)。
 リクエストがコンプリーションTLPパケットを必要とするものであった場合、I/Oデバイス8は、コンプリーションTLPパケットをI/Oデバイスマネージャー5に送信する(ステップS82e)。このTLPパケットは、I/O側ネットワークインタフェース6でイーサネットフレームにカプセル化される。
 I/Oデバイスマネージャー5は、I/Oデバイス8からコンプリーションの通知を受けると、仮想マシン4の識別子とともに、コンプリーションの通知を受信した旨を仮想マシンモニタ3に通知する(ステップS58e)。仮想マシン4の識別子は、受信した通知(コンプリーションTLPパケットをペイロードとしたイーサネットフレーム)のソースMACアドレスを用いて、MACアドレス逆引きテーブル58を参照することで得られる。
 仮想マシンモニタ3は、I/Oデバイスマネージャー5からコンプリーションの通知を受けると、通知に含まれる仮想マシン4の識別子を持つ仮想マシン4に、I/Oデバイス8へのアクセス要求が完了したことを通知する(ステップS34e)。
 なお、I/Oデバイス8から仮想マシン4へのメモリリード/ライトリクエストの処理は、第1の実施形態において図12を参照して説明した処理と同様であるため、その詳細な説明を省略する。
 次に、本実施形態の効果について説明する。
 本実施形態では、仮想マシン4に割り当てられたI/Oデバイス8が、仮想マシン4ごとに独立のBDF番号空間で管理される。この独立のBDF番号空間の使い方は仮想マシン4が任意に決定できるため、仮想マシンモニタ3で、BDF番号の変換や、アドレス値のオフセットの計算を行う必要がなくなる。これにより、1台のサーバに多数の仮想マシン4が稼働している場合でも、仮想マシンモニタ3の構成をシンプルにしつつ、I/Oデバイス8を必要な数だけ接続することが可能となる。
[第3の実施形態]
 次に、本発明の第3の実施形態について、図面を参照して詳細に説明する。なお、本発明の第1、第2の実施形態と同様の構成要素に対しては、同一の符号を付し、詳細な説明を省略する。
 図19は、本発明の第3の実施形態に係るコンピュータシステムの一構成例を示すブロック図である。図19を参照すると、コンピュータシステム1aは、図1に示した構成と比べると、複数のI/O側ネットワークインタフェース6のうち、1つのI/O側ネットワークインタフェース6において、I/Oデバイス8の代わりにPCI-Expressスイッチ9が接続されている。さらに、PCI-Expressスイッチ9にI/Oデバイス8が接続されている。
 PCI-Expressスイッチ9は、I/O側ネットワークインタフェース6の配下に複数のI/Oデバイス8を接続する場合に用いられる。PCI-Expressスイッチ9にもI/Oデバイス8と同様にI/Oデバイスマネージャー5からBDF番号が割り当てられる。図19では、PCI-Expressスイッチ9に接続されたI/Oデバイス8が2つの場合を示しているが、I/Oデバイス8の数は2つに限定されない。
 先に説明した通り、PCI-Expressスイッチ9は、PCI-PCI Bridge相当の機能を内部に持つ。そのため、図19で示すコンピュータシステム1aでは、PCI-Expressファブリック中に実PCI-PCI Bridgeと、仮想マシン4に割り当てるI/Oデバイス8の個数などに応じて挿入される仮想的なPCI-PCI Bridgeが存在することになる。
 そのため、本実施形態では、I/Oデバイス8を仮想マシン4に割り当てる処理を実行する場合、I/Oデバイスマネージャー5は、仮想マシンモニタ3に設定情報を渡す際(第1の実施形態における図10のステップS54aに該当)、設定情報の仮想PCI-PCI Bridgeのエントリに、仮想デバイスであることを示すフラグを付与する。あるいは、I/Oデバイスマネージャー5は、仮想マシンモニタ3にI/Oデバイスリストを渡す際(第2の実施形態における図17のステップS54dに該当)、I/Oデバイスリストの仮想PCI-PCI Bridgeのエントリに、仮想デバイスであることを示すフラグを付与する。
 仮想マシンモニタ3は、仮想マシン4からの初期設定の信号を受信すると、設定情報又はI/Oデバイスリストに付与されたフラグを参照し、初期設定の対象が仮想PCI-PCI Bridgeである場合、仮想マシン4からのI/Oデバイス8の初期設定の際の情報をI/Oデバイスマネージャー5に通知しない。また、仮想マシンモニタ3は、仮想マシン4からの初期設定の信号を受信すると、設定情報又はI/Oデバイスリストに付与されたフラグを参照し、初期設定の対象が実PCI-PCI Bridgeの場合、仮想マシン4から受け取った情報をI/Oデバイスマネージャー5に通知する。
 PCI-Expressスイッチ9に接続されているI/Oデバイス8は、PCI-Expressスイッチ9の初期設定完了後、初期設定が行われる。具体的には、第1の実施形態の場合、I/Oデバイス割当部33によってI/Oデバイス8は初期設定される。
第2の実施形態の場合、仮想マシン4によってI/Oデバイス8は初期設定される。これは、標準的なPCI-Expressファブリックの初期設定の際の動作と同様の方法でも実現することができる。
 次に、本実施形態の効果について説明する。
 本実施形態では、異なるバス番号のI/Oデバイス8を仮想マシン4に認識させるために使用する仮想PCI-PCI Bridgeに、仮想的なデバイスであることを示すフラグを付与する。これにより、仮想PCI-PCI Bridgeと、実PCI-PCI Bridgeの識別が可能になり、I/O側ネットワークインタフェース6の先に、PCI-Expressスイッチ9が接続され、その先に複数のI/Oデバイス8が接続されるようなシステムにも対応可能となる。
[第4の実施形態]
 次に、本発明の第4の実施形態について、図面を参照して詳細に説明する。なお、本発明の第1から第3の実施形態と同様の構成要素に対しては同一の符号を付し、詳細な説明を省略する。
 図20は、本発明の第4の実施形態に係るコンピュータシステムの一構成例を示すブロック図である。図20を参照すると、コンピュータシステム1bは、図1に示した構成に、グローバルI/Oデバイスマネージャー10が追加された構成になっている。
 グローバルI/Oデバイスマネージャー10は、I/Oデバイス8の種別及びスペックと、そのI/Oデバイス8に接続されたI/O側ネットワークインタフェース6のMACアドレスと、そのI/Oデバイス8の割当先の仮想マシンモニタ3の識別子と、そのI/Oデバイス8の割当先の仮想マシン4の識別子とを管理するためのI/Oデバイスリストを保持している。グローバルI/Oデバイスマネージャー10は、ネットワーク7に接続されているハードウェア2で稼働する全ての仮想マシンモニタ3からの、I/Oデバイス8の割り当て要求に応じて、I/Oデバイス8の検索及び割り当てを行い、その情報をI/Oデバイスマネージャー5に通知する。I/Oデバイスリストについては、図22を参照して説明する。
 図20に示すグローバルI/Oデバイスマネージャー10について説明する。
 図21は、本発明の第4の実施形態に係るグローバルI/Oデバイスマネージャーの一構成例を示すブロック図である。図21を参照すると、グローバルI/Oデバイスマネージャー10は、I/Oデバイス設定部52と、I/Oデバイスリスト57とを有する。I/Oデバイス設定部52は、ネットワーク7を介して、図20に示した仮想マシンモニタ3及びI/Oデバイスマネージャー5と接続される。
 図21に示したI/Oデバイスリスト57について説明する。
 図22は、本発明の第4の実施形態に係るI/Oデバイスリストの構成例を示したものである。本実施形態のI/Oデバイスリスト57は、I/Oデバイス8の種別及びスペックと、そのI/Oデバイス8に接続されたI/O側ネットワークインタフェース6のMACアドレスと、そのI/Oデバイス8の割当先の仮想マシンモニタ3の識別子と、そのI/Oデバイス8の割当先の仮想マシン4の識別子とを管理する。
 図20に示したI/Oデバイスマネージャー5について説明する。
 図23は、本発明の第4の実施形態に係るI/Oデバイスマネージャーの一構成例を示すブロック図である。本実施形態のI/Oデバイスマネージャー5は、第1の実施形態で説明したI/Oデバイスマネージャー5の構成のうち、I/Oデバイスリスト57及びI/Oデバイス設定部52を除いた構成となっている。
 次に、本実施形態のコンピュータシステムの動作を説明する。
 グローバルI/Oデバイスマネージャー10に設けられたI/Oデバイス設定部52は、仮想マシンモニタ3からI/Oデバイス利用可否の問い合わせ(図10のステップS30a、図17のステップS30d)を受信すると、I/Oデバイスリスト57を検索する(図10のステップS50a、図17のステップS50d)。続いて、I/Oデバイス設定部52は、問い合わせに含まれるスペックの条件を満たすI/Oデバイス8の情報を、問い合わせ元の仮想マシンモニタ3と同一のハードウェアで稼働するI/Oデバイスマネージャー5に通知する(図10のステップS54aの通知のみ、図17のステップS54d)。問い合わせには、第1~第3の実施形態で説明した情報に加え、問い合わせ元の仮想マシンモニタ3の識別子も含まれている。
 I/Oデバイスマネージャー5は、グローバルI/Oデバイスマネージャー10からの通知に従って、I/Oデバイスの初期設定(図10のステップS52a~ステップS53a)を行う。また、グローバルI/Oデバイスマネージャー10が直接仮想マシンモニタ3に通知することも考えられる。この場合、仮想マシンモニタ3は、グローバルI/Oデバイスマネージャー10からの通知に基づいて、I/Oデバイス8の情報を登録する(図17のステップS31d)。
 次に、本実施形態の効果について説明する。
 本実施形態では、I/Oデバイス8を一元的に管理するグローバルI/Oデバイスマネージャー10を備える。これにより、複数のハードウェア2が接続されたネットワーク7においても、I/Oデバイス8を各仮想マシンモニタ3上で稼働する仮想マシン4に割り当てられるようになる。
 本実施形態のコンピュータは、以下のような構成であってもよい。
 (付記1)
 コンピュータであって、
 前記コンピュータとネットワークを介して接続されたI/Oデバイスについて、前記コンピュータで動作する仮想マシンへの割り当てを管理するためのI/Oデバイスリストを保持する記憶部と、
 前記仮想マシンの動作に必要なI/Oデバイスを特定する仮想マシンモニタと、
 前記仮想マシンモニタによって特定されたI/Oデバイスが前記仮想マシンに割り当て可能か否かを前記I/Oデバイスリストを参照して判定し、該仮想マシンに割り当て可能なI/Oデバイスがあると、該仮想マシンに該I/Oデバイスを割り当て、該I/Oデバイスに対して予め決められた仕様に基づいて付与された識別子を該仮想マシンの識別子とともに前記記憶部に登録するI/Oデバイスマネージャーと、
を有するコンピュータ。
 (付記2)
 付記1に記載のコンピュータにおいて、
 前記記憶部は、前記仮想マシンの識別子、該仮想マシンに割り当てられた前記I/Oデバイスの前記識別子、及び該I/Oデバイスと前記ネットワークとの間に接続されたインタフェースの識別子であるインタフェース識別子からなる情報を組にして管理するためのアドレステーブルをさらに有し、
 前記I/Oデバイスリストは、前記I/Oデバイスの種別及びスペックと、該I/Oデバイスに接続されたインタフェースの前記インタフェース識別子と、該I/Oデバイスの割り当て先となる仮想マシンの識別子との情報を組にして保持し、
 前記I/Oデバイスマネージャーは、前記仮想マシンに前記I/Oデバイスを割り当て可能と判定すると、該仮想マシンの識別子及び該I/Oデバイスの前記識別子を用いて前記I/Oデバイスリスト及び前記アドレステーブルを更新し、前記仮想マシンの起動前に、該仮想マシンに割り当てたI/Oデバイスの初期設定を実行し、該初期設定の情報を前記仮想マシンモニタに通知し、
 前記仮想マシンモニタは、前記I/Oデバイスマネージャーから通知された、前記I/Oデバイスの初期設定の情報を保持し、前記仮想マシンを起動させた後、該仮想マシンから送出された、前記I/Oデバイスに対する初期設定の信号をトラップすると、保持した、前記I/Oデバイスの初期設定の情報に基づいて、該仮想マシンによる初期設定の処理に応答する、コンピュータ。
 (付記3)
 付記2に記載のコンピュータにおいて、
 前記記憶部は、前記仮想マシンに割り当てられた前記I/Oデバイスについて、該仮想マシンによって付与された識別子である仮想識別子と、前記I/Oデバイスマネージャーによって付与された前記識別子との情報を対応づけて保持する番号対応テーブルをさらに有し、
 前記仮想マシンモニタは、前記仮想マシンから前記I/Oデバイスへのアクセス要求を受け付けると、該アクセス要求に含まれる、該I/Oデバイスの前記仮想識別子を読み出し、読み出した仮想識別子に対応する前記識別子を前記番号対応テーブルで特定し、特定した前記識別子の情報を含む前記アクセス要求を前記I/Oデバイスマネージャーに通知する、コンピュータ。
 (付記4)
 付記1に記載のコンピュータにおいて、
 前記記憶部は、
 前記仮想マシンの識別子、該仮想マシンに割り当てられた前記I/Oデバイスの前記識別子、及び該I/Oデバイスと前記ネットワークとの間に接続されたインタフェースの識別子であるインタフェース識別子からなる情報を組にして管理するためのアドレステーブルと、
 前記仮想マシンに割り当てられた前記I/Oデバイスの前記識別子を保持する番号テーブルと、をさらに有し、
 前記I/Oデバイスリストは、前記I/Oデバイスの種別及びスペックと、該I/Oデバイスに接続されたインタフェースの前記インタフェース識別子と、該I/Oデバイスの割り当て先となる仮想マシンの識別子との情報を組にして保持し、
 前記I/Oデバイスの前記識別子は前記仮想マシンによって付与されたものであり、
 前記仮想マシンモニタは、前記仮想マシンを起動させた後、該仮想マシンから設定要求の信号をトラップすると、該設定要求の対象が前記番号テーブルに登録されたI/Oデバイスであるか否かを判定し、該設定要求の対象が前記番号テーブルに登録されたI/Oデバイスと判定すると、トラップした信号に含まれる前記仮想マシンの識別子及び前記I/Oデバイスの前記識別子を前記I/Oデバイスマネージャーに通知し、
 前記I/Oデバイスマネージャーは、通知された前記仮想マシンの識別子及び前記I/Oデバイスの識別子によって前記アドレステーブルで特定されるインタフェース識別子を読み出し、該インタフェース識別子を持つインタフェースを介して該I/Oデバイスに対して初期設定を実行する、コンピュータ。
 (付記5)
 付記3または4に記載のコンピュータにおいて、
 前記記憶部は、前記インタフェースのインタフェース識別子と、該インタフェースに接続されたI/Oデバイスが割り当てられた前記仮想マシンの識別子とを対応づけて保持するアドレス逆引きテーブルをさらに有し、
 前記I/Oデバイスマネージャーは、前記仮想マシンモニタを介して前記I/Oデバイスへのアクセス要求又は設定要求を前記仮想マシンから受け付けると、その要求に含まれる情報を用いて、該I/Oデバイスが属するファブリックの仕様にしたがってパケットを構築し、前記ネットワークの仕様に基づいて該パケットをカプセル化したフレームを該I/Oデバイス宛に前記ネットワーク及び前記インタフェースを介して送信し、
 前記I/Oデバイスマネージャーは、前記I/Oデバイスから前記インタフェース及び前記ネットワークを介してフレームを受信すると、前記ネットワークの仕様に基づいて該フレームのパケットをデカプセル化し、デカプセル化後のパケットから送信元を示すインタフェース識別子を読み出し、前記アドレス逆引きテーブルを参照し、該インタフェース識別子に対応して登録されている前記仮想マシンの識別子を読み出し、該識別子で特定される仮想マシン宛にパケットを送信する、コンピュータ。
 (付記6)
 付記2または4に記載のコンピュータにおいて、
 前記I/Oデバイスマネージャーは、前記I/Oデバイスが属するファブリックの仕様に基づいて、仮想的なデバイスの情報を前記I/Oデバイスリストに挿入する、コンピュータ。
 (付記7)
 付記6に記載のコンピュータにおいて、
 前記I/Oデバイスマネージャーは、前記仮想的なデバイスの情報を前記I/Oデバイスリストに挿入した場合に、該仮想的なデバイスのエントリに仮想的なデバイスであることを示す情報を付与し、
 前記仮想マシンモニタは、前記仮想マシンから初期設定の信号を受け取っても、前記仮想的なデバイスであることを示す情報が付与されたデバイスの情報を通知しない、コンピュータ。
 (付記8)
 仮想マシンの動作に必要なI/Oデバイスを特定する仮想マシンモニタを含み、それぞれ異なる仮想マシンが動作する複数のコンピュータと、
 前記複数のコンピュータとネットワークを介して接続されたI/Oデバイスについて、前記仮想マシンへの割り当てを管理するためのI/Oデバイスリストを保持する記憶部、及び前記仮想マシンモニタによって特定されたI/Oデバイスが前記仮想マシンに割り当て可能か否かを前記I/Oデバイスリストで検索し、割り当て可能なI/Oデバイスがあると、該仮想マシンに該I/Oデバイスを割り当て、予め決められた仕様に基づいて該I/Oデバイスに識別子を付与して該仮想マシンモニタの識別子及び該仮想マシンの識別子とともに前記I/Oデバイスリストに登録するデバイス設定部を含むグローバルI/Oデバイスマネージャーと、
を有するコンピュータシステム。
 本実施形態のデバイス割当管理方法は、以下のような構成であってもよい。
 (付記9)
 コンピュータによるデバイス割当管理方法であって、
 前記コンピュータとネットワークを介して接続されたI/Oデバイスについて、前記コンピュータで動作する仮想マシンへの割り当てを管理するためのI/Oデバイスリストを記憶部に格納し、
 前記仮想マシンの動作に必要なI/Oデバイスを特定し、
 特定されたI/Oデバイスが前記仮想マシンに割り当て可能か否かを前記I/Oデバイスリストを参照して判定し、
 前記仮想マシンに割り当て可能なI/Oデバイスがあると、該仮想マシンに該I/Oデバイスを割り当て、該I/Oデバイスに対して予め決められた仕様に基づいて付与された識別子を該仮想マシンの識別子とともに前記記憶部に登録する、デバイス割当管理方法。
 (付記10)
 付記9に記載のデバイス割当管理方法において、
 前記I/Oデバイスリストは、前記I/Oデバイスの種別及びスペックと、該I/Oデバイスに接続されたインタフェースの前記インタフェース識別子と、該I/Oデバイスの割り当て先となる仮想マシンの識別子との情報を組にして保持するものであり、
 前記仮想マシンの識別子、該仮想マシンに割り当てられた前記I/Oデバイスの前記識別子、及び該I/Oデバイスと前記ネットワークとの間に接続されたインタフェースの識別子であるインタフェース識別子からなる情報を組にして管理するためのアドレステーブルを前記記憶部に格納し、
 前記仮想マシンに前記I/Oデバイスを割り当て可能と判定すると、該仮想マシンの識別子及び該I/Oデバイスの前記識別子を用いて前記I/Oデバイスリスト及び前記アドレステーブルを更新し、
 前記仮想マシンの起動前に、該仮想マシンに割り当てたI/Oデバイスの初期設定を実行し、該初期設定の情報を保持し、
 前記仮想マシンを起動させた後、該仮想マシンから送出された、前記I/Oデバイスに対する初期設定の信号をトラップすると、保持した、前記I/Oデバイスの初期設定の情報に基づいて、該仮想マシンによる初期設定の処理に応答する、デバイス割当管理方法。
 (付記11)
 付記10に記載のデバイス割当管理方法において、
 前記仮想マシンに割り当てられた前記I/Oデバイスについて、該仮想マシンによって付与された識別子である仮想識別子と、前記I/Oデバイスの前記識別子との情報を対応づけて保持する番号対応テーブルを前記記憶部に格納し、
 前記仮想マシンから前記I/Oデバイスへのアクセス要求を受け付けると、該アクセス要求に含まれる、該I/Oデバイスの前記仮想識別子を読み出し、読み出した仮想識別子に対応する前記識別子を前記番号対応テーブルで特定する、デバイス割当管理方法。
 (付記12)
 付記9に記載のデバイス割当管理方法において、
 前記I/Oデバイスリストは、前記I/Oデバイスの種別及びスペックと、該I/Oデバイスに接続されたインタフェースの前記インタフェース識別子と、該I/Oデバイスの割り当て先となる仮想マシンの識別子との情報を組にして保持するものであり、
 前記I/Oデバイスの前記識別子は前記仮想マシンによって付与されたものであり、
 前記仮想マシンの識別子、該仮想マシンに割り当てられた前記I/Oデバイスの前記識別子、及び該I/Oデバイスと前記ネットワークとの間に接続されたインタフェースの識別子であるインタフェース識別子からなる情報を組にして管理するためのアドレステーブルと、前記仮想マシンに割り当てられた前記I/Oデバイスの前記識別子を保持する番号テーブルと、を前記記憶部に格納し、
 前記仮想マシンを起動させた後、該仮想マシンから設定要求の信号をトラップすると、該設定要求の対象が前記番号テーブルに登録されたI/Oデバイスであるか否かを判定し、
 前記設定要求の対象が前記番号テーブルに登録されたI/Oデバイスと判定すると、トラップした信号に含まれる前記仮想マシンの識別子及び前記I/Oデバイスの前記識別子を読み出し、
 読み出した前記仮想マシンの識別子及び前記I/Oデバイスの識別子によって前記アドレステーブルでインタフェース識別子を特定し、
 特定したインタフェース識別子を持つインタフェースを介して前記I/Oデバイスに対して初期設定を実行する、デバイス割当管理方法。
 本実施形態のプログラムは、以下のような構成であってもよい。
 (付記13)
 コンピュータに、
 前記コンピュータとネットワークを介して接続されたI/Oデバイスについて、前記コンピュータで動作する仮想マシンへの割り当てを管理するためのI/Oデバイスリストを記憶部に格納する手順と、
 前記仮想マシンの動作に必要なI/Oデバイスを特定する手順と、
 特定されたI/Oデバイスが前記仮想マシンに割り当て可能か否かを前記I/Oデバイスリストを参照して判定する手順と、
 前記仮想マシンに割り当て可能なI/Oデバイスがあると、該仮想マシンに該I/Oデバイスを割り当て、該I/Oデバイスに対して予め決められた仕様に基づいて付与された識別子を該仮想マシンの識別子とともに前記記憶部に登録する手順を実行させるためのプログラム。
 (付記14)
 付記13に記載のプログラムにおいて、
 前記I/Oデバイスリストは、前記I/Oデバイスの種別及びスペックと、該I/Oデバイスに接続されたインタフェースの前記インタフェース識別子と、該I/Oデバイスの割り当て先となる仮想マシンの識別子との情報を組にして保持するものであり、
 前記仮想マシンの識別子、該仮想マシンに割り当てられた前記I/Oデバイスの前記識別子、及び該I/Oデバイスと前記ネットワークとの間に接続されたインタフェースの識別子であるインタフェース識別子からなる情報を組にして管理するためのアドレステーブルを前記記憶部に格納する手順と、
 前記仮想マシンに前記I/Oデバイスを割り当て可能と判定すると、該仮想マシンの識別子及び該I/Oデバイスの前記識別子を用いて前記I/Oデバイスリスト及び前記アドレステーブルを更新する手順と、
 前記仮想マシンの起動前に、該仮想マシンに割り当てたI/Oデバイスの初期設定を実行し、該初期設定の情報を保持する手順と、
 前記仮想マシンを起動させた後、該仮想マシンから送出された、前記I/Oデバイスに対する初期設定の信号をトラップすると、保持した、前記I/Oデバイスの初期設定の情報に基づいて、該仮想マシンによる初期設定の処理に応答する手順とをさらに有するプログラム。
 (付記15)
 付記14に記載のプログラムにおいて、
 前記仮想マシンに割り当てられた前記I/Oデバイスについて、該仮想マシンによって付与された識別子である仮想識別子と、前記I/Oデバイスの前記識別子との情報を対応づけて保持する番号対応テーブルを前記記憶部に格納する手順と、
 前記仮想マシンから前記I/Oデバイスへのアクセス要求を受け付けると、該アクセス要求に含まれる、該I/Oデバイスの前記仮想識別子を読み出し、読み出した仮想識別子に対応する前記識別子を前記番号対応テーブルで特定する手順とをさらに有するプログラム。
 (付記16)
 付記13に記載のプログラムにおいて、
 前記I/Oデバイスリストは、前記I/Oデバイスの種別及びスペックと、該I/Oデバイスに接続されたインタフェースの前記インタフェース識別子と、該I/Oデバイスの割り当て先となる仮想マシンの識別子との情報を組にして保持するものであり、
 前記I/Oデバイスの前記識別子は前記仮想マシンによって付与されたものであり、
 前記仮想マシンの識別子、該仮想マシンに割り当てられた前記I/Oデバイスの前記識別子、及び該I/Oデバイスと前記ネットワークとの間に接続されたインタフェースの識別子であるインタフェース識別子からなる情報を組にして管理するためのアドレステーブルと、前記仮想マシンに割り当てられた前記I/Oデバイスの前記識別子を保持する番号テーブルとを前記記憶部に格納する手順と、
 前記仮想マシンを起動させた後、該仮想マシンから設定要求の信号をトラップすると、該設定要求の対象が前記番号テーブルに登録されたI/Oデバイスであるか否かを判定する手順と、
 前記設定要求の対象が前記番号テーブルに登録されたI/Oデバイスと判定すると、トラップした信号に含まれる前記仮想マシンの識別子及び前記I/Oデバイスの前記識別子を読み出す手順と、
 読み出した前記仮想マシンの識別子及び前記I/Oデバイスの識別子によって前記アドレステーブルでインタフェース識別子を特定する手順と、
 特定したインタフェース識別子を持つインタフェースを介して前記I/Oデバイスに対して初期設定を実行する手順とをさらに有するプログラム。
 本発明を、サーバ仮想化技術を利用しているコンピュータシステムにおいて、多数の仮想マシンに対して、I/Oデバイスのハードウェア機能を利用させる用途に適用できる。
 この出願は、2015年10月22日に出願された日本出願特願2015-208114を基礎とする優先権を主張し、その開示の全てをここに取り込む。
 1、1a、1b  コンピュータシステム
 2  ハードウェア
 3  仮想マシンモニタ(VMM)
 4  仮想マシン(VM)
 5  I/Oデバイスマネージャー
 6  I/O側ネットワークインタフェース
 7  ネットワーク
 8  I/Oデバイス
 9  PCI-Expressスイッチ
 10  グローバルI/Oデバイスマネージャー
 21  ネットワークインタフェースカード(NIC)
 31  仮想マシンインタフェース
 32  リクエスト発行先決定部
 33  I/Oデバイス割当部
 34  I/Oデバイスマネージャーインタフェース
 35  アドレス範囲テーブル
 36  BDF番号対応テーブル
 36d  BDF番号テーブル
 37  NICドライバ
 38  リソースファイル保持部
 39  I/Oデバイス割当リスト
 51  仮想マシンモニタインタフェース
 52  I/Oデバイス設定部
 53  リクエスト制御部
 54  NICドライバインタフェース
 55  MACアドレステーブル
 56  I/Oデバイス設定内容保持テーブル
 57  I/Oデバイスリスト
 58  MACアドレス逆引きテーブル
 59  I/Oデバイス設定リスト

Claims (9)

  1.  コンピュータであって、
     前記コンピュータとネットワークを介して接続されたI/Oデバイスについて、前記コンピュータで動作する仮想マシンへの割り当てを管理するためのI/Oデバイスリストを保持する記憶部と、
     前記仮想マシンの動作に必要なI/Oデバイスを特定する仮想マシンモニタと、
     前記仮想マシンモニタによって特定されたI/Oデバイスが前記仮想マシンに割り当て可能か否かを前記I/Oデバイスリストを参照して判定し、該仮想マシンに割り当て可能なI/Oデバイスがあると、該仮想マシンに該I/Oデバイスを割り当て、該I/Oデバイスに対して予め決められた仕様に基づいて付与された識別子を該仮想マシンの識別子とともに前記記憶部に登録するI/Oデバイスマネージャーと、
    を有するコンピュータ。
  2.  請求項1に記載のコンピュータにおいて、
     前記記憶部は、前記仮想マシンの識別子、該仮想マシンに割り当てられた前記I/Oデバイスの前記識別子、及び該I/Oデバイスと前記ネットワークとの間に接続されたインタフェースの識別子であるインタフェース識別子からなる情報を組にして管理するためのアドレステーブルをさらに有し、
     前記I/Oデバイスリストは、前記I/Oデバイスの種別及びスペックと、該I/Oデバイスに接続されたインタフェースの前記インタフェース識別子と、該I/Oデバイスの割り当て先となる仮想マシンの識別子との情報を組にして保持し、
     前記I/Oデバイスマネージャーは、前記仮想マシンに前記I/Oデバイスを割り当て可能と判定すると、該仮想マシンの識別子及び該I/Oデバイスの前記識別子を用いて前記I/Oデバイスリスト及び前記アドレステーブルを更新し、前記仮想マシンの起動前に、該仮想マシンに割り当てたI/Oデバイスの初期設定を実行し、該初期設定の情報を前記仮想マシンモニタに通知し、
     前記仮想マシンモニタは、前記I/Oデバイスマネージャーから通知された、前記I/Oデバイスの初期設定の情報を保持し、前記仮想マシンを起動させた後、該仮想マシンから送出された、前記I/Oデバイスに対する初期設定の信号をトラップすると、保持した、前記I/Oデバイスの初期設定の情報に基づいて、該仮想マシンによる初期設定の処理に応答する、コンピュータ。
  3.  請求項1に記載のコンピュータにおいて、
     前記記憶部は、
     前記仮想マシンの識別子、該仮想マシンに割り当てられた前記I/Oデバイスの前記識別子、及び該I/Oデバイスと前記ネットワークとの間に接続されたインタフェースの識別子であるインタフェース識別子からなる情報を組にして管理するためのアドレステーブルと、
     前記仮想マシンに割り当てられた前記I/Oデバイスの前記識別子を保持する番号テーブルと、をさらに有し、
     前記I/Oデバイスリストは、前記I/Oデバイスの種別及びスペックと、該I/Oデバイスに接続されたインタフェースの前記インタフェース識別子と、該I/Oデバイスの割り当て先となる仮想マシンの識別子との情報を組にして保持し、
     前記I/Oデバイスの前記識別子は前記仮想マシンによって付与されたものであり、
     前記仮想マシンモニタは、前記仮想マシンを起動させた後、該仮想マシンから設定要求の信号をトラップすると、該設定要求の対象が前記番号テーブルに登録されたI/Oデバイスであるか否かを判定し、該設定要求の対象が前記番号テーブルに登録されたI/Oデバイスと判定すると、トラップした信号に含まれる前記仮想マシンの識別子及び前記I/Oデバイスの前記識別子を前記I/Oデバイスマネージャーに通知し、
     前記I/Oデバイスマネージャーは、通知された前記仮想マシンの識別子及び前記I/Oデバイスの識別子によって前記アドレステーブルで特定されるインタフェース識別子を読み出し、該インタフェース識別子を持つインタフェースを介して該I/Oデバイスに対して初期設定を実行する、コンピュータ。
  4.  コンピュータによるデバイス割当管理方法であって、
     前記コンピュータとネットワークを介して接続されたI/Oデバイスについて、前記コンピュータで動作する仮想マシンへの割り当てを管理するためのI/Oデバイスリストを記憶部に格納し、
     前記仮想マシンの動作に必要なI/Oデバイスを特定し、
     特定されたI/Oデバイスが前記仮想マシンに割り当て可能か否かを前記I/Oデバイスリストを参照して判定し、
     前記仮想マシンに割り当て可能なI/Oデバイスがあると、該仮想マシンに該I/Oデバイスを割り当て、該I/Oデバイスに対して予め決められた仕様に基づいて付与された識別子を該仮想マシンの識別子とともに前記記憶部に登録する、デバイス割当管理方法。
  5.  請求項4に記載のデバイス割当管理方法において、
     前記I/Oデバイスリストは、前記I/Oデバイスの種別及びスペックと、該I/Oデバイスに接続されたインタフェースの前記インタフェース識別子と、該I/Oデバイスの割り当て先となる仮想マシンの識別子との情報を組にして保持するものであり、
     前記仮想マシンの識別子、該仮想マシンに割り当てられた前記I/Oデバイスの前記識別子、及び該I/Oデバイスと前記ネットワークとの間に接続されたインタフェースの識別子であるインタフェース識別子からなる情報を組にして管理するためのアドレステーブルを前記記憶部に格納し、
     前記仮想マシンに前記I/Oデバイスを割り当て可能と判定すると、該仮想マシンの識別子及び該I/Oデバイスの前記識別子を用いて前記I/Oデバイスリスト及び前記アドレステーブルを更新し、
     前記仮想マシンの起動前に、該仮想マシンに割り当てたI/Oデバイスの初期設定を実行し、該初期設定の情報を保持し、
     前記仮想マシンを起動させた後、該仮想マシンから送出された、前記I/Oデバイスに対する初期設定の信号をトラップすると、保持した、前記I/Oデバイスの初期設定の情報に基づいて、該仮想マシンによる初期設定の処理に応答する、デバイス割当管理方法。
  6.  請求項4に記載のデバイス割当管理方法において、
     前記I/Oデバイスリストは、前記I/Oデバイスの種別及びスペックと、該I/Oデバイスに接続されたインタフェースの前記インタフェース識別子と、該I/Oデバイスの割り当て先となる仮想マシンの識別子との情報を組にして保持するものであり、
     前記I/Oデバイスの前記識別子は前記仮想マシンによって付与されたものであり、
     前記仮想マシンの識別子、該仮想マシンに割り当てられた前記I/Oデバイスの前記識別子、及び該I/Oデバイスと前記ネットワークとの間に接続されたインタフェースの識別子であるインタフェース識別子からなる情報を組にして管理するためのアドレステーブルと、前記仮想マシンに割り当てられた前記I/Oデバイスの前記識別子を保持する番号テーブルと、を前記記憶部に格納し、
     前記仮想マシンを起動させた後、該仮想マシンから設定要求の信号をトラップすると、該設定要求の対象が前記番号テーブルに登録されたI/Oデバイスであるか否かを判定し、
     前記設定要求の対象が前記番号テーブルに登録されたI/Oデバイスと判定すると、トラップした信号に含まれる前記仮想マシンの識別子及び前記I/Oデバイスの前記識別子を読み出し、
     読み出した前記仮想マシンの識別子及び前記I/Oデバイスの識別子によって前記アドレステーブルでインタフェース識別子を特定し、
     特定したインタフェース識別子を持つインタフェースを介して前記I/Oデバイスに対して初期設定を実行する、デバイス割当管理方法。
  7.  コンピュータに、
     前記コンピュータとネットワークを介して接続されたI/Oデバイスについて、前記コンピュータで動作する仮想マシンへの割り当てを管理するためのI/Oデバイスリストを記憶部に格納する手順と、
     前記仮想マシンの動作に必要なI/Oデバイスを特定する手順と、
     特定されたI/Oデバイスが前記仮想マシンに割り当て可能か否かを前記I/Oデバイスリストを参照して判定する手順と、
     前記仮想マシンに割り当て可能なI/Oデバイスがあると、該仮想マシンに該I/Oデバイスを割り当て、該I/Oデバイスに対して予め決められた仕様に基づいて付与された識別子を該仮想マシンの識別子とともに前記記憶部に登録する手順を実行させるためのプログラムを記録するプログラム記録媒体。
  8.  請求項7に記載のプログラム記録媒体において、
     前記I/Oデバイスリストは、前記I/Oデバイスの種別及びスペックと、該I/Oデバイスに接続されたインタフェースの前記インタフェース識別子と、該I/Oデバイスの割り当て先となる仮想マシンの識別子との情報を組にして保持するものであり、
     前記プログラムは、
     前記仮想マシンの識別子、該仮想マシンに割り当てられた前記I/Oデバイスの前記識別子、及び該I/Oデバイスと前記ネットワークとの間に接続されたインタフェースの識別子であるインタフェース識別子からなる情報を組にして管理するためのアドレステーブルを前記記憶部に格納する手順と、
     前記仮想マシンに前記I/Oデバイスを割り当て可能と判定すると、該仮想マシンの識別子及び該I/Oデバイスの前記識別子を用いて前記I/Oデバイスリスト及び前記アドレステーブルを更新する手順と、
     前記仮想マシンの起動前に、該仮想マシンに割り当てたI/Oデバイスの初期設定を実行し、該初期設定の情報を保持する手順と、
     前記仮想マシンを起動させた後、該仮想マシンから送出された、前記I/Oデバイスに対する初期設定の信号をトラップすると、保持した、前記I/Oデバイスの初期設定の情報に基づいて、該仮想マシンによる初期設定の処理に応答する手順とをさらに前記コンピュータに実行させるプログラム記録媒体。
  9.  請求項7に記載のプログラム記録媒体において、
     前記I/Oデバイスリストは、前記I/Oデバイスの種別及びスペックと、該I/Oデバイスに接続されたインタフェースの前記インタフェース識別子と、該I/Oデバイスの割り当て先となる仮想マシンの識別子との情報を組にして保持するものであり、
     前記I/Oデバイスの前記識別子は前記仮想マシンによって付与されたものであり、
     前記プログラムは、
     前記仮想マシンの識別子、該仮想マシンに割り当てられた前記I/Oデバイスの前記識別子、及び該I/Oデバイスと前記ネットワークとの間に接続されたインタフェースの識別子であるインタフェース識別子からなる情報を組にして管理するためのアドレステーブルと、前記仮想マシンに割り当てられた前記I/Oデバイスの前記識別子を保持する番号テーブルとを前記記憶部に格納する手順と、
     前記仮想マシンを起動させた後、該仮想マシンから設定要求の信号をトラップすると、該設定要求の対象が前記番号テーブルに登録されたI/Oデバイスであるか否かを判定する手順と、
     前記設定要求の対象が前記番号テーブルに登録されたI/Oデバイスと判定すると、トラップした信号に含まれる前記仮想マシンの識別子及び前記I/Oデバイスの前記識別子を読み出す手順と、
     読み出した前記仮想マシンの識別子及び前記I/Oデバイスの識別子によって前記アドレステーブルでインタフェース識別子を特定する手順と、
     特定したインタフェース識別子を持つインタフェースを介して前記I/Oデバイスに対して初期設定を実行する手順とをさらに前記コンピュータに実行させるプログラム記録媒体。
PCT/JP2016/004595 2015-10-22 2016-10-17 コンピュータ、デバイス割当管理方法及びプログラム記録媒体 WO2017068770A1 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2017546403A JP6753412B2 (ja) 2015-10-22 2016-10-17 コンピュータ、デバイス割当管理方法及びプログラム
US15/770,045 US10684880B2 (en) 2015-10-22 2016-10-17 Allocating and initializing I/O devices at virtual

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP2015-208114 2015-10-22
JP2015208114 2015-10-22

Publications (1)

Publication Number Publication Date
WO2017068770A1 true WO2017068770A1 (ja) 2017-04-27

Family

ID=58557347

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/JP2016/004595 WO2017068770A1 (ja) 2015-10-22 2016-10-17 コンピュータ、デバイス割当管理方法及びプログラム記録媒体

Country Status (3)

Country Link
US (1) US10684880B2 (ja)
JP (1) JP6753412B2 (ja)
WO (1) WO2017068770A1 (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2019114025A (ja) * 2017-12-22 2019-07-11 コニカミノルタ株式会社 情報処理装置、情報処理方法および情報処理プログラム
CN113127099A (zh) * 2021-05-12 2021-07-16 北京奇艺世纪科技有限公司 服务器配置方法、装置、设备及存储介质
US11119801B2 (en) 2019-03-28 2021-09-14 International Business Machines Corporation Migrating virtual machines across commonly connected storage providers

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10356131B2 (en) * 2016-12-09 2019-07-16 Nutanix, Inc. Service chaining for multiple uplink bridges
US11089066B2 (en) 2016-12-09 2021-08-10 Nutanix, Inc. System and method for dynamic medium access control (MAC) relating to a virtualization environment
US10684976B1 (en) * 2018-07-09 2020-06-16 American Megatrends International, Llc Automatic bus resource adjustment in a multiple root bridge computing system
US10942670B2 (en) * 2018-12-06 2021-03-09 Vmware, Inc. Direct access flash transition layer
CN110221867A (zh) * 2019-05-31 2019-09-10 湖北三江航天万峰科技发展有限公司 一种xp系统下脉冲i/o功能卡通信驱动系统及方法
US11023402B2 (en) * 2019-07-02 2021-06-01 National Instruments Corporation Switch pruning in a switch fabric bus chassis
US11558296B2 (en) * 2020-09-18 2023-01-17 Serialtek, Llc Transaction analyzer for peripheral bus traffic
JP7153942B2 (ja) * 2020-08-17 2022-10-17 ラトナ株式会社 情報処理装置、方法、コンピュータプログラム、及び、記録媒体

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH09274598A (ja) * 1996-04-08 1997-10-21 Hitachi Ltd 情報処理装置の入出力チャネル拡張方法
JP2008146566A (ja) * 2006-12-13 2008-06-26 Hitachi Ltd 計算機、仮想デバイスの制御方法およびそのプログラム
JP2010218539A (ja) * 2008-12-31 2010-09-30 Intel Corp 物理的デバイスコントローラの仮想化をサポートするトランザクションのインジェクト方法
JP2012160095A (ja) * 2011-02-02 2012-08-23 Hitachi Ltd 計算機システム、及びその制御方法

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7467381B2 (en) * 2003-12-16 2008-12-16 Intel Corporation Resource partitioning and direct access utilizing hardware support for virtualization
JP5018252B2 (ja) * 2007-06-06 2012-09-05 株式会社日立製作所 デバイス割り当て変更方法
US8694995B2 (en) * 2011-12-14 2014-04-08 International Business Machines Corporation Application initiated negotiations for resources meeting a performance parameter in a virtualized computing environment
JP5928197B2 (ja) * 2012-06-29 2016-06-01 富士通株式会社 ストレージシステム管理プログラム及びストレージシステム管理装置
US8930668B2 (en) * 2012-11-15 2015-01-06 Bank Of America Corporation Storage black box
US9832078B2 (en) * 2015-01-06 2017-11-28 Netapp, Inc. Stateless resource management
JP6392978B2 (ja) * 2015-04-22 2018-09-19 株式会社日立製作所 計算機システムの管理システム

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH09274598A (ja) * 1996-04-08 1997-10-21 Hitachi Ltd 情報処理装置の入出力チャネル拡張方法
JP2008146566A (ja) * 2006-12-13 2008-06-26 Hitachi Ltd 計算機、仮想デバイスの制御方法およびそのプログラム
JP2010218539A (ja) * 2008-12-31 2010-09-30 Intel Corp 物理的デバイスコントローラの仮想化をサポートするトランザクションのインジェクト方法
JP2012160095A (ja) * 2011-02-02 2012-08-23 Hitachi Ltd 計算機システム、及びその制御方法

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2019114025A (ja) * 2017-12-22 2019-07-11 コニカミノルタ株式会社 情報処理装置、情報処理方法および情報処理プログラム
US11119801B2 (en) 2019-03-28 2021-09-14 International Business Machines Corporation Migrating virtual machines across commonly connected storage providers
CN113127099A (zh) * 2021-05-12 2021-07-16 北京奇艺世纪科技有限公司 服务器配置方法、装置、设备及存储介质
CN113127099B (zh) * 2021-05-12 2024-04-12 北京奇艺世纪科技有限公司 服务器配置方法、装置、设备及存储介质

Also Published As

Publication number Publication date
US10684880B2 (en) 2020-06-16
JP6753412B2 (ja) 2020-09-09
JPWO2017068770A1 (ja) 2018-08-23
US20180321964A1 (en) 2018-11-08

Similar Documents

Publication Publication Date Title
JP6753412B2 (ja) コンピュータ、デバイス割当管理方法及びプログラム
JP5362980B2 (ja) データ処理システム内で第1のホスト・システムと第2のホスト・システムとの間で通信するための方法、プログラム、およびシステム(ソケット接続および共用メモリを使用するホスト・システム間の通信のためのシステムおよび方法)
WO2015194534A1 (ja) スイッチ装置とコンピュータシステムと方法並びにプログラム
JP5763873B2 (ja) データ処理システムの複数のルート複合体間の通信のために共用メモリを初期設定するための方法、コンピュータ・プログラム、およびデータ処理システム
JP4931787B2 (ja) データ処理システム内で第1のホスト・システムと第2のホスト・システムとの間で通信するための方法、プログラム、およびシステム(トランザクション・プロトコルおよび共用メモリを使用するホスト・システム間の通信のためのシステムおよび方法)
KR101324844B1 (ko) 기능 변환 시스템 및 방법과 변환 수행 시스템
US8521941B2 (en) Multi-root sharing of single-root input/output virtualization
US7925802B2 (en) Hardware-based virtualization of BIOS, disks, network-interfaces, and consoles using a direct interconnect fabric
US9424219B2 (en) Direct routing between address spaces through a nontransparent peripheral component interconnect express bridge
JP5305848B2 (ja) データ処理システム内で入出力(i/o)仮想化を管理するための方法およびデータ処理システムならびにコンピュータ・プログラム
US10509758B1 (en) Emulated switch with hot-plugging
US20140286350A1 (en) Switching Method
US9531668B2 (en) Micro server, method of allocating MAC address, and computer readable recording medium
JP6458798B2 (ja) コンピュータシステム、データ処理装置
JP2008152786A (ja) データ処理システム内で1つまたは複数のエンドポイントの第1の物理機能から第2の物理機能に仮想機能を移行するための方法、プログラム、およびシステム(単一ルート・ステートレス仮想機能の移行のためのシステムおよび方法)
JP2008152787A (ja) データ処理システム内で実行中の通信ファブリックにコンポーネントをホット・プラグするための方法、プログラム、およびシステム(実行中のPCIeファブリックにおける新しいコンポーネントのホット・プラグ/除去のためのシステムおよび方法)
JP2010079816A (ja) Pciデバイス共有方法
US20100228887A1 (en) Method of configuration processing of pci device on virtualization apparatus and computer system
CN115203101A (zh) PCIe装置及其操作方法
JP6094575B2 (ja) I/oデバイス共有システムおよびi/oデバイス共有方法
WO2015190079A1 (ja) 計算機システム、遠隔デバイスの接続管理方法及びプログラム記録媒体
TWI791134B (zh) 通信裝置、資訊處理系統及通信方法
US20200387396A1 (en) Information processing apparatus and information processing system
JP2022541561A (ja) パケットネットワーク内のフラッシュ要求を処理するための装置および方法
JPWO2019124450A1 (ja) 入出力実行装置、デバイス仮想化システム、入出力実行方法、および、プログラム

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

Country of ref document: EP

Kind code of ref document: A1

ENP Entry into the national phase

Ref document number: 2017546403

Country of ref document: JP

Kind code of ref document: A

WWE Wipo information: entry into national phase

Ref document number: 15770045

Country of ref document: US

NENP Non-entry into the national phase

Ref country code: DE

122 Ep: pct application non-entry in european phase

Ref document number: 16857093

Country of ref document: EP

Kind code of ref document: A1