Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python rdma“;“你好,世界”;_Python_Infiniband_Rdma - Fatal编程技术网

python rdma“;“你好,世界”;

python rdma“;“你好,世界”;,python,infiniband,rdma,Python,Infiniband,Rdma,这个程序是我第一次尝试Infiniband编程。我正在使用这个库: 我可能做错了非常有趣的事情。我只是想发送一个字节序列“你好,世界”到一个多播地址 import sys import errno import unittest import mmap import rdma import rdma.vmad import rdma.IBA as IBA import rdma.ibverbs as ibv import rdma.satransactor import rdma.path

这个程序是我第一次尝试Infiniband编程。我正在使用这个库:

我可能做错了非常有趣的事情。我只是想发送一个字节序列“你好,世界”到一个多播地址

import sys
import errno
import unittest
import mmap

import rdma
import rdma.vmad
import rdma.IBA as IBA
import rdma.ibverbs as ibv
import rdma.satransactor
import rdma.path
import rdma.vtools

from rdma.tools import clock_monotonic
from pyqtgraph.Qt import QtCore, QtGui


class umad_self_test():
    umad = None;
    tid = 0;

    def __init__(self):
        self.umad = None
        self.tid = 0

        self.setUp()

    def setUp(self):
        self.end_port = rdma.get_end_port();
        self.ctx = rdma.get_verbs(self.end_port);

        #print self.end_port, self.ctx

    def tearDown(self):
        self.ctx.close();
        self.ctx = None;    

    def test_basic(self):
        print self.ctx.query_port();
        print self.ctx.query_device();

        pd = self.ctx.pd();
        print pd,repr(pd)

        cq = self.ctx.cq(100);
        print cq,repr(cq)

        try:
            cq.resize(200);
        except rdma.SysError as e:
            if e.errno != errno.ENOSYS:
                raise

        comp = self.ctx.comp_channel()
        print comp,repr(comp)

        qp = pd.qp(ibv.IBV_QPT_UD, 100, cq, 100, cq)
        print qp,repr(qp)
        print qp.query(0xFFFF)
        mpath = rdma.path.IBPath(self.ctx. end_port, DLID=0xC000,
                                 DGID=IBA.GID("ff02::1"))
        qp.attach_mcast(mpath)
        qp.detach_mcast(mpath)

        buf = mmap.mmap(-1,4096);

        mr = pd.mr(buf,ibv.IBV_ACCESS_LOCAL_WRITE|ibv.IBV_ACCESS_REMOTE_WRITE);
        print mr,repr(mr)
        print "MR",mr.addr,mr.length,mr.lkey,mr.rkey

        ah = pd.ah(self.end_port.sa_path);
        print ah,repr(ah)

        srq = pd.srq();
        print srq,repr(srq)
        print srq.query();
        srq.modify(100);

        pool = rdma.vtools.BufferPool(pd,count=100,size=1024);
        pool.post_recvs(qp,50);

        buf_idx = pool.pop();
        pool.copy_to("Hello, World!", buf_idx);
        qp.post_send(pool.make_send_wr(buf_idx,pool.size, mpath));

if __name__ == '__main__':   
    if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
        umst = umad_self_test()
        umst.test_basic()
        umst.tearDown()
这是我得到的输出:

[idf@node2 python]$ python myverbs.py 
port_attr(state=4, max_mtu=5, active_mtu=5, gid_tbl_len=128L, port_cap_flags=39389290L, max_msg_sz=1073741824L, bad_pkey_cntr=0L, qkey_viol_cntr=0L, pkey_tbl_len=128L, lid=1L, sm_lid=1L, lmc=0L, max_vl_num=3L, sm_sl=0L, subnet_timeout=18L, init_type_reply=0L, active_width=2L, active_speed=4L, phys_state=5L)
device_attr(fw_ver='2.7.200', node_guid=GUID('0025:90ff:ff1a:0070'), sys_image_guid=GUID('0025:90ff:ff1a:0073'), max_mr_size=18446744073709551615L, page_size_cap=4294966784L, vendor_id=713L, vendor_part_id=26428L, hw_ver=176L, max_qp=163704L, max_qp_wr=16351L, device_cap_flags=8166518L, max_sge=32L, max_sge_rd=0L, max_cq=65408L, max_cqe=4194303L, max_mr=524272L, max_pd=32764L, max_qp_rd_atom=16L, max_ee_rd_atom=0L, max_res_rd_atom=2619264L, max_qp_init_rd_atom=128L, max_ee_init_rd_atom=0L, atomic_cap=1, max_ee=0L, max_rdd=0L, max_mw=0L, max_raw_ipv6_qp=0L, max_raw_ethy_qp=0L, max_mcast_grp=8192L, max_mcast_qp_attach=248L, max_total_mcast_qp_attach=2031616L, max_ah=0L, max_fmr=0L, max_map_per_fmr=8191L, max_srq=65472L, max_srq_wr=16383L, max_srq_sge=31L, max_pkeys=128L, local_ca_ack_delay=15L, phys_port_cnt=1L)
pd:0:mlx4_0 PD(Context('mlx4_0',fd=3),0x0)
cq:0:mlx4_0 CQ(Context('mlx4_0',fd=3),0x0)
comp_channel:5:mlx4_0 CompChannel(Context('mlx4_0',fd=3),5)
qp:193:pd:0:mlx4_0 QP(PD(Context('mlx4_0',fd=3),0x0),0x0,193,qp_type=IBV_QPT_UD(4))
(<rdma.tools.qp_attr object at 0x7f0d29aa24d0>, <rdma.tools.qp_init_attr object at 0x7f0d29aa2550>)
mr:0:pd:0:mlx4_0 MR(PD(Context('mlx4_0',fd=3),0x0),0x0,0x7f0d34377000,4096,lkey=0xb0042102,rkey=0xb0042102)
MR 139694687350784 4096 2953060610 2953060610
ah:6E616269 AH(0x6e616269)
srq:0:pd:0:mlx4_0 SRQ(PD(Context('mlx4_0',fd=3),0x0),0x0)
srq_attr(max_wr=127L, max_sge=1L, srq_limit=0L)
Traceback (most recent call last):
  File "myverbs.py", line 97, in <module>
    umst.test_basic()
  File "myverbs.py", line 92, in test_basic
    qp.post_send(pool.make_send_wr(buf_idx,pool.size, mpath));
  File "ibverbs.pyx", line 1461, in rdma.ibverbs.QP.post_send
TypeError: an integer is required
[idf@node2 python]$ 
[idf@node2python]$python myverbs.py
国家4,最大数量5,活跃的mtu=5,gid-tbl=128L,港口帽彩旗=39389290L,港口帽彩旗=39389290L,最大的msg-SUU-sz=1073737418241824141824L,最大的msg-sz=107374182824182414141414141418224L,最大的msg-sz=10737414182418224L,最大的msg-sz=1073741414141822424L,最大的msg-msg-sz=10737414141418224L,最大的问题,最坏的问题是,最坏的是,最坏的是,最坏的是,最坏的是,最坏的是,最坏的是,最坏的是,最坏的是,最坏的是,最坏的是,最坏的是,最坏的是,最坏的是最坏的是,最坏的是最坏的是是(重量=5升)
设备属性(fw\u ver='2.7.200',节点guid=guid('0025:90ff:ff1a:0070'),系统映像guid=guid('0025:90ff:ff1a:0073'))第二页尺寸大小上限=42966784L,供应商id=713L,供应商部分id=264228L,供应商部分id=264228L,硬件版本=176L,最大尺寸尺寸=176L,最大尺寸qp=16346747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747,页面尺寸大小大小大小大小大小上限上限上限上限上限上限上限上限=4261616161616161616161616161615,页面,页面大小大小大小上限上限上限上限capcapcapcapCap=429667676767674,页面大小帽帽帽帽帽=426767676767674升,供应商id,供应商id,供应商id=711,供应商id=711,供应商id=713,供应商id=713L,供应商id=713L,供应商id=713升原子=0L,最大分辨率=2619264L,最大初始分辨率_1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、1、0、1、0、0、0、1、0、0、1、0、0、0、1、0、0、0、1、0、0、0、0、0、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8总数、8、8、8、8、8、8、8、8、8、8、总总的总的总的目的目的是从从从目前到目前到目前来看,到目前来看,包括包括包括包括包括所有所有所有所有所有所有所有所有所有所有的所有的中国都是从从从从从目前来看,到目前来看,从从从从目前到目前到目前到目前来看,到目前到目前来看,从从目前到目前来看,从从目前到目前来看,从目前到目前到目前到目前到目前为止,从目前16383L,最大srq\U sge=31L,最大pkeys=128L,本地ca\U ack\U延迟=15L,物理量_端口(cnt=1L)
pd:0:mlx4_0 pd(上下文('mlx4_0',fd=3),0x0)
cq:0:mlx4_0 cq(上下文('mlx4_0',fd=3),0x0)
comp_通道:5:mlx4_0 comp通道(上下文('mlx4_0',fd=3),5)
qp:193:pd:0:mlx4_0 qp(pd(上下文('mlx4_0',fd=3),0x0),0x0193,qp_类型=IBV_QPT_UD(4))
(, )
mr:0:pd:0:mlx4_0 mr(pd(上下文('mlx4_0',fd=3),0x0),0x0,0x7F0D343770004096,lkey=0xb0042102,rkey=0xb0042102)
139694687350784 4096 2953060610 2953060610先生
ah:6E616269 ah(0x6e616269)
srq:0:pd:0:mlx4_0 srq(pd(上下文('mlx4_0',fd=3),0x0),0x0)
srq_属性(最大wr=127L,最大sge=1L,srq_极限=0L)
回溯(最近一次呼叫最后一次):
文件“myverbs.py”,第97行,在
umst.test_basic()
test_basic中第92行的文件“myverbs.py”
qp.post_send(pool.make_send_wr(buf_idx,pool.size,mpath));
rdma.ibverbs.QP.post_send中的文件“ibverbs.pyx”,第1461行
TypeError:需要一个整数
[idf@node2python]$

我认为直接的问题是您没有初始化path对象的dqpn(目标QP编号)。根据协议,当使用未连接的QP时,需要一个目的地QP编号。

此行的作用是什么?qp=pd.qp(ibv.ibv_QPT_UD,100,cq,100,cq)我必须查看文档中的具体参数,但它基本上创建了一个新的UD(未连接的数据报)qp。我的建议是,我已经通过上述语句提供了一个dqpn?不,使用UD-QPs,可以在每个传出消息中提供不同的目的地qp号,因此,它属于用于创建地址句柄的路径对象。我认为python rdma包中的
tests/verbs.py