Настройка сетевых протоколов под macOS

12.03.2021 | Станции

Настройка сетевых протоколов под macOS. Entry

Дистрибуторы широкого профиля задвинули профессиональный рынок Apple в Украине на обочину. К нему потеряли интерес интеграторы. Пройдет немного времени  и компетенции уйдут вместе с носителями. Вырождающиеся популяции корпоративных пользователей  Apple и ее операционной системы macOS занимаются, как правило, видеопроизводством. Рабочие процессы телеканалов и студий подготовки видеоконтента строятся вокруг  систем хранения данных (СХД). Об оптимизации работы клиентов macOS с СХД и поговорим.

Сетевые протоколы

Основные протоколы сетевого доступа к СХД в macOS:  AFP, NFS, SMB и FTP. Уберем из рассмотрения лишнее. 

FTP не используется для совместной работы с аудио/видео данными. AFP, проприетарный протокол Apple, поддерживается редкими СХД. Сама Apple начиная с MacOS 10.9 не считает его протоколом доступа к файлам «по умолчанию». За туманностью перспектив вычеркиваем и его. NFS считался самым быстрым протоколом до появления macOS X. На сегодняшний день практически вытеснен из обихода более скоростным и эффективным SMB. На нем и остановимся.

План настроек SMB не слишком велик:

• Редактирование файла  /etc/sysctl.conf, включая различные параметры delayed_ack

 • Оптимизация в com.apple.desktopservices

DSDontWriteNetworkStores 

• Редактирование файла /etc/nsmb.conf 

SMB signing 

SMB session signing 

Directory caching 

SMB notifications

Force protocol version 

Alternate data streams (named Streams) 

Apple SMB extensions 

• Jumbo Frames 

• Увеличение объема буфера в network stack.

Редактирование файла  /etc/sysctl.conf

С помощью команды sysctl  командной строки CLI можно временно изменить некоторые важные для нас параметры. Для сохранения этих параметров после перезагрузки необходимо редактировать файл  /etc/sysctl.confЕсли файл отсутствует, создайте его в текстовом редакторе.

В этом файле нас в первую очередь интересует параметр delayed_ack. Не вдаваясь в природу отложенного подтверждения ТСР (энтузиасты ознакомятся по ссылке), скажем, что параметр может принимать значения:

  • delayed_ack=0: ответы после каждого пакета (OFF) 
  • delayed_ack=1: 6 пакетов получают 1 подтверждение
  • delayed_ack=2: 2 пакета на подтверждение
  • delayed_ack=3: 3пакета на подтверждение

В macOS по умолчанию delayed_ack=3. При рендеринге, когда клиент одновременно пишет и читает с массива, установка  delayed_ack=0 может привести к существенному приросту скорости обмена данными с массивом.

В определенных условиях могут быть уместны параметры delayed_ack=1 или delayed_ack=2. Экспериментируйте!

Команда запроса состояния параметра delayed_ack:

$ sudo sysctl -a net.inet.tcp.delayed_ack

Команда изменения  параметра delayed_ack:

$ sudo sysctl -w net.inet.tcp.delayed_ack=0

После того как подобрали оптимальный параметр под свои задачи, для перманентности:

  • Создаем или правим файл /etc/sysctl.conf
  • Добавляем строку  net.inet.tcp.delayed_ack=0

Оптимизация в com.apple.desktopservices

Везде, куда заглядывает  macOS Finder, он оставляет след – создает файл .DS_Store.  В нем содержатся метаданные о том, как отображать содержимое директории. Если в папке много файлов, запись и чтение в этот файл может существенно замедлять просмотр содержимого папок. В  macOS Sierra 10.12 и более ранних версиях вычитывается файл .DS_Store, сравнивается с содержимым директории и только после этого отображается. В macOS High Sierra 10.13 и более поздних версиях,  если папка отсортирована в алфавитном порядке – ее содержание отображается мгновенно, после этого вычитываются метаданные из файла .DS_Store и сравниваются с содержимым директории.

Команда defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool TRUE

В macOS 10.13 запрещает создание файла .DS_Store

В macOS 10.14 файл будет создаваться, но при просмотре директории не вычитывается, что значительно ускоряет просмотр папок с большим количеством файлов.

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

Редактирование файла /etc/nsmb.conf

Файл/etc/nsmb.conf является простым текстовым файлом, которые задает параметры общения клиента macOS с СХД посредством SMB и имеет вид:

[default] 

parameter=value 

parameter2=value2 

parameter3=value3

В  macOS версий с 10.11.5 по 10.13.3 по умолчанию включена опция SMB signing. Это значит, что к каждому пакету SMBприкреплена цифровая подпись, удостоверяющая, что на пути между клиентом и массивом злобные хакеры не подменили пакеты. Дополнительные накладные расходы, связанные с подписями к пакетам, значительно  снижают производительность СХД  и увеличивают задержки. Поскольку априори считаем, что наша творческая группа работает в защищенной сети, смело отключаем SMB signing, установив параметр в файле/etc/nsmb.conf

signing_required=no

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

В SMB3 в дополнение к SMB signing добавилась защита SMB сеанса от подделки в момент его начала - SMB signing. Поскольку мы в по-прежнему в защищенной сети, избавляемся от SMB signing:

validate_neg_off=yes 

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

Метаданные содержимого сетевых «шар» кешируются в macOS. Чем больше оперативной памяти в клиенте macOS  - тем больше метаданных закешируется. Это приводит к тому, что в рабочих группах, где часто добавляются/меняются файлы и изменения должны быть немедленно видимы всем участникам, такого не происходит. В macOS 10.13 и старше можно отключить кеширование метаданных:

dir_cache_off=yes

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

При определенных обстоятельствах может понадобиться принудительно подключать клиента macOS посредством определенной версии SMB. Это можно сделать добавлением в файл /etc/nsmb.conf строки protocol_vers_map= с определенным параметром:

# Protocol version is specified using binary bitmap 

# 1 => 0001 => SMB 1 only 

# 2 => 0010 => SMB 2 only 

# 3 => 0011 => SMB 1 or 2 

# 4 => 0100 => SMB 3 only

 # 6 => 0110 => SMB 2 or 3 # 

Для примера ограничимся только SMB 3: 

protocol_vers_map=4

Flow control, jumbo frames 

Использование jumbo кадров (9000 MTU) может значительно повысить производительность macOS SMB на сетевых соединениях шире 1 GbE. Однако для реализации jumbo-фреймов необходимо установить правильно этот параметр, как в настройках сетевой карты клиента, так и в соответствующих настройках коммутатора и СХД. Как правило, установка jumbo-фреймов на коммутаторе должна быть выше 9000 MTU (скажем 9,412 MTU или как рекомендуют в документации коммутатора).  При установке ровно 9000 MTU на коммутаторе очень часто происходит «подвисание» клиентов macOS при подключении к СХД.

После настройки MTU на клиенте нужно обратить внимание на Duplex: full-duplex, flow-control. Установка full-duplex with no flow-control однозначно приведет к плохой производительности, даже если на коммутаторе flow-control выключен. Правило простое: на коммутаторе flow-control включен, на клиентах full-duplex, flow-control.

 

Энтри об оптимизации работы клиентов macOS с СХД, протокол сети

Увеличение объема буфера в network stack

Увеличение объема памяти, выделяемого macOS для сетевой буферизации, может нарастить пропускную способность сетевых соединений. В зависимости от общего объема системной памяти и типа сетевого соединения могут быть установлены различные значения. 256 Мб/с является хорошей отправной точкой для 10 GbE и более скоростных соединений. В macOS 10.13+ объем буфера можно изменить, загрузившись в режиме восстановления и запустив в терминале команду

nvram boot-args="ncl=131072"

После перезагрузки новое значение буфера вступит в силу. Убедиться в корректности аргумента можно терминальной командой:

nvram –xp

Можно поэкспериментировать с бувером в o 512 MB (NCL = 262144)

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

nvram -d boot-args

“Опыт, сын ошибок трудных”

Сведения, приведенные  в заметке, проверены на практике. Пытайтесь это повторить.  Сделайте лучше. Хотя речь о «профессиональных трюках», вреда рабочей среде вы не нанесете. 

Автор просит снисхождения за подачу материала в знаковой форме, а не в виде чувственных образов.