Налаштування мережевих протоколів під macOS

12.03.2021 | Станції

Ентрі про налаштування мережевих протоколів під macOS

Дистриб'ютори широкого профілю посунули професійний ринок 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. Не вдаючись в природу відкладеного підтвердження TCP (ентузіасти ознайомляться за посиланням), скажімо, що параметр може приймати значення:
• delayed_ack = 0: відповіді після кожного пакета (OFF)
• delayed_ack = 1: 6 пакетів отримують 1 підтвердження
• delayed_ack = 2: 2 пакети на підтвердження
• delayed_ack = 3: 3 пакета на підтвердження

 

У macOS за замовчуванням delayed_ack = 3. При рендерiнгу, коли клієнт одночасно пише і читає з масиву, установка 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
 
"Досвід, син помилок важких"
Відомості, наведені в замітці, перевірені на практиці. Намагайтеся це повторити. Зробіть краще. Хоча мова про «професійнi трюки», шкоди робочому середовищу ви не завдасте.
Автор просить поблажливості за подачу матеріалу в знаковій формі, а не у вигляді чуттєвих образів.