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 МБ / с будет дорогостоящим, но вы должны быть в состоянии улучшить скорость первого чтения.

Другие вопросы по тегам