首页 > 解决方案 > 使用 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 选项。

提前致谢。:)

标签: c++tcponloadopenonload

解决方案


我认为您可以为客户端和服务器创建单独的命名空间并尝试测试(如果您没有两个系统)


推荐阅读