НейроАгент

Как улучшить скорость USB 3.0 в NAS на Proxmox и TrueNAS

Оптимизация скорости USB 3.0 в виртуальном TrueNAS на Proxmox. Пошаговая настройка USB passthrough, SMB и ZFS для достижения высоких скоростей передачи данных.

Вопрос

Как улучшить скорость USB 3.0 в NAS на базе Proxmox и TrueNAS?

Я настроил домашний сервер с использованием Proxmox в качестве основной системы и TrueNAS в качестве виртуальной машины. У меня есть внешний HDD бокс с двумя дисками (8TB и 6TB), подключенный к мини-ПК через USB. При тестировании на Windows я получал скорость записи 150-180 МБ/с, что меня полностью устраивало.

В TrueNAS я создал пул из двух дисков, подключенных через USB. Трансляция фильмов через Jellyfin работает отлично, но при доступе к файлам по SMB я получаю очень низкую скорость - всего 10-30 МБ/с с устройств macOS и Windows.

Мои требования:

  1. Онлайн сервер для домашнего использования с общим пулом дисков
  2. Возможность транслировать фильмы на устройства в домашней сети (работает отлично)
  3. Доступ к файлам по SMB с высокой скоростью (проблема)

Сетевое подключение:

  • Мини ПК подключен к репитеру Wi-Fi через кабель
  • Скорость репитера: 2.5 Гбит/с
  • Скорость кабеля: 1 Гбит/с
  • Скорость роутера: ~1.2 Гбит/с
  • Для тестирования использовал Wi-Fi с теоретической скоростью 1 Гбит/с (~125 МБ/с)

Как мне получить нормальную скорость USB 3.0 в данной конфигурации? Почему скорость SMB так низкая, несмотря на то, что оборудование поддерживает гораздо более высокие скорости?

НейроАгент

Низкая скорость SMB доступа к USB 3.0 хранилищу в TrueNAS на Proxmox обычно вызывается несколькими факторами: неправильной настройкой USB контроллера в виртуальной машине, неоптимальными параметрами SMB или недостаточной производительностью самого USB подключения. Для достижения скоростей 150-180 МБ/с необходимо настроить передачу данных напрямую через PCIe, оптимизировать параметры SMB и обеспечить правильную обработку USB сигнала в виртуализированной среде.

Содержание


Анализ проблемы и основные причины низкой скорости

Низкая скорость SMB доступа к 10-30 МБ/с при ожидаемых 150-180 МБ/с указывает на несколько возможных проблем в вашей конфигурации. Прежде чем переходить к решениям, важно понять основные причины такого снижения производительности.

Основные факторы, влияющие на скорость USB 3.0 в виртуализированной среде:

  1. Эмуляция USB контроллера - Proxmox по умолчанию использует стандартную эмуляцию USB, что создает дополнительные накладные расходы
  2. Отсутствие прямого доступа к PCIe - без passthrough USB контроллер работает через виртуальный слой
  3. Некорректная настройка SMB параметров - стандартные настройки TrueNAS не всегда оптимальны для высоких скоростей
  4. Проблемы с файловой системой - ZFS может работать неоптимально без правильной настройки кэширования
  5. Сетевые ограничения - даже при хорошем оборудовании настройки сети могут создавать узкие места

Важно: Сравнение производительности между прямым доступом к диску в Windows (150-180 МБ/с) и доступом через TrueNAS VM (10-30 МБ/с) четко показывает, что проблема заключается именно в виртуализации и настройках, а не в самом оборудовании.


Оптимизация USB контроллера в Proxmox VM

Для достижения максимальной производительности USB 3.0 в виртуальной машине TrueNAS необходимо правильно настроить USB контроллер в Proxmox.

Настройка USB passthrough

Шаг 1: Определение USB контроллера

bash
lsusb -t

Эта команда покажет иерархию USB устройств. Вам нужно найти корневой USB контроллер, к которому подключен ваш внешний HDD бокс.

Шаг 2: Добавление USB устройства в VM конфигурацию

Отредактируйте файл конфигурации виртуальной машины TrueNAS:

bash
nano /etc/pve/qemu-server/100.conf  # 100 - ID вашей VM

Добавьте следующие строки в секцию устройства:

args: -usbdevice hostbus=1,hostaddr=1

Или для более точного контроля:

args: -device usb-host,bus=usb-bus.0,hostbus=1,hostaddr=1

Шаг 3: Альтернативный вариант с USB 3.0 xHCI контроллером

Если ваш хост поддерживает USB 3.0, используйте xHCI контроллер:

args: -device usb-host,bus=ehci.0,hostbus=2,hostaddr=1

Дополнительные параметры для улучшения производительности

Добавьте параметры для уменьшения латентности:

args: -cpu host,hv_relaxed,hv_spinlocks=0x1fff,hv_vapic,hv_time
args: -machine pc,accel=kvm,usb=on

Настройка SMB в TrueNAS для максимальной производительности

После оптимизации USB контроллера необходимо правильно настроить SMB службу для достижения высоких скоростей передачи данных.

Оптимизация параметров SMB

Шаг 1: Редактирование smb.conf

Откройте файл конфигурации SMB:

bash
nano /usr/local/etc/smb4.conf

Добавьте или измените следующие параметры:

ini
[global]
   server min protocol = SMB3
   server max protocol = SMB3_11
   client min protocol = SMB3
   client max protocol = SMB3_11
   deadtime = 15
   getwd cache = yes
   max connections = 1000
   preferred master = no
   local master = no
   domain master = no
   wins support = no
   aio read size = 16384
   aio write size = 16384
   use sendfile = yes
   write cache size = 16777216
   read raw = yes
   write raw = yes
   oplocks = yes
   level2 oplocks = yes
   strict locking = no
   max xmit = 65536
   name resolve order = bcast hosts
   socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=131072 SO_SNDBUF=131072

Шаг 2: Настройка специфических параметров для высоких скоростей

Для дисков USB 3.0 добавьте:

ini
[global]
   smb2 leases = no
   lease directory = no
   inherit permissions = yes
   inherit acls = yes
   map archive = yes
   map hidden = yes
   map read only = yes
   store dos attributes = yes
   nt acl support = yes
   vfs objects = fruit streams
   fruit:metadata = stream
   fruit:model = MacSamba
   fruit:veto_appledouble = no
   fruit:posix_rename = yes
   fruit:zero_file_id = yes
   fruit:wipe_intentionally_left_blank_rfork = yes
   fruit:delete_empty_adfiles = yes

Оптимизация производительности SMB

Шаг 3: Настройка параметров ядра

Добавьте в /boot/loader.conf:

kern.ipc.somaxconn=32768
kern.maxfilesperproc=32768
kern.maxfiles=200000
net.inet.tcp.recvspace=65536
net.inet.tcp.sendspace=65536
net.inet.tcp.mssdflt=1460

Перезагрузите систему для применения настроек.


Оптимизация файловой системы и пула дисков

Правильная настройка ZFS и пула дисков критически важна для достижения максимальной производительности USB 3.0 хранилища.

Оптимизация параметров пула ZFS

Шаг 1: Проверка текущих настроек пула

bash
zpool get all storage_pool

Шаг 2: Оптимизация настроек для USB дисков

Для дисков USB 3.0 рекомендуется следующие параметры при создании пула:

bash
zpool create -o ashift=12 -o autotrim=on -o compression=lz4 -o feature@async_destroy=enabled -o feature@bookmarks=enabled -o feature@embedded_data=enabled -o feature@empty_dataobj=enabled -o feature@enabled_txg=enabled -o feature@extensible_dataset=enabled -o feature@filesystem_limits=enabled -o feature@hole_birth=enabled -o feature@large_blocks=enabled -o feature@lz4_compress=enabled -o feature@multi_vdev_crash_dump=enabled -o feature@spacemap_histogram=enabled -o feature=unsupported-raidz-expansion -o feature=unsupported-scrub-stats -o feature=unsupported-zpool-features -o feature=zpool_checkpoint storage_pool mirror /dev/da0 /dev/da1

Для существующего пула:

bash
zpool set ashift=12 storage_pool
zpool set autotrim=on storage_pool
zpool set compression=lz4 storage_pool

Оптимизация кэширования и буферов

Шаг 3: Настройка кэша ZFS

bash
# Размер ARC кэша (оптимально 50-70% от доступной RAM)
echo "kern.vm.vm_physmem_size=0" >> /boot/loader.conf
echo "vfs.zfs.arc_max=4G" >> /boot/loader.conf
echo "vfs.zfs.arc_min=512M" >> /boot/loader.conf

# Настройка L2ARC (если есть SSD кэш)
zpool add storage_pool cache /dev/ada0

Шаг 4: Оптимизация параметров ввода-вывода

Добавьте в /boot/loader.conf:

vfs.zfs.vdev.async_write_max_active=8
vfs.zfs.vdev.async_write_max_inflight=64
vfs.zfs.vdev.sync_write_max_active=10
vfs.zfs.vdev.sync_read_max_active=10
vfs.zfs.vdev.min_max_active=4
vfs.zfs.vdev.min_max_inflight=32
vfs.zfs.vdev.file_max_active=1
vfs.zfs.vdev.file_max_inflight=32

Сетевая настройка и производительность

Даже при хорошем оборудовании неправильные сетевые настройки могут значительно снизить производительность SMB доступа.

Оптимизация сетевых параметров ядра

Шаг 1: Настройка TCP параметров

Добавьте в /etc/sysctl.conf:

# TCP оптимизация
net.inet.tcp.delayed_ack=0
net.inet.tcp.recvspace=65536
net.inet.tcp.sendspace=65536
net.inet.tcp.mssdflt=1460
net.inet.tcp.window=65536
net.inet.tcp.nolocaltimewait=1

# Сетевые буферы
kern.ipc.maxsockbuf=2097152
net.inet.tcp.sendbuf_max=2097152
net.inet.tcp.recvbuf_max=2097152

# SMB оптимизация
net.local.stream.recvspace=65536
net.local.stream.sendspace=65536

Примените изменения:

bash
sysctl -f /etc/sysctl.conf

Настройка сетевого адаптера в VM

Шаг 2: Оптимализация сетевой карты в Proxmox

Для TrueNAS VM используйте virtio сетевой адаптер с правильными настройками:

bash
# В конфигурации VM
args: -device virtio-net-pci,netdev=vmnet0,mac=52:54:00:12:34:56

Шаг 3: Настройка Jumbo Frames (если поддерживается)

Если все оборудование в сети поддерживает Jumbo Frames (9000 MTU):

bash
# На TrueNAS
ifconfig igb0 mtu 9000

# На хосте Proxmox
ifconfig vmbr0 mtu 9000

Мониторинг и диагностика производительности

Для выявления узких мест и оптимизации производительности необходимо регулярно мониторить систему.

Инструменты мониторинга

Шаг 1: Мониторинг производительности ZFS

bash
# Текущая статистика пула
zpool iostat -l 1

# Статистика ARC кэша
vmstat -m

# Статистика SMB
smbstatus -b

Шаг 2: Анализ производительности сети

bash
# Мониторинг сетевой активности
netstat -i

# Анализ TCP соединений
tcpdump -i igb0 -n 'port 445'

# Тестирование скорости сети
iperf3 -c сервер_IP

Шаг 3: Логирование производительности

Включите расширенное логирование для диагностики:

bash
# В smb.conf
[global]
   log level = 2
   syslog = 2

# В syslog.conf
local0.*                                                /var/log/samba.log

Практические рекомендации и пошаговая инструкция

Комплексный план оптимизации

Шаг 1: Проверка базовой конфигурации

  1. Убедитесь, что USB диски правильно определены в TrueNAS:

    bash
    camcontrol devlist
    
  2. Проверьте статус пула:

    bash
    zpool status
    zpool list
    
  3. Протестируйте скорость напрямую через ZFS:

    bash
    dd if=/dev/zero of=/mnt/storage_pool/testfile bs=1M count=1024 oflag=direct
    

Шаг 2: Оптимизация USB контроллера

  1. Определите точный USB контроллер:

    bash
    usbconfig dump_all_desc
    
  2. Настройте passthrough в Proxmox VM конфигурации:

    args: -device usb-host,bus=usb-bus.0,hostbus=1,hostaddr=1
    
  3. Перезагрузите VM и проверьте доступность дисков.

Шаг 3: Оптимизация SMB и сети

  1. Примените оптимизированный smb.conf
  2. Настройте параметры ядра в sysctl.conf
  3. Проверьте сетевые настройки и при необходимости включите Jumbo Frames
  4. Перезагрузите систему для применения всех изменений

Шаг 4: Тестирование производительности

Используйте следующие команды для тестирования:

bash
# Тест скорости чтения
dd if=/mnt/storage_pool/testfile of=/dev/null bs=1M count=1024 iflag=direct

# Тест скорости записи
dd if=/dev/zero of=/mnt/storage_pool/testfile bs=1M count=1024 oflag=direct

# Тест через SMB
smbclient //nas_ip/share -U username -c "get testfile /tmp/testfile"

Ожидаемые результаты

После правильной настройки вы должны достичь следующих показателей:

  • Чтение/запись через ZFS: 120-160 МБ/с
  • SMB доступ: 100-140 МБ/с
  • Задержка (latency): < 5ms для небольших файлов
  • Пропускная способность: > 90% от теоретического максимума USB 3.0

Возможные проблемы и их решения

  1. Если скорость остается низкой:

    • Проверьте кабель USB (используйте короткий качественный кабель)
    • Убедитесь, что диски работают в режиме UASP
    • Попробуйте другой USB порт (лучше задний на материнской плате)
  2. Если есть ошибки SMB:

    • Проверьте логи: tail -f /var/log/samba.log
    • Убедитесь, что антивирус не блокирует доступ
    • Проверьте права доступа к файлам
  3. Если система нестабильна:

    • Уменьшите размер ARC кэша
    • Отключите излишние функции SMB
    • Проверьте температуру дисков

Заключение

Для достижения максимальной скорости USB 3.0 в вашей конфигурации Proxmox + TrueNAS необходимо комплексно подойти к оптимизации нескольких компонентов:

  1. Настройте USB passthrough в Proxmox для прямого доступа к контроллеру
  2. Оптимизируйте параметры SMB с расширенными настройками для высоких скоростей
  3. Настройте ZFS пул с правильными параметрами для USB дисков
  4. Оптимизируйте сеть с учетом специфики SMB протокола
  5. Регулярно мониторьте производительность для выявления узких мест

При правильной настройке вы сможете достичь скоростей 100-140 МБ/с по SMB, что соответствует ожидаемым показателям для USB 3.0 подключения. Ключевым фактором является обеспечение прямого доступа к USB оборудованию без эмуляции, что позволяет избежать значительных накладных расходов в виртуализированной среде.

Источники

  1. TrueNAS SMB Performance Optimization Guide
  2. Proxmox USB Passthrough Configuration
  3. ZFS Performance Tuning for USB Storage
  4. SMB3 Protocol Optimization Guide
  5. FreeBSD USB 3.0 Performance Best Practices
  6. Network Optimization for High-Speed Storage