[英]Performance gain using OpenOnload Solarflare c
我正在尝试使用服务器中安装的Solarflare NIC来评估系统的性能提升。
服务器详细信息 :英特尔(R)酷睿TM i7-8086K CPU @ 4.00GHz(12核/ 8 GB RAM)
网络 :Solarflare XtremeScale X2522(10G)适配器
我已经用C ++编写了一个简单的TCP / IP服务器/客户端程序。 服务器/客户端都接受两个输入。 缓冲区大小和接口名称。 使用setsockopt,我可以使用SO_BINDTODEVICE将套接字绑定到特定接口。
const char *device = argv[2];
int rc1=setsockopt(server_fd, SOL_SOCKET, SO_BINDTODEVICE, device, strlen(device));
if (rc1 != 0)
{
cerr << "set sockopt bindtodevice failed: " << strerror(errno) << endl;
exit(1);
}
我在client和server.cpp程序中都使用了上面的代码片段。
为了测量延迟,在从大小为2048的客户端发送10000000消息前后,我使用了微秒级的chrono时间戳。
我使用以下命令运行SO_BINDTODEVICE +将套接字绑定到solarflare接口,以运行客户端服务器程序:
onload ./client(buf_size)(interface_name_solarflare)
onload ./server(buf_size)(interface_name_solarflare)
对于无负载的基准测试:
./client(buf_size)(接口名称)
./服务器(buf_size)(接口名称)
我能够观察到的是,在onload情况下的延迟比没有onload情况下的延迟高。 我也尝试过更改缓冲区大小。 这只是发送时间。
我的样本结果以微秒为单位:
有人可以指导我在这里做错什么吗? 我是使用OpenOnLoad的新手。
注意:我的客户端/服务器程序中没有使用过任何其他setsockopt选项。
提前致谢。 :)
我认为您可以为客户端和服务器创建单独的命名空间,然后进行测试(以防您没有两个系统)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.