Samba Read Performance
Всякий раз, когда я читаю большой файл с моего сервера Samba, я получаю скорость передачи около 40 МБ / с. Если я снова читаю тот же файл, скорость внезапно увеличивается до 70 МБ / с.
Почему я не получаю 70 МБ / с в первый раз? Диски легко выполняют до 95 МБ / с. Нужно ли Samba кэшировать весь файл в оперативной памяти, чтобы получить производительность или что-то в этом роде?
При записи файлов на сервер я получаю 95+ МБ / с каждый раз, большая разница.
Я попытался установить некоторые параметры сокетов (TCP_NODELAY IPTOS_LOWDELAY SO_SNDBUF=65535 SO_RCVBUF=65535), но, похоже, они мало помогают.
Итак, какие-нибудь советы о том, как улучшить производительность чтения в Samba?
Примечание. Диски Samsung Spinpoint F1 7200 RPM 2x1 ТБ, настроенные в программном RAID 1.
Обновление: кажется, что клиент имел столько же, если не больше, иметь отношение к этой проблеме, как сервер. Я использовал мой верный старый Total Commander, который кажется слишком старым в наши дни. Когда я копирую файлы, используя Windows Explorer, даже не кешированные файлы читаются довольно быстро. Спасибо за вашу помощь.
4 ответа
До сих пор все ответы больше относятся к дискам, чем к конфигурации RAID. Может быть, вам помогут вопросы 19 и 4 этого руководства: Software RAID HOWTO.
Другое дело, сторона сети. У вас включен ОО на вашей сетевой карте?
И последнее: вы проверили, что ваше узкое место не на стороне клиента? Возможно, ваш FTP-клиент хранит больше данных в оперативной памяти, чем служба CIFS. И это, возможно, одна из причин, почему FTP быстрее.
Прежде всего, эти параметры сокетов TCP были предназначены для ядер 2.4, а в списке рассылки Samba разработчики неоднократно заявляли, что они не имеют смысла для ядер 2.6.
Помимо этого что-то не так с вашими номерами здесь. Ни один из двух дисков SATA в конфигурации RAID1 (зеркальная) не даст вам скорости записи 95 МБ / с, и я очень сомневаюсь, что вы также увидите такую высокую скорость чтения. За исключением, может быть, на самой внешней дорожке диска. Как вы оцениваете свой том RAID? Имейте в виду, что dd не является эталоном файловой системы.
Гигабитные скорости также могут израсходовать значительное количество циклов ЦП, если вы используете сетевые адаптеры потребительского уровня. Так что, если у вас более медленный процессор в системе, не исключайте, что процессор будет бутылочным горлышком.
Также имейте в виду, что диски и процессор на сервере и клиенте должны поддерживать скорость, к которой вы стремитесь, поэтому не просто смотрите на сервер как на "горлышко бутылки", поскольку он просто как может быть на стороне клиента.
1. Попробуйте увеличить чтение
# /sbin/blockdev --getra /dev/sdb
256
# /sbin/blockdev --setra 16384 /dev/sdb
2. Попытайтесь изменить IO Scheduler и найдите тот, который лучше всего работает в вашей рабочей нагрузке.
# cat /sys/block/hda/queue/scheduler
noop [anticipatory] deadline cfq
echo deadline > /sys/block/hda/queue/scheduler
Кэширование диска Linux является причиной ускорения второго чтения, не говоря уже о возможном кешировании H/W диска.
Чтобы повысить производительность чтения: используйте чередование дисков, увеличьте объем ОЗУ, перейдите на следующий уровень аппаратного интерфейса с вашими дисками (замените SATA на SAS или FC4), используйте более быстрые диски (15 К / мин вместо 10 КБ), добавьте ОЗУ в кэш-память RAID.
Повышение скорости до 70 МБ / с будет дорогостоящим, но вы должны быть в состоянии улучшить скорость первого чтения.