Lsphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextEnglish}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget/virt/acrn/io-requestmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget(/translations/zh_TW/virt/acrn/io-requestmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget(/translations/it_IT/virt/acrn/io-requestmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget(/translations/ja_JP/virt/acrn/io-requestmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget(/translations/ko_KR/virt/acrn/io-requestmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget(/translations/sp_SP/virt/acrn/io-requestmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageChinese (Simplified)uh1h hh _documenthsourceNlineNubhcomment)}(h SPDX-License-Identifier: GPL-2.0h]h SPDX-License-Identifier: GPL-2.0}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhhU/var/lib/git/docbuild/linux/Documentation/translations/zh_CN/virt/acrn/io-request.rsthKubhnote)}(hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。h]h paragraph)}(hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。h]hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hh5Documentation/translations/zh_CN/disclaimer-zh_CN.rsthKhhubah}(h]h ]h"]h$]h&]uh1hhhhhhhhNubh field_list)}(hhh](hfield)}(hhh](h field_name)}(hOriginalh]hOriginal}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhKubh field_body)}(h'Documentation/virt/acrn/io-request.rst h]h)}(h&Documentation/virt/acrn/io-request.rsth]h&Documentation/virt/acrn/io-request.rst}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhubah}(h]h ]h"]h$]h&]uh1hhhubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hhh](h)}(h翻译h]h翻译}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhKubh)}(h-司延腾 Yanteng Si h]h)}(h,司延腾 Yanteng Si h](h司延腾 Yanteng Si <}(hj hhhNhNubh reference)}(hsiyanteng@loongson.cnh]hsiyanteng@loongson.cn}(hj*hhhNhNubah}(h]h ]h"]h$]h&]refurimailto:siyanteng@loongson.cnuh1j(hj ubh>}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hhh](h)}(h校译h]h校译}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhhhKubh)}(h&时奎亮 Alex Shi h]h)}(h%时奎亮 Alex Shi h](h时奎亮 Alex Shi <}(hjehhhNhNubj))}(halexs@kernel.orgh]halexs@kernel.org}(hjmhhhNhNubah}(h]h ]h"]h$]h&]refurimailto:alexs@kernel.orguh1j(hjeubh>}(hjehhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK hjaubah}(h]h ]h"]h$]h&]uh1hhjPubeh}(h]h ]h"]h$]h&]uh1hhhhK hhhhubeh}(h]h ]h"]h$]h&]uh1hhhhhhhhKubhtarget)}(h.. _cn_virt_acrn_io-request:h]h}(h]h ]h"]h$]h&]refidcn-virt-acrn-io-requestuh1jhKhhhhhhubhsection)}(hhh](htitle)}(hI/O请求处理h]hI/O请求处理}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhKubh)}(h客户虚拟机的I/O请求由超级管理器构建,由ACRN超级管理器服务模块分发到与I/O请求的地址范 围相对应的I/O客户端。I/O请求处理的细节将在以下章节描述。h]h客户虚拟机的I/O请求由超级管理器构建,由ACRN超级管理器服务模块分发到与I/O请求的地址范 围相对应的I/O客户端。I/O请求处理的细节将在以下章节描述。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj)}(hhh](j)}(h 1. I/O请求h]h 1. I/O请求}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhKubh)}(hXS对于每个客户虚拟机,有一个共享的4KB字节的内存区域,用于超级管理器和服务虚拟机之间的 I/O请求通信。一个I/O请求是一个256字节的结构体缓冲区,它是 "acrn_io_request" 结构 体,当客户虚拟机中发生被困的I/O访问时,由超级管理器的I/O处理器填充。服务虚拟机中的 ACRN用户空间首先分配一个4KB字节的页面,并将缓冲区的GPA(客户物理地址)传递给管理平 台。缓冲区被用作16个I/O请求槽的数组,每个I/O请求槽为256字节。这个数组是按vCPU ID 索引的。h]hXW对于每个客户虚拟机,有一个共享的4KB字节的内存区域,用于超级管理器和服务虚拟机之间的 I/O请求通信。一个I/O请求是一个256字节的结构体缓冲区,它是 “acrn_io_request” 结构 体,当客户虚拟机中发生被困的I/O访问时,由超级管理器的I/O处理器填充。服务虚拟机中的 ACRN用户空间首先分配一个4KB字节的页面,并将缓冲区的GPA(客户物理地址)传递给管理平 台。缓冲区被用作16个I/O请求槽的数组,每个I/O请求槽为256字节。这个数组是按vCPU ID 索引的。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]id1ah ]h"] 1. i/o请求ah$]h&]uh1jhjhhhhhKubj)}(hhh](j)}(h2. I/O客户端h]h2. I/O客户端}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhK!ubh)}(hXe一个I/O客户端负责处理客户虚拟机的I/O请求,其访问的GPA在一定范围内。每个客户虚拟机 可以关联多个I/O客户端。每个客户虚拟机都有一个特殊的客户端,称为默认客户端,负责处理 所有不在其他客户端范围内的I/O请求。ACRN用户空间充当每个客户虚拟机的默认客户端。h]hXe一个I/O客户端负责处理客户虚拟机的I/O请求,其访问的GPA在一定范围内。每个客户虚拟机 可以关联多个I/O客户端。每个客户虚拟机都有一个特殊的客户端,称为默认客户端,负责处理 所有不在其他客户端范围内的I/O请求。ACRN用户空间充当每个客户虚拟机的默认客户端。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK#hjhhubh)}(h]下面的图示显示了I/O请求共享缓冲区、I/O请求和I/O客户端之间的关系。h]h]下面的图示显示了I/O请求共享缓冲区、I/O请求和I/O客户端之间的关系。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK'hjhhubh literal_block)}(hX#+------------------------------------------------------+ | 服务VM | |+--------------------------------------------------+ | || +----------------------------------------+ | | || | 共享页 ACRN用户空间 | | | || | +-----------------+ +------------+ | | | || +----+->| acrn_io_request |<-+ 默认 | | | | || | | | +-----------------+ | I/O客户端 | | | | || | | | | ... | +------------+ | | | || | | | +-----------------+ | | | || | +-|--------------------------------------+ | | ||---|----|-----------------------------------------| | || | | 内核 | | || | | +----------------------+ | | || | | | +-------------+ HSM | | | || | +--------------+ | | | | || | | | I/O客户端 | | | | || | | | | | | | || | | +-------------+ | | | || | +----------------------+ | | |+---|----------------------------------------------+ | +----|-------------------------------------------------+ | +----|-------------------------------------------------+ | +-+-----------+ | | | I/O处理 | ACRN超级管理器 | | +-------------+ | +------------------------------------------------------+h]hX#+------------------------------------------------------+ | 服务VM | |+--------------------------------------------------+ | || +----------------------------------------+ | | || | 共享页 ACRN用户空间 | | | || | +-----------------+ +------------+ | | | || +----+->| acrn_io_request |<-+ 默认 | | | | || | | | +-----------------+ | I/O客户端 | | | | || | | | | ... | +------------+ | | | || | | | +-----------------+ | | | || | +-|--------------------------------------+ | | ||---|----|-----------------------------------------| | || | | 内核 | | || | | +----------------------+ | | || | | | +-------------+ HSM | | | || | +--------------+ | | | | || | | | I/O客户端 | | | | || | | | | | | | || | | +-------------+ | | | || | +----------------------+ | | |+---|----------------------------------------------+ | +----|-------------------------------------------------+ | +----|-------------------------------------------------+ | +-+-----------+ | | | I/O处理 | ACRN超级管理器 | | +-------------+ | +------------------------------------------------------+}hj sbah}(h]h ]h"]h$]h&]hhuh1jhhhK+hjhhubeh}(h]id2ah ]h"]2. i/o客户端ah$]h&]uh1jhjhhhhhK!ubj)}(hhh](j)}(h3. I/O请求状态转换h]h3. I/O请求状态转换}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6hhhhhKIubh)}(h,一个ACRN I/O请求的状态转换如下。h]h,一个ACRN I/O请求的状态转换如下。}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKKhj6hhubj)}(h8FREE -> PENDING -> PROCESSING -> COMPLETE -> FREE -> ...h]h8FREE -> PENDING -> PROCESSING -> COMPLETE -> FREE -> ...}hjUsbah}(h]h ]h"]h$]h&]hhuh1jhhhKOhj6hhubh bullet_list)}(hhh](h list_item)}(h!FREE: 这个I/O请求槽是空的h]h)}(hjlh]h!FREE: 这个I/O请求槽是空的}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKQhjjubah}(h]h ]h"]h$]h&]uh1jhhjehhhhhNubji)}(hBPENDING: 在这个槽位上有一个有效的I/O请求正在等待h]h)}(hjh]hBPENDING: 在这个槽位上有一个有效的I/O请求正在等待}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKRhjubah}(h]h ]h"]h$]h&]uh1jhhjehhhhhNubji)}(h!PROCESSING: 正在处理I/O请求h]h)}(hjh]h!PROCESSING: 正在处理I/O请求}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKShjubah}(h]h ]h"]h$]h&]uh1jhhjehhhhhNubji)}(h#COMPLETE: 该I/O请求已被处理 h]h)}(h"COMPLETE: 该I/O请求已被处理h]h"COMPLETE: 该I/O请求已被处理}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKThjubah}(h]h ]h"]h$]h&]uh1jhhjehhhhhNubeh}(h]h ]h"]h$]h&]bullet-uh1jchhhKQhj6hhubh)}(hw处于COMPLETE或FREE状态的I/O请求是由超级管理器拥有的。HSM和ACRN用户空间负责处理其 他的。h]hw处于COMPLETE或FREE状态的I/O请求是由超级管理器拥有的。HSM和ACRN用户空间负责处理其 他的。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKVhj6hhubeh}(h]id3ah ]h"]3. i/o请求状态转换ah$]h&]uh1jhjhhhhhKIubj)}(hhh](j)}(h4. I/O请求的处理流程h]h4. I/O请求的处理流程}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhKZubhenumerated_list)}(hhh](ji)}(h当客户虚拟机中发生被陷入的I/O访问时,超级管理器的I/O处理程序将把I/O请求填充为 PENDING状态。h]h)}(h当客户虚拟机中发生被陷入的I/O访问时,超级管理器的I/O处理程序将把I/O请求填充为 PENDING状态。h]h当客户虚拟机中发生被陷入的I/O访问时,超级管理器的I/O处理程序将把I/O请求填充为 PENDING状态。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK\hjubah}(h]h ]h"]h$]h&]uh1jhhjhhhhhNubji)}(hW超级管理器向服务虚拟机发出一个向上调用,这是一个通知中断。h]h)}(hjh]hW超级管理器向服务虚拟机发出一个向上调用,这是一个通知中断。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK^hjubah}(h]h ]h"]h$]h&]uh1jhhjhhhhhNubji)}(h?upcall处理程序会安排一个工作者来调度I/O请求。h]h)}(hj,h]h?upcall处理程序会安排一个工作者来调度I/O请求。}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK_hj*ubah}(h]h ]h"]h$]h&]uh1jhhjhhhhhNubji)}(h工作者寻找PENDING I/O请求,根据I/O访问的地址将其分配给不同的注册客户,将其 状态更新为PROCESSING,并通知相应的客户进行处理。h]h)}(h工作者寻找PENDING I/O请求,根据I/O访问的地址将其分配给不同的注册客户,将其 状态更新为PROCESSING,并通知相应的客户进行处理。h]h工作者寻找PENDING I/O请求,根据I/O访问的地址将其分配给不同的注册客户,将其 状态更新为PROCESSING,并通知相应的客户进行处理。}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK`hjAubah}(h]h ]h"]h$]h&]uh1jhhjhhhhhNubji)}(h0被通知的客户端处理指定的I/O请求。h]h)}(hj[h]h0被通知的客户端处理指定的I/O请求。}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKbhjYubah}(h]h ]h"]h$]h&]uh1jhhjhhhhhNubji)}(hZHSM将I/O请求状态更新为COMPLETE,并通过hypercalls通知超级管理器完成。h]h)}(hjrh]hZHSM将I/O请求状态更新为COMPLETE,并通过hypercalls通知超级管理器完成。}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKchjpubah}(h]h ]h"]h$]h&]uh1jhhjhhhhhNubeh}(h]h ]h"]h$]h&]enumtype loweralphaprefixhsuffix.uh1jhjhhhhhK\ubeh}(h]id4ah ]h"]4. i/o请求的处理流程ah$]h&]uh1jhjhhhhhKZubeh}(h](i-ojeh ]h"](i/o请求处理cn_virt_acrn_io-requesteh$]h&]uh1jhhhhhhhKexpect_referenced_by_name}jjsexpect_referenced_by_id}jjsubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(jN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}j]jasnameids}(jjjjjjj3j0jjjju nametypes}(jjjj3jjuh}(jjjjjjj0jjj6jju footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}jKsRparse_messages]transform_messages]hsystem_message)}(hhh]h)}(hhh]h=Hyperlink target "cn-virt-acrn-io-request" is not referenced.}hj4sbah}(h]h ]h"]h$]h&]uh1hhj1ubah}(h]h ]h"]h$]h&]levelKtypeINFOsourcehlineKuh1j/uba transformerN include_log]9Documentation/translations/zh_CN/virt/acrn/io-request.rst(NNNNta decorationNhhub.