我一直在使用普斯平用于测量不同计算机上本地主机的带宽统计:笔记本电脑、家用电脑和服务器. 他们都达到了100和200 兆字节/秒但我工作用的 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
我预计会收到一些问题,并希望提前解答
我可能错了,但这向你展示了我目前对事物的理解,请随时纠正我。防病毒相关
我关闭了家用电脑上的防病毒组件,没有任何明显变化。此外,我捕获了 WPA 跟踪(XperfScripts)其中 CPU 相关活动最多的模块是 ntoskrnl.exe、netio.sys、tcpip.sys、ndis.sys 和 afd.sys。第一个与 CPU 相关的 AV 模块是 avcuf32.dll,占总 CPU 的 0.17%。Localhost 与 127.0.0.1
我已经尝试过两者并在所有测试的计算机上得到了相同的结果。最新的驱动程序
我家用电脑上的驱动程序是最新的。PowerPc 上的驱动程序由我们的 IT 人员管理,虽然有些落后,但并不落后太多(而且 PowerPc 在测试中速度要快 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:
netsh int tcp set global netdma=enabled
在以管理员身份运行的命令提示符(cmd)中输入,然后重新启动。- Regedit并创建一个名为值 1 的
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
新 DWORD 项,然后重新启动。EnableTCPA
但是,启用 NetDMA 有两个先决条件:
- 微软文章启用 NetDMA有这个:
执行此过程之前,必须在 BIOS 中启用 NetDMA。NetDMA 支持通常标记为 IOAT 支持。
- 微软文章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 在那台电脑上重启后无法继续存在,因此我不建议在理论上支持它的电脑上依赖它来获得吞吐量。