vps如果制作论坛网站,那个网站可以免费建站,从网络营销策划理论,影视网站如何做本文来自对内核源代码文档/Documentation/infiniband/user_verbs.rst的翻译和理解。
在Infiniband设备帮助下#xff0c;跨计算机的两个进程可以相互访问对方的虚地址空间。在Linux操作系统上#xff0c;支持进程能直接访问本地Infiniband设备的资源#xff0c;从而实现跨机…本文来自对内核源代码文档/Documentation/infiniband/user_verbs.rst的翻译和理解。
在Infiniband设备帮助下跨计算机的两个进程可以相互访问对方的虚地址空间。在Linux操作系统上支持进程能直接访问本地Infiniband设备的资源从而实现跨机进程间虚地址直接通信的软件栈如下 IB uverbs模块需要Linux内核支持CONFIG_INFINIBAND_USER_VERBS配置选项并且核外需要安装libibverbs动态库。请参阅IB体系结构文档第11章请问哪位大侠有该文档请联系本人。
libibverbs动态库给进程提供一个设备无关的API编程接口通过/dev/infiniband/uverbsN对IB设备进行控制主要涉及在数据传输之前的内存等资源的分配通过用户态IB驱动提供mmap进行高速数据传输这里包括工作描述符和数据缓冲区的访问。
IB uverbs模块是基于Linux字符设备驱动框架下实现的所有IB资源的创建和销毁都是通过文件描述符的命令实现内核负责记录给到指定进程上下文的资源。IB uverbs模块维护了idr表负责内核态地址和用户态地址之间的翻译。当进程退出时基于进程间的资源隔离的需求IB uverbs还需要做清除等善后工作。
libibuverbs通过用户态IB驱动直接操作工作描述符和数据缓冲区以及相关控制寄存器。进程直接IO访问要求物理内存一直驻留在进程的虚拟地址上即要求物理内存钉在进程指定的虚拟地址上。IB uverbs模块通过get_user_pages()和put_page()来实现钉住物理内存和解绑的需求并且用进程pinned_vm变量对钉住的物理内存计数从而确保进程钉住的物理内存不会超过RLIMIT_MEMLOCK的限制。pinned_vm的数值可能大于进程实际钉住的物理内存页数量注意可能是因为put_page时没有将pinned_vm减小。
另外为了能自动创建/dev/infiniband/uverbsN设备文件请创建一条相关的udev规则KERNELuverbs*, NAMEinfiniband/%k