2026年リモートMac CIにおけるrsync圧縮判断:事前圧縮成果物、openrsyncとHomebrew rsync
狭い上りと高RTTでは、圧縮が帯域ではなくCPUを塞ぎ、インタラクティブSFTPの体感を悪化させます。本稿は成果物のエントロピーで分け、マニフェスト駆動で再現性を確保する手順をまとめます。
1. 痛みの整理(二重圧縮・暗号化・実装差)
リモートMac向けCIで成果物を送る際、rsyncの圧縮は帯域ではなくCPUを先に塞ぎがちです。
tar.gzやipaは既に高エントロピーなのでzlibを重ねると二重圧縮となり、体感はディレクトリ列挙の遅さとして現れます。
macOSのopenrsyncとHomebrewのrsync 3.xでは挙動差があり、runnerと宛先Macで別バイナリだとdry-run結果が食い違うことがあります。
マニフェストにtransport_hintを持たせ、テキスト診断と製品バンドルを分離するのが再現性の鍵です。
三回のdry-runと200MBの代表スライスで、CPU p95とディスクawaitを必ずセットで見ます。
VPN併用時はトンネル側CPUも併記し、zlibがトンネルと二重に熱を作っていないか確認します。
partial-dirと一時ファイル規約は圧縮の有無に依存しないため、先に固定してから圧縮ABテストを行います。
SHA256ゲートはsymlink昇格の前に置き、圧縮の可否議論と切り離します。
files-fromやsparse-checkoutの記事と組み合わせ、walkコストを下げてから圧縮効果を測ります。
bwlimitや公平キューの記事はCPU争いの別次元なので、併読してチューニング順序を決めます。
Canaryジョブは本番鍵と同じRSYNC_RSHで、小さくてもファイル種の多様性を含めます。
変更管理では圧縮既定の変更をリリース列車から切り離さず、観測ダッシュボードに明示します。
補足: 構造化ログはディレクトリ丸ごとzlibより先にgzip単体化した方が制御しやすい場合があります。
補足: メディア密集ディレクトリではディレクトリ単位のフラグ分割がレビュー容易です。
補足: ベンチマークは必ず宛先パス上で行い、ローカルSSD上の結果だけで判断しません。
補足: zlibのON/OFF判断をJSON Linesで残すとコンプラ観点でも追いやすいです。
補足: ABテストはカナリアとセットにしビッグバン切替を避けます。
補足: Spotインスタンスのスロットリングがzlib効果をかすめるので併記します。
補足: rsync引数はTerraformやAnsibleに置きドリフトを検知します。
補足: SBOMに近い成果物一覧と圧縮方針を結び付けると監査が楽です。
補足: 同一Macで複数コンテナを押すならCPU予算を名前空間別に切ります。
補足: zlibを一時的に戻せる担当と期限を明文化し監視から外しません。
追記ブロック1:共有リモートMacではCPU・暗号化・zlibの順で余裕がなくなりやすく、インタラクティブSFTPのディレクトリ遅延として現れます。stagingで三回dry-runし、200MBスライスでCPU p95とawaitを記録し、openrsyncとHomebrewの差分をログ化し、transport_hintでテキストとバンドルを分離し、SHA256ゲートを昇格前に置き、bwlimit記事と役割分担し、変更管理に明記し、観測を外さない運用へ落とし込みます。
追記ブロック2:共有リモートMacではCPU・暗号化・zlibの順で余裕がなくなりやすく、インタラクティブSFTPのディレクトリ遅延として現れます。stagingで三回dry-runし、200MBスライスでCPU p95とawaitを記録し、openrsyncとHomebrewの差分をログ化し、transport_hintでテキストとバンドルを分離し、SHA256ゲートを昇格前に置き、bwlimit記事と役割分担し、変更管理に明記し、観測を外さない運用へ落とし込みます。
追記ブロック3:共有リモートMacではCPU・暗号化・zlibの順で余裕がなくなりやすく、インタラクティブSFTPのディレクトリ遅延として現れます。stagingで三回dry-runし、200MBスライスでCPU p95とawaitを記録し、openrsyncとHomebrewの差分をログ化し、transport_hintでテキストとバンドルを分離し、SHA256ゲートを昇格前に置き、bwlimit記事と役割分担し、変更管理に明記し、観測を外さない運用へ落とし込みます。
2. 判断マトリックス
| 種別 | 圧縮 | 代替 |
|---|---|---|
| テキスト | 試す | CPU監視 |
| tar.gz/ipa | 無効 | checksum |
3. 検証手順とコマンド例
How-to
RSYNC_RSH="ssh -o BatchMode=yes -o ServerAliveInterval=25"
rsync -av --no-g -e "$RSYNC_RSH" ./artifacts/precompressed/ ci@remote:/srv/in/
rsync -avz --no-g -e "$RSYNC_RSH" ./diagnostics/text-only/ ci@remote:/srv/logs/
- 1 成果物をエントロピー別に分類する。
- 2 両端の rsync --version をログに残す。
- 3 dry-run を三回、圧縮の有無で比較する。
- 4 200MB の代表スライスをステージングへ。
- 5 partial-dir と一時ファイル規約を確認。
- 6 SHA256 ゲートを symlink 昇格の前に。
- 7 composite action に既定を戻す。
4. 指標とベンチマーク
ステージングで再現可能な数値表を用意し、自社環境の帯域・CPU p95・ディスク await を同一シートに載せます。
圧縮の有無で転送時間が誤差内かどうかに加え、インタラクティブ SFTP のディレクトリ体感まで同じダッシュボードに載せ、共有リモート Mac での多テナント影響を見落とさないようにします。
5. 整合性・公平性ガイドとの併読
整合性と公平性の記事と組み合わせる。
6. FAQ
Q tar.gzに圧縮? A 通常不要。
Q openrsync同一? A 実測必須。
7. まとめ
圧縮方針をマニフェスト化すると議論が減ります。
自律運用ではドリフトが再発します。
既定テンプレートと隔離パスが必要なら SFTPMAC のリモートMacを参照してください。