根据Linux内核https://lwn.net/Articles/629155/的说法,“每个内核每秒只能转发100万到2M个数据包”--那么Linux在几十个内核上的扩展能力有多好呢?
假设我在多核CPU上有一个多队列(128个rx+tx对)100 able网卡-- Linux是否能够在几十个核之间达到100 able网卡(即每秒100万到2M包)的容量,而不需要太多的倒退,以达到10.2000万包/秒的总体吞吐量?
我还在某个地方读到,Linux很难在4核以上扩展网络性能--最近的内核版本也是如此吗?
发布于 2020-06-06 14:10:22
要意识到主机上的10个Mpps正在推动可伸缩性,需要进行调优才能很好地执行。拉赫尔网络性能调整指南深入其中的一些内容,从网卡卸载到NUMA效应。
即使是1000个字节的小数据包也意味着需要一个100 Gb的NIC。
10 Mpps可能是每包90 ns。不是很多,只有几百个CPU周期。
简单地放下10个Mpps,Cloudflare试验了完全绕过网络过滤器,并使用了XDP。这有点异国情调,如果您的标准主机安全模型使用连接轨迹的netfilter。在带宽上也有一点欺骗,10 Gb的NIC假设通过小数据包拒绝服务。
ESnet已经实现了78 Gbps的单流有每个人最喜欢的不做任何事情的基准,iperf和nuttcp。值得注意的是,他们使用了9000字节的数据包,所以这是“只有”100万PPS。仍然需要进行一些调优,就像您为高端数据库所做的那样:
不算太糟,考虑对旧内核进行进一步的调优是必要的。
Cloudflare和ESnet都没有在这些数据包流基准中进行重要的计算。执行有用的工作将是可伸缩性的另一个变量。也许可以扩展: haproxy到十几个后端主机,每个后端主机可以更容易地实现1个Mpps。也许这仍然触及了LWN提到的一些转发可伸缩性限制,很难说。
关于最新的内核,那篇LWN文章是5年前写的,不会是最新的。在最新的NIC上获得更新的内核来调整您自己的基准测试。特别是如果你想写你自己的“如何删除20个Mpps”的文章。
https://serverfault.com/questions/1020155
复制相似问题