Fsphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextEnglish}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget/infiniband/user_verbsmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget)/translations/zh_TW/infiniband/user_verbsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget)/translations/it_IT/infiniband/user_verbsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget)/translations/ja_JP/infiniband/user_verbsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget)/translations/ko_KR/infiniband/user_verbsmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget)/translations/sp_SP/infiniband/user_verbsmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageChinese (Simplified)uh1h hh _documenthsourceNlineNubhnote)}(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&]uh1hhhhV/var/lib/git/docbuild/linux/Documentation/translations/zh_CN/infiniband/user_verbs.rsthKubh field_body)}(h(Documentation/infiniband/user_verbs.rst h]h)}(h'Documentation/infiniband/user_verbs.rsth]h'Documentation/infiniband/user_verbs.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翻译}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhKubh)}(h-司延腾 Yanteng Si h]h)}(h,司延腾 Yanteng Si h](h司延腾 Yanteng Si <}(hjhhhNhNubh reference)}(hsiyanteng@loongson.cnh]hsiyanteng@loongson.cn}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurimailto:siyanteng@loongson.cnuh1jhjubh>}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1hhhubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hhh](h)}(h校译h]h校译}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hhhKubh)}(hS王普宇 Puyu Wang 时奎亮 Alex Shi h]h)}(hR王普宇 Puyu Wang 时奎亮 Alex Shi h](h王普宇 Puyu Wang <}(hjShhhNhNubj)}(hrealpuyuwang@gmail.comh]hrealpuyuwang@gmail.com}(hj[hhhNhNubah}(h]h ]h"]h$]h&]refurimailto:realpuyuwang@gmail.comuh1jhjSubh> 时奎亮 Alex Shi <}(hjShhhNhNubj)}(halexs@kernel.orgh]halexs@kernel.org}(hjohhhNhNubah}(h]h ]h"]h$]h&]refurimailto:alexs@kernel.orguh1jhjSubh>}(hjShhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK hjOubah}(h]h ]h"]h$]h&]uh1hhj>ubeh}(h]h ]h"]h$]h&]uh1hhhhK hhhhubeh}(h]h ]h"]h$]h&]uh1hhhhhhhhKubhtarget)}(h.. _cn_infiniband_user_verbs:h]h}(h]h ]h"]h$]h&]refidcn-infiniband-user-verbsuh1jhKhhhhhhubhsection)}(hhh](htitle)}(h用户空间verbs访问h]h用户空间verbs访问}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhKubh block_quote)}(hXib_uverbs模块,通过启用CONFIG_INFINIBAND_USER_VERBS构建,使用户空间 通过“verbs”直接访问IB硬件,如InfiniBand架构规范第11章所述。 要使用verbs,需要libibverbs库,可从https://github.com/linux-rdma/rdma-core。 libibverbs包含一个独立于设备的API,用于使用ib_uverbs接口。libibverbs 还需要为你的InfiniBand硬件提供适当的独立于设备的内核和用户空间驱动。例如, 要使用Mellanox HCA,你需要安装ib_mthca内核模块和libmthca用户空间驱动。 h](h)}(hib_uverbs模块,通过启用CONFIG_INFINIBAND_USER_VERBS构建,使用户空间 通过“verbs”直接访问IB硬件,如InfiniBand架构规范第11章所述。h]hib_uverbs模块,通过启用CONFIG_INFINIBAND_USER_VERBS构建,使用户空间 通过“verbs”直接访问IB硬件,如InfiniBand架构规范第11章所述。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubh)}(hXu要使用verbs,需要libibverbs库,可从https://github.com/linux-rdma/rdma-core。 libibverbs包含一个独立于设备的API,用于使用ib_uverbs接口。libibverbs 还需要为你的InfiniBand硬件提供适当的独立于设备的内核和用户空间驱动。例如, 要使用Mellanox HCA,你需要安装ib_mthca内核模块和libmthca用户空间驱动。h]hXu要使用verbs,需要libibverbs库,可从https://github.com/linux-rdma/rdma-core。 libibverbs包含一个独立于设备的API,用于使用ib_uverbs接口。libibverbs 还需要为你的InfiniBand硬件提供适当的独立于设备的内核和用户空间驱动。例如, 要使用Mellanox HCA,你需要安装ib_mthca内核模块和libmthca用户空间驱动。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubeh}(h]h ]h"]h$]h&]uh1jhhhKhjhhubj)}(hhh](j)}(h用户-内核通信h]h用户-内核通信}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhKubj)}(hXC用户空间通过/dev/infiniband/uverbsN字符设备与内核进行慢速路径、资源管理 操作的通信。快速路径操作通常是通过直接写入硬件寄存器mmap()到用户空间来完成 的,没有系统调用或上下文切换到内核。 命令是通过在这些设备文件上的write()s发送给内核的。ABI在 drivers/infiniband/include/ib_user_verbs.h中定义。需要内核响应的命令的结 构包含一个64位字段,用来传递一个指向输出缓冲区的指针。状态作为write()系统调 用的返回值被返回到用户空间。 h](h)}(hX用户空间通过/dev/infiniband/uverbsN字符设备与内核进行慢速路径、资源管理 操作的通信。快速路径操作通常是通过直接写入硬件寄存器mmap()到用户空间来完成 的,没有系统调用或上下文切换到内核。h]hX用户空间通过/dev/infiniband/uverbsN字符设备与内核进行慢速路径、资源管理 操作的通信。快速路径操作通常是通过直接写入硬件寄存器mmap()到用户空间来完成 的,没有系统调用或上下文切换到内核。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubh)}(hX=命令是通过在这些设备文件上的write()s发送给内核的。ABI在 drivers/infiniband/include/ib_user_verbs.h中定义。需要内核响应的命令的结 构包含一个64位字段,用来传递一个指向输出缓冲区的指针。状态作为write()系统调 用的返回值被返回到用户空间。h]hX=命令是通过在这些设备文件上的write()s发送给内核的。ABI在 drivers/infiniband/include/ib_user_verbs.h中定义。需要内核响应的命令的结 构包含一个64位字段,用来传递一个指向输出缓冲区的指针。状态作为write()系统调 用的返回值被返回到用户空间。}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK#hjubeh}(h]h ]h"]h$]h&]uh1jhhhKhjhhubeh}(h]id1ah ]h"]用户-内核通信ah$]h&]uh1jhjhhhhhKubj)}(hhh](j)}(h 资源管理h]h 资源管理}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%hhhhhK)ubj)}(hX由于所有IB资源的创建和销毁都是通过文件描述符传递的命令完成的,所以内核可以跟 踪那些被附加到给定用户空间上下文的资源。ib_uverbs模块维护着idr表,用来在 内核指针和不透明的用户空间句柄之间进行转换,这样内核指针就不会暴露给用户空间, 而用户空间也无法欺骗内核去跟踪一个假的指针。 这也允许内核在一个进程退出时进行清理,并防止一个进程触及另一个进程的资源。 h](h)}(hX由于所有IB资源的创建和销毁都是通过文件描述符传递的命令完成的,所以内核可以跟 踪那些被附加到给定用户空间上下文的资源。ib_uverbs模块维护着idr表,用来在 内核指针和不透明的用户空间句柄之间进行转换,这样内核指针就不会暴露给用户空间, 而用户空间也无法欺骗内核去跟踪一个假的指针。h]hX由于所有IB资源的创建和销毁都是通过文件描述符传递的命令完成的,所以内核可以跟 踪那些被附加到给定用户空间上下文的资源。ib_uverbs模块维护着idr表,用来在 内核指针和不透明的用户空间句柄之间进行转换,这样内核指针就不会暴露给用户空间, 而用户空间也无法欺骗内核去跟踪一个假的指针。}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK+hj6ubh)}(ho这也允许内核在一个进程退出时进行清理,并防止一个进程触及另一个进程的资源。h]ho这也允许内核在一个进程退出时进行清理,并防止一个进程触及另一个进程的资源。}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK0hj6ubeh}(h]h ]h"]h$]h&]uh1jhhhK+hj%hhubeh}(h]id2ah ]h"] 资源管理ah$]h&]uh1jhjhhhhhK)ubj)}(hhh](j)}(h 内存固定h]h 内存固定}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdhhhhhK3ubj)}(hX直接的用户空间I/O要求与作为潜在I/O目标的内存区域保持在同一物理地址上。ib_uverbs 模块通过get_user_pages()和put_page()调用来管理内存区域的固定和解除固定。它还核 算进程的pinned_vm中被固定的内存量,并检查非特权进程是否超过其RLIMIT_MEMLOCK限制。 被多次固定的页面在每次被固定时都会被计数,所以pinned_vm的值可能会高估一个进程所 固定的页面数量。 h](h)}(hXG直接的用户空间I/O要求与作为潜在I/O目标的内存区域保持在同一物理地址上。ib_uverbs 模块通过get_user_pages()和put_page()调用来管理内存区域的固定和解除固定。它还核 算进程的pinned_vm中被固定的内存量,并检查非特权进程是否超过其RLIMIT_MEMLOCK限制。h]hXG直接的用户空间I/O要求与作为潜在I/O目标的内存区域保持在同一物理地址上。ib_uverbs 模块通过get_user_pages()和put_page()调用来管理内存区域的固定和解除固定。它还核 算进程的pinned_vm中被固定的内存量,并检查非特权进程是否超过其RLIMIT_MEMLOCK限制。}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK5hjuubh)}(h被多次固定的页面在每次被固定时都会被计数,所以pinned_vm的值可能会高估一个进程所 固定的页面数量。h]h被多次固定的页面在每次被固定时都会被计数,所以pinned_vm的值可能会高估一个进程所 固定的页面数量。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK9hjuubeh}(h]h ]h"]h$]h&]uh1jhhhK5hjdhhubeh}(h]id3ah ]h"] 内存固定ah$]h&]uh1jhjhhhhhK3ubj)}(hhh](j)}(h /dev文件h]h /dev文件}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhK=ubj)}(hXr要想用udev自动创建适当的字符设备文件,可以采用如下规则:: KERNEL=="uverbs*", NAME="infiniband/%k" 可以使用。 这将创建设备节点,名为:: /dev/infiniband/uverbs0 等等。由于InfiniBand的用户空间verbs对于非特权进程来说应该是安全的,因此在udev规 则中加入适当的MODE或GROUP可能是有用的。h](h)}(hQ要想用udev自动创建适当的字符设备文件,可以采用如下规则::h]hP要想用udev自动创建适当的字符设备文件,可以采用如下规则:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK?hjubh literal_block)}(h'KERNEL=="uverbs*", NAME="infiniband/%k"h]h'KERNEL=="uverbs*", NAME="infiniband/%k"}hjsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1jhhhKAhjubh)}(h3可以使用。 这将创建设备节点,名为::h]h2可以使用。 这将创建设备节点,名为:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKChjubj)}(h/dev/infiniband/uverbs0h]h/dev/infiniband/uverbs0}hjsbah}(h]h ]h"]h$]h&]jjuh1jhhhKEhjubh)}(h等等。由于InfiniBand的用户空间verbs对于非特权进程来说应该是安全的,因此在udev规 则中加入适当的MODE或GROUP可能是有用的。h]h等等。由于InfiniBand的用户空间verbs对于非特权进程来说应该是安全的,因此在udev规 则中加入适当的MODE或GROUP可能是有用的。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKGhjubeh}(h]h ]h"]h$]h&]uh1jhhhK?hjhhubeh}(h]devah ]h"] /dev文件ah$]h&]uh1jhjhhhhhK=ubeh}(h](verbsjeh ]h"](用户空间verbs访问cn_infiniband_user_verbseh$]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_handlerj@error_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}(jjjjj"jjaj^jjj j u nametypes}(jjj"jajj uh}(jjjjjjj^j%jjdj ju footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}jNKsRparse_messages]transform_messages]hsystem_message)}(hhh]h)}(hhh]h>Hyperlink target "cn-infiniband-user-verbs" is not referenced.}hjsbah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]levelKtypeINFOsourceh،lineKuh1juba transformerN include_log]:Documentation/translations/zh_CN/infiniband/user_verbs.rst(NNNNta decorationNhhub.