Deixe-me tentar simplificar isso para você. Ao olhar para xmit_hash_policy, pense:
- camada 2 = MAC
- camada 3 = IP
- camada 4 = PORT
Em seguida, pense em "sessão única para cada camada". Exemplo:
- MAC de origem para o destino MAC = Single Session = Single Interface
- IP de origem para o IP de destino = Single Session = Single Interface
- Porta de origem para o destino PORT = Sessão única = Interface única
Coloque de outra forma:
- Único MAC = Interface única usada
- IP único = interface única usada
- Single PORT = Interface Única Usada
Normalmente, quando você se comunica entre dois nós, você tem um único MAC e um único IP. Então você só verá uma única interface sendo usada.
Digamos que você queira aumentar o rendimento entre dois servidores usando 1GbE. Cada servidor é vinculado usando 4 NICs e uma única interface vinculada. Essa interface ligada, digamos bond0, tem um único IP e um único MAC. Nesse cenário, você atingirá no máximo 120MB / s entre os dois servidores.
Em seguida, você adiciona uma subinterface. Esta é basicamente uma interface virtual que lhe dá outro endereço IP. Isso resulta em dois endereços IP na mesma interface vinculada. No linux você teria, por exemplo, bond0 e bond0: 1 dependendo de como você o configurou.
Se você estiver "hashing" na camada 2, vários IPs não geram nada. Você ainda está preso a um único MAC de origem e um único MAC de destino. No entanto, se você hash na camada 3, o driver agora, mais do que provavelmente, equilibrará sua transmissão.
Se você tiver um aplicativo multithread que usa várias portas, digamos portas TCP, convém usar o hash na camada 4, o que equilibrará ainda mais a carga.
Você pode ilustrar isso usando uma ferramenta como o netperf. Em cada cenário, você pode executar o netperf usando vários endereços IP ou várias portas e verá o tráfego equilibrado em várias portas.
Lembre-se, no entanto, isso é apenas transmitir. Receber é controlado pelo comutador. A Cisco permite personalizar a política de hashing. Os interruptores finais mais baixos permitem que você faça as camadas 2 e 3 e a extremidade superior permite que você faça as camadas 2, 3 e 4.
Cenário:
Você tem um servidor de backup e envia dados para um dispositivo de backup NAS. Você usa o modo 4 com xmit_hash_policy = layer3 + 4 no servidor de backup e tem 4 NICs de 1GbE na ligação. Seu software de backup está configurado para enviar dados para o IP do dispositivo de backup, mas faz isso em várias portas TCP com vários fluxos.
Com essa configuração, os dados serão enviados para todas as interfaces, supondo que você tenha fluxos suficientes para serem balanceados. Como isso determina o que vai para onde? Eu acho que você tem a resposta para isso, mas não vou fingir entender como. Eu só sei que isso acontece por experiência.
Então, digamos que agora você tem a capacidade de transmitir dados a 120MB / s * 4 (120MB / s por interface de 1GbE). Mas agora os dados atingem o switch e o switch tem um canal ether (Grupo de Agregação) que é configurado com uma política de hashing na camada 3. (Na Cisco, que pode ser src-ip, dst-ip ou src-dst-ip). Nós vamos com o src-dst-ip para este exemplo. Então agora o switch é o hash baseado nos endereços IP de origem e destino, que são sempre os mesmos, e assim sempre escolherá apenas uma única porta de destino no switch.
Então, enquanto você pode transmitir a 450+ MB / s, o alvo só pode receber 120MB / s.
Se o switch puder usar hash na camada 4 (a Cisco seria src-port, dst-port ou src-dst-port), agora você poderá transferir esses dados do servidor de backup para o appliance usando todas as 4 portas . Isso é presumir que o dispositivo de backup também está ligado.
Mas e se você não tiver um switch Cisco caro e não puder usar hash na camada 4? Você pode criar endereços IP adicionais! Em seguida, você configura seu servidor de backup para executar tarefas usando 4 endereços IP diferentes e ele será balanceado porque o comutador será baseado em hash nos endereços IP de origem e de destino.
Outros fornecedores de chaves possuem seu próprio algoritmo de hash, que geralmente é baseado em uma mistura de IP e MAC (camadas 2 e 3). Eu tive que criar entradas de arp estáticas no passado para tais opções para que houvesse vários endereços IP e vários endereços MAC.
Espero que isso ajude você a entender melhor como o xmit_hash_policy funciona, pelo menos na prática.