linuxdebug/Documentation/translations/zh_CN/virt/acrn/io-request.rst

100 lines
4.3 KiB
ReStructuredText
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

.. 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通知超级管理器完成。