3

У меня 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?

3 ответа3

2

Похоже, сетевая карта имеет довольно маленький буфер и работает в режиме прерывания, вы можете увеличить пропускную способность, переключившись на опрос, если это поддерживается вашей сетевой картой и драйвером.

Тем не менее, проблема, вероятно, не может быть полностью решена без переключения на сетевую карту с большим буфером, что, вероятно, невозможно с этим оборудованием.

1

Как я могу узнать, какой драйвер используется для eth0?

Проверка вывода dmesg может помочь.

Вот частный случай, который я получаю на этом компьютере, где я набираю ответ:

$ dmesg | grep ethernet
forcedeth: Reverse Engineered nForce ethernet driver. Version 0.62.

В некоторых случаях поддержка NIC встроена прямо в ядро (не как модуль). Так что по крайней мере он не появится в выводе lsmod.

0

Попробуйте использовать TCP Optimizer. Выбор оптимизированных рекомендаций последовательно увеличивает пропускную способность по сравнению с установочными настройками TCP по умолчанию.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .