10Gbit以太网在定制应用程序上性能真的很差

我最近有几台10Gbit以太网卡安装在几台连接到大约80个运行分布式文件系统(Lustre)商品节点的局域网的机器上。 10Gbit卡在文件操作上实现了良好的性能,并且正如其应该的那样运行。

不过,我用C语言编写了一个自定义的客户端应用程序,它将大块数据asynchronous发送到networking中的多个节点。 运行客户端应用程序的计算机有一个10GB的以太网卡,所有的目标节点都有一个1GB的以太网卡 – 所以我应该能够获得10Gb的理论最大发送传输速率。

如果我使用1Gbit卡在机器上运行客户端应用程序,它可以很容易地使卡持续时间最长。 但奇怪的是,如果我用一个10Gbit卡在一台机器上运行相同的应用程序,性能会非常糟糕(大约每秒20-30兆位)。

该程序使用普通的TCP套接字以C语言编写。 10Gbit是否需要特殊设置? 因为在1Gbit卡上获得最高性能是非常奇怪的,但是在10Gbit卡上performance糟糕。 再一次,问题不是10Gbit卡本身,因为分布式文件系统(Lustre)在10Gbit卡上获得了良好的性能。

任何想法/build议?

有一件事我注意到,在10gb和1gb局域网段之间的问题是默认的MTU是不同的。 10gb以太网使用9000的默认MTU而不是1gb以太网的默认1500。 您可以将10g上的MTU更改为较低的号码,或者设置路由器来处理为您分解巨型数据包。

这引起了我一些头痛的问题,因为没有configuration这两种东西中的一种,就会出现很多数据包碎片。

您写的应用程序很可能与Lustre等标准化应用程序的I / O优化不相称。

您的代码中的性能瓶颈可能不会在机器和操作系统上显示1Gbps卡,但是当卡吞吐量增加到10Gbps时,所有其他参数不变(硬件和操作系统),您的代码限制显着。


这是从维基百科Lustre实施部分引用。

在Linux客户端的典型Lustre安装中,Lustre文件系统驱动程序模块被加载到内核中,并且文件系统像任何其他本地或networking文件系统一样被挂载。 即使客户端应用程序可能由数十到数千个单独的服务器和MDT / OST文件系统组成,客户端应用程序也会看到一个统一的文件系统。

在某些大规模并行处理器(MPP)安装中,计算处理器可以通过将其I / O请求redirect到configuration为Lustre客户端的专用I / O节点来访问Lustre文件系统。 这种方法被用于LLNL蓝色基因安装

你在使用这部分?

另一种方法是使用liblustre库为用户空间应用程序提供直接的文件系统访问。

Liblustre允许在应用程序空间和Lustre OSS之间直接进行数据移动,而不需要通过内核进行干预数据拷贝,从而直接从计算处理器到Lustre文件系统提供低延迟,高带宽访问。

MTU在接口上保持一致非常重要。

确保你打开硬件TCP卸载(如果有效的话)。 而且所有的nics上的固件都是最新的,因为TOE在发货时在某些nics上已经非常糟糕。 我会testingTOE和TSO等打开和closures,看看是否有任何区别。

您是否正在使用broadcomm 10G以太网,因为我们发现了这些问题。

你用lnettesting仪testing了你的networking吗?

你有多less个OSS?你通过文件系统获得什么样的吞吐量?