localhost tcp 吞吐量性能差异

Lie*_*ers 8 windows performance tcp localhost performance-tuning

我一直在使用psping测量不同计算机上本地主机的带宽统计信息:笔记本电脑、家用电脑和服务器。所有这些都达到100200 MB/s 之间,但我的 PowerPc 在工作时设法达到800 MB/s

什么会导致这些巨大的差异通过本地主机与自身通信?PowerPc 的性能比我测试过的所有其他设备高4 到 8 倍

电源配置

  • Windows 7的
  • Intel(R) Xeon(R) CPU E3-1240 v3 @ 3.40GHz [Family 6 Model 60 Stepping 3]
  • 3.78 GFLOPS/核
  • 赛门铁克 SEP

一台家用电脑配置

  • 视窗 8.1
  • Intel(R) Core(TM) i7 CPU 920 @ 2.67GHz [Intel64 Family 6 Model 26 Stepping 5] 4
  • 2.64 GFLOPS/核
  • 比特卫士

psping 命令

psping -4 -b -l 8k -n 20000 localhost:1234
Run Code Online (Sandbox Code Playgroud)

我希望得到并希望预先解决的一些问题

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

  1. 防病毒相关
    我已经关闭了我家用电脑的防病毒组件,没有任何明显的区别。此外,我还捕获了 WPA 跟踪(XperfScripts),并且与 CPU 相关活动最多的模块是 ntoskrnl.exe、netio.sys、tcpip.sys、ndis.sys 和 afd.sys。第一个进入图片CPU相关的AV模块是avcuf32.dll,占CPU总量的0.17%。

  2. 本地主机与 127.0.0.1
    我都尝试过,在所有经过测试的计算机上都得到了相同的结果。

  3. 最新驱动
    程序 我家用电脑上的驱动程序是最新的。PowerPc 上的驱动程序由我们的 IT 人员管理,稍有滞后,但不会太多(无论如何,PowerPc 在测试中的速度要快 4 倍)

  4. netsh int tcp show global
    两台 PC 之间存在一些差异。我家用电脑上的烟囱卸载状态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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

har*_*ymc 6

我相信 Windows 7 上的 PowerPC 在本地主机环回吞吐量上要快得多的原因是因为它可以使用 NetDMA。

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

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

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

NetDMA 可能会产生影响,因为它允许网络适配器将数据直接传输到您的应用程序,这可能会减少内存副本的数量,即使对于微不足道的环回适配器也是如此。

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

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

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

  1. Microsoft 文章启用 NetDMA有这个:

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

  1. Microsoft 文章NetDMA (Windows Drivers)有此注释:

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

将这两个要求放在一起,我可以猜测,由于 NetDMA 是一种 BIOS 功能,它没有在 Windows 8/2012 中使用的UEFI中实现。

因此,Microsoft 不得不以另一种方式提高本地主机环回吞吐量,尤其是在 Hyper-V 中使用时,因此在 Windows 8/2012 中创建了Fast TCP Loopback,定义为:

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

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

不幸的是,快速 TCP 环回不是透明的,需要应用程序在发送方和接收方的套接字上发出 WSAIoctl 系统调用,因此无法向后兼容现有的带宽测量应用程序,例如PsPingPCATTCP

在我自己在 Windows 7 上进行的测试中,我还没有弄明白 NetDMA 的所有奥秘,但我已经设法简单地打开了它,直接好处是通过 PsPing 测量我的带宽加倍。但是由于 NetDMA 无法在该计算机上重新启动,因此即使在理论上支持它的计算机上,我也不建议依赖它来提高吞吐量。