小编use*_*238的帖子

GRO(通用接收卸载)如何在更高级的 NIC 上工作?

我对特定的答案感兴趣:

  1. 具有 GRO 的 NIC 是否编辑/创建 TCP ACK 或任何其他数据包(或者此功能对接收器/发送器 TCP 堆栈透明)?
  2. 当 NIC 应该将“粘合段”传递给 TCP 堆栈时,应该有超时/事件吗?这些是什么?
  3. 在数据包转发设置中 - GRO 功能是否也尝试读取接收器 ACK(请参阅下文,为什么我会问这个)?
  4. 任何能比维基百科和 linux 手册页更好地解释 GRO 和其他 NIC 卸载功能(TSO、LSO ...)的来源都将不胜感激。

更多细节:

我正在对一个 IPSec 实现的性能问题进行故障排除。问题是可用带宽并没有在所有 4 个 VPN 隧道中均匀分布(大约分布为 200MBps/200MBps/1MBps/1MBps;每个 VPN 隧道封装单个 TCP 连接)。在 PCAP 中,我偶尔会看到网络服务器空闲大约 2 秒(等待 ACK)。当网络服务器重新传输未确认的段时,下载恢复。

我对 PCAP 的看法是 NIC GRO 功能将数据包粘合在一起,但有时不会将它们及时传递到 TCP 堆栈,这导致了问题。

由于此 VPN 服务器没有终止 TCP 连接而仅转发数据包的接口。然后我尝试禁用 GRO,之后我观察到流量在所有隧道中均匀分布。此外,当在 Web 服务器上禁用 TCP 窗口缩放时,即使启用了 GRO,带宽也会被分配(这就是我遇到问题 #3 的原因)。

我在 Ubuntu 10.04 服务器(64 位)上使用 2.6.32-27 linux。网卡是英特尔 82571EB。所有接口(HTTP 客户端、VPN 客户端、VPN 服务器、Web 服务器)都通过 …

nic linux-networking

16
推荐指数
1
解决办法
5万
查看次数

NAPI 与自适应中断

谁能解释一下如何使用以下两种技术来减轻高网络负载下的中断开销?

  1. 自适应接收/自适应发送,和
  2. NAPI;

我希望能解释更接近 linux 内核源代码级别的差异的答案?我也想听听如何在负载为 ~ 400Mbps 时强制 NIC 进入轮询/中断合并模式。

更多背景:

问题似乎是 bnx2 和 e1000 驱动程序忽略了“ethtool -Cadaptive-rx on”命令。这可能是因为这些驱动程序不支持自适应中断。尽管 Broadcom Programmer 的参考手册说 BCM5709 NIC 硬件应该支持此功能。

所以我决定尝试 NAPI 并在 netif_napi_add() 函数调用中将权重从 64 减少到 16,以在低得多的负载下强制 NIC 处于轮询模式,但不幸的是,这并没有奏效。我猜 NAPI 在 NIC 中不需要任何特殊的硬件支持,对吗?

我使用的硬件是 BCM5709 NIC(它使用 bnx2 驱动程序)。操作系统是 Ubuntu 10.04。CPU是至强5620。

nic linux-networking

12
推荐指数
1
解决办法
2万
查看次数

可以使用多个 CPU 内核的 IPSec 软件

谁能推荐一个好的 IPSec 软件,它可以使用多个 CPU 内核Linux 双 CPU 四核 E5620 Xeon设置(总 16HT 内核)上实现~2Gbps 的性能?

我试过 OpenSwan 和 StrongSwan。OpenSwan KLIPS 堆栈仅在单个 CPU 内核上运行。KLIPS+OCF 加密卸载似乎也很糟糕,因为它以 70% 的速度消耗了所有 16 个 CPU 内核,而仅提供了约 600Mbps 的传输速度。作为副产品,它还对 TCP 数据包进行重新排序。

到目前为止,使用不同协议的OpenVPN,我们能够在相同的硬件上实现 ~2Gbps 的负载平衡,没有任何问题。16 个内核中只有 4 个被 100% 使用。现在是时候用 Ipsec 做同样的事情了。最好应该是 OpenSource IPsec 解决方案。

更新:

我的最新发现表明 IPsec NETKEY 堆栈可能能够毫无问题地处理两场流量(但仅限于多队列 NIC)。我无法肯定地验证这一点,因为似乎 NAPI 在高负载下将 NIC 驱动程序切换到轮询模式,那时所有性能从 1.7 Gbps 下降到 500 Mbps。此外,ubuntu 10.04 似乎没有考虑某些内核线程的时间,因此我看不到工作负载如何分布在所有 CPU 内核上。

linux performance scalability ipsec

7
推荐指数
1
解决办法
2996
查看次数

重启后网络管理器不显示界面

我创建了一个 OVS 桥:

# ovs-vsctl add-br br-int
Run Code Online (Sandbox Code Playgroud)

这将创建一个我可以在 ifconfig 中看到的 netdevice。然后我创建一个 NetworkManager 连接并启动它:

# nmcli connection add type generic con-name br-int autoconnect yes ifname br-int ip4 1.1.1.1/24
# nmcli con up br-int ifname br-int
Run Code Online (Sandbox Code Playgroud)

但是,每次重新启动主机(Ubuntu 16.04)后,都必须再次手动启动连接。有没有办法告诉 NetworkManager 在 OVS 创建后自动调出这个界面?

networking networkmanager linux-networking

7
推荐指数
1
解决办法
6692
查看次数