这个程序是我在Infiniband编程上的第一次尝试。我正在使用此库:
https://github.com/jgunthorpe/python-rdma
我可能做错了很有趣的事。我只是想发送一个字节序列“你好,世界”到一个多播地址。在
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()
这是我得到的输出:
^{pr2}$
我认为直接的问题是您没有初始化path对象的dqpn(destinationqp number)。根据IBPath docstring使用未连接的QP时需要目的地QP号码。在
相关问题 更多 >
编程相关推荐