rdma的IOBuf::append_user_data_with_meta无法传输4G以上的数据
Describe the bug (描述bug) 自己写了一个测试rdma和tcp速度差别的小测试,自己测试了128,256,512Mb都没问题。当传输大小为1G的数据时,rdma无任何报错,但是client接收到的attachment().size()是0,而使用tcp传输大小为1G的数据时,则出现报错
W1220 15:39:25.600674 5980 /home/binarycopycode/work/brpc_rdma_tcp_perf/src/brpc/input_messenger.cpp:375] Fail to read from Socket{id=102 fd=9 addr=192.168.182.129:40614:8011} (0x7f0d58026820): Connection reset by peer
W1220 15:39:25.600733 5980 /home/binarycopycode/work/brpc_rdma_tcp_perf/src/brpc/socket.cpp:1774] Fail to keep-write into Socket{id=102 fd=9 addr=192.168.182.129:40614:8011} (0x7f0d58026820): Broken pipe
To Reproduce (复现方法)
按照https://github.com/binarycopycode/brpc_rdma_tcp_perf 编译
测试rdma,注意我的池子大小和brpc的max_body_size都设为了2G,注意修改运行client命令的ip地址
./server -port=8010 -data_size_mb=1023 -rdma_memory_pool_initial_size_mb=2048 -max_body_size=2147483648
./client -server=192.168.182.129:8010 -rdma_memory_pool_initial_size_mb=2048 -max_body_size=2147483648
测试tcp,加上-use_rdma=false即可
./server -use_rdma=false -port=8011 -data_size_mb=1023 -rdma_memory_pool_initial_size_mb=2048 -max_body_size=2147483648
Expected behavior (期望行为)
client能正常接收attachment
Versions (各种版本) OS: CentOS8.5 Compiler: g++ (GCC) 8.5.0 20210514 (Red Hat 8.5.0-4) brpc: protobuf: libprotoc 3.5.0
Additional context/screenshots (更多上下文/截图)
以上为本地虚拟机测试。后来在两台有mlx的RDMA网卡的服务器上测试又不一样了。其中tcp能传1G的数据,但是到2G就出现一样的Broken pipe错误,但是RDMA可以传2G数据,但是4G数据被iobuf的限制给写死了,这个有办法解决吗? @Tuvie 是否能去掉这个限制,还是只能自己手动分段传数据了?
int IOBuf::append_user_data_with_meta(void* data,
size_t size,
void (*deleter)(void*),
uint64_t meta) {
if (size > 0xFFFFFFFFULL - 100) {
LOG(FATAL) << "data_size=" << size << " is too large";
return -1;
}
......
}
请问问题有解决吗 @binarycopycode