Ускоряем работу samba по сети

Рассмотрим, как можно увеличить производительность работы демона samba по гигабитной сети.

Рассматриваемая среда:

  1. ОС: 8.2-PRERELEASE FreeBSD amd64 SMP
  2. CPU: AMD Athlon™ II Neo N36L Dual-Core Processor
  3. RAM: 1Гб
  4. NIC: HP NC107i PCIe Gigabit Server Adapter

Порядок действий

1. Собираем/пересобираем samba версии 3 (к примеру из порта /usr/ports/net/samba35) с поддержкой aio.

2. В /boot/loader.conf прописываем:

aio_load="YES"

3. В /etc/sysctls.conf прописал ряд параметров, которые в моем случае позволили значительно улучшить быстродействие по сети:

kern.ipc.maxsockbuf=16777216
kern.ipc.maxsockets=204800
kern.ipc.nmbclusters=32768
kern.ipc.somaxconn=32768
kern.maxfiles=256000
kern.maxfilesperproc=32768
kern.maxvnodes=800000
net.inet.tcp.delayed_ack=0
net.inet.tcp.inflight.enable=0
net.inet.tcp.path_mtu_discovery=0
net.inet.tcp.recvbuf_auto=1
net.inet.tcp.recvbuf_inc=524288
net.inet.tcp.recvbuf_max=16777216
net.inet.tcp.recvspace=65536
net.inet.tcp.rfc1323=1
net.inet.tcp.sendbuf_auto=1
net.inet.tcp.sendbuf_inc=524288
net.inet.tcp.sendspace=131072
net.inet.udp.maxdgram=57344
net.inet.tcp.recvspace=131072
net.local.stream.recvspace=65536
net.local.stream.sendspace=65535
net.inet.tcp.sendbuf_max=16777216
net.inet.tcp.mssdflt=1460

4. В /usr/local/etc/smb.conf дописал:

socket options=SO_RCVBUF=131072 SO_SNDBUF=131072 TCP_NODELAY
#socket options = SO_RCVBUF=65536 SO_SNDBUF=65536
#socket options = TCP_NODELAY IPTOS_LOWDELAY SO_KEEPALIVE
#socket options=TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=8192 SO_SNDBUF=8192
min receivefile size=16384
use sendfile=true
##aio read size = 16384
##aio read size = 65536
aio write size = 16384
#aio write size = 65536
aio write behind = true

Закоментировал параметры, которые снижали производительность. Теперь странное: aio read size вызывало большую проблему: невозможно было скопировать любой файл с smb ресурса - просто ошибка копирования - недостаточно прав.

5. Перегружаемся. Копируем/читаем файлы с smb ресурса, параллельно смотрим загрузку жесткого диска gstat'ом. В моем случае производительность зависела от моделей гигабитных сетевых карт на клиентах. Самый успешный клиент имел скорость записи на smb ресурс порядка 55 Мбайт/сек, при этом скорость загрузки HDD доходила до 100% (на сервере smb стоит не самый производительный жесткий диск).

6. Настройки smb.conf:

[global]

smb ports = 445 139

workgroup = WORKGROUP
netbios name = NAS

security = share
hosts allow = 192.168.1.

log file = /var/log/samba/log.%m
max log size = 5000

local master = yes 
os level = 65
domain master = yes
preferred master = yes
wins support = yes
dns proxy = no

dos charset = cp1251
unix charset = cp1251
#unix charset = UTF-8
display charset = cp1251

store dos attributes = yes

nt acl support = yes
inherit acls = yes
map acl inherit = yes

# BDS for improve performance
socket options=SO_RCVBUF=131072 SO_SNDBUF=131072 TCP_NODELAY
#socket options = SO_RCVBUF=65536 SO_SNDBUF=65536
#socket options = TCP_NODELAY IPTOS_LOWDELAY SO_KEEPALIVE
#socket options=TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=8192 SO_SNDBUF=8192
min receivefile size=16384
use sendfile=true
##aio read size = 16384
##aio read size = 65536
aio write size = 16384
#aio write size = 65536
aio write behind = true

#============================ Share Definitions ==============================

[install]
path = /var/install
public = yes
writable = yes
printable = no
guest ok = yes

TAG: