我正在尝试使用安装在我的服务器中的 Solarflare NIC 来衡量我的系统的性能提升。
服务器详情:Intel(R) Core(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 条消息之前和之后使用了以微秒为单位的计时时间戳。
我使用 SO_BINDTODEVICE + 使用以下命令将套接字绑定到 solarflare 接口以运行客户端服务器程序:
onload ./client (buf_size) (interface_name_solarflare)
onload ./server (buf_size) (interface_name_solarflare)
对于没有 onload 的基准测试:
./client (buf_size) (interface_name)
./server (buf_size) (interface_name)
我能够观察到的是,onload 的延迟比没有 onload 的要高。我也尝试过改变缓冲区大小。这只是发送时间。
我的示例结果以微秒为单位:
有人可以指导我在这里做错什么吗?我是使用 OpenOnLoad 的新手。
注意:我没有在我的客户端/服务器程序中使用任何其他 setsockopt 选项。
提前致谢。:)