Eu tenho um Acer Aspire R1600-U910H com um adaptador de rede nForce gigabit. O throughput máximo do TCP é de cerca de 25MB / s, e aparentemente é limitado pelo Intel Atom 230 de núcleo único; quando o throughput máximo é atingido, o uso da CPU é de cerca de 50% -60%, o que corresponde à utilização total, considerando que esta é uma CPU habilitada para Hyper-threading.
O mesmo problema ocorre no Windows XP e no Ubuntu 8.04. No Windows, instalei o driver mais recente do chipset nForce, desativei recursos de economia de energia e realizei o descarregamento da soma de verificação. No Linux, o driver padrão possui o descarregamento de checksum ativado. Não há nenhum driver Linux disponível no site da Nvidia.
ethtool -k eth0
mostra que o descarregamento da soma de verificação está ativado:
Offload parameters for eth0:
rx-checksumming: on
tx-checksumming: on
scatter-gather: on
tcp segmentation offload: on
udp fragmentation offload: off
generic segmentation offload: off
O seguinte é a saída de powertop
quando a rede está inativa:
Wakeups-from-idle per second : 61.9 interval: 10.0s
no ACPI power usage estimate available
Top causes for wakeups:
90.9% (101.3) <interrupt> : eth0
4.5% ( 5.0) iftop : schedule_timeout (process_timeout)
1.8% ( 2.0) <kernel core> : clocksource_register (clocksource_watchdog)
0.9% ( 1.0) dhcdbd : schedule_timeout (process_timeout)
0.5% ( 0.6) <kernel core> : neigh_table_init_no_netlink (neigh_periodic_timer)
E quando a taxa de transferência máxima de cerca de 25MB / s é atingida:
Wakeups-from-idle per second : 11175.5 interval: 10.0s
no ACPI power usage estimate available
Top causes for wakeups:
99.9% (22097.4) <interrupt> : eth0
0.0% ( 5.0) iftop : schedule_timeout (process_timeout)
0.0% ( 2.0) <kernel core> : clocksource_register (clocksource_watchdog)
0.0% ( 1.0) dhcdbd : schedule_timeout (process_timeout)
0.0% ( 0.6) <kernel core> : neigh_table_init_no_netlink (neigh_periodic_timer)
Observe as 20000 interrupções por segundo. Isso poderia ser a causa do alto uso da CPU e da baixa taxa de transferência? Se sim, como posso melhorar a situação?
Como referência, os outros computadores na rede geralmente podem transferir a 50 + MB / s sem problemas. Um computador com uma CPU Core 2 gera apenas 5000 interrupções por segundo quando está transferindo a 110MB / s. O número de interrupções é cerca de 20 vezes menor do que o sistema Atom (se as interrupções escalarem linearmente com a taxa de transferência).
O aumento do tamanho da janela TCP resolve o problema? É uma configuração geral no sistema operacional ou específica do aplicativo?
E uma pergunta menor: Como posso descobrir qual é o driver em uso para eth0?