Гигабитный сетевой интерфейс ограничен ЦП до 25 МБ / с. Как я могу максимизировать пропускную способность?
3853
netvope
У меня 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?
Предложение: Возможно, включение jumbo-кадров уменьшит накладные расходы и увеличит пропускную способность. http://superuser.com/questions/95546/why-do-i-only-get-300-400mbit-on-my-1000mbit-network/95563#95563
Chris W. Rea 14 лет назад
1
Спасибо, попробую. Я сделал эту Windows без эффектов, но теперь я понимаю, что не включал ее на других компьютерах. Я думаю, что для работы Jumbo Frame требуется поддержка с обоих концов.
netvope 14 лет назад
0
Для поддержки Jumbo-кадров определенно требуются оба конца (так называемый компьютер и коммутатор). Я сомневаюсь, что вы можете увеличить пропускную способность на этом оборудовании. Я предполагаю, что вам нужно будет заменить phy ethernet на лучший (например, с контрольной суммой hardare), что вряд ли возможно на этом оборудовании. (Скорее всего, это встроенный запаянный чип Ethernet, а не модуль pci.)
MacLemon 14 лет назад
0
3 ответа на вопрос
2
Eric
Похоже, сетевая карта имеет довольно маленький буфер и работает в режиме прерывания, вы можете увеличить пропускную способность, переключившись на опрос, если это поддерживается вашей сетевой картой и драйвером.
Тем не менее, проблема, вероятно, не может быть полностью решена без переключения на сетевую карту с большим буфером, что, вероятно, невозможно с этим оборудованием.
Благодарю. Как перейти в режим опроса?
netvope 14 лет назад
0
1
geek
Как я могу узнать, какой драйвер используется для eth0?
Проверка вывода dmesg может помочь.
Вот частный случай, который я получаю на этом компьютере, где я набираю ответ:
В некоторых случаях поддержка NIC встроена прямо в ядро (не как модуль). Так что по крайней мере он не появится в выводе lsmod .
Ницца! Я получил "Forcedeth: Reverse Engineered nForce ethernet драйвер. Версия 0.61."
netvope 14 лет назад
0
0
Lawrence Dol
Попробуйте использовать TCP Optimizer . Выбор оптимизированных рекомендаций последовательно увеличивает пропускную способность по сравнению с установочными настройками TCP по умолчанию.