xref: /linux/Documentation/translations/zh_CN/virt/acrn/io-request.rst (revision 762f99f4f3cb41a775b5157dd761217beba65873)
1*f63c6894SYanteng Si.. SPDX-License-Identifier: GPL-2.0
2*f63c6894SYanteng Si.. include:: ../../disclaimer-zh_CN.rst
3*f63c6894SYanteng Si
4*f63c6894SYanteng Si:Original: Documentation/virt/acrn/io-request.rst
5*f63c6894SYanteng Si
6*f63c6894SYanteng Si:翻译:
7*f63c6894SYanteng Si
8*f63c6894SYanteng Si 司延腾 Yanteng Si <siyanteng@loongson.cn>
9*f63c6894SYanteng Si
10*f63c6894SYanteng Si:校译:
11*f63c6894SYanteng Si
12*f63c6894SYanteng Si 时奎亮 Alex Shi <alexs@kernel.org>
13*f63c6894SYanteng Si
14*f63c6894SYanteng Si.. _cn_virt_acrn_io-request:
15*f63c6894SYanteng Si
16*f63c6894SYanteng SiI/O请求处理
17*f63c6894SYanteng Si===========
18*f63c6894SYanteng Si
19*f63c6894SYanteng Si客户虚拟机的I/O请求由超级管理器构建,由ACRN超级管理器服务模块分发到与I/O请求的地址范
20*f63c6894SYanteng Si围相对应的I/O客户端。I/O请求处理的细节将在以下章节描述。
21*f63c6894SYanteng Si
22*f63c6894SYanteng Si1. I/O请求
23*f63c6894SYanteng Si----------
24*f63c6894SYanteng Si
25*f63c6894SYanteng Si对于每个客户虚拟机,有一个共享的4KB字节的内存区域,用于超级管理器和服务虚拟机之间的
26*f63c6894SYanteng SiI/O请求通信。一个I/O请求是一个256字节的结构体缓冲区,它是 "acrn_io_request" 结构
27*f63c6894SYanteng Si体,当客户虚拟机中发生被困的I/O访问时,由超级管理器的I/O处理器填充。服务虚拟机中的
28*f63c6894SYanteng SiACRN用户空间首先分配一个4KB字节的页面,并将缓冲区的GPA(客户物理地址)传递给管理平
29*f63c6894SYanteng Si台。缓冲区被用作16个I/O请求槽的数组,每个I/O请求槽为256字节。这个数组是按vCPU ID
30*f63c6894SYanteng Si索引的。
31*f63c6894SYanteng Si
32*f63c6894SYanteng Si2. I/O客户端
33*f63c6894SYanteng Si------------
34*f63c6894SYanteng Si
35*f63c6894SYanteng Si一个I/O客户端负责处理客户虚拟机的I/O请求,其访问的GPA在一定范围内。每个客户虚拟机
36*f63c6894SYanteng Si可以关联多个I/O客户端。每个客户虚拟机都有一个特殊的客户端,称为默认客户端,负责处理
37*f63c6894SYanteng Si所有不在其他客户端范围内的I/O请求。ACRN用户空间充当每个客户虚拟机的默认客户端。
38*f63c6894SYanteng Si
39*f63c6894SYanteng Si下面的图示显示了I/O请求共享缓冲区、I/O请求和I/O客户端之间的关系。
40*f63c6894SYanteng Si
41*f63c6894SYanteng Si::
42*f63c6894SYanteng Si
43*f63c6894SYanteng Si     +------------------------------------------------------+
44*f63c6894SYanteng Si     |                                       服务VM         |
45*f63c6894SYanteng Si     |+--------------------------------------------------+  |
46*f63c6894SYanteng Si     ||      +----------------------------------------+  |  |
47*f63c6894SYanteng Si     ||      | 共享页                 ACRN用户空间    |  |  |
48*f63c6894SYanteng Si     ||      |    +-----------------+  +------------+ |  |  |
49*f63c6894SYanteng Si     ||   +----+->| acrn_io_request |<-+  默认      | |  |  |
50*f63c6894SYanteng Si     ||   |  | |  +-----------------+  | I/O客户端  | |  |  |
51*f63c6894SYanteng Si     ||   |  | |  |       ...       |  +------------+ |  |  |
52*f63c6894SYanteng Si     ||   |  | |  +-----------------+                 |  |  |
53*f63c6894SYanteng Si     ||   |  +-|--------------------------------------+  |  |
54*f63c6894SYanteng Si     ||---|----|-----------------------------------------|  |
55*f63c6894SYanteng Si     ||   |    |                             内核        |  |
56*f63c6894SYanteng Si     ||   |    |            +----------------------+     |  |
57*f63c6894SYanteng Si     ||   |    |            | +-------------+  HSM |     |  |
58*f63c6894SYanteng Si     ||   |    +--------------+             |      |     |  |
59*f63c6894SYanteng Si     ||   |                 | | I/O客户端   |      |     |  |
60*f63c6894SYanteng Si     ||   |                 | |             |      |     |  |
61*f63c6894SYanteng Si     ||   |                 | +-------------+      |     |  |
62*f63c6894SYanteng Si     ||   |                 +----------------------+     |  |
63*f63c6894SYanteng Si     |+---|----------------------------------------------+  |
64*f63c6894SYanteng Si     +----|-------------------------------------------------+
65*f63c6894SYanteng Si          |
66*f63c6894SYanteng Si     +----|-------------------------------------------------+
67*f63c6894SYanteng Si     |  +-+-----------+                                     |
68*f63c6894SYanteng Si     |  | I/O处理     |              ACRN超级管理器         |
69*f63c6894SYanteng Si     |  +-------------+                                     |
70*f63c6894SYanteng Si     +------------------------------------------------------+
71*f63c6894SYanteng Si
72*f63c6894SYanteng Si3. I/O请求状态转换
73*f63c6894SYanteng Si------------------
74*f63c6894SYanteng Si
75*f63c6894SYanteng Si一个ACRN I/O请求的状态转换如下。
76*f63c6894SYanteng Si
77*f63c6894SYanteng Si::
78*f63c6894SYanteng Si
79*f63c6894SYanteng Si   FREE -> PENDING -> PROCESSING -> COMPLETE -> FREE -> ...
80*f63c6894SYanteng Si
81*f63c6894SYanteng Si- FREE: 这个I/O请求槽是空的
82*f63c6894SYanteng Si- PENDING: 在这个槽位上有一个有效的I/O请求正在等待
83*f63c6894SYanteng Si- PROCESSING: 正在处理I/O请求
84*f63c6894SYanteng Si- COMPLETE: 该I/O请求已被处理
85*f63c6894SYanteng Si
86*f63c6894SYanteng Si处于COMPLETE或FREE状态的I/O请求是由超级管理器拥有的。HSM和ACRN用户空间负责处理其
87*f63c6894SYanteng Si他的。
88*f63c6894SYanteng Si
89*f63c6894SYanteng Si4. I/O请求的处理流程
90*f63c6894SYanteng Si--------------------
91*f63c6894SYanteng Si
92*f63c6894SYanteng Sia. 当客户虚拟机中发生被陷入的I/O访问时,超级管理器的I/O处理程序将把I/O请求填充为
93*f63c6894SYanteng Si   PENDING状态。
94*f63c6894SYanteng Sib. 超级管理器向服务虚拟机发出一个向上调用,这是一个通知中断。
95*f63c6894SYanteng Sic. upcall处理程序会安排一个工作者来调度I/O请求。
96*f63c6894SYanteng Sid. 工作者寻找PENDING I/O请求,根据I/O访问的地址将其分配给不同的注册客户,将其
97*f63c6894SYanteng Si   状态更新为PROCESSING,并通知相应的客户进行处理。
98*f63c6894SYanteng Sie. 被通知的客户端处理指定的I/O请求。
99*f63c6894SYanteng Sif. HSM将I/O请求状态更新为COMPLETE,并通过hypercalls通知超级管理器完成。
100