Как улучшить скорость USB 3.0 в NAS на базе Proxmox и TrueNAS?
Я настроил домашний сервер с использованием Proxmox в качестве основной системы и TrueNAS в качестве виртуальной машины. У меня есть внешний HDD бокс с двумя дисками (8TB и 6TB), подключенный к мини-ПК через USB. При тестировании на Windows я получал скорость записи 150-180 МБ/с, что меня полностью устраивало.
В TrueNAS я создал пул из двух дисков, подключенных через USB. Трансляция фильмов через Jellyfin работает отлично, но при доступе к файлам по SMB я получаю очень низкую скорость - всего 10-30 МБ/с с устройств macOS и Windows.
Мои требования:
- Онлайн сервер для домашнего использования с общим пулом дисков
- Возможность транслировать фильмы на устройства в домашней сети (работает отлично)
- Доступ к файлам по 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 сигнала в виртуализированной среде.
Содержание
- Анализ проблемы и основные причины низкой скорости
- Оптимизация USB контроллера в Proxmox VM
- Настройка SMB в TrueNAS для максимальной производительности
- Оптимизация файловой системы и пула дисков
- Сетевая настройка и производительность
- Мониторинг и диагностика производительности
- Практические рекомендации и пошаговая инструкция
Анализ проблемы и основные причины низкой скорости
Низкая скорость SMB доступа к 10-30 МБ/с при ожидаемых 150-180 МБ/с указывает на несколько возможных проблем в вашей конфигурации. Прежде чем переходить к решениям, важно понять основные причины такого снижения производительности.
Основные факторы, влияющие на скорость USB 3.0 в виртуализированной среде:
- Эмуляция USB контроллера - Proxmox по умолчанию использует стандартную эмуляцию USB, что создает дополнительные накладные расходы
- Отсутствие прямого доступа к PCIe - без passthrough USB контроллер работает через виртуальный слой
- Некорректная настройка SMB параметров - стандартные настройки TrueNAS не всегда оптимальны для высоких скоростей
- Проблемы с файловой системой - ZFS может работать неоптимально без правильной настройки кэширования
- Сетевые ограничения - даже при хорошем оборудовании настройки сети могут создавать узкие места
Важно: Сравнение производительности между прямым доступом к диску в Windows (150-180 МБ/с) и доступом через TrueNAS VM (10-30 МБ/с) четко показывает, что проблема заключается именно в виртуализации и настройках, а не в самом оборудовании.
Оптимизация USB контроллера в Proxmox VM
Для достижения максимальной производительности USB 3.0 в виртуальной машине TrueNAS необходимо правильно настроить USB контроллер в Proxmox.
Настройка USB passthrough
Шаг 1: Определение USB контроллера
lsusb -t
Эта команда покажет иерархию USB устройств. Вам нужно найти корневой USB контроллер, к которому подключен ваш внешний HDD бокс.
Шаг 2: Добавление USB устройства в VM конфигурацию
Отредактируйте файл конфигурации виртуальной машины TrueNAS:
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:
nano /usr/local/etc/smb4.conf
Добавьте или измените следующие параметры:
[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 добавьте:
[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: Проверка текущих настроек пула
zpool get all storage_pool
Шаг 2: Оптимизация настроек для USB дисков
Для дисков USB 3.0 рекомендуется следующие параметры при создании пула:
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
Для существующего пула:
zpool set ashift=12 storage_pool
zpool set autotrim=on storage_pool
zpool set compression=lz4 storage_pool
Оптимизация кэширования и буферов
Шаг 3: Настройка кэша ZFS
# Размер 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
Примените изменения:
sysctl -f /etc/sysctl.conf
Настройка сетевого адаптера в VM
Шаг 2: Оптимализация сетевой карты в Proxmox
Для TrueNAS VM используйте virtio сетевой адаптер с правильными настройками:
# В конфигурации VM
args: -device virtio-net-pci,netdev=vmnet0,mac=52:54:00:12:34:56
Шаг 3: Настройка Jumbo Frames (если поддерживается)
Если все оборудование в сети поддерживает Jumbo Frames (9000 MTU):
# На TrueNAS
ifconfig igb0 mtu 9000
# На хосте Proxmox
ifconfig vmbr0 mtu 9000
Мониторинг и диагностика производительности
Для выявления узких мест и оптимизации производительности необходимо регулярно мониторить систему.
Инструменты мониторинга
Шаг 1: Мониторинг производительности ZFS
# Текущая статистика пула
zpool iostat -l 1
# Статистика ARC кэша
vmstat -m
# Статистика SMB
smbstatus -b
Шаг 2: Анализ производительности сети
# Мониторинг сетевой активности
netstat -i
# Анализ TCP соединений
tcpdump -i igb0 -n 'port 445'
# Тестирование скорости сети
iperf3 -c сервер_IP
Шаг 3: Логирование производительности
Включите расширенное логирование для диагностики:
# В smb.conf
[global]
log level = 2
syslog = 2
# В syslog.conf
local0.* /var/log/samba.log
Практические рекомендации и пошаговая инструкция
Комплексный план оптимизации
Шаг 1: Проверка базовой конфигурации
-
Убедитесь, что USB диски правильно определены в TrueNAS:
bashcamcontrol devlist
-
Проверьте статус пула:
bashzpool status zpool list
-
Протестируйте скорость напрямую через ZFS:
bashdd if=/dev/zero of=/mnt/storage_pool/testfile bs=1M count=1024 oflag=direct
Шаг 2: Оптимизация USB контроллера
-
Определите точный USB контроллер:
bashusbconfig dump_all_desc
-
Настройте passthrough в Proxmox VM конфигурации:
args: -device usb-host,bus=usb-bus.0,hostbus=1,hostaddr=1 -
Перезагрузите VM и проверьте доступность дисков.
Шаг 3: Оптимизация SMB и сети
- Примените оптимизированный smb.conf
- Настройте параметры ядра в sysctl.conf
- Проверьте сетевые настройки и при необходимости включите Jumbo Frames
- Перезагрузите систему для применения всех изменений
Шаг 4: Тестирование производительности
Используйте следующие команды для тестирования:
# Тест скорости чтения
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
Возможные проблемы и их решения
-
Если скорость остается низкой:
- Проверьте кабель USB (используйте короткий качественный кабель)
- Убедитесь, что диски работают в режиме UASP
- Попробуйте другой USB порт (лучше задний на материнской плате)
-
Если есть ошибки SMB:
- Проверьте логи:
tail -f /var/log/samba.log - Убедитесь, что антивирус не блокирует доступ
- Проверьте права доступа к файлам
- Проверьте логи:
-
Если система нестабильна:
- Уменьшите размер ARC кэша
- Отключите излишние функции SMB
- Проверьте температуру дисков
Заключение
Для достижения максимальной скорости USB 3.0 в вашей конфигурации Proxmox + TrueNAS необходимо комплексно подойти к оптимизации нескольких компонентов:
- Настройте USB passthrough в Proxmox для прямого доступа к контроллеру
- Оптимизируйте параметры SMB с расширенными настройками для высоких скоростей
- Настройте ZFS пул с правильными параметрами для USB дисков
- Оптимизируйте сеть с учетом специфики SMB протокола
- Регулярно мониторьте производительность для выявления узких мест
При правильной настройке вы сможете достичь скоростей 100-140 МБ/с по SMB, что соответствует ожидаемым показателям для USB 3.0 подключения. Ключевым фактором является обеспечение прямого доступа к USB оборудованию без эмуляции, что позволяет избежать значительных накладных расходов в виртуализированной среде.