docs/zh_CN: add virt acrn io-request translation
Translate Documentation/virt/acrn/io-request.rst into Chinese. Signed-off-by: Yanteng Si <siyanteng@loongson.cn> Reviewed-by: Alex Shi <alexs@kernel.org> Link: https://lore.kernel.org/r/291079265a8b0555de4d624d7d11fc5ac37a9422.1628212777.git.siyanteng@loongson.cn Signed-off-by: Jonathan Corbet <corbet@lwn.net>
This commit is contained in:
Родитель
ab03e49f13
Коммит
f63c6894f6
|
@ -21,9 +21,10 @@ ACRN超级管理器
|
|||
:maxdepth: 1
|
||||
|
||||
introduction
|
||||
io-request
|
||||
|
||||
TODOLIST:
|
||||
|
||||
|
||||
io-request
|
||||
|
||||
cpuid
|
||||
|
|
|
@ -0,0 +1,99 @@
|
|||
.. SPDX-License-Identifier: GPL-2.0
|
||||
.. include:: ../../disclaimer-zh_CN.rst
|
||||
|
||||
:Original: Documentation/virt/acrn/io-request.rst
|
||||
|
||||
:翻译:
|
||||
|
||||
司延腾 Yanteng Si <siyanteng@loongson.cn>
|
||||
|
||||
:校译:
|
||||
|
||||
时奎亮 Alex Shi <alexs@kernel.org>
|
||||
|
||||
.. _cn_virt_acrn_io-request:
|
||||
|
||||
I/O请求处理
|
||||
===========
|
||||
|
||||
客户虚拟机的I/O请求由超级管理器构建,由ACRN超级管理器服务模块分发到与I/O请求的地址范
|
||||
围相对应的I/O客户端。I/O请求处理的细节将在以下章节描述。
|
||||
|
||||
1. I/O请求
|
||||
----------
|
||||
|
||||
对于每个客户虚拟机,有一个共享的4KB字节的内存区域,用于超级管理器和服务虚拟机之间的
|
||||
I/O请求通信。一个I/O请求是一个256字节的结构体缓冲区,它是 "acrn_io_request" 结构
|
||||
体,当客户虚拟机中发生被困的I/O访问时,由超级管理器的I/O处理器填充。服务虚拟机中的
|
||||
ACRN用户空间首先分配一个4KB字节的页面,并将缓冲区的GPA(客户物理地址)传递给管理平
|
||||
台。缓冲区被用作16个I/O请求槽的数组,每个I/O请求槽为256字节。这个数组是按vCPU ID
|
||||
索引的。
|
||||
|
||||
2. I/O客户端
|
||||
------------
|
||||
|
||||
一个I/O客户端负责处理客户虚拟机的I/O请求,其访问的GPA在一定范围内。每个客户虚拟机
|
||||
可以关联多个I/O客户端。每个客户虚拟机都有一个特殊的客户端,称为默认客户端,负责处理
|
||||
所有不在其他客户端范围内的I/O请求。ACRN用户空间充当每个客户虚拟机的默认客户端。
|
||||
|
||||
下面的图示显示了I/O请求共享缓冲区、I/O请求和I/O客户端之间的关系。
|
||||
|
||||
::
|
||||
|
||||
+------------------------------------------------------+
|
||||
| 服务VM |
|
||||
|+--------------------------------------------------+ |
|
||||
|| +----------------------------------------+ | |
|
||||
|| | 共享页 ACRN用户空间 | | |
|
||||
|| | +-----------------+ +------------+ | | |
|
||||
|| +----+->| acrn_io_request |<-+ 默认 | | | |
|
||||
|| | | | +-----------------+ | I/O客户端 | | | |
|
||||
|| | | | | ... | +------------+ | | |
|
||||
|| | | | +-----------------+ | | |
|
||||
|| | +-|--------------------------------------+ | |
|
||||
||---|----|-----------------------------------------| |
|
||||
|| | | 内核 | |
|
||||
|| | | +----------------------+ | |
|
||||
|| | | | +-------------+ HSM | | |
|
||||
|| | +--------------+ | | | |
|
||||
|| | | | I/O客户端 | | | |
|
||||
|| | | | | | | |
|
||||
|| | | +-------------+ | | |
|
||||
|| | +----------------------+ | |
|
||||
|+---|----------------------------------------------+ |
|
||||
+----|-------------------------------------------------+
|
||||
|
|
||||
+----|-------------------------------------------------+
|
||||
| +-+-----------+ |
|
||||
| | I/O处理 | ACRN超级管理器 |
|
||||
| +-------------+ |
|
||||
+------------------------------------------------------+
|
||||
|
||||
3. I/O请求状态转换
|
||||
------------------
|
||||
|
||||
一个ACRN I/O请求的状态转换如下。
|
||||
|
||||
::
|
||||
|
||||
FREE -> PENDING -> PROCESSING -> COMPLETE -> FREE -> ...
|
||||
|
||||
- FREE: 这个I/O请求槽是空的
|
||||
- PENDING: 在这个槽位上有一个有效的I/O请求正在等待
|
||||
- PROCESSING: 正在处理I/O请求
|
||||
- COMPLETE: 该I/O请求已被处理
|
||||
|
||||
处于COMPLETE或FREE状态的I/O请求是由超级管理器拥有的。HSM和ACRN用户空间负责处理其
|
||||
他的。
|
||||
|
||||
4. I/O请求的处理流程
|
||||
--------------------
|
||||
|
||||
a. 当客户虚拟机中发生被陷入的I/O访问时,超级管理器的I/O处理程序将把I/O请求填充为
|
||||
PENDING状态。
|
||||
b. 超级管理器向服务虚拟机发出一个向上调用,这是一个通知中断。
|
||||
c. upcall处理程序会安排一个工作者来调度I/O请求。
|
||||
d. 工作者寻找PENDING I/O请求,根据I/O访问的地址将其分配给不同的注册客户,将其
|
||||
状态更新为PROCESSING,并通知相应的客户进行处理。
|
||||
e. 被通知的客户端处理指定的I/O请求。
|
||||
f. HSM将I/O请求状态更新为COMPLETE,并通过hypercalls通知超级管理器完成。
|
Загрузка…
Ссылка в новой задаче