Производительность 21 апреля 2026 г.

2026: SSH с macOS при большом RTT — IPQoS, сжатие и шифры, прежде чем винить облачный Mac mini

Инженерная команда ProxyMac 21 апреля 2026 г. ~12 мин чтения

Разработчики, арендующие Mac mini ProxyMac в Гонконге, Японии, Корее, Сингапуре или США, часто видят круговую задержку (RTT) 120–220 мс с европейского или западноамериканского ноутбука — и сразу подозревают «битый» CPU в облаке. В инцидентах, которые мы разбираем, больше половины тикетов «медленный SSH» закрываются только на стороне клиента OpenSSH в macOS: правка меток IPQoS, переключение сжатия, явный выбор AEAD-шифров и настройка ServerAlive до любой перепрошивки железа. В этом гайде — чеклист симптомов, три базовые метрики для вставки в постмортемы, матрица из четырёх рядов (без конфликта с MTU и планом регионов), рецепт из семи шагов для ~/.ssh/config и явные стоп-критерии, чтобы не провести выходные за микрооптимизацией шифров, пока настоящий враг — чёрная дыра PMTUD.

Вы также поймёте, когда эскалировать к выбору узла между регионами, а когда дополнять этот материал рецептами из справочного центра и сравнивать региональные SKU для следующего пилота.

Кто чувствует боль — и что значит «медленно»

Большой RTT не отменяет скорость света; он увеличивает число оконных круговых задержек до обратной связи для человека. Интерактивные оболочки страдают при RTT свыше ~150 мс: каждое обновление строкового редактора ждёт ACK, если клиент не конвейеризует агрессивно. scp многогигабайтных архивов Xcode болит, когда однопоточный TCP не заполняет канал — часто это стек клиента, а не SSD на mini. Screen Sharing усугубляет всё, но здесь фокус на OpenSSH 9.x в macOS 15 и стандартном sshd на арендованной машине.

  • Лаг клавиш при «ровном» ping: типичный признак ожидания планировщика каналов SSH, а не ICMP — важны IPQoS и загрузка CPU на шифрах.
  • Пропускная способность рушится после первого мегабайта: часто сжатие борется с уже сжатыми данными или bufferbloat на домашнем Wi‑Fi — не в ЦОДе.
  • Обрывы ночью только на простаивающих вкладках: бытовые CPE сбрасывают NAT каждые 20–45 минут; без keepalive сервер думает, что сессия жива, а UI клиента уже замёрз.

Три цифры, которые должны попасть в любую записку по инциденту

Перед правкой конфигов вставьте это в чат, чтобы финансы коррелировали всплески с географией, а не с ощущениями.

МетрикаКак снятьЗдоровый ориентир к ближайшему узлу ProxyMac
ICMP RTT p95ping -c 50 host и смотреть хвост8–35 мс внутри APAC, 140–190 мс EU→US (ожидаемо, не дефект)
Однопоточный goodput SCPscp -v large.bin host:~/Выше 35 % от заявленной скорости скачивания домашнего ISP на неконгестированном Wi‑Fi; ниже — смотреть эфир Wi‑Fi или MTU
Время рукопожатия SSHtime ssh -G host | head -1 плюс настенные часы до первого приглашения оболочкиПервая оболочка быстрее 2,5× RTT после кэша host key; дольше — DNS или перегруз KEX
Если SCP «висит», а ping ровный: остановитесь и прочитайте MTU и PMTUD для зависаний SSH — кручение Ciphers не лечит чёрную дыру фрагментации.

Матрица: IPQoS, сжатие, шифры, keepalive

Каждую строку безопасно пробовать отдельно; в одном прогоне тестов комбинируйте не больше двух изменений, чтобы понимать причину выигрыша.

ПараметрКогда уместенКомпромиссСтартовое значение
IPQoSМассовый scp, rsync, git packfilesИнтерактив может казаться чуть менее «отзывчивым», чем с lowdelayIPQoS=throughput для синхронизации файлов
IPQoSvim/emacs по SSH, обновления статуса tmuxНесколько процентов пикового bulkIPQoS=lowdelay на хостах только для интерактива
CompressionRTT >120 мс и полезная нагрузка — текст/логиCPU на обоих концах; вредно для видео или предварительно сжатых артефактовCompression yes для хвостов логов CI; no для передач .ipa
Ciphers / MACsЛюбой путь Apple Silicon ↔ Apple SiliconУстаревшие списки ломают совместимостьПредпочитать chacha20-poly1305@openssh.com, запасной aes256-gcm@openssh.com

Семь шагов: рецепт клиента macOS

  1. Создайте секцию Host по имени региона mini, например Host proxymac-jp, чтобы эксперименты не залезли на личные Git-хосты.
  2. Зафиксируйте KEX и шифры явно: OpenSSH и так выберет безопасные дефолты, но закрепление убирает переменную в инциденте — добавьте KexAlgorithms curve25519-sha256 и выбранную пару AEAD выше.
  3. Поставьте IPQoS throughput для ночных бэкапов; дублируйте секцию с IPQoS lowdelay для интерактивных сессий, если живёте в vim.
  4. Переключайте сжатие по секциям; не включайте глобально Compression yes, если не хотите объяснять руководству отрицательный прирост скорости.
  5. Добавьте keepalive: ServerAliveInterval 30 и ServerAliveCountMax 4 — та же логика, что в мультиплексировании ControlMaster; большой RTT усиливает потери на простое.
  6. Снова замерьте: после каждого изменения заполните таблицу из трёх метрик; если RTT улучшился меньше чем на 3 %, а CPU удвоился — откатите.
  7. Задокументируйте победившую секцию рядом с hostname во внутренней вики и дайте ссылку на статью справочного центра, которую реально прочитают стажёры.

Пример секции (дублируйте с IPQoS lowdelay для интерактивных хостов, если разделяете профили):

Host proxymac-jp HostName mini.example.jp User youruser IPQoS throughput Compression yes Ciphers chacha20-poly1305@openssh.com ServerAliveInterval 30 ServerAliveCountMax 4

После того как конфиг попадёт в git, попросите команду на слепой A/B по десять минут: половина на старых дефолтах, половина на новой секции — соберите субъективную задержку по шкале 1–5 и приложите таблицу к тикету инфраструктуры вместе с цифрами.

Когда пора перестать крутить ноутбук

Если ICMP RTT до выбранного региона более чем вдвое выше, чем до другого города ProxyMac, который всё ещё укладывается в требования по данным, прекратите править ssh_config и меняйте географию — в гайде по задержкам уже расписаны ожидания APAC против US. Аналогично: если по вечерам конкуренция за эфир Wi‑Fi взлетает вместе с домашним стримингом, никакая DSCP-метка на SSH не победит Ethernet на 45-минутной отдаче. И наконец, если traceroute три дня подряд показывает потери на одном и том же транзитном AS, откройте тикет по пути с выводами MTR из плейбука MTR, а не гонитесь за наборами шифров.

Безопасность: агрессивный ForwardAgent yes вместе с долгоживущими multiplex-мастерами превращает украденный ноутбук в мгновенное боковое перемещение — сочетайте настройку производительности с короткоживущими ключами из базового уровня SOC.

FAQ

Отличается ли ssh от Apple от варианта из Homebrew? Для QoS-меток и песочницы — да; тестируйте тот бинарник, который реально вызывают скрипты; в CI контейнеры часто идут другими путями, чем интерактивный профиль Terminal.

Включать ли ControlMaster на «спутниковых» линках? Часто да — см. отдельную статью — но помните: один залипший мастер тормозит все подчинённые сессии, пока не разберётесь.

Есть ли специфичные для ProxyMac серверные ручки? У клиентов редко бывает root на общих образах; считайте sshd только для чтения и работайте с клиентом, путём и регионом.

Почему Apple Silicon Mac mini всё ещё важен, когда клиент уже настроен

После выравнивания IPQoS, сжатия и keepalive оставшийся запас даёт железо без дрожи, когда прилетают десять параллельных sftp: M4 на узлах ProxyMac держит SSH-эндпоинты в HK / JP / KR / SG / US отзывчивыми в штормах CI, нативно крутит macOS-тулчейны, которые нужны джобам, и сочетается с той же экономикой аренды, что вы уже используете для пар VNC. Зафиксируйте победившую секцию Host рядом с SKU региона, добавьте ссылку на этот гайд в онбординг и освободите mini по завершении нагрузки — тюнинг дешевле, когда на том конце предсказуемое «голое» железо, а не перегруженная ВМ с притворством «это Mac».

Настроенный клиент — рядом с правильным регионом

Mac mini в HK / JP / KR / SG / US с готовым SSH при выдаче