CIのrsyncと対話型SFTPが同一上りリンクを共有するときの帯域イメージ

2026年:リモートMacとCIが同一アップロード経路を共有するときのrsync --bwlimit--rsync-pathとionice/nice、マルチジョブ公平キュー、対話型SFTPとの共存マトリクス

複数Runnerやcronとデザイナの対話型SFTPが同一リモートMac入口へ同時に流れ込むと、平均スループットよりp95の体感遅延が先に破綻します。2026年の現実解は、帯域の明示的上限とディスク側の優先度制御、並列ジョブのトークン化、NATに合わせたSSHキープアライブをパイプライン既定値としてコード化することです。

1. 痛み分類:アップリンク飽和、ディスク待ち、セッション嵐

アップリンクの詰まり:単一rsyncが見かけ上そこまで速くなくても、大量小ファイルのバーストはキューを埋め、対話型SFTPの制御パケットが後ろに回ります。RTT単体の問題ではなくキュー規律の問題です。

ディスク側ボトルネック:並列書き込みでNVMeのawaitが伸びるとCPU使用率は低くてもSSHセッションがタイムアウトします。--bwlimitだけでは足りず、リモート側ioniceや並列数の削減が必要になります。

セッション嵐:GitHub ActionsのマトリクスがMaxSessionsやFWのコネクションテーブルを枯渇させます。関連記事:並列SFTPとkeepaliveControlMasterの整理

  1. 平均Mbps信仰:p95やディレクトリ応答を見ないと改善しても体感が残ります。
  2. アカウント混在:CIと人間が同一Unixユーザだとリトライが衝突を増幅します。
  3. 時間帯設計なし:昼夜で輻輳が変わる洲际回線では窓をコード化すべきです。

2. マトリクス:bwlimit/ionice/並列ゲート

単一ノブでは到底足りません。大容量転送の並列戦略と組み合わせて読んでください。

手段 狙うボトルネック 利点 限界
--bwlimit WAN上り 即効性が高い ローカルSSD飽和は別問題
リモートionice/nice 書込キュー 対話操作を守れる --rsync-path前提
CIトークン 並列嵐 尾遅延が安定 所要時間は伸びうる
アカウント分離 権限リトライ 爆心地を分離 運用コスト増

3. 七つの実践手順とテンプレート

Composite Actionや社内シェルモジュールに閉じ込め、リポジトリ横断で既定値を継承させます。BatchMode=yesと鍵パスを固定し、ログは構造化してアラートへ送ります。

RSYNC_RSH="ssh -o ServerAliveInterval=30 -o ServerAliveCountMax=4"
rsync -az --partial --bwlimit=4500 \
  --rsync-path="ionice -c2 -n7 nice -n 5 rsync" \
  ./artifacts/ "ci@${REMOTE_MAC}:/srv/staging/job-${GITHUB_RUN_ID}/"
  1. SLO宣言:業務時間中のディレクトリ一覧RTT上限を決める。
  2. bwlimit初期値:ピークの60〜70%から初日観測し、ディスクawaitが残るなら並列を先に削る。
  3. ionice可否確認:リモートPATHと権限を検証、macOSではniceのみへフォールバックも許容。
  4. キープアライブ:社内NATのタイムアウトに合わせる。
  5. トークンゲート:同時書込みジョブ数を環境保護ルールや外部キューで制限。
  6. カナリア:本番と同一スクリプトでペイロード10〜15%を定期実行。
  7. パス縮小files-fromマニフェストで無駄なメタデータ走査を止める。

4. メトリクスとカナリアジョブ

平均Mbpsではなく上り利用率p95/p99ディスクawait対話操作の最大ハンドシェイク時間の三本柱で見ます。カナリアはファイル粒度も本番に近づけ、巨大単体ファイルだけに偏らせないでください。

業務時間帯はbwlimitを自動で下げるなど、礼儀を設定ファイルに残すと監査にも有利です。

5. マニフェストとSHA256ゲートとの併用

公平化してもバイトが壊れれば意味がありません。SHA256ゲートは公開ディレクトリやシンボリック切替の前に必ず通過させます。

6. FAQ

Q:ルータQoSだけでは? A:分割トンネルVPNなどバイパス経路があるため、アプリ層のbwlimitが再現性を担保します。

Q:圧縮は? A:CPU熱と競合しHeartbeatsが遅れることがあり、巨大バイナリではオフも検討します。

Q:openrsyncは? A:Sequoiaでは無人rsyncハング記事とdry-runで確認してください。

7. まとめとホスト型リモートMacへの橋渡し

--bwlimitとリモートionice、並列トークン、キープアライブを既定パイプラインに埋め込むと、「皆可伝」の列挙から観測可能なSLOへ進めます。

一方で自前運用ではディスク余白やアカウント衛生が崩れると緊急リリースのたびに上限が外されがちです。

分離済みサービスアカウントとステージング雛形、CI向け既定レシピを初期から備えたい場合は SFTPMACのリモートMacプラン とヘルプを参照し、試行錯誤コストをホスト側へ寄せる選択も検討してください。