На моем компьютере настроен сервер 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 - это в значительной степени заполнено.