Назад | Перейти на главную страницу

Почему отправка данных тяжелее для ЦП, чем получение данных?

На моем компьютере настроен сервер Samba.

Когда другие ПК в локальной сети загружают данные с сервера, top команда показывает smbd занимает 75% ЦП. Пока они передают данные на сервер, top команда показывает smbd занимает 30% ЦП.

Я предполагаю, что это связано с тем, что для получения данных серверу не нужно вычислять заголовок или контрольную сумму.

Есть ли этому более точное объяснение?


Другой вопрос, почему smbd не занимает больше CPU?

Потому что соединение в моей локальной сети составляет 1 Гбит, а скорость в обоих направлениях достигает только 90 Мбит / с. Так почему не smbd требует больше процессора для достижения более высокой скорости. Во время получения результаты профилирования показывают, что у ЦП даже есть около 30% времени, и ему вообще нечего делать (default_idle ()).


@Mircea Vutcovici. Тестовый файл имеет размер .avi 690 МБ. Версия Samba - 3.0.24. Файловая система - FAT, и файл хранится на внешнем жестком диске USB2.0 (> 200 Мбит / с). Разгрузочного двигателя нет. ЦП большую часть времени проводит в пространстве ядра, например, smbd потребляет 75%, из которых около 40% потребляется сетевым стеком Linux. Sendfile активирован, но без поддержки SG, так что на самом деле это tcp_sendmsg вместо tcp_sendpage.

Это известная проблема с samba, загрузка процессора может быть довольно высокой, особенно когда samba должна искать файлы в больших папках, которых нет в ее кеше. Это также вызвано несколькими запущенными общими сетевыми ресурсами и процессами, которые потребляют время и ресурсы ЦП.

серверу не нужно вычислять заголовок или контрольную сумму.

На самом деле так и должно быть. Как еще можно проверить правильность контрольной суммы?

Потому что соединение в моей локальной сети составляет 1 Гбит, а скорость в обоих направлениях достигает только 90 Мбит / с.

Мбит или мегабайт. Если вы видите скорость в мегабайтах - как, например, в wnidows explorer - это в значительной степени заполнено.