本地主机 tcp 吞吐量性能差异

本地主机 tcp 吞吐量性能差异

我一直在使用普斯平用于测量不同计算机上本地主机的带宽统计:笔记本电脑、家用电脑和服务器. 他们都达到了100200 兆字节/秒但我工作用的 PowerPc 却800MB/秒

是什么导致了这些巨大的差异,通过本地主机进行通信?PowerPc 的性能优于我测试过的所有其他设备因子为 4 至 8

PowerPc 配置

  • Windows 7的
  • Intel(R) Xeon(R) CPU E3-1240 v3 @ 3.40GHz [系列 6 型号 60 步进 3]
  • 3.78 GFLOPS/核心
  • 赛门铁克 SEP

家用电脑配置

  • Windows 8.1
  • Intel(R) Core(TM) i7 CPU 920 @ 2.67GHz [Intel64 系列 6 型号 26 步进 5] 4
  • 2.64 GFLOPS/核心
  • BitDefender

psping 命令

psping -4 -b -l 8k -n 20000 localhost:1234

我预计会收到一些问题,并希望提前解答

我可能错了,但这向你展示了我目前对事物的理解,请随时纠正我。

  1. 防病毒相关
    我关闭了家用电脑上的防病毒组件,没有任何明显变化。此外,我捕获了 WPA 跟踪(XperfScripts)其中 CPU 相关活动最多的模块是 ntoskrnl.exe、netio.sys、tcpip.sys、ndis.sys 和 afd.sys。第一个与 CPU 相关的 AV 模块是 avcuf32.dll,占总 CPU 的 0.17%。

  2. Localhost 与 127.0.0.1
    我已经尝试过两者并在所有测试的计算机上得到了相同的结果。

  3. 最新的驱动程序
    我家用电脑上的驱动程序是最新的。PowerPc 上的驱动程序由我们的 IT 人员管理,虽然有些落后,但并不落后太多(而且 PowerPc 在测试中速度要快 4 倍)

  4. netsh int tcp show global
    两台电脑之间存在一些差异。烟囱卸载状态NetDMA 状态在我的家用电脑上,这些功能被禁用,而在 PowerPc 上,这些功能是自动启用的。
    我的网络能力不够好,不知道这是否能解释这些差异,但阅读了相关内容后,我怀疑这是否能解释这些差异。


编辑

RAM 详细信息 PowerPC

  capacity speed memorytype totalwidth datawidth typedetail
  -------- ----- ---------- ---------- --------- ----------
4294967296  1600          0         64        64        128
4294967296  1600          0         64        64        128
4294967296  1600          0         64        64        128
4294967296  1600          0         64        64        128

RAM 详细信息 家用电脑

    capacity speed memorytype totalwidth datawidth typedetail
  -------- ----- ---------- ---------- --------- ----------
2147483648  1333          1         72        64          2
4294967296  1333          1         72        64          2
2147483648  1333          1         72        64          2
4294967296  1333          1         72        64          2
2147483648  1333          1         72        64          2
4294967296  1333          1         72        64          2
   4194304    33         11          8         8       4096

答案1

我认为 Windows 7 上的 PowerPC 在本地主机环回吞吐量上速度更快的原因是它可以使用 NetDMA。

微软文章NetDMA(Windows 驱动程序)将 NetDMA 定义为:

NetDMA 接口为内存到内存的直接内存访问 (DMA) 传输提供了通用接口。尽管该接口旨在复制从高性能网络接口卡 (NIC) 接收的数据包,但您也可以将该接口用于其他应用程序。NetDMA 和 NDIS 之间没有直接关系。

当使用本地主机环回时,内存复制操作是吞吐量的主要因素,因为帧从源应用程序内存复制,然后在 TCP 层之间复制,最后复制到目标应用程序的内存。

NetDMA 可能会产生影响,因为它允许网络适配器将数据直接传输到您的应用程序,这样也许可以减少即使对于简单的环回适配器的内存复制次数。

可以通过两种方式启用 NetDMA:

  1. netsh int tcp set global netdma=enabled在以管理员身份运行的命令提示符(cmd)中输入,然后重新启动。
  2. Regedit并创建一个名为值 1 的HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters新 DWORD 项,然后重新启动。EnableTCPA

但是,启用 NetDMA 有两个先决条件:

  1. 微软文章启用 NetDMA有这个:

执行此过程之前,必须在 BIOS 中启用 NetDMA。NetDMA 支持通常标记为 IOAT 支持。

  1. 微软文章NetDMA(Windows 驱动程序)有这样的说明:

Windows 8 及更高版本不支持 NetDMA 接口。

把这两个要求放在一起,我可以大胆猜测,由于 NetDMA 是一项 BIOS 功能,因此它没有在UEFI用于 Windows 8/2012。

因此,微软必须以另一种方式提高本地主机环回吞吐量,尤其是在 Hyper-V 中使用,因此在 Windows 8/2012 中创建了快速 TCP 环回, 定义为 :

TCP 环回快速路径是 Windows Server 2012 和 Windows 8 中引入的一项新功能。如果您使用 TCP 环回接口进行进程间通信 (IPC),您可能会对 TCP 环回快速路径可以提供的改进性能、改进可预测性和降低延迟感兴趣。此功能保留了 TCP 套接字语义和平台功能(包括 Windows 筛选平台 (WFP)),并且适用于非虚拟化和虚拟化操作系统实例。

TCP 环回接口为同一操作系统实例上的进程提供了一种简单的本地 IPC 机制,并且可以通过简单地改变目标 IP 地址轻松切换到远程 IPC 机制。

不幸的是,Fast TCP Loopback 并不透明,要求应用程序在发送方和接收方的套接字上发出 WSAIoctl 系统调用,因此不向后兼容现有的带宽测量应用程序,例如平移远程控制协议

在我自己对 Windows 7 的测试中,我还没有弄明白 NetDMA 的所有秘密,但我设法短暂地打开了它,通过 PsPing 测量,我的带宽立即翻倍。但由于 NetDMA 在那台电脑上重启后无法继续存在,因此我不建议在理论上支持它的电脑上依赖它来获得吞吐量。

相关内容