Медленная скорость передачи через Samba с использованием программного RAID

Вопрос или проблема

У меня есть мини-ПК (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 делает его чувствительным к задержкам сети, что может снизить скорость.

Источник: https://cloudinfrastructureservices.co.uk/ftp-vs-smb-whats-the-difference-performance-speed-security/#:~:text=FTP%20is%20extremely%20fast%20and,which%20can%20decrease%20the%20speed.

Ответ или решение

Проблема низкой скорости передачи данных через 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, который может предоставить лучшую производительность в определенных условиях.

Если ни один из вышеперечисленных методов не помогает, возможно, стоит рассмотреть вопрос о модернизации оборудования (например, добавление оперативной памяти или использование более производительных процессоров).

Оцените материал
Добавить комментарий

Капча загружается...