Patent Publication Number: US-2020278880-A1

Title: Method, apparatus, and system for accessing storage device

Description:
CROSS-REFERENCE TO RELATED APPLICATIONS 
     This application is a continuation of U.S. patent application Ser. No. 15/666,306, filed on Aug. 1, 2017, which is a continuation of International Application No. PCT/CN2015/092457, filed on Oct. 21, 2015. Both of the aforementioned patent applications are hereby incorporated by reference in their entireties. 
    
    
     TECHNICAL FIELD 
     Embodiments of the present disclosure relate to the computer field, and in particular, to a method, an apparatus, and a system for accessing a storage device. 
     BACKGROUND 
     A virtualization technology is originated from a requirement for a time-sharing system. A main objective of virtualization technology is to run a plurality of operating systems on one host, such that expensive computing resources on a mainframe server are fully used. As performance of an x86 processor is enhanced and applications of the x86 processor are popularized, development of the virtualization technology also begins to develop into the x86 architecture. In particular, at the end of 1990s, virtualization software vendors broke a new path for applying the virtualization technology on an x86 platform, and provides a software solution centered on a virtual machine monitor (VMM) to virtualize a personal computer (PC) server platform. Virtual machines (VM) are used to create a plurality of independent virtual hardware systems that have a same instruction set architecture (ISA) as physical hardware, where different operating systems, that is, guest operating systems (Guest OS), can run in each virtual hardware system. A guest operating system accesses a physical resource using the VMM. 
     In the prior art, access to a peripheral by a virtual machine requires conversion operations at a plurality of software layers, and access to a storage device is redundant because of the mechanism. Therefore, a new technology needs to be developed to resolve this problem. 
     SUMMARY 
     In view of this, embodiments of the present disclosure provide a method, an apparatus, and a system for accessing a storage device, so as to simplify access to the storage device by a virtual machine. 
     According to a first aspect, an embodiment of the present disclosure provides a method for accessing a storage device. An I/O adapter is configured in a computer system to manage access to the storage device by a virtual machine running in the computer system. After acquiring, from the virtual machine, an access request that carries virtual address information of a storage area to be accessed by the virtual machine, the I/O adapter generates an access instruction according to the access request, and sends the access instruction to a storage device target. The access instruction carries the virtual address information and an identifier of a virtual channel of the virtual machine, where the virtual channel is used to connect the virtual machine to the storage device target, the virtual machine corresponds to the virtual channel on a one-to-one basis, and the storage device target is configured to manage access to the storage device. 
     The virtual machine corresponds to the virtual channel on a one-to-one basis. The virtual channel refers to a data transmission channel that is established on a physical link in a data transmission process using storage and transmission protocols and indicates a unique connection relationship between the virtual machine and the storage device. The virtual channel and the identifier of the virtual channel are used to represent a unique connection relationship between the virtual machine and the storage device (storage device target). Each virtual machine is connected to the storage device (storage device target) using a unique virtual channel identified by a virtual channel identifier. In specific implementation, the virtual channel may be implemented in a plurality of forms, for example, may be implemented as a time division multiplexing physical connection channel. 
     The I/O adapter maintains the virtual channel between the virtual machine and the storage device, and the identifier of the virtual channel corresponding to the virtual machine is added to the access instruction. Therefore, access to the storage device by the virtual machine is implemented, and an access process is simplified. 
     It should be understood that, in this application, a virtual channel corresponds to a virtual machine on a one-to-one basis; an entity corresponds to a virtual channel on a one-to-one basis, and therefore corresponds to a virtual machine on a one-to-one basis. In some descriptions of this application, “corresponding to a virtual machine” and “corresponding to a virtual channel” are interchangeable, and “associated with a virtual machine” and “associated with a virtual channel” are also interchangeable. 
     With reference to the first aspect, in a first possible implementation manner of the first aspect, before generating the access instruction according to the access request, the I/O adapter queries a preset first correspondence, so as to determine the identifier of the virtual channel corresponding to the virtual machine, where the preset first correspondence includes a correspondence between an identifier of each virtual machine and an identifier of each virtual channel, and the first correspondence may be configured in advance, or determined by the I/O adapter through negotiation with the storage device target. The correspondence is implemented in a variety of forms, for example, may be represented in a form of a data table; or a register may be configured for each virtual machine, and the correspondence is represented by an identifier of a corresponding virtual channel stored in the register. A specific implementation form of the correspondence is not limited in this application. 
     With reference to the first aspect or any one of the foregoing possible implementation manners of the first aspect, in a second possible implementation manner of the first aspect, at least one cache queue is configured in the I/O adapter, and each cache queue corresponds to a respective virtual channel on a one-to-one basis; after acquiring the access request from the virtual machine, if the I/O adapter is currently not in an idle state or has heavy load, the I/O adapter may further write the access request in a first cache queue corresponding to the virtual channel of the virtual machine, and before generating the access instruction according to the access request, fetch the access request from the first cache queue corresponding to the virtual channel of the virtual machine. 
     Adding a cache queue for each virtual channel may allow the I/O adapter to work more flexibly without losing any access request in a case of heavy load. Using a cache queue whose structure is similar to a first in first out (FIFO) structure to cache access requests of all virtual machines is also an optional implementation manner. However, the FIFO structure cannot distinguish between priorities of the virtual machines or the like. A cache queue may be configured for each virtual channel, such that combination processing may be further performed on access requests that can be combined. 
     With reference to the first aspect or any one of the foregoing possible implementation manners of the first aspect, in a third possible implementation manner of the first aspect, if the I/O adapter acquires at least two access requests from at least two virtual machines, that the I/O adapter generates an access instruction according to the access request includes: first generating, by the I/O adapter according to priorities of the at least two virtual machines corresponding to the at least two access requests and according to priorities, an access instruction corresponding to a high-priority virtual machine, and then generating an access instruction corresponding to a low-priority virtual machine. 
     Priorities are set for different virtual machines, such that access by important virtual machines or those with high priorities may be preferentially processed. Therefore, the virtual machine can access the storage device more flexibly. 
     With reference to the first aspect or any one of the foregoing possible implementation manners of the first aspect, in a fourth possible implementation manner of the first aspect, if the I/O adapter acquires at least two access requests from at least two virtual machines, that the I/O adapter generates an access instruction according to the access request includes: first generating, by the I/O adapter according to a time sequence of acquiring the at least two access requests, an access instruction corresponding to an earlier received access request, and then generating an access instruction corresponding to a later received access request. 
     Because processing is performed according to the sequence of receiving the access requests, a system architecture may be simplified. Only a FIFO cache structure needs to be used, and access requests of different virtual machines do not need to be separately cached. 
     With reference to the first aspect or any one of the foregoing possible implementation manners of the first aspect, in a fifth possible implementation manner of the first aspect, after sending the access instruction to the storage device target, the I/O adapter further acquires a feedback message from the storage device target, where the feedback message includes an execution result of the access instruction and the identifier of the virtual channel of the virtual machine; and the I/O adapter determines the virtual machine according to the identifier of the virtual channel, and sends the execution result of the access instruction to the virtual machine. 
     With reference to the first aspect or any one of the foregoing possible implementation manners of the first aspect, in a sixth possible implementation manner of the first aspect, that the I/O adapter acquires an access request from the virtual machine includes: receiving, by the I/O adapter, a first doorbell notification from the virtual machine, and acquiring the access request from an I/O shared ring that is shared with the virtual machine, where the access request is write in the I/O shared ring by the virtual machine, and the first doorbell notification is used to indicate arrival of the access request at the I/O shared ring; and that the I/O adapter sends the execution result of the access instruction to the virtual machine includes: writing, by the I/O adapter, the execution result of the access instruction in the I/O shared ring that is shared with the virtual machine, and sending a second doorbell notification to the virtual machine, where the second doorbell notification is used to indicate arrival of the execution result at the I/O shared ring. 
     With reference to the first aspect or any one of the foregoing possible implementation manners of the first aspect, in a seventh possible implementation manner of the first aspect, the virtual machine runs on a computing device that is independent of the storage device, and the access instruction is a small computer system interface (SCSI) instruction that can be processed by a host bus adapter driver layer; and that the I/O adapter sends the access instruction to a storage device target includes: sending, by the I/O adapter, the access instruction to the storage device target using the host bus adapter driver layer. 
     If the virtual machine runs on the storage device, that is, in an application scenario of an all-in-one machine, the I/O adapter and the storage device target may transmit messages such as access instructions without using the host bus adapter (HBA) driver layer. 
     According to a second aspect, an embodiment of the present disclosure provides a computer-readable medium, including a computer executable instruction, where when a processor of a computer executes the computer executable instruction, the computer executes the method according to the first aspect or any possible implementation manner of the first aspect. 
     According to a third aspect, an embodiment of the present disclosure provides an apparatus for accessing a storage device, where the apparatus includes a processor, a memory, a bus, and a communications interface; the memory is configured to store an executable instruction; the processor is connected to the memory using the bus; and when the apparatus for accessing a storage device runs, the processor executes the executable instruction stored in the memory, such that the apparatus executes the method according to the first aspect or any possible implementation manner of the first aspect. 
     According to a fourth aspect, an embodiment of the present disclosure provides a method for accessing a storage device. The method is used to manage access to the storage device by a virtual machine and includes: acquiring, by a storage device target, an access instruction, where the access instruction carries virtual address information and an identifier of a virtual channel of the virtual machine, where the virtual channel is used to connect the virtual machine to the storage device target, the virtual machine corresponds to the virtual channel on a one-to-one basis, and the virtual address information is used to indicate a virtual address of a to-be-accessed storage area in the virtual machine; determining, by the storage device target, a physical address of the to-be-accessed storage area in the storage device according to the virtual address information and the identifier of the virtual channel of the virtual machine that are carried in the access instruction; and performing, by the storage device target, an operation on the to-be-accessed storage area according to the access instruction and the physical address of the to-be-accessed storage area in the storage device. 
     Configuring virtual channels may allow the storage device target to identify different virtual machines. Because the virtual channel represents a unique connection relationship between the virtual machine and the storage device, even if identifiers of virtual machines running on different physical machines are repeated, the storage device can also distinguish between the virtual machines on different physical machines, and thereby uniquely determine, according to the virtual address information and the identifier of the virtual channel of the virtual machine, the physical address of the storage area to be accessed by the virtual machine. 
     With reference to the fourth aspect, in a first possible implementation manner of the fourth aspect, the determining, by the storage device target, a physical address of the to-be-accessed storage area in the storage device according to the virtual address information and the identifier of the virtual channel of the virtual machine that are carried in the access instruction, includes: querying, by the storage device target, a preset second correspondence according to the virtual address information and the identifier of the virtual channel of the virtual machine that are carried in the access instruction, and determining the physical address of the to-be-accessed storage area in the storage device, where the preset second correspondence includes a correspondence between an identifier of each virtual channel and a physical address of a storage area allocated to each virtual channel. 
     Herein, the second correspondence is implemented in a variety of forms, and may be represented in a form of a data table; or a register may be configured for each virtual machine, and the correspondence is represented by an identifier of a corresponding virtual channel stored in the register. A specific implementation form of the correspondence is not limited in this application. 
     With reference to the fourth aspect or any one of the foregoing possible implementation manners of the fourth aspect, in a second possible implementation manner of the fourth aspect, at least one cache queue is configured in the storage device target, and each cache queue corresponds to a respective virtual channel on a one-to-one basis; after the acquiring, by a storage device target, an access instruction, the method further includes: writing, by the storage device target, the access instruction in a second cache queue corresponding to the virtual channel of the virtual machine; and before the storage device target determines the physical address of the to-be-accessed storage area in the storage device, the method further includes: fetching, by the storage device target, the access instruction from the second cache queue corresponding to the virtual channel of the virtual machine. 
     Configuring a corresponding cache queue for each virtual channel may allow the storage device target to work in a more flexible manner and take pertinent actions in a case of an access burst of some virtual machines. In addition, access requests of some virtual machines may be preferentially processed according to requirements, and combination processing may be further performed on access requests that can be combined. 
     Optionally, the cache queue of the storage device target may also use a FIFO structure. 
     With reference to the fourth aspect or any one of the foregoing possible implementation manners of the fourth aspect, in a third possible implementation manner of the fourth aspect, if the storage device target acquires at least two access instructions from at least two virtual machines, the determining, by the storage device target, a physical address of the to-be-accessed storage area in the storage device, includes: first determining, by the storage device target according to priorities of the at least two virtual machines corresponding to the at least two access instructions and according to priorities, a physical address of a storage area to be accessed by a high-priority virtual machine in the storage device, and then determining a physical address of a storage area to be accessed by a low-priority virtual machine in the storage device. 
     Priorities are set for different virtual channels (virtual machines), such that the storage device target can process access requests of important virtual machines or those with high priorities preferentially. Therefore, the storage device target manages access to the storage device more flexibly. The priorities may be adjusted dynamically. 
     With reference to the fourth aspect or any one of the foregoing possible implementation manners of the fourth aspect, if the storage device target acquires at least two access instructions from at least two virtual machines, the determining, by the storage device target, a physical address of the to-be-accessed storage area in the storage device, includes: first determining, by the storage device target according to a time sequence of acquiring the at least two access instructions, a physical address of a to-be-accessed storage area corresponding to an earlier received access instruction in the storage device, and then determining a physical address of a to-be-accessed storage area corresponding to a later received access instruction in the storage device. 
     The access instructions are processed according to the time sequence of receiving the access instructions. Therefore, a system architecture of the storage device may be simplified, and a requirement may be satisfied by merely using a FIFO cache structure. 
     With reference to the fourth aspect or any one of the foregoing possible implementation manners of the fourth aspect, in a fifth possible implementation manner of the fourth aspect, after the performing, by the storage device target, an operation on the to-be-accessed storage area according to the access instruction and the physical address of the to-be-accessed storage area in the storage device, the method further includes: returning, by the storage device target, a feedback message, where the feedback message includes an execution result of the access instruction and the identifier of the virtual channel of the virtual machine. 
     According to a fifth aspect, an embodiment of the present disclosure provides a computer-readable medium, including a computer executable instruction, where when a processor of a computer executes the computer executable instruction, the computer executes the method according to the fourth aspect or any possible implementation manner of the fourth aspect. 
     According to a sixth aspect, an embodiment of the present disclosure provides an apparatus for accessing a storage device, where the apparatus includes a processor, a memory, a bus, and a communications interface; the memory is configured to store an executable instruction; the processor is connected to the memory using the bus; and when the apparatus for accessing a storage device runs, the processor executes the executable instruction stored in the memory, such that the apparatus executes the method according to the fourth aspect or any possible implementation manner of the fourth aspect. 
     According to a seventh aspect, an embodiment of the present disclosure provides an apparatus for accessing a storage device, where the apparatus is configured to manage access to the storage device by a virtual machine running in a computer system and includes: an acquiring unit, configured to acquire an access request from the virtual machine, where the access request carries virtual address information of a to-be-accessed storage area; a generation unit, configured to generate an access instruction according to the access request, where the access instruction carries the virtual address information and an identifier of a virtual channel of the virtual machine, where the virtual channel is used to connect the virtual machine to a storage device target, the virtual machine corresponds to the virtual channel on a one-to-one basis, and the storage device target is configured to manage access to the storage device; and a sending unit, configured to send the access instruction to the storage device target. 
     With reference to the seventh aspect, in a first possible implementation manner of the seventh aspect, before generating the access instruction according to the access request, the generation unit is further configured to query a preset first correspondence according to an identifier of the virtual machine, so as to determine the identifier of the virtual channel, where the preset first correspondence includes a correspondence between an identifier of each virtual machine and an identifier of each virtual channel. 
     With reference to the seventh aspect or any one of the foregoing possible implementation manners of the seventh aspect, in a second possible implementation manner of the seventh aspect, at least one cache queue is configured in the apparatus, and each cache queue corresponds to a respective virtual channel on a one-to-one basis; after acquiring the access request from the virtual machine, the acquiring unit is further configured to write the access request in a first cache queue corresponding to the virtual channel of the virtual machine; and before generating the access instruction according to the access request, the generation unit is further configured to fetch the access request from the first cache queue corresponding to the virtual channel of the virtual machine. 
     With reference to the seventh aspect or any one of the foregoing possible implementation manners of the seventh aspect, in a third possible implementation manner of the seventh aspect, if the acquiring unit acquires at least two access requests from at least two virtual machines, that the generation unit is configured to generate an access instruction according to the access request includes: the generation unit is configured to first generate, according to priorities of the at least two virtual machines corresponding to the at least two access requests and according to priorities, an access instruction corresponding to a high-priority virtual machine, and then generate an access instruction corresponding to a low-priority virtual machine. 
     With reference to the seventh aspect or any one of the foregoing possible implementation manners of the seventh aspect, in a fourth possible implementation manner of the seventh aspect, if the acquiring unit acquires at least two access requests from at least two virtual machines, that the generation unit is configured to generate an access instruction according to the access request includes: the generation unit is configured to first generate, according to a time sequence of acquiring the at least two access requests, an access instruction corresponding to an earlier received access request, and then generate an access instruction corresponding to a later received access request. 
     With reference to the seventh aspect or any one of the foregoing possible implementation manners of the seventh aspect, in a fifth possible implementation manner of the seventh aspect, after the sending unit sends the access instruction to the storage device target, the acquiring unit is further configured to acquire a feedback message from the storage device target, where the feedback message includes an execution result of the access instruction and the identifier of the virtual channel of the virtual machine; and the sending unit is further configured to determine the virtual machine according to the identifier of the virtual channel, and send the execution result of the access instruction to the virtual machine. 
     With reference to the seventh aspect or any one of the foregoing possible implementation manners of the seventh aspect, in a sixth possible implementation manner of the seventh aspect, that the acquiring unit is configured to acquire an access request from the virtual machine includes: the acquiring unit is configured to receive a first doorbell notification from the virtual machine, and acquire the access request from an I/O shared ring that is shared with the virtual machine, where the access request is write in the I/O shared ring by the virtual machine, and the first doorbell notification is used to indicate arrival of the access request at the I/O shared ring; and that the sending unit is configured to send the execution result of the access instruction to the virtual machine includes: the sending unit is configured to write the execution result of the access instruction in the I/O shared ring that is shared with the virtual machine, and send a second doorbell notification to the virtual machine, where the second doorbell notification is used to indicate arrival of the execution result at the I/O shared ring. 
     With reference to the seventh aspect or any one of the foregoing possible implementation manners of the seventh aspect, in a seventh possible implementation manner of the seventh aspect, the access instruction is a small computer system interface (SCSI) instruction that can be processed by a host bus adapter driver layer; and that the sending unit is configured to send the access instruction to the storage device target includes: the sending unit is configured to send the access instruction to the storage device target using the host bus adapter driver layer. 
     It should be understood that the seventh aspect is an apparatus implementation manner corresponding to the method in the first aspect. Feature descriptions in the first aspect or any possible implementation manner of the first aspect are applicable to the seventh aspect or any possible implementation manner of the seventh aspect, and details are not described herein again. 
     According to an eighth aspect, an embodiment of the present disclosure provides an apparatus for accessing a storage device, where the apparatus is configured to manage access to the storage device by a virtual machine and includes: an acquiring unit, configured to acquire an access instruction, where the access instruction carries virtual address information and an identifier of a virtual channel of the virtual machine, where the virtual channel is used to connect the virtual machine to the apparatus, the virtual machine corresponds to the virtual channel on a one-to-one basis, and the virtual address information is used to indicate a virtual address of a to-be-accessed storage area in the virtual machine; a determining unit, configured to determine a physical address of the to-be-accessed storage area in the storage device according to the virtual address information and the identifier of the virtual channel of the virtual machine that are carried in the access instruction; and a processing unit, configured to perform an operation on the to-be-accessed storage area according to the access instruction and the physical address of the to-be-accessed storage area in the storage device. 
     With reference to the eighth aspect, in a first possible implementation manner of the eighth aspect, that the determining unit is configured to determine a physical address of the to-be-accessed storage area in the storage device according to the virtual address information and the identifier of the virtual channel of the virtual machine that are carried in the access instruction includes: the determining unit is configured to query a preset second correspondence according to the virtual address information and the identifier of the virtual channel of the virtual machine that are carried in the access instruction, so as to determine the physical address of the to-be-accessed storage area in the storage device, where the preset second correspondence includes a correspondence between an identifier of each virtual channel and a physical address of a storage area allocated to each virtual channel. 
     With reference to the eighth aspect or any one of the foregoing possible implementation manners of the eighth aspect, in a second possible implementation manner of the eighth aspect, at least one cache queue is configured in the apparatus, and each cache queue corresponds to a respective virtual channel on a one-to-one basis; after acquiring the access instruction, the acquiring unit is further configured to write the access instruction in a second cache queue corresponding to the virtual channel of the virtual machine; and before determining the physical address of the to-be-accessed storage area in the storage device, the determining unit is further configured to fetch the access instruction from the second cache queue corresponding to the virtual channel of the virtual machine. 
     With reference to the eighth aspect or any one of the foregoing possible implementation manners of the eighth aspect, in a third possible implementation manner of the eighth aspect, if the acquiring unit acquires at least two access instructions from at least two virtual machines, that the determining unit is configured to determine a physical address of the to-be-accessed storage area in the storage device includes: the determining unit is configured to first determine, according to priorities of the at least two virtual machines corresponding to the at least two access instructions and according to priorities, a physical address of a storage area to be accessed by a high-priority virtual machine in the storage device, and then determine a physical address of a storage area to be accessed by a low-priority virtual machine in the storage device. 
     With reference to the eighth aspect or any one of the foregoing possible implementation manners of the eighth aspect, in a fourth possible implementation manner of the eighth aspect, if the acquiring unit acquires at least two access instructions from at least two virtual machines, that the determining unit is configured to determine a physical address of the to-be-accessed storage area in the storage device includes: the determining unit is configured to first determine, according to a time sequence of acquiring the at least two access instructions by the acquiring unit, a physical address of a to-be-accessed storage area corresponding to an earlier received access instruction in the storage device, and then determine a physical address of a to-be-accessed storage area corresponding to a later received access instruction in the storage device. 
     With reference to the eighth aspect or any one of the foregoing possible implementation manners of the eighth aspect, in a fifth possible implementation manner of the eighth aspect, after performing the operation on the to-be-accessed storage area according to the access instruction and the physical address of the to-be-accessed storage area in the storage device, the processing unit is further configured to return a feedback message, where the feedback message includes an execution result of the access instruction and the identifier of the virtual channel of the virtual machine. 
     It should be understood that the eighth aspect is an apparatus implementation manner corresponding to the method in the fourth aspect. Feature descriptions in the fourth aspect or any possible implementation manner of the fourth aspect are applicable to the eighth aspect or any possible implementation manner of the eighth aspect, and details are not described herein again. 
     According to a ninth aspect, an embodiment of the present disclosure provides a system for accessing a storage device, where the system includes an I/O adapter and a storage device target; the I/O adapter is configured to acquire an access request from a virtual machine, where the access request carries virtual address information of a to-be-accessed storage area, generate an access instruction according to the access request, and send the access instruction to the storage device target, where the access instruction carries the virtual address information and an identifier of a virtual channel of the virtual machine, where the virtual channel is used to connect the virtual machine to the storage device target, and the virtual machine corresponds to the virtual channel on a one-to-one basis; and the storage device target is configured to acquire the access instruction, determine a physical address of the to-be-accessed storage area in the storage device according to the virtual address information and the identifier of the virtual channel that are carried in the access instruction, and perform an operation on the to-be-accessed storage area according to the access instruction and the physical address of the to-be-accessed storage area in the storage device. 
     With reference to the ninth aspect, in a first possible implementation manner of the ninth aspect, before generating the access instruction according to the access request, the I/O adapter is further configured to query a preset first correspondence according to an identifier of the virtual machine, so as to determine the identifier of the virtual channel, where the preset first correspondence includes a correspondence between an identifier of each virtual machine and an identifier of each virtual channel. 
     With reference to the ninth aspect or any one of the foregoing possible implementation manners of the ninth aspect, in a second possible implementation manner of the ninth aspect, at least one cache queue is configured in the I/O adapter, and each cache queue corresponds to a respective virtual channel on a one-to-one basis; after acquiring the access request from the virtual machine, the I/O adapter is further configured to write the access request in a first cache queue corresponding to the virtual channel of the virtual machine; and before generating the access instruction according to the access request, the I/O adapter is further configured to fetch the access request from the first cache queue corresponding to the virtual channel of the virtual machine. 
     With reference to the ninth aspect or any one of the foregoing possible implementation manners of the ninth aspect, in a third possible implementation manner of the ninth aspect, if the I/O adapter acquires at least two access requests from at least two virtual machines, that the I/O adapter is configured to generate an access instruction according to the access request includes: the I/O adapter is configured to first generate, according to priorities of the at least two virtual machines corresponding to the at least two access requests and according to priorities, an access instruction corresponding to a high-priority virtual machine, and then generate an access instruction corresponding to a low-priority virtual machine. 
     With reference to the ninth aspect or any one of the foregoing possible implementation manners of the ninth aspect, in a fourth possible implementation manner of the ninth aspect, if the I/O adapter acquires at least two access requests from at least two virtual machines, that the I/O adapter is configured to generate an access instruction according to the access request includes: the I/O adapter is configured to first generate, according to a time sequence of acquiring the at least two access requests, an access instruction corresponding to an earlier received access request, and then generate an access instruction corresponding to a later received access request. 
     With reference to the ninth aspect or any one of the foregoing possible implementation manners of the ninth aspect, in a fifth possible implementation manner of the ninth aspect, after sending the access instruction to the storage device target, the I/O adapter is further configured to acquire a feedback message from the storage device target, where the feedback message includes an execution result of the access instruction and the identifier of the virtual channel of the virtual machine, determine the virtual machine according to the identifier of the virtual channel, and send the execution result of the access instruction to the virtual machine. 
     With reference to the ninth aspect or any one of the foregoing possible implementation manners of the ninth aspect, in a sixth possible implementation manner of the ninth aspect, that the I/O adapter is configured to acquire an access request from a virtual machine includes: the I/O adapter is configured to receive a first doorbell notification from the virtual machine, and acquire the access request from an I/O shared ring that is shared with the virtual machine, where the access request is write in the I/O shared ring by the virtual machine, and the first doorbell notification is used to indicate arrival of the access request at the I/O shared ring; and that the I/O adapter is configured to send the execution result of the access instruction to the virtual machine includes: the I/O adapter is configured to write the execution result of the access instruction in the I/O shared ring that is shared with the virtual machine, and send a second doorbell notification to the virtual machine, where the second doorbell notification is used to indicate arrival of the execution result at the I/O shared ring. 
     With reference to the ninth aspect or any one of the foregoing possible implementation manners of the ninth aspect, in a seventh possible implementation manner of the ninth aspect, the access instruction is a small computer system interface (SCSI) instruction that can be processed by a host bus adapter driver layer; and that the I/O adapter is configured to send the access instruction to the storage device target includes: the I/O adapter is configured to send the access instruction to the storage device target using the host bus adapter driver layer. 
     With reference to the ninth aspect or any one of the foregoing possible implementation manners of the ninth aspect, in an eighth possible implementation manner of the ninth aspect, that the storage device target is configured to determine a physical address of the to-be-accessed storage area in the storage device according to the virtual address information and the identifier of the virtual channel that are carried in the access instruction includes: the storage device target is configured to query a preset second correspondence according to the virtual address information and the identifier of the virtual channel that are carried in the access instruction, so as to determine the physical address of the to-be-accessed storage area in the storage device, where the preset second correspondence includes a correspondence between an identifier of each virtual channel and a physical address of a storage area allocated to each virtual channel. 
     With reference to the ninth aspect or any one of the foregoing possible implementation manners of the ninth aspect, in a ninth possible implementation manner of the ninth aspect, at least one cache queue is configured in the storage device target, and each cache queue corresponds to a respective virtual channel on a one-to-one basis; after acquiring the access instruction, the storage device target is further configured to write the access instruction in a second cache queue corresponding to the virtual channel of the virtual machine; and before determining the physical address of the to-be-accessed storage area in the storage device, the storage device target is further configured to fetch the access instruction from the second cache queue corresponding to the virtual channel of the virtual machine. 
     With reference to the ninth aspect or any one of the foregoing possible implementation manners of the ninth aspect, in a tenth possible implementation manner of the ninth aspect, if the storage device target acquires at least two access instructions from at least two virtual machines, that the storage device target is configured to determine a physical address of the to-be-accessed storage area in the storage device includes: the storage device target is configured to first determine, according to priorities of the at least two virtual machines corresponding to the at least two access instructions and according to priorities, a physical address of a storage area to be accessed by a high-priority virtual machine in the storage device, and then determine a physical address of a storage area to be accessed by a low-priority virtual machine in the storage device. 
     With reference to the ninth aspect or any one of the foregoing possible implementation manners of the ninth aspect, in an eleventh possible implementation manner of the ninth aspect, if the storage device target acquires at least two access instructions from at least two virtual machines, that the storage device target is configured to determine a physical address of the to-be-accessed storage area in the storage device includes: the storage device target is configured to first determine, according to a time sequence of acquiring the at least two access instructions, a physical address of a to-be-accessed storage area corresponding to an earlier received access instruction in the storage device, and then determine a physical address of a to-be-accessed storage area corresponding to a later received access instruction in the storage device. 
     With reference to the ninth aspect or any one of the foregoing possible implementation manners of the ninth aspect, in a twelfth possible implementation manner of the ninth aspect, after performing the operation on the to-be-accessed storage area according to the access instruction and the physical address of the to-be-accessed storage area in the storage device, the storage device target is further configured to return a feedback message, where the feedback message includes an execution result of the access instruction and the identifier of the virtual channel of the virtual machine. 
     It should be understood that the ninth aspect is a system implementation manner corresponding to the methods in the first aspect and the fourth aspect. Feature descriptions in the first aspect or any possible implementation manner of the first aspect or the fourth aspect or any possible implementation manner of the fourth aspect are applicable to the ninth aspect or any possible implementation manner of the ninth aspect, and details are not described herein again. 
     According to the technical solutions disclosed by this application, an I/O adapter is configured between a virtual machine and a storage device, a virtual channel that corresponds to the virtual machine on a one-to-one basis is configured between the I/O adapter and the storage device, and an identifier of the corresponding virtual channel is carried in an access instruction, such that a storage device target can uniquely determine a physical address of a to-be-accessed storage area according to virtual address information and the identifier of the virtual channel of the virtual machine. In this way, direct access to the storage device by the virtual machine is implemented, access to the storage device is simplified, an I/O access process is shortened, and consumption of memory resources and computing resources by software layers is reduced. 
    
    
     
       BRIEF DESCRIPTION OF DRAWINGS 
       To describe the technical solutions in the embodiments of the present disclosure more clearly, the following briefly describes the accompanying drawings for describing the embodiments. The accompanying drawings in the following description show merely some embodiments of the present disclosure, and persons of ordinary skill in the art may still derive other drawings from these accompanying drawings without creative efforts. 
         FIG. 1  is a schematic diagram of an architecture of a virtualization system; 
         FIG. 2( a )  and  FIG. 2( b )  are a schematic structural diagram of a system for accessing a storage device according to an embodiment of the present disclosure; 
         FIG. 3  is a schematic diagram of an architecture for accessing a storage device; 
         FIG. 4  is a schematic diagram of an architecture for accessing a storage device according to an embodiment of the present disclosure; 
         FIG. 5  is a signaling diagram of a method for accessing a storage device according to an embodiment of the present disclosure; 
         FIG. 6  is an exemplary flowchart of a method for accessing a storage device according to an embodiment of the present disclosure; 
         FIG. 7  is an exemplary flowchart of a method for accessing a storage device according to an embodiment of the present disclosure; 
         FIG. 8  is a schematic diagram of a logical structure of an apparatus for accessing a storage device according to an embodiment of the present disclosure; 
         FIG. 9  is a schematic diagram of a logical structure of an apparatus for accessing a storage device according to an embodiment of the present disclosure; and 
         FIG. 10  is a schematic diagram of a hardware structure of an apparatus for accessing a storage device according to an embodiment of the present disclosure. 
     
    
    
     DESCRIPTION OF EMBODIMENTS 
     The following clearly describes the technical solutions in the embodiments of the present disclosure with reference to the accompanying drawings in the embodiments of the present disclosure. The described embodiments are some but not all of the embodiments of the present disclosure. All other embodiments obtained by persons of ordinary skill in the art based on the embodiments of the present disclosure without creative efforts shall fall within the protection scope of the present disclosure. 
       FIG. 1  is a schematic structural diagram of a virtualization system  100 . As shown in  FIG. 1 , the system  100  includes physical hardware  106 , a virtual machine monitor  104  (VMM), and N virtual machines  102  running on the physical hardware, where N is a positive integer greater than 0. 
     The virtual machine monitor is a software description layer between an operating system of a virtual machine and the physical hardware. The virtual machine monitor is responsible for processor scheduling, memory allocation, and the like between virtual machines. The VMM not only abstracts hardware of the virtual machines, but also controls running of the virtual machines. 
     The VMM may be further configured to manage creation, deletion, suspension, resumption, and migration of a virtual machine, processor scheduling, memory allocation, and device access between the virtual machines, and the like. 
     The VMM provides an abstraction layer for a virtual machine, where the abstraction layer includes an Application Programming Interface (API) for managing virtual hardware. The VMM provides basic virtual hardware such as a virtual central processing unit (VCPU) and a virtual memory management unit (MMU) for the virtual machine, and provides a corresponding hardware interface (secure hardware interface) for the virtual machine, such that device access is performed securely. 
     The secure hardware interface provides hardware virtualization such as direct memory access (DMA), input/output (I/O), drive, virtual peripheral component interconnect (PCI) address configuration, and virtual hardware interrupt. 
     The system  100  may support paravirtualization and full-virtualization. On a paravirtualized (PV) virtual machine running on the VMM, an operating system with a modified kernel runs, or an operating system installed with paravirtualized drivers runs. On a fully-virtualized virtual machine running on the VMM, an operating system with an unmodified kernel and not installed with paravirtualized drivers runs. 
       FIG. 2( a )  and  FIG. 2( b )  are structures of systems  200  ( a ) and  200  ( b ) for accessing a storage device according to an embodiment of the present disclosure. As shown in  FIG. 2( a )  and  FIG. 2( b ) , the system for accessing a storage device according to the embodiment of the present disclosure includes two structures. 
     As shown in  FIG. 2 ( a ) , the system  200  ( a ) includes a storage device  202  and M computing devices  204 , where a virtualization system  100  shown in  FIG. 1  runs on each computing device  204 , and M is a positive integer greater than 0. 
     As shown in the figure, at least one virtual machine runs on each computing device  204 . The storage device  202  is shared by virtual machines on the M computing devices  204 . The computing devices  204  are separated from the storage device  202 . The computing devices  204  may be connected to the storage device  202  using optical fibers, or serial cables, or other connection manners. The connection manner between the storage device  202  and the computing devices  204  is not limited in the embodiment of the present disclosure. 
       FIG. 2 ( a )  shows an application scenario of the computing devices  204  and the storage device  202  in a common storage area network (SAN). In this scenario, after a virtual machine running on each computing device  204  generates data, the computing device  204  performs specific processing, and stores valid data in a storage array of the storage device  202 . 
     The storage device  202  includes a storage array. The storage device  202  may be of various types, including but not limited to a random access memory (RAM), a read-only memory (ROM), an electrically erasable programmable read-only memory (EEPROM), a flash memory, other memories, a Compact Disc Read-Only Memory (CD-ROM), a digital versatile disc, another optical storage, a cassette, a magnetic tape, a magnetic disk storage, another magnetic storage device, and any other medium that can be used to store information and can be accessed by the computing device  204 . The implementation manner of the storage device  202  is not limited in the embodiment of the present disclosure. 
     A basic configuration of the computing device  204  generally includes at least one processor and a memory. The memory may be volatile, for example, a random access memory (RAM), or non-volatile, for example, a read-only memory (ROM), a flash memory, or a certain combination thereof. 
     The basic configuration may have additional features and functions. For example, the basic configuration may include an external storage device (removable or irremovable), including but not limited to a magnetic disk, a magnetic tape, an optical disc, or an optical tape. A computer storage medium includes a volatile or non-volatile, removable or irremovable medium that is used to store information such as a computer-readable instruction, a data structure, a program module, or other data in implementation of any method or technology. 
     The computing device  204  may further include a communications channel that allows the computing device  204  to communicate with another device. A communications channel medium includes but is not limited to an optical medium, a wired medium such as a wired network or a wired connection, or a wireless medium such as sound, radiofrequency (RF), infrared, or any other wireless medium. 
     It should be understood that the embodiment of the present disclosure is merely for exemplary description. The computing device  204  may further include another function module, and details are not described herein. 
     As shown in  FIG. 2 ( b ) , in another implementation manner of the embodiment of the present disclosure, the system  200  ( b ) for accessing a storage device includes a storage device  202  and M storage controllers  206 , where a virtualization system  100  shown in  FIG. 1  runs on each storage controller  206 , and M is a positive integer greater than 0. 
     As shown in the figure, at least one virtual machine runs on each storage controller  206 . The storage device  202  is shared by virtual machines on the M storage controllers  206 . The storage controllers  206  and the storage device  202  constitute an all-in-one machine. In an implementation manner of the embodiment of the present disclosure, a storage controller  206  may hot-swap the storage device  202 . 
       FIG. 2 ( b )  shows an application scenario of the storage device  202  in a SAN with computing devices omitted. In this scenario, a virtual machine directly runs on a storage controller  206  of the storage device  202 . The storage controller  206  performs specific processing on data generated by the virtual machine, and stores valid data in a storage array of the storage device  202 . 
     A basic configuration of the storage controller  206  generally includes at least one processor and a memory. The memory may be volatile, for example, a random access memory (RAM), or non-volatile, for example, a read-only memory (ROM), a flash memory, or a certain combination thereof. 
     The storage controller  206  may further include a communications channel that allows the storage controller  206  to communicate with another device. A communications channel medium includes but is not limited to an optical medium, a wired medium such as a wired network or a wired connection, or a wireless medium such as sound, RF, infrared, or any other wireless medium. 
     It should be understood that the physical hardware  106  in  FIG. 1  may be a specific computer, or may be a storage controller of the storage device  202 , or any combination thereof. In addition, the system in  FIG. 2( a )  and  FIG. 2( b )  are a implemented in a variety of forms, where the computing devices  204  may be separated from the storage device  202  and are connected to the storage device  202  in any manner, or the storage controllers  206  and the storage device  202  are integrated in an all-in-one machine. Specific implementation manners of the physical hardware  106  and the system  200  are not limited in the embodiment of the present disclosure. For ease of description, in the following description, the computing device  204 , the storage controller  206 , or any combination thereof is collectively referred to as a physical machine. 
       FIG. 3  is a schematic diagram of an architecture for accessing a storage device. As shown in  FIG. 3 , a kernel-based virtual machine (KVM) is used as an example for description. An entire storage device access process needs to pass through a virtual machine  102 , a virtual host target (Vhost target)  302 , a block device layer (Block level)  304 , a small computer system interface layer (SCSI)  306 , and a storage device  202 . 
     In the scenario of  200  ( a ) in  FIG. 2( a )  and  FIG. 2( b ) , the access process further needs to pass through a host bus adapter driver (HBA driver) of a computing device  204  and that of the storage device  202 . The HBA driver is a SCSI protocol transmission layer (also referred to as an HBA layer) of an operating system on a physical machine. It connects an internal bus of the physical machine to the storage device, and works as a SCSI protocol bearer layer. The HBA driver realizes SCSI protocol, packets and parses SCSI protocol messages, works with the SCSI layer to complete error processing, and is responsible for transmitting a SCSI instruction delivered by the SCSI layer. 
     The storage array of the storage device  202  may be divided into a plurality of logical unit number (LUN) devices, where each LUN device has a LUN. The LUN devices of the storage device  202  are allocated to a plurality of virtual machines for use, where the plurality of virtual machines may run on a same physical machine or may run on different physical machines, which is not limited in the embodiment of the present disclosure. 
     Before the entire system runs, first, a LUN device configuration process is performed on the physical machine and the storage device  202 , such that a physical drive letter of a LUN device of the storage device  202  is presented at a block device layer of the physical machine. Secondly, a user needs to use a configuration tool to respectively configure physical drive letters on block devices for the plurality of virtual machines running on the physical machine, such that virtual drive letters are presented in the virtual machines. For ease of description, in the embodiment of the present disclosure, a drive letter in a virtual machine is referred to as a virtual drive letter, and a drive letter presented at the block device layer of the physical machine is referred to as a physical drive letter. 
     When an application layer in the virtual machine  102  needs to access the storage device  202 , the virtual machine  102  generates a corresponding BLOCK Input and Output Request (BIO), and then sends the BIO to a block device (in the virtual machine) of the virtual machine. The block device of the virtual machine generates a request according to the BIO, then performs combining, sorting, caching, and scheduling based on requests, and then sends the request to a SCSI layer (in the virtual machine) of the virtual machine using a scheduling algorithm. The SCSI layer of the virtual machine generates a SCSI instruction, and sends the SCSI instruction to a virtual disk driver virtio-scsi. The virtio-scsi generates a virtio_scsi_cmd request according to the SCSI instruction, where the virtio_scsi_cmd request includes data such as a SCSI command descriptor block (CDB), data space description information, and data transmission direction information, and another 10 attribute, and the virtio_scsi_cmd carries virtual drive letter information that is provided by the block device layer (Block level)  304  for the virtual machine  102 . 
     The virtual disk driver virtio-scsi of the virtual machine sends the virtio_scsi_cmd request to an I/O shared ring vring of the virtual machine, and notifies the vhost target  302  using a doorbell mechanism that a new I/O request arrives. 
     After acquiring a notification, the vhost target  302  fetches the virtio_scsi_cmd from the vring, and parses and processes the request. If the request is not a read/write command, simulation processing is directly performed in the vhost target  302 . If the request is a read/write command, a corresponding BIO is generated and sent to the designated block device layer  304 . 
     The block device layer  304  generates a request according to the BIO, then performs combining, sorting, caching, and scheduling based on Requests, and then sends the request to the SCSI layer  306  of the virtual machine using a scheduling algorithm. 
     The SCSI layer  306  maps a virtual drive letter to a physical drive letter, re-packetizes the request into a SCSI instruction, and sends the SCSI instruction to the storage device  202 . The SCSI instruction carries physical drive letter information. 
     In the scenario of  200  ( a ) shown in  FIG. 2( a )  and  FIG. 2( b ) , the SCSI layer sends the SCSI instruction to the storage device  202  using HBA drivers of the computing device  204  and storage device  202 . The storage device  202  maps the physical drive letter to a LUN device in the storage array. 
     In the embodiment in  FIG. 3 , access to the storage device  202  by the virtual machine  102  is implemented, but multi-layer conversion in the virtual machine  102 , the vhost target  302 , the block device layer  304 , and the SCSI layer  306  is required in the entire access process before the virtual machine  102  can implement access to the storage device  202 . In addition, the access request needs to undergo caching, combining, sorting, scheduling, and SCSI instruction conversion in the block device twice, once in the virtual machine, and once in the physical machine. 
       FIG. 4  is a schematic diagram of an architecture  400  for accessing a storage device according to an embodiment of the present disclosure. As shown in  FIG. 4 , the architecture  400  includes a virtual machine  102 , an I/O adapter  402 , and a storage device  202 . 
     The storage device  202  may be used by a plurality of virtual machines  102  running on a plurality of physical machines. Before the entire system runs, first, a LUN device configuration process is performed on a virtual machine  102  running on a physical machine and the storage device  202 , such that a LUN device of the storage device  202  is presented as a virtual LUN device in the virtual machine  102  running on the physical machine. LUN devices of the storage device  202  may be allocated to a plurality of virtual machines for use, where the plurality of virtual machines may run on a physical machine or may run on a plurality of physical machines, which is not limited in the embodiment of the present disclosure. 
     For ease of description, in the embodiment of the present disclosure, a LUN device in a virtual machine is referred to as a virtual LUN device, and a virtual LUN is used to identify the virtual LUN device; a LUN device in a storage array of the storage device  202  is referred to as a physical LUN device, and a physical LUN is used to identify the physical LUN device. 
     In a specific implementation process, the I/O adapter  402  may configure a physical LUN device as a virtual LUN device in the virtual machine  102 , or a VMM may complete the configuration of a physical LUN device to a virtual LUN device in the virtual machine  102 . The configuration of a physical LUN device to a virtual LUN device in the virtual machine may be completed during creation of the virtual machine  102 , or the configuration of a physical LUN device to a virtual LUN device may be performed during subsequent dynamic adjustment of resources. The configuration entity and configuration time are not limited in the embodiment of the present disclosure. 
     In a possible implementation manner of the embodiment of the present disclosure, addressing manners in different virtual machines are the same, and virtual LUN device numbers in different virtual machines may be repeated. The configuration of a physical LUN device to a virtual LUN device may merely be conversion from a physical LUN device number to a virtual LUN device number. Attribute information of the physical LUN device, for example, attribute information about whether to support automatic thin configuration, whether to support continuous cluster reservation, whether to support offloaded data transfer, and whether to support path switching, may be transparently transmitted to the virtual machine. The process of configuring a physical LUN device to a virtual LUN device may be completed by the I/O adapter or the VMM through negotiation with a storage device target, which is not limited in the embodiment of the present disclosure. 
     A signaling diagram of a storage device access process in the architecture  400  is shown in  FIG. 5 . The access process includes: 
       502 . The virtual machine  102  generates a request for accessing the storage device  202 . 
     When the virtual machine  102  receives an upper-layer application requirement and needs to access the storage array in the storage device  202 , first, the virtual machine  102  generates an access request, where the access request carries virtual address information of a to-be-accessed storage area. 
     In an implementation manner of the embodiment of the present disclosure, the access request may carry a virtual LUN of a virtual LUN device to be accessed by the virtual machine  102  and a start address and an address length of the to-be-accessed storage area in the virtual LUN device. 
     Using KVM virtualization as an example for description, in an implementation manner of the embodiment of the present disclosure, when an application layer in the virtual machine  102  needs to access the storage device  202 , the virtual machine  102  generates a corresponding BLOCK Input and Output Request BIO, and then sends the BIO to a block device (in the virtual machine) of the virtual machine  102 . The block device of the virtual machine  102  generates a request according to the BIO, then performs combining, sorting, caching, and scheduling based on Requests, and then sends the request to a SCSI layer (in the virtual machine) of the virtual machine  102  using a scheduling algorithm. The SCSI layer of the virtual machine  102  generates a SCSI instruction according to the request, and sends the SCSI instruction to a virtual disk driver virtio-scsi. The virtio-scsi generates an access request virtio_scsi_cmd according to the SCSI instruction. The access request virtio_scsi_cmd carries the virtual LUN for identifying the virtual LUN device and the start address and the address length of the to-be-accessed storage area in the virtual LUN device. 
       504 . The virtual machine  102  sends the access request to the I/O adapter  402 . 
     The virtual machine  102  puts the access request in an I/O shared ring that is shared with the I/O adapter  402 , and sends a first doorbell notification to the I/O adapter, where the first doorbell notification is used to indicate arrival of the access request at the I/O shared ring. After receiving the first doorbell notification from the virtual machine, the I/O adapter  402  acquires the access request from the I/O shared ring that is shared with the virtual machine. 
     Using KVM virtualization as an example for description, in a specific implementation process, the virtual disk driver virtio-scsi of the virtual machine  102  puts the access request virtio_scsi_cmd in the I/O shared ring vring between the virtual machine  102  and the I/O adapter, notifying the I/O adapter  402  using a doorbell mechanism that a new access request arrives. After receiving the doorbell notification, the I/O adapter  402  fetches the access request virtio_scsi_cmd that is put in the corresponding I/O shared ring by the virtual machine  102 . 
       506 . The I/O adapter  402  generates an access instruction according to the access request. 
     The I/O adapter  402  generates the access instruction according to the access request virtio_scsi_cmd, where the access instruction carries the virtual address information of the to-be-accessed storage area and an identifier of a virtual channel corresponding to the virtual machine  102 . 
     In an implementation manner of the embodiment of the present disclosure, the access instruction may carry the virtual LUN of the virtual LUN device to be accessed by the virtual machine  102 , the identifier of the virtual channel corresponding to the virtual machine  102 , and the start address and the address length of the to-be-accessed storage area in the virtual LUN device. 
     The virtual channel is used to connect the virtual machine  102  to the storage device  202 , and the virtual machine  102  corresponds to the virtual channel on a one-to-one basis. More specifically, the virtual channel is used to connect the virtual machine  102  to a storage device target of the storage device  202 , and the storage device target is configured to manage access to the storage device  202 . Because the storage device  202  may be shared by a plurality of virtual machines, and even shared by a plurality of virtual machines running on a plurality of physical machines, to enable the storage device target to identify a virtual machine that is accessing the storage device  202 , a correspondence between the virtual machine and the virtual channel needs to be established. The virtual channel between the virtual machine and the storage device target is unique, that is, the virtual machine corresponds to the virtual channel on a one-to-one basis. Therefore, the identifier of the virtual channel can uniquely identify the virtual machine. 
     It should be understood that the virtual channel and the identifier of the virtual channel are used to represent a unique connection relationship between the virtual machine  102  and the storage device  202 . The virtual channel refers to a data transmission channel that is established on a physical medium in a data transmission process using storage and transmission protocols and indicates a unique connection relationship between the virtual machine and the storage device. Each virtual machine is connected to the storage device using a unique virtual channel identified by a virtual channel identifier. In specific implementation, the virtual channel may be implemented in a plurality of forms, for example, may be implemented as a time division multiplexing physical connection channel. 
     Because virtual machine identifiers of virtual machines running on different physical machines may be repeated, a virtual machine identifier cannot uniquely represent a virtual machine. However, a virtual channel corresponds to a virtual machine on a one-to-one basis, and an essential objective of an identifier of a virtual channel is to uniquely represent a virtual machine connected to the virtual channel. A virtual machine identifier is specifically implemented in a variety of forms, which are not limited in the embodiment of the present disclosure. Any identifier that can uniquely represent an identity of a virtual machine may be used to achieve this objective. A transmission channel between the virtual machine and the storage device, identified by a virtual channel identifier that uniquely represents the identity of the virtual machine, is a unique virtual channel for connecting the virtual machine to the storage device. 
     The virtual channel may be decided by the I/O adapter  402  through negotiation with the storage device  202 , or may be configured in advance. For example, during creation of a virtual machine, a virtual machine monitor (VMM) or a privileged domain for creating the virtual machine configures a virtual channel. The manners of configuring the virtual channel and the identifier of the virtual channel are not limited in the embodiment of the present disclosure. The virtual channel may have various attributes, such as a bearer capability, an address space of the corresponding storage array, and a troubleshooting method. 
     A one-to-one correspondence between the virtual channel and the virtual machine is maintained in the I/O adapter  402 . For example, the one-to-one correspondence between the virtual machine and the virtual channel may be recorded in a form of a data table. In a specific implementation process, a virtual machine identifier may be used to indicate a virtual machine, and a virtual channel identifier is used to indicate a virtual channel. 
     Before generating the access instruction according to the access request, the I/O adapter  402  queries a preset correspondence, so as to determine the identifier of the virtual channel corresponding to the virtual machine, where the correspondence includes the one-to-one correspondence between the identifier of the virtual channel and the virtual machine. 
     Configuring virtual channels may allow the storage device target to identify different virtual machines. Because the virtual channel represents a unique connection relationship between the virtual machine and the storage device, even if identifiers of virtual machines running on different physical machines are repeated, the storage device can also distinguish between the virtual machines on different physical machines, and thereby uniquely determine, according to the virtual address information and the identifier of the virtual channel of the virtual machine, a physical address of the storage area to be accessed by the virtual machine. 
     The one-to-one correspondence between the virtual channel and the virtual machine may be dynamically adjusted. The one-to-one correspondences between the virtual channels and the virtual machines may be adjusted dynamically adjusted. During creation of a virtual machine, a correspondence between the new virtual machine and a virtual channel corresponding to the new virtual machine may be added to the correspondences. During deletion of a virtual machine, a correspondence between the virtual machine and a corresponding virtual channel is also deleted from the correspondences. 
     In an implementation manner of the embodiment of the present disclosure, the I/O adapter converts the virtio_scsi_cmd instruction into a standard access instruction scsi_cmnd, and uses two high bytes in a LUN address field in the scsi_cmnd to record the identifier of the virtual channel corresponding to the virtual machine  102 . 
     A LUN address generally does not exceed six bytes, but a LUN address field defined in a SCSI model actually includes eight bytes, where two high bytes in the LUN address field are generally reserved. Therefore, the two reserved high bytes in the LUN address field may be used to carry the identifier of the virtual channel to distinguish between different virtual channels. 
     It should be understood that, in the access instruction, another field or extended field may also be used to carry the identifier of the virtual channel, which is not limited in the embodiment of the present disclosure. For example, if a quantity of virtual channels is less than 256, only one high byte in the LUN address field may be used to record an identifier of a virtual channel. 
     The following shows some pseudocode of the access request and the access instruction, where two high bytes in the LUN address field are used to record the identifier Virtual_Channel_no of the virtual channel. In specific implementation, the Virtual_Channel_no is left-shifted by 48 bits (that is, 6 bytes), and undergoes a “bitwise OR” operation with a LUN. Because the two high bytes of the LUN address field are 0 by default, after the “bitwise OR” operation is performed on the Virtual_Channel_no and the LUN, the identifier Virtual_Channel_no of the virtual channel is recorded in the two high bytes of the LUN address field. Two bytes may be used to distinguish between 65536 virtual channels. 
     Pseudocode of the access request: 
     
       
         
           
               
               
             
               
                   
                   
               
             
            
               
                   
                 struct virtio_scsi_cmd{ 
               
               
                   
                 lun[8]; 
               
               
                   
                 cdb[32]; 
               
               
                   
                 sdb; 
               
               
                   
                 tag; 
               
               
                   
                 .... 
               
               
                   
                 } 
               
               
                   
                   
               
            
           
         
       
     
     Pseudocode of the access instruction: 
     
       
         
           
               
               
             
               
                   
                   
               
             
            
               
                   
                 struct scsi_cmnd{ 
               
               
                   
                 Cmnd= cdb[32]; 
               
               
                   
                 sdb = sdb; 
               
               
                   
                 lun = lun[8] | Virtual_Channel_no&lt;&lt;48; 
               
               
                   
                 tag=tag; 
               
               
                   
                 .... 
               
               
                   
                 } 
               
               
                   
                   
               
            
           
         
       
     
     It should be understood that the foregoing pseudocode is merely for exemplary description. In specific implementation, real pseudocode may be different from the foregoing pseudocode, which is not limited in the embodiment of the present disclosure. 
     In an implementation manner of the embodiment of the present disclosure, at least one cache queue is configured in the I/O adapter  402 , where each cache queue is associated with one virtual channel, and each cache queue corresponds to a respective virtual channel on a one-to-one basis; after acquiring the access request from the virtual machine, the I/O adapter  402  further puts the access request in a first cache queue corresponding to the virtual channel of the virtual machine; and before generating the access instruction according to the access request, the I/O adapter  402  fetches the access request from the first cache queue corresponding to the virtual channel of the virtual machine. 
     If the I/O adapter  402  acquires at least two access requests from at least two virtual machines, the I/O adapter  402  may first generate, according to priorities of the at least two virtual machines corresponding to the at least two access requests and according to priorities, an access instruction corresponding to a high-priority virtual machine, and then generate an access instruction corresponding to a low-priority virtual machine. 
     If the I/O adapter  402  acquires at least two access requests from at least two virtual machines, the I/O adapter  402  may generate, according to a time sequence of acquiring the at least two access requests, an access instruction corresponding to an earlier received access request, and then generate an access instruction corresponding to a later received access request. 
     It should be understood that the foregoing manner of separately processing a plurality of received access requests by the I/O adapter  402  according to priorities of virtual machines or according to a sequence of acquiring time is only an example for description. The sequence of processing the received access requests by the I/O adapter  402  is not limited in the embodiment of the present disclosure. 
       508 . The I/O adapter sends the access instruction to the storage device  202 . 
     In a specific implementation process, in the scenario of  200  ( a ) shown in  FIG. 2( a )  and  FIG. 2( b ) , the access instruction is a small computer system interface SCSI instruction that can be processed by a host bus adapter driver layer; and the I/O adapter  402  sends the access instruction to the storage device  202  using HBA drivers of the computing device  204  and storage device  202 . 
     Specifically, the I/O adapter  402  sends the access instruction to the storage device target, and the storage device target is configured to manage the access to the storage device  202 . 
     After acquiring the access instruction from the I/O adapter  402 , the storage device target determines the physical address of the to-be-accessed storage area in the storage device according to the virtual address information and the identifier of the virtual channel that are carried in the access instruction. Specifically, the storage device target queries a preset second correspondence according to a virtual address of the storage area to be accessed by the virtual machine  102  and the identifier of the virtual channel of the virtual machine  102 , so as to determine the physical address of the to-be-accessed storage area in the storage device, where the preset second correspondence includes a correspondence between an identifier of each virtual channel and a physical address of a storage area allocated to each virtual channel. 
     Table 1 exemplarily shows a mapping relationship between a virtual address of a virtual machine and a physical address of a storage array. As shown in Table 1, a virtual address in each virtual channel is unique, addresses in different virtual channels may be repeated, and the storage device target can uniquely determine the physical address of the to-be-accessed storage area according to the virtual address and the identifier of the virtual channel. 
     The physical address of the to-be-accessed storage area is determined according to the identifier of the virtual channel and the virtual address jointly. Because the virtual channel corresponding to the virtual machine is unique, even if virtual machine identifiers of virtual machines running on different physical machines are the same, the storage device target still can uniquely determine the physical address according to the identifier of the virtual channel and the virtual address. 
     As shown in Table 1, even if virtual addresses of virtual channels with virtual channel identifiers 0 and 1 overlap each other, because the virtual channel identifiers of the two virtual channels are different, the storage device target may map “the virtual channel identifier 0+virtual address VA 1” to a physical address PA 1, and map “the virtual channel identifier 1+virtual address VA 1” to a physical address PA 4. 
     
       
         
           
               
             
               
                 TABLE 1 
               
             
            
               
                   
               
               
                 Address mapping table 
               
            
           
           
               
               
               
            
               
                 Virtual channel identifier 
                 Virtual address 
                 Physical address 
               
               
                   
               
               
                 0 
                 VA 1 
                 PA 1 
               
               
                 0 
                 VA 2 
                 PA 2 
               
               
                 0 
                 VA 3 
                 PA 3 
               
               
                 . . . 
                 . . . 
                 . . . 
               
               
                 1 
                 VA 1 
                 PA 4 
               
               
                 1 
                 VA 2 
                 PA 5 
               
               
                 1 
                 VA 3 
                 PA 6 
               
               
                 . . . 
                 . . . 
                 . . . 
               
               
                   
               
            
           
         
       
     
     In a specific implementation process, the virtual address is indication information of the virtual LUN and the to-be-accessed storage area in the virtual LUN device; the physical address is indication information of a physical LUN and the to-be-accessed storage area in a physical LUN device; and the storage device target may map the virtual LUN in the virtual machine  102  to the physical LUN. 
     In a possible implementation manner of the embodiment of the present disclosure, at least one cache queue is configured in the storage device target, and each cache queue corresponds to a respective virtual channel on a one-to-one basis; after acquiring the access instruction, the storage device target further puts the access instruction in a second cache queue corresponding to the virtual channel of the virtual machine; and before determining the physical address of the to-be-accessed storage area in the storage device, the storage device target fetches the access instruction from the second cache queue corresponding to the virtual channel of the virtual machine. 
     If the storage device target acquires at least two access instructions from at least two virtual machines, the storage device target may first determine, according to priorities of the at least two virtual machines corresponding to the at least two access instructions and according to priorities, a physical address of a storage area to be accessed by a high-priority virtual machine in the storage device, and then determine a physical address of a storage area to be accessed by a low-priority virtual machine in the storage device. 
     If the storage device target acquires at least two access instructions from at least two virtual machines, the storage device target may first determine, according to a time sequence of acquiring the at least two access instructions, a physical address of a to-be-accessed storage area corresponding to an earlier received access instruction in the storage device, and then determine a physical address of a to-be-accessed storage area corresponding to a later received access instruction in the storage device. 
     It should be understood that the foregoing manner of separately processing a plurality of received access instructions by the storage device target according to priorities or according to a sequence of acquiring time is only an example for description. The sequence of processing the received access instructions by the storage device target is not limited in the embodiment of the present disclosure. 
       510 . A storage device target performs access to a to-be-accessed storage area according to a physical address of the storage area to be accessed by the virtual machine and the access instruction. 
     In a specific implementation process, if the access instruction is a data write instruction, the storage device target writes to-be-written data into the storage area indicated by the physical address; if the access instruction is a data read instruction, the storage device target reads to-be-read data from the storage area indicated by the physical address. 
       512 . The storage device target returns an execution result of the access instruction to the I/O adapter  402 . 
     In an implementation manner of the embodiment of the present disclosure, the storage device target sends a feedback message to the I/O adapter  402 , where the feedback message includes the execution result of the access instruction and the identifier of the virtual channel of the virtual machine. The I/O adapter determines the virtual machine according to the identifier of the virtual channel. Optionally, the I/O adapter finds, according to a preset first correspondence and the identifier of the virtual channel, the virtual machine corresponding to the identifier of the virtual channel. 
       514 . The I/O adapter  402  returns the execution result of the access instruction to the virtual machine  102 . 
     In an implementation manner of the embodiment of the present disclosure, the I/O adapter  402  puts the execution result of the access instruction in the I/O shared ring that is shared with the virtual machine  102 , and sends a second doorbell notification to the virtual machine  102 , where the second doorbell notification is used to indicate arrival of the execution result at the I/O shared ring. 
     According to the technical solution disclosed by the embodiment of the present disclosure, an I/O adapter is configured between a virtual machine and a storage device, a virtual channel that corresponds to the virtual machine on a one-to-one basis is configured between the I/O adapter and the storage device, and an identifier of the corresponding virtual channel is carried in an access instruction, such that a storage device target can uniquely determine a physical address of a to-be-accessed area according to virtual address information and the identifier of the virtual channel of the virtual machine. In this way, direct access to the storage device by the virtual machine is implemented, access to the storage device is simplified, an I/O access process is shortened, and consumption of memory resources and computing resources by software layers is reduced. 
       FIG. 6  is an exemplary flowchart of a method  600  for accessing a storage device according to an embodiment of the present disclosure. At least one virtual machine runs in a computer system, an I/O adapter is configured in the computer system, and the I/O adapter is configured to manage access to the storage device by a virtual machine running in the computer system. The method  600  includes: 
     S 602 . The I/O adapter acquires an access request from the virtual machine, where the access request carries virtual address information of a to-be-accessed storage area. 
     In a possible implementation manner of the embodiment of the present disclosure, when the virtual machine receives an upper-layer application requirement and needs to access a storage array in the storage device, first, the virtual machine generates an access request, where the access request carries virtual address information of a to-be-accessed storage area. 
     Using KVM virtualization as an example for description, when an application layer in the virtual machine needs to access the storage device, the virtual machine generates a corresponding BLOCK Input and Output Request BIO, and then sends the BIO to a block device (in the virtual machine) of the virtual machine. The block device of the virtual machine generates a request according to the BIO, then performs combining, sorting, caching, and scheduling based on Requests, and then sends the request to a SCSI layer (in the virtual machine) of the virtual machine using a scheduling algorithm. The SCSI layer of the virtual machine generates a SCSI instruction according to the request, and sends the SCSI instruction to a virtual disk driver virtio-scsi. The virtio-scsi generates an access request virtio_scsi_cmd according to the SCSI instruction. 
     In an implementation manner of the embodiment of the present disclosure, that the I/O adapter acquires an access request from the virtual machine includes: receiving, by the I/O adapter, a first doorbell notification from the virtual machine, and acquiring the access request from an I/O shared ring that is shared with the virtual machine, where the access request is write in the I/O shared ring by the virtual machine, and the first doorbell notification is used to indicate arrival of the access request at the I/O shared ring. 
     Using KVM virtualization as an example for description, the virtual disk driver virtio-scsi of the virtual machine puts the access request virtio_scsi_cmd in the I/O shared ring vring between the virtual machine and the I/O adapter, and notifies the I/O adapter using a doorbell mechanism that a new access request arrives. After receiving the doorbell notification, the I/O adapter fetches the access request virtio_scsi_cmd that is write in the corresponding I/O shared ring by the virtual machine. 
     S 604 . The I/O adapter generates an access instruction according to the access request, where the access instruction carries the virtual address information and an identifier of a virtual channel of the virtual machine, where the virtual channel is used to connect the virtual machine to a storage device target, the virtual machine corresponds to the virtual channel on a one-to-one basis, and the storage device target is configured to manage access to the storage device. 
     The virtual channel is used to connect the virtual machine to the storage device. Specifically, the virtual channel is used to connect the virtual machine to the storage device target of the storage device. Because the storage device may be shared by a plurality of virtual machines, and even shared by a plurality of virtual machines running on a plurality of physical machines, and identifiers of virtual machines running on different physical machines may be repeated, to enable the storage device target to identify a virtual machine that is accessing the storage device, a correspondence between the virtual machine and the virtual channel needs to be established. The virtual channel between the virtual machine and the storage device target is unique, that is, the virtual machine corresponds to the virtual channel on a one-to-one basis. Therefore, the identifier of the virtual channel can uniquely identify the virtual machine. 
     Before the I/O adapter generates the access instruction according to the access request, the method further includes: querying, by the I/O adapter, a preset first correspondence according to an identifier of the virtual machine, so as to determine the identifier of the virtual channel, where the preset first correspondence includes a correspondence between an identifier of each virtual machine and an identifier of each virtual channel. 
     The virtual channel may be decided by the I/O adapter through negotiation with the storage device, or may be configured in advance. For example, during creation of a virtual machine, a virtual machine monitor or a privileged domain for creating the virtual machine configures a virtual channel. The manners of configuring the virtual channel and the identifier of the virtual channel are not limited in the embodiment of the present disclosure. 
     Using KVM virtualization as an example for description, the I/O adapter generates the access instruction according to the access request virtio_scsi_cmd, where the access instruction carries the virtual address information of the to-be-accessed storage area and the identifier of the virtual channel corresponding to the virtual machine. 
     In a specific implementation process, a LUN address generally does not exceed six bytes, but a LUN address field defined in a SCSI model actually includes eight bytes, where two high bytes in the LUN address field are generally reserved. Therefore, the two reserved high bytes in the LUN address field may be used to carry the identifier of the virtual channel to distinguish between different virtual channels. It should be understood that, in the access instruction, another field or extended field may also be used to carry the identifier of the virtual channel, which is not limited in the embodiment of the present disclosure. For example, if a quantity of virtual channels is less than 256, only one high byte in the LUN address field may be used to record an identifier of a virtual channel. 
     In an implementation manner of the embodiment of the present disclosure, the I/O adapter converts the virtio_scsi_cmd instruction into a standard access instruction scsi_cmnd, and uses two high bytes in a LUN address field in the scsi_cmnd to record the identifier of the virtual channel corresponding to the virtual machine. 
     In an implementation manner of the embodiment of the present disclosure, at least one cache queue is configured in the I/O adapter, where each cache queue corresponds to a respective virtual channel on a one-to-one basis; after the acquiring, by the I/O adapter, an access request from the virtual machine, the method further includes: writing, by the I/O adapter, the access request in a first cache queue corresponding to the virtual channel of the virtual machine; and before the I/O adapter generates the access instruction according to the access request, the method further includes: fetching, by the I/O adapter, the access request from the first cache queue corresponding to the virtual channel of the virtual machine. 
     Optionally, if the I/O adapter acquires at least two access requests from at least two virtual machines, that the I/O adapter generates an access instruction according to the access request includes: first generating, by the I/O adapter according to priorities of the at least two virtual machines corresponding to the at least two access requests and according to priorities, an access instruction corresponding to a high-priority virtual machine, and then generating an access instruction corresponding to a low-priority virtual machine. 
     Optionally, if the I/O adapter acquires at least two access requests from at least two virtual machines, that the I/O adapter generates an access instruction according to the access request includes: first generating, by the I/O adapter according to a time sequence of acquiring the at least two access requests, an access instruction corresponding to an earlier received access request, and then generating an access instruction corresponding to a later received access request. 
     It should be understood that the foregoing manner of separately processing a plurality of received access requests by the I/O adapter according to priorities of virtual machines or according to a sequence of acquiring time is only an example for description. The sequence of processing the received access requests by the I/O adapter is not limited in the embodiment of the present disclosure. 
     S 606 . The I/O adapter sends the access instruction to the storage device target. 
     After the I/O adapter sends the access instruction to the storage device target, the method further includes: acquiring by, the I/O adapter, a feedback message from the storage device target, where the feedback message includes an execution result of the access instruction and the identifier of the virtual channel of the virtual machine; and determining, by the I/O adapter, the virtual machine according to the identifier of the virtual channel, and sending the execution result of the access instruction to the virtual machine. 
     Specifically, that the I/O adapter sends the execution result of the access instruction to the virtual machine includes: writing, by the I/O adapter, the execution result of the access instruction in the I/O shared ring that is shared with the virtual machine, and sending a second doorbell notification to the virtual machine, where the second doorbell notification is used to indicate arrival of the execution result at the I/O shared ring. 
     In a specific implementation process, in the scenario of  200  ( a ) shown in  FIG. 2( a )  and  FIG. 2( b ) , the access instruction is a small computer system interface SCSI instruction that can be processed by a host bus adapter driver layer; and that the I/O adapter sends the access instruction to the storage device target includes: sending, by the I/O adapter, the access instruction to the storage device target using the host bus adapter driver layer. 
     It should be understood that the embodiment in  FIG. 6  is a method on an I/O adapter side in the embodiment in  FIG. 5 . Some feature descriptions in the embodiment in  FIG. 5  are applicable to the embodiment in  FIG. 6 , and details are not described herein again. 
     According to the technical solution disclosed by the embodiment of the present disclosure, an I/O adapter is configured between a virtual machine and a storage device, and a virtual channel corresponding to the virtual machine on a one-to-one basis is configured between the I/O adapter and the storage device. In this way, direct access to the storage device by the virtual machine is implemented, access to the storage device is simplified, an I/O access process is shortened, and consumption of memory resources and computing resources by software layers is reduced. 
       FIG. 7  is an exemplary flowchart of a method  700  for accessing a storage device according to an embodiment of the present disclosure. The storage device may be shared by a plurality of virtual machines. The plurality of virtual machines may be virtual machines running on a same physical machine, or may be virtual machines running on different physical machines, and identifiers of virtual machines on different physical machines may be the same. A storage device target is configured to manage access to the storage device. The method  700  includes: 
     S 702 . The storage device target acquires an access instruction, where the access instruction carries virtual address information and an identifier of a virtual channel of a virtual machine, where the virtual channel is used to connect the virtual machine to the storage device target, the virtual machine corresponds to the virtual channel on a one-to-one basis, and the virtual address information is used to indicate a virtual address of a to-be-accessed storage area in the virtual machine. 
     The virtual channel is used to connect the virtual machine to the storage device. Specifically, the virtual channel is used to connect the virtual machine to the storage device target of the storage device. Because the storage device may be shared by a plurality of virtual machines, and even shared by a plurality of virtual machines running on a plurality of physical machines, and identifiers of virtual machines running on different physical machines may be repeated, to enable the storage device target to identify a virtual machine that is accessing the storage device, a correspondence between the virtual machine and the virtual channel needs to be established. The virtual channel between the virtual machine and the storage device target is unique, that is, the virtual machine corresponds to the virtual channel on a one-to-one basis. Therefore, the identifier of the virtual channel can uniquely identify the virtual machine. 
     The virtual channel may be decided by a virtual machine monitor on a physical machine side or the virtual machine or any other module through negotiation with the storage device, or may be configured in advance. For example, during creation of a virtual machine, a virtual machine monitor or a privileged domain for creating the virtual machine configures a virtual channel. The manners of configuring the virtual channel and the identifier of the virtual channel are not limited in the embodiment of the present disclosure. 
     In a specific implementation process, a LUN address generally does not exceed six bytes, but a LUN address field defined in a SCSI model actually includes eight bytes, where two high bytes in the LUN address field are generally reserved. Therefore, the two reserved high bytes in the LUN address field may be used to carry the identifier of the virtual channel to distinguish between different virtual channels. It should be understood that, in the access instruction, another field or extended field may also be used to carry the identifier of the virtual channel, which is not limited in the embodiment of the present disclosure. For example, if a quantity of virtual channels is less than 256, only one high byte in the LUN address field may be used to record an identifier of a virtual channel. 
     S 704 . The storage device target determines a physical address of the to-be-accessed storage area in the storage device according to the virtual address information and the identifier of the virtual channel that are carried in the access instruction. 
     In a possible implementation manner of the embodiment of the present disclosure, that the storage device target determines a physical address of the to-be-accessed storage area in the storage device according to the virtual address information and the identifier of the virtual channel that are carried in the access instruction includes: querying, by the storage device target, a preset second correspondence according to the virtual address information and the identifier of the virtual channel that are carried in the access instruction, so as to determine the physical address of the to-be-accessed storage area in the storage device, where the preset second correspondence includes a correspondence between an identifier of each virtual channel and a physical address of a storage area allocated to each virtual channel. 
     A virtual address in each virtual channel is unique, addresses in different virtual channels may be repeated, and the storage device target can uniquely determine the physical address of the to-be-accessed storage area according to the virtual address and the identifier of the virtual channel. The physical address of the to-be-accessed storage area is determined according to the identifier of the virtual channel and the virtual address jointly. Because the virtual channel corresponding to the virtual machine is unique, even if virtual machine identifiers of virtual machines running on different physical machines are the same, the storage device target still can uniquely determine the physical address according to the identifier of the virtual channel and the virtual address. 
     In a specific implementation process, the storage device target may map a virtual LUN in the virtual machine to a physical LUN. 
     In a possible implementation manner of the embodiment of the present disclosure, at least one cache queue is configured in the storage device target, and each cache queue corresponds to a respective virtual channel on a one-to-one basis; after the acquiring, by a storage device target, an access instruction, the method further includes: writing, by the storage device target, the access instruction in a second cache queue corresponding to the virtual channel of the virtual machine; and before the storage device target determines the physical address of the to-be-accessed storage area in the storage device, the method further includes: fetching, by the storage device target, the access instruction from the second cache queue corresponding to the virtual channel of the virtual machine. 
     Optionally, if the storage device target acquires at least two access instructions from at least two virtual machines, that the storage device target determines a physical address of the to-be-accessed storage area in the storage device includes: first determining, by the storage device target according to priorities of the at least two virtual machines corresponding to the at least two access instructions and according to priorities, a physical address of a storage area to be accessed by a high-priority virtual machine in the storage device, and then determining a physical address of a storage area to be accessed by a low-priority virtual machine in the storage device. 
     Optionally, if the storage device target acquires at least two access instructions from at least two virtual machines, that the storage device target determines a physical address of the to-be-accessed storage area in the storage device includes: first determining, by the storage device target, according to a time sequence of acquiring the at least two access instructions, a physical address of a to-be-accessed storage area corresponding to an earlier received access instruction in the storage device, and then determining a physical address of a to-be-accessed storage area corresponding to a later received access instruction in the storage device. 
     It should be understood that the foregoing manner of separately processing a plurality of received access instructions by the storage device target according to priorities or according to a sequence of acquiring time is only an example for description. The sequence of processing the received access instructions by the storage device target is not limited in the embodiment of the present disclosure. 
     S 706 . The storage device target performs an operation on the to-be-accessed storage area according to the access instruction and the physical address of the to-be-accessed storage area in the storage device. 
     In a specific implementation process, if the access instruction is a data write instruction, the storage device target writes to-be-written data into the storage area indicated by the physical address; if the access instruction is a data read instruction, the storage device target reads to-be-read data from the storage area indicated by the physical address. 
     Optionally, after the storage device target performs the operation on the to-be-accessed storage area according to the access instruction and the physical address of the to-be-accessed storage area in the storage device, the method further includes: returning, by the storage device target, a feedback message, where the feedback message includes an execution result of the access instruction and the identifier of the virtual channel of the virtual machine. 
     It should be understood that the embodiment in  FIG. 7  is a method on a storage device target side in the embodiment in  FIG. 5 . Some feature descriptions in the embodiment in  FIG. 5  are applicable to the embodiment in  FIG. 7 , and details are not described herein again. 
     According to the technical solution disclosed by the embodiment of the present disclosure, a virtual channel is established between a virtual machine and a storage device, and an identifier of the corresponding virtual channel is carried in an access instruction, such that a storage device target can uniquely determine a physical address of a to-be-accessed area according to virtual address information and the identifier of the virtual channel of the virtual machine. In this way, direct access to the storage device by the virtual machine is implemented, access to the storage device is simplified, an I/O access process is shortened, and consumption of memory resources and computing resources by software layers is reduced. 
       FIG. 8  is a schematic diagram of a logical structure of an apparatus  800  for accessing a storage device according to an embodiment of the present disclosure. The apparatus  800  is configured to manage access to the storage device by a virtual machine running in a computer system. As shown in  FIG. 8 , the apparatus  800  includes an acquiring unit  802 , a generation unit  804 , and a sending unit  806 . 
     The acquiring unit  802  is configured to acquire an access request from the virtual machine, where the access request carries virtual address information of a to-be-accessed storage area. 
     The generation unit  804  is configured to generate an access instruction according to the access request, where the access instruction carries the virtual address information and an identifier of a virtual channel of the virtual machine, where the virtual channel is used to connect the virtual machine to a storage device target, the virtual machine corresponds to the virtual channel on a one-to-one basis, and the storage device target is configured to manage access to the storage device. 
     The sending unit  806  is configured to send the access instruction to the storage device target. 
     Specifically, before generating the access instruction according to the access request, the generation unit  804  is further configured to query a preset first correspondence according to an identifier of the virtual machine, so as to determine the identifier of the virtual channel, where the preset first correspondence includes a correspondence between an identifier of each virtual machine and an identifier of each virtual channel. 
     Optionally, at least one cache queue is configured in the apparatus  800 , and each cache queue corresponds to a respective virtual channel on a one-to-one basis; after acquiring the access request from the virtual machine, the acquiring unit  802  is further configured to write the access request in a first cache queue corresponding to the virtual channel of the virtual machine; and before generating the access instruction according to the access request, the generation unit  804  is further configured to fetch the access request from the first cache queue corresponding to the virtual channel of the virtual machine. 
     Optionally, if the acquiring unit  802  acquires at least two access requests from at least two virtual machines, that the generation unit  804  is configured to generate an access instruction according to the access request includes: the generation unit  804  is configured to first generate, according to priorities of the at least two virtual machines corresponding to the at least two access requests and according to priorities, an access instruction corresponding to a high-priority virtual machine, and then generate an access instruction corresponding to a low-priority virtual machine. 
     Optionally, if the acquiring unit  802  acquires at least two access requests from at least two virtual machines, that the generation unit  804  is configured to generate an access instruction according to the access request includes: the generation unit  804  is configured to first generate, according to a time sequence of acquiring the at least two access requests, an access instruction corresponding to an earlier received access request, and then generate an access instruction corresponding to a later received access request. 
     In a possible implementation manner of the embodiment of the present disclosure, after the sending unit  806  sends the access instruction to the storage device target, the acquiring unit  802  is further configured to acquire a feedback message from the storage device target, where the feedback message includes an execution result of the access instruction and the identifier of the virtual channel of the virtual machine; and the sending unit  806  is further configured to determine the virtual machine according to the identifier of the virtual channel, and send the execution result of the access instruction to the virtual machine. 
     In a possible implementation manner of the embodiment of the present disclosure, that the acquiring unit  802  is configured to acquire an access request from the virtual machine includes: the acquiring unit  802  is configured to receive a first doorbell notification from the virtual machine, and acquire the access request from an I/O shared ring that is shared with the virtual machine, where the access request is write in the I/O shared ring by the virtual machine, and the first doorbell notification is used to indicate arrival of the access request at the I/O shared ring; and that the sending unit  806  is configured to send the execution result of the access instruction to the virtual machine includes: the sending unit  806  is configured to write the execution result of the access instruction in the I/O shared ring that is shared with the virtual machine, and send a second doorbell notification to the virtual machine, where the second doorbell notification is used to indicate arrival of the execution result at the I/O shared ring. 
     In a specific implementation process, in the scenario of  200  ( a ) shown in  FIG. 2( a )  and  FIG. 2( b ) , the access instruction is a small computer system interface (SCSI) instruction that can be processed by a host bus adapter driver layer; and that the sending unit  806  is configured to send the access instruction to the storage device target includes: the sending unit  806  is configured to send the access instruction to the storage device target using the host bus adapter driver layer. 
     The embodiment of the present disclosure corresponds to the method embodiment in  FIG. 6 . Some feature descriptions in the embodiments in  FIG. 5  and  FIG. 6  are applicable to the embodiment of the present disclosure, and details are not described herein again. 
       FIG. 9  is a schematic diagram of a logical structure of an apparatus  900  for accessing a storage device according to an embodiment of the present disclosure. The apparatus  900  is configured to manage access to the storage device by a virtual machine. As shown in  FIG. 9 , the apparatus  900  includes an acquiring unit  902 , a determining unit  904 , and a processing unit  906 . 
     The acquiring unit  902  is configured to acquire an access instruction, where the access instruction carries virtual address information and an identifier of a virtual channel of the virtual machine, where the virtual channel is used to connect the virtual machine to the apparatus, the virtual machine corresponds to the virtual channel on a one-to-one basis, and the virtual address information is used to indicate a virtual address of a to-be-accessed storage area in the virtual machine. 
     The determining unit  904  is configured to determine a physical address of the to-be-accessed storage area in the storage device according to the virtual address information and the identifier of the virtual channel that are carried in the access instruction. 
     The processing unit  906  is configured to perform an operation on the to-be-accessed storage area according to the access instruction and the physical address of the to-be-accessed storage area in the storage device. 
     Specifically, that the determining unit  904  is configured to determine a physical address of the to-be-accessed storage area in the storage device according to the virtual address information and the identifier of the virtual channel that are carried in the access instruction includes: the determining unit  904  is configured to query a preset second correspondence according to the virtual address information and the identifier of the virtual channel that are carried in the access instruction, so as to determine the physical address of the to-be-accessed storage area in the storage device, where the preset second correspondence includes a correspondence between an identifier of each virtual channel and a physical address of a storage area allocated to each virtual channel. 
     Optionally, at least one cache queue is configured in the apparatus, and each cache queue corresponds to a respective virtual channel on a one-to-one basis; after acquiring the access instruction, the acquiring unit  902  is further configured to write the access instruction in a second cache queue corresponding to the virtual channel of the virtual machine; and before determining the physical address of the to-be-accessed storage area in the storage device, the determining unit  904  is further configured to fetch the access instruction from the second cache queue corresponding to the virtual channel of the virtual machine. 
     Optionally, if the acquiring unit  902  acquires at least two access instructions from at least two virtual machines, that the determining unit  904  is configured to determine a physical address of the to-be-accessed storage area in the storage device includes: the determining unit  904  is configured to first determine, according to priorities of the at least two virtual machines corresponding to the at least two access instructions and according to priorities, a physical address of a storage area to be accessed by a high-priority virtual machine in the storage device, and then determine a physical address of a storage area to be accessed by a low-priority virtual machine in the storage device. 
     Optionally, if the acquiring unit  902  acquires at least two access instructions from at least two virtual machines, that the determining unit  904  is configured to determine a physical address of the to-be-accessed storage area in the storage device includes: the determining unit  904  is configured to first determine, according to a time sequence of acquiring the at least two access instructions by the acquiring unit  902 , a physical address of a to-be-accessed storage area corresponding to an earlier received access instruction in the storage device, and then determine a physical address of a to-be-accessed storage area corresponding to a later received access instruction in the storage device. 
     In an implementation manner of the embodiment of the present disclosure, after performing the operation on the to-be-accessed storage area according to the access instruction and the physical address of the to-be-accessed storage area in the storage device, the processing unit  906  is further configured to return a feedback message, where the feedback message includes an execution result of the access instruction and the identifier of the virtual channel of the virtual machine. 
     The embodiment of the present disclosure corresponds to the method embodiment in  FIG. 7 . Some feature descriptions in the embodiments in  FIG. 5  and  FIG. 7  are applicable to the embodiment of the present disclosure, and details are not described herein again. 
       FIG. 10  is a schematic diagram of a hardware structure of an apparatus  1000  for accessing a storage device according to an embodiment of the present disclosure. As shown in  FIG. 10 , the apparatus  1000  includes a processor  1002 , a memory  1004 , an input/output interface  1006 , a communications interface  1008 , and a bus  1010 . The processor  1002 , the memory  1004 , the input/output interface  1006 , and the communications interface  1008  implement a communications connection to each other using the bus  1010 . 
     The processor  1002  may be a general central processing unit (CPU), a microprocessor, an application-specific integrated circuit (ASIC), or one or more integrated circuits, and is configured to execute a related program, so as to implement the technical solution provided in the embodiment of the present disclosure. 
     The memory  1004  may be a read-only memory, a static storage device, a dynamic storage device, or a random access memory. The memory  1004  may store an operating system and another application program. When the technical solution provided by the embodiment of the present disclosure is implemented by software or firmware, program code for implementing the technical solution provided by the embodiment of the present disclosure is stored in the memory  1004 , and executed by the processor  1002 . 
     The input/output interface  1006  is configured to receive input data and information, and to output data such as an operation result. 
     The communications interface  1008  implements communication between the apparatus  1000  and another device or a communications network using a transceiving apparatus, such as but not limited to a transceiver. 
     The bus  1010  may include a channel for transmitting information between various components of the apparatus  1000  (for example, the processor  1002 , the memory  1004 , the input/output interface  1006 , and the communications interface  1008 ). 
     It should be noted that although only the processor  1002 , the memory  1004 , the input/output interface  1006 , the communications interface  1008 , and the bus  1010  are shown in the apparatus  1000  shown in  FIG. 10 , a person skilled in the art should understand that, in a specific implementation process, the apparatus  1000  further includes other components (e.g., for normal running). In addition, a person skilled in the art should understand that according to specific requirements, the apparatus  1000  may further include a hardware component for implementing another additional function. In addition, a person skilled in the art should understand that an apparatus for implementing the embodiment of the present disclosure may not necessarily include all the components shown in  FIG. 10 . 
     The hardware structure shown in  FIG. 10  and the foregoing description are applicable to various apparatuses and systems for accessing a storage device according to the embodiments of the present disclosure, and applicable for executing various methods for accessing a storage device according to the embodiments of the present disclosure. 
     In the several embodiments provided in this application, it should be understood that the disclosed system, device, and method may be implemented in other manners. For example, the described apparatus embodiment is merely for exemplary description. For example, the module division is merely logical function division and may be other division in implementation. For example, a plurality of modules or components may be combined or integrated into another system, or some features may be ignored or not performed. In addition, the displayed or discussed mutual couplings or direct couplings or communication connections may be implemented using some interfaces. The indirect couplings or communication connections between the apparatuses or modules may be implemented in electronic, mechanical, or other forms. 
     The modules described as separate parts may or may not be physically separate, and parts displayed as modules may or may not be physical modules, may be located in one position, or may be distributed on a plurality of network modules. Some or all of the modules may be selected according to actual requirements to achieve the objectives of the solutions of the embodiments. 
     In addition, function modules in the embodiments of the present disclosure may be integrated into one processing module, or each of the modules may exist alone physically, or two or more modules are integrated into one module. The integrated module may be implemented in a form of hardware, or may be implemented in a form of hardware in addition to a software function module. 
     When the foregoing integrated module is implemented in a form of a software function module, the integrated module may be stored in a computer-readable storage medium. The software function module is stored in a storage medium and includes several instructions for instructing a computer device (which may be a personal computer, a server, or a network device) to perform some of the steps of the methods described in the embodiments of the present disclosure. The foregoing storage medium includes: any medium that can store program code, such as a removable hard disk, a read-only memory, a random access memory, a magnetic disk, or an optical disc. 
     Finally, it should be noted that the foregoing embodiments are merely intended for describing the technical solutions of the present disclosure, but not for limiting the present disclosure. Although the present disclosure is described in detail with reference to the foregoing embodiments, persons of ordinary skill in the art should understand that they may still make modifications to the technical solutions described in the foregoing embodiments or make equivalent replacements to some technical features thereof, without departing from the protection scope of the technical solutions of the embodiments of the present disclosure. Additionally, statements made herein characterizing the invention refer to an embodiment of the invention and not necessarily all embodiments.