Почему червоточина? При растягивании сети длиной пакета расстояние между точками уменьшается :)
Речь пойдёт об Jumbo Frames и MTU
С MTU вроде как всё понятно, в большинстве случаев для Ethernet он = 1500 - это максимальный размер блока, который может быть передан на канальном уровне сетевой модели OSI. А может MTU=1518? На этом я не буду заморачиваться, так как имею строгое намерение использовать Jumbo Frames.
Для гигабитной локалки размер пакета явно маловат. Да и много ли коллизий при прямом подключении двух точек, как в моём случае?
Вообще, максимальный JF, имеет смысл = 12000. На этой цифре заканчивается эффективность CRC32, применяемая в Ethernet. Мне проще, в WinXP в драйверах для моей сетевухи в выпадающем боксе максимальным является 7KБ MTU. Для ручной настройки MTU в WinXP можно воспользоваться этой вот инструкцией, рассказывающей про параметр в реестре:
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\Tcpip\Parameters\Interfaces\{NIC_Name}] "MTU"=dword:00001b58 (7000)Но скольким именно ровняется "7КБ" в WinXP? Это 7000 или 7168? Это желательно знать в точности, так как в FreeNAS размер MTU устанавливается конкретной цифрой.
На самом деле, Jumbo Frames - это пакеты Ethernet, которые в шесть раз больше чем обычные 1500 байтов + заголовок Ethernet (9108 байтов) (источник). Но мы пока ограничимся поддерживаемыми сетевой картой 7КБ.
Не смотря на то, что в FreeNAS можно указать MTU в веб-морде приведу на всякий случай способ установки ручками:
Для кратковременного использования (до перезагрузки):
# ifconfig em1 10.20.110.2 mtu 7000
Для постоянного использования JF редактируем конфигурационный файл:
/etc/rc.conf
И редактируем следующую строку:
ifconfig_em1="inet x.x.x.x netmask y.y.y.y media 1000baseTX mediaopt full-duplex mtu 7000"
Сохраняем файл и перезапускаем сетевой интерфейс:
# /etc/rc.d/netif restart
В этот фрейм (7000), конечно, сектор UFS2 в 4Кб влезет, но буфер в SMB/CIFS по умолчанию больше. Поэтому у меня лично нет идей по согласованию размеров сектора файловой системы, буфера SMB/CIFS, буфера TCP и размера MTU. Всё будет дробиться и клеиться в рамках стека протоколов. Но уверен, что поиграться с некоторыми параметрами стоит!
UFS2 = 4096
SMB = 64240
TCP = 262144
MTU = 7000
sysctls
1. Размеры буферов TCP:
net.inet.tcp.sendspace = 262144
net.inet.tcp.recvspace = 262144
Полагаю, что размер буфера SMB/CIFS целесообразно делать меньше этого значения. И правда, значение по умолчанию во FreeNAS = 64240, что в ~4 раза меньше.
Кстати, статистика использования сетевых буферов:
netstat -m2. Размер очереди, принимающей входящие подключения TCP.
kern.ipc.somaxconn = 8192При превышении очереди запросы будут отброшены. В моём сервере наврятли будет такая нагрузка.
3. Максимальное количество одновременно открытых дескрипторов файлов:
kern.maxfiles = 655364. Опрос NIC вместо использования прерываний - Polling. Тут эффективность 50/50 или 1/0 - надо эксперементировать.
5. Samba. Так как мы предполагаем низкие потери пакетов и минимум коллизий, то отключаем алгоритм Nagle, позволяющий находиться в сети только одному неподтвержденному пакету. Редактируем smb.conf:
socket options = IPTOS_LOWDELAY TCP_NODELAY
Комментариев нет:
Отправить комментарий