Eu resolvi o problema desativando "Hardware Large Receive Offloading" nas configurações do pfSense (Sistema / Avançado / Rede | Interfaces de Rede)
Existe uma caixa de seleção "Desativar hardware de recebimento de carga grande" e eu mudei para "Verificado" (ON).
A descrição diz o seguinte sobre esta opção:
Checking this option will disable hardware large receive offloading (LRO). This offloading is broken in some hardware drivers, and may impact performance with some specific NICs. This will take effect after a machine reboot or re-configure of each interface.
Outras opções estão desmarcadas. Então agora as opções nas "Interfaces de Rede" são as seguintes:
[ ] Disable hardware checksum offload
[ ] Disable hardware TCP segmentation offload
[✓] Disable hardware large receive offload
De acordo com a documentação da HP, os adaptadores de rede em Gen8 / Gen9 (modelo 331 com base no Broadcom BCM5719 chipset ) suportam técnicas de descarregamento TCP / IP padrão, incluindo: - TCP / IP, UDP checksum offload (TCO) (move o descarregamento de checksum TCP e IP da CPU para o adaptador de rede). - Large send offload (LSO) ou TCP segmentation offload (TSO) (permite que a segmentação TCP seja manipulada pelo adaptador em vez da CPU).
Isso é o que pfSense escreve sobre esses recursos :
The settings for Hardware TCP Segmentation Offload (TSO) and Hardware Large Receive Offload (LRO) under System > Advanced on the Networking tab default to checked (disabled) for good reason. Nearly all hardware/drivers have issues with these settings, and they can lead to throughput issues. Ensure the options are checked. Sometimes disabling via sysctl is also necessary.
Na verdade, não havia problemas de hardware / drivers, mas um erro de configuração. LRO e TSO nunca devem ser habilitados em um roteador. Somente se o pfSense estiver configurado como um ponto final (por exemplo, um servidor DNS), essas opções podem estar ativadas.
Deixe-me citar a entrada do bug no FreeBSD :
From my testing this is not a bug and everything is working as designed. I am seeing a large decrease in performance when LRO is turned on and using pfSense as a gateway. This is due to the originating packets having the IP DF (don’t fragment) flag set which then gets combined into larger packets via LRO. When this (larger) packet needs to be fragmented to match the other NIC the FreeBSD kernel sees the DF flag, drops the packet, and then sends back an ICMP “unreachable - need to frag” message to the sender. The reason it works at all is due to other traffic which disallows the LRO to occur and some packets get forwarded. One test I did was turning LRO on and using scp to put a file onto the pfSense appliance which resulted in good performance (not seeing the same drop in performance). I would be interested if you 1) see good performance with LRO turned on and scp a large file to the appliance and 2) see ICMP "need to frag" with LRO turned on and scp to a machine on the remote side. Since the pfSense appliance is being used as a gateway you should leave LRO turned off.