У меня Acer Aspire R1600-U910H с гигабитным сетевым адаптером nForce. Максимальная пропускная способность TCP составляет около 25 МБ / с, и, по-видимому, она ограничена одноядерным процессором Intel Atom 230; при достижении максимальной пропускной способности загрузка ЦП составляет около 50% -60%, что соответствует полной загрузке, учитывая, что это ЦП с поддержкой гиперпоточности.
Та же проблема возникает как в Windows XP, так и в Ubuntu 8.04. В Windows я установил последнюю версию драйвера чипсета nForce, отключил функции энергосбережения и включил разгрузку контрольной суммы. В Linux для драйвера по умолчанию включена разгрузка контрольной суммы. На сайте Nvidia нет драйвера для Linux.
ethtool -k eth0
показывает, что разгрузка контрольной суммы включена:
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
Ниже приведен вывод powertop
когда сеть не используется:
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)
И когда достигается максимальная пропускная способность около 25 МБ / с:
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)
Обратите внимание на 20000 прерываний в секунду. Может ли это быть причиной высокой загрузки процессора и низкой пропускной способности? Если так, как я могу улучшить ситуацию?
Как справка, другие компьютеры в сети обычно могут передавать со скоростью 50+ МБ / с без проблем. Компьютер с процессором Core 2 генерирует только 5000 прерываний в секунду при скорости передачи 110 МБ / с. Количество прерываний примерно в 20 раз меньше, чем у системы Atom (если прерывания масштабируются линейно с пропускной способностью.)
Может ли увеличение размера окна TCP решить проблему? Это общая настройка в ОС или приложение?
И небольшой вопрос: как я могу узнать, какой драйвер используется для eth0?