c++ - 使用 OpenOnload Solarflare c 获得性能提升
问题描述
我正在尝试使用安装在我的服务器中的 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 选项。
提前致谢。:)
解决方案
我认为您可以为客户端和服务器创建单独的命名空间并尝试测试(如果您没有两个系统)
推荐阅读
- reactjs - 将默认道具值应用于库中的组件
- javascript - 带有“子组件”的 ReactJS 组件
- html - ng-点击
- google-cloud-storage - 如何从谷歌云存储中获取数据?
- python - 从文档 Mongodb 中的数组中查询与查询匹配的元素
- c - Linux驱动程序try & catch
- javascript - html中的html javascript中的html
- compilation - 将 Nmap 编译为静态二进制文件
- java - 未能在项目 spring-boot-security-oauth2-google 上执行目标 org.springframework.boot:spring-boot-maven-plugin:1.4.2.RELEASE:run (default-cli)
- c# - .Net Core 2 和 AngularJS SPA 不工作