- Вопрос или проблема
- Ответ или решение
- 1. Настройки Samba
- Удаление параметров aio read size и aio write size
- Корректировка других параметров
- 2. Конфигурация сети
- Проверка сетевых настроек
- Проверка использования сети и загруженности
- 3. RAID и файловая система
- Оцените производительность RAID
- Проверьте файловую систему
- 4. Мониторинг и анализ производительности
- Используйте iostat и vmstat
- Заключение
Вопрос или проблема
У меня есть мини-ПК (Intel Celeron J4005, 4 ГБ ОЗУ, Intel Gigabit NIC), настроенный следующим образом:
- Ubuntu (5.4.0-81-generic, установлен на sda)
- Samba (версия 4.11.6-Ubuntu)
- FTP (vsftpd, без шифрования)
- RAID5 (mdadm, md0: sdb-sdc-sdd, USB-SATA)
Массив RAID находится в общей доступности через Samba и FTP, но я хочу избавиться от FTP, так как все основные клиенты — это Windows машины. Проблема в том, что я получаю гораздо более низкие скорости через общий доступ Samba, чем через FTP:
Устройство | Метод | Скорость чтения (Мбайт/с, один большой файл) |
---|---|---|
md0 | локально | ~220 |
md0 | LAN, FTP | ~115 (ограничение сети) |
md0 | LAN, Samba | ~48 |
md0 | LAN, Samba, второй запуск (кэширован в памяти) | ~115 (ограничение сети) |
sda | LAN, Samba | ~115 (ограничение сети) |
Я пробовал с настройками Samba по умолчанию и с текущими (прилагаю ниже), но результат остался прежним. Я сбрасывал кэш между тестами.
Пример вывода iostat (LAN, Samba, первый запуск):
Устройство r/s rkB/s rrqm/s %rrqm r_await rareq-sz w/s wkB/s wrqm/s %wrqm w_await wareq-sz d/s dkB/s drqm/s %drqm d_await dareq-sz aqu-sz %util
md0 793.00 433408.00 0.00 0.00 0.00 546.54 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdb 254.00 16768.00 8.00 3.05 14.74 66.02 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 3.27 84.80
sdc 171.00 16896.00 93.00 35.23 2.99 98.81 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.32 60.80
sdd 161.00 16640.00 101.00 38.55 11.74 103.35 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 1.57 96.00
Пример вывода iostat (LAN, FTP, первый запуск):
Устройство r/s rkB/s rrqm/s %rrqm r_await rareq-sz w/s wkB/s wrqm/s %wrqm w_await wareq-sz d/s dkB/s drqm/s %drqm d_await dareq-sz aqu-sz %util
md0 1828.00 292480.00 0.00 0.00 0.00 160.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdb 458.00 39040.00 153.00 25.04 1.66 85.24 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.18 75.60
sdc 457.00 38976.00 152.00 24.96 1.45 85.29 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.09 70.40
sdd 457.00 38976.00 152.00 24.96 1.59 85.29 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.15 75.20
Я понятия не имею, в чем может быть проблема, может кто-то помочь мне или хотя бы подсказать, с чего начать расследование?
Конфигурация Samba:
[global]
workgroup = WORKGROUP
min protocol = SMB3
log level = 1
socket options = TCP_NODELAY SO_RCVBUF=65536 SO_SNDBUF=65536 IPTOS_LOWDELAY SO_KEEPALIVE
use sendfile = true
aio read size = 65536
aio write size = 65536
read raw = yes
write raw = yes
getwd cache = yes
acl allow execute always = true
log file = /var/log/samba/log.%m
max log size = 1000
logging = file
server role = standalone server
obey pam restrictions = yes
unix password sync = yes
passwd program = /usr/bin/passwd %u
passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
pam password change = yes
map to guest = bad user
[Share]
path = /media/hdd
writable = yes
valid users = myuser
directory mode = 0770
create mode = 0660
Конфигурация массива RAID:
/dev/md0:
Version : 1.2
Creation Time : Tue Sep 7 13:19:26 2021
Raid Level : raid5
Array Size : 976441344 (931.21 GiB 999.88 GB)
Used Dev Size : 488220672 (465.60 GiB 499.94 GB)
Raid Devices : 3
Total Devices : 3
Persistence : Superblock is persistent
Intent Bitmap : Internal
Update Time : Tue Sep 9 14:37:52 2021
State : clean
Active Devices : 3
Working Devices : 3
Failed Devices : 0
Spare Devices : 0
Layout : left-symmetric
Chunk Size : 64K
Consistency Policy : bitmap
Информация о файловой системе:
root@MiniPC:~# df -h
Файловая система Размер Использовано Доступно Использовано% Монтировано в
udev 1.8G 0 1.8G 0% /dev
tmpfs 371M 12M 360M 3% /run
/dev/sda2 58G 3.4G 55G 6% /
tmpfs 1.9G 12K 1.9G 1% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
tmpfs 500M 79M 422M 16% /var/cache/apt
tmpfs 500M 0 500M 0% /tmp
tmpfs 500M 0 500M 0% /var/backups
tmpfs 500M 2.2M 498M 1% /var/log
tmpfs 500M 0 500M 0% /var/tmp
/dev/sda1 511M 5.3M 506M 2% /boot/efi
/dev/md0 917G 356G 562G 39% /media/hdd
root@MiniPC:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 59.6G 0 disk
├─sda1 8:1 0 512M 0 part /boot/efi
└─sda2 8:2 0 59.1G 0 part /
sdb 8:16 0 465.7G 0 disk
└─sdb1 8:17 0 465.7G 0 part
└─md0 9:0 0 931.2G 0 raid5 /media/hdd
sdc 8:32 0 465.8G 0 disk
└─sdc1 8:33 0 465.8G 0 part
└─md0 9:0 0 931.2G 0 raid5 /media/hdd
sdd 8:48 0 465.8G 0 disk
└─sdd1 8:49 0 465.8G 0 part
└─md0 9:0 0 931.2G 0 raid5 /media/hdd
https://www.samba.org/samba/docs/current/man-html/smb.conf.5.html
aio read size (S)
Если этот целочисленный параметр установлен на ненулевое значение, Samba будет читать из файлов
асинхронно, когда размер запроса превышает это значение.
Обратите внимание, что это происходит только для нечтяжелых и нецепных чтений и когда
не используется кэш записи.
Единственными разумными значениями для этого параметра являются 0 (без асинхронного ввода/вывода) и 1 (всегда выполнять асинхронный ввод/вывод).
то же самое можно сказать и о параллельной записи
Я бы рекомендовал удалить эти два параметра из вашего smb.conf. Я никогда не использовал эти два в своем smb.conf.
У меня скорость чтения/записи 112 МБ/с в течение дня по проводу 1 Гбит/с к/от ПК с Windows 10, для справки вот моя глобальная секция smb.conf
[global]
workgroup = SAMBA
security = user
passdb backend = tdbsam
printing = bsd
printcap name = /dev/null
load printers = no
disable spoolss = yes
# cups options = raw
smb encrypt = required
client min protocol = SMB3
client max protocol = SMB3
в RHEL 7, профили настройки для справки
> tuned-adm list
Доступные профили:
- atomic-guest - Оптимизация виртуальных гостей на основе Atomic варианта
- atomic-host - Оптимизация bare metal систем, работающих на Atomic варианте
- balanced - Общий непрофилированный профиль
- cpu-partitioning - Оптимизация для разделения CPU
- default - Устаревший стандартный профиль
- desktop - Оптимизация для настольного использования
- desktop-powersave - Оптимизация для настольного использования с экономией энергии
- enterprise-storage - Устаревший профиль для RHEL6, для RHEL7 используйте профиль throughput-performance
- hpc-compute - Оптимизация для вычислительных задач HPC
- laptop-ac-powersave - Оптимизация для ноутбука с экономией энергии
- laptop-battery-powersave - Оптимизация профиля ноутбука с более агрессивной экономией энергии
- latency-performance - Оптимизация для детерминированной производительности за счет увеличенного потребления энергии
- mssql - Оптимизация для MS SQL Server
- network-latency - Оптимизация для детерминированной производительности за счет увеличенного потребления энергии, ориентированная на низкую задержку сети
- network-throughput - Оптимизация для потоковой передачи сетевого пропускания, обычно необходимая только на старых CPU или в сетях 40G+
- oracle - Оптимизация для Oracle RDBMS
- powersave - Оптимизация для низкого потребления энергии
- server-powersave - Оптимизация для экономии энергии серверов
- spindown-disk - Оптимизация для экономии энергии за счет остановки вращающихся дисков
- throughput-performance - Широко применимая настройка, обеспечивающая отличную производительность для различных распространенных серверных нагрузок
- virtual-guest - Оптимизация для работы внутри виртуального гостя
- virtual-host - Оптимизация для работы с KVM гостями
Текущий активный профиль: latency-performance
FTP невероятно быстрый и эффективный по сравнению с SMB при передаче больших файлов. С маленькими файлами могут возникнуть трудности, но в целом скорость передачи файлов по протоколу FTP лучше. Использование коротких сообщений в SMB делает его чувствительным к задержкам сети, что может снизить скорость.
Ответ или решение
Проблема низкой скорости передачи данных через Samba на вашем сервере, на фоне использования RAID5 может возникать из-за различных факторов, связанных как с конфигурацией сети, так и с настройками CIFS/Samba. Рассмотрим основные аспекты, которые вам стоит проверить и оптимизировать для улучшения производительности Samba.
1. Настройки Samba
Удаление параметров aio read size
и aio write size
Как вы правильно заметили, в конфигурации Samba используется асинхронный ввод-вывод (aio
). В большинстве случаев не рекомендуется использовать эти параметры. Попробуйте удалить строки:
aio read size = 65536
aio write size = 65536
После этого перезапустите Samba командой:
sudo systemctl restart smbd
Корректировка других параметров
Рассмотрите возможность изменения и других настроек, которые могут увеличить производительность Samba:
-
Увеличьте размер буферов. Замените
SO_RCVBUF
иSO_SNDBUF
на более высокие значения:socket options = TCP_NODELAY SO_RCVBUF=1048576 SO_SNDBUF=1048576 IPTOS_LOWDELAY SO_KEEPALIVE
-
Проверьте настройку
max protocol
. В вашем случае убедитесь, что установленоclient max protocol = SMB3
. -
Отключите
write raw
иread raw
. Хотя эти параметры могут сэкономить на затратах на процессор, они иногда могут ухудшать производительность на некоторых системах.
2. Конфигурация сети
Проверка сетевых настроек
Убедитесь, что ваша сеть правильно настроена. Используйте кабель Ethernet для соединения, чтобы избежать возможных проблем с Wi-Fi. Проверьте также настройки коммутаторов и маршрутизаторов:
- Проверьте MTU (Maximum Transmission Unit). Стандартный размер MTU – 1500 байт, но если ваша сеть поддерживает Jumbo Frames, попробуйте увеличить его до 9000 байт. Это может помочь при передаче больших файлов.
Проверка использования сети и загруженности
Используйте инструменты, такие как iperf
, для тестирования скорости сети между клиентом и сервером. Это поможет выявить, есть ли узкие места в сети, и определить, насколько хорошо ваши устройства могут обрабатывать трафик.
3. RAID и файловая система
Оцените производительность RAID
Хотя RAID5 предоставляет защищенность данных, он также имеет свои ограничения по скорости записи. Вы можете попробовать тестировать скорость RAID массива с помощью таких инструментов, как hdparm
или fio
. Обратите внимание на настройки кеширования RAID-контроллера (если используется).
Проверьте файловую систему
Если вы используете ext4 или другую файловую систему, проверьте ее настройки на наличие опций, которые могут улучшить производительность, например, убрать data=journal
, если вы можете позволить себе потерю данных в случае сбоя.
4. Мониторинг и анализ производительности
Используйте iostat
и vmstat
Вы уже используете iostat
– продолжайте следить за производительностью при передаче файлов через Samba. Также полезно следить за памятью и нагрузкой на CPU с помощью vmstat
.
Заключение
После внесения этих изменений, проведите тестирование скорости передачи данных снова. Если проблема все еще не решена, стоит рассмотреть возможность использования другой версии Samba или даже альтернативных протоколов, таких как NFS, который может предоставить лучшую производительность в определенных условиях.
Если ни один из вышеперечисленных методов не помогает, возможно, стоит рассмотреть вопрос о модернизации оборудования (например, добавление оперативной памяти или использование более производительных процессоров).