Eu acredito que a razão pela qual o PowerPC no Windows 7 é muito mais rápido no localhost throughput de loopback, é porque ele pode usar o NetDMA.
O artigo da Microsoft NetDMA (drivers do Windows) define NetDMA como:
The NetDMA interface provides a generic interface for memory-to-memory direct memory access (DMA) transfers. Although the interface is designed to copy packets that are received from high-performance network interface cards (NICs), you can also use the interface for other applications. There is no direct relationship between NetDMA and NDIS.
Ao usar o loopback do host local, é lógico que operações de cópia de memória são o principal fator de rendimento, como os quadros são copiados da memória do aplicativo de origem e, em seguida, entre as camadas TCP e finalmente para a memória da aplicação-alvo.
O NetDMA pode ter um impacto, pois permite que os adaptadores de rede transfiram dados diretamente para o seu aplicativo, talvez reduzindo o número de cópias de memória mesmo para o adaptador de loopback trivial.
A ativação do NetDMA pode ser feita de duas maneiras:
- Insira
netsh int tcp set global netdma=enabled
no prompt de comando (cmd) que é executado como administrador e, em seguida, reinicialize. - Regedit para
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
e crie um novo item DWORD chamadoEnableTCPA
com o valor 1 e, em seguida, reinicialize.
No entanto, existem dois pré-requisitos para ativar o NetDMA:
- O artigo da Microsoft Habilitando o NetDMA tem o seguinte:
NetDMA must be enabled in the BIOS before performing this procedure. NetDMA support is often labeled IOAT support.
- O artigo da Microsoft NetDMA (drivers do Windows) tem esta nota:
The NetDMA interface is not supported in Windows 8 and later.
Colocando esses dois requisitos juntos, posso arriscar que, como o NetDMA é uma função do BIOS, ele não foi implementado em UEFI , que é usado no Windows 8/2012.
A Microsoft teve, portanto, de melhorar o loopback do host local rendimento de outra maneira, especialmente para usar em Hyper-V, e, portanto, criado no Windows 8/2012 o Fast TCP Loopback , definido como:
TCP Loopback Fast Path is a new feature introduced in Windows Server 2012 and Windows 8. If you use the TCP loopback interface for inter-process communications (IPC), you may be interested in the improved performance, improved predictability, and reduced latency the TCP Loopback Fast Path can provide. This feature preserves TCP socket semantics and platform capabilities including the Windows Filtering Platform (WFP), and works on both non-virtualized and virtualized operating system instances.
The TCP loopback interface provides a simple local IPC mechanism for processes on the same operating system instance, and it can easily be switched to a remote IPC mechanism by simply changing the destination IP address.
Infelizmente, o Fast TCP Loopback não é transparente, exigindo que aplicativos emitir uma chamada do sistema WSAIoctl nos soquetes para o remetente e o receptor, portanto, não sendo retrocompatível com aplicativos de medição de largura de banda existentes como PsPing e PCATTCP .
Nos meus próprios testes no Windows 7, eu não compreendi todos os mistérios que cercam o NetDMA, mas eu consegui ligá-lo brevemente, com o benefício imediato de dobrar minha largura de banda medida pelo PsPing. Mas como NetDMA não sobreviveu a um reboot nesse computador, Eu não recomendo depender dele para rendimento em computadores que, teoricamente, o suportam.