Verizon Media(現Edgio)では、お客様とその視聴者の利益のためにテクノロジーのパフォーマンスを向上させることが継続的な取り組みです。 たとえば、過去2年間で、パフォーマンスおよびカーネルエンジニアは事実上すべてのパケットドロップを排除し(98%以上を削除)、エッジサーバーのパフォーマンスヘルスチェックを50%改善し、サーバー容量を最大40%増加させました。
また、上記をネットワーク自動化と有機的なネットワーク拡張(現在250 Tbpsを使用)と組み合わせて、ユーザーエクスペリエンスを向上させています。 パフォーマンスを慎重に調整することは、何百万ものゲームコンソールのソフトウェアアップデート、主要なスポーツイベントのライブビデオストリーム、マルチCDNロードバランサーが負荷をネットワークに移動するときに、急速に変化する場合や予測不可能な場合もあるネットワークサージをサポートする上で重要な役割を果たしました。
大規模な品質の維持には、Edgio Media Platformのテクノロジースタックのあらゆる部分でパフォーマンスを最適化する必要があります 。下位レイヤーからCPUやNIC、OSやアプリケーションに至るまでです。 最終的に、私たちの目標は常に同じです。優れたパフォーマンス。 そのためには、測定可能なパフォーマンスの変化に基づいて、意思決定を検証するデータドリブン分析を実施します。
CPUキャッシュの最適化
20,000サーバーは世界中で稼働しており、主にBroadwellおよびHaswellチップセットで、通常は32から40へのコアを備えています。 過去3年間だけで12,000サーバを追加しました。 ただし、ほとんどのサーバーは、ワークロードに合わせて拡張できるように最適化されていません。 サーバを追加するだけでは、運用の効率が向上しないため、新たな課題が発生する可能性があります。 効果的なスケーリングには、既存のコンポーネントを慎重に最適化する必要があり 1台のサーバを最適化して、デフォルト設定よりも2 ~ 3倍(またはそれ以上)の要求を処理できるようにすると、ネットワーク全体のパフォーマンスに大きな違いが生じます。
早期スヌープからホームスヌープへの切り替え
最近のCPUはスヌーププロトコルを使用して、ローカルCPUキャッシュとメモリの整合性を保証します。 これにより、キャッシュはCPU上の変数の変更をリッスンし、それに応じてこれらの変数のバージョンを更新できます。 当然のことながら、使用される特定の手法はメモリパフォーマンスに大きな影響を与える可能性があります。
デフォルトでは、当社のハードウェアベンダーはEarly Snoopと呼ばれるプロトコルを使用しています。 すべてのコアが同時にキャッシュコヒーレンシー要求を行い、ブロードキャストを送信できるため、キャッシュコヒーレンシーを解決するためのレイテンシが低くなります。 ピーク負荷シナリオでは、システムが大量のディスクとNICの同時アクティビティを生成することがわかりました。 これらのアクティビティは、スヌープブロードキャストが多くなり、コミュニケーションのボトルネックにつながります。 これにより、IOデバイスが遅くなり、最終的に処理が完全に停止する可能性があります。
スヌープ要求を統合するHome Snoopモードに切り替えることで、ブロードキャストトラフィックが大幅に減少しました。 プロセッサのQuick Path Interconnect(QPI)は、ディスクとネットワークのI/Oが同時に処理されている間は不足することがなくなりました。さらに、Early Snoopで見たパケットドロップの数は大幅に減少しました。
snoopプロトコルの変更は、BIOS設定の変更に依存します。 ただし、お客様の業務を中断せずに20,000サーバを再起動するには、自動化が必要です。 StackStormベースのIT自動化プラットフォームであるCrayfishのおかげで、このような大規模な導入変更を本番環境で実行できます。
予期しないフェイルオーバーイベント
Home Snoopへのスイッチのテスト中に、フェイルオーバーが発生しました。マルチCDNを導入している当社の最大のメディア顧客の1人が 、他のベンダーの問題を経験し、トラフィックの大部分を当社のCDNに移動しました。 これは、非常に影響力のある大規模なホームスヌープの改善をテストする機会を提供しました。
上の図は、変更の影響を示しています。 まだEarly Snoopを使用しているグループでは、ドロップ数が13.75倍(サーバあたり1日あたり55,000パケットドロップ)増加しましたが、Home Snoopに切り替えたグループでは、4.23倍(マシンあたり1日あたり27,000パケットドロップ)しか増加しませんでした。 Home Snoopは、フェイルオーバーイベント中にすぐにその値を証明しました。
ネットワーク・インターフェイスの最適化とドライバの調整
もう1つの重要なパフォーマンスチューニングのセットには、ネットワークインターフェイスとドライバが含まれていました。 ここでは、通常バーストトラフィックで発生するパケットドロップをダウンさせることに焦点を当てました。 大規模なイベントの間、受信トラフィックが非常に重くなり、NICが対応できず、パケットが予想よりも早くドロップすることがわかりました。 その理由を調べてみると、NIC自体のいくつかのパラメータ(キュー数、キューサイズ、割り込みスケジューリングなど)を調整する必要があることがわかりました。 特定のワークロードとハードウェア構成に合わせてこれらの仕様を最適化するために、受信側スケーリング(RSS)の調整に集中しました。受信側キューを長くし、全体的な数を減らし、NUMAノード間で割り込みのバランスをとります。
上のグラフは、北米で実施したテストを示しています。このテストでは、各ポップがコントロール(つまり、調整されていない)グループとテスト(つまり、調整されている)グループに分けられています。 ここでは、1週間にわたって毎日合計されたドロップ数を示します。 調整後、テストグループでは、コントロールグループよりもパケットドロップが約95%少なくなり、処理される要求が大幅に増加しました。 これにより、サージ時にネットワークの健全性を手動で管理するために必要な操作が少なくなり、エンジニアは他の領域に集中できます。
CPUスケジューリングの調整
NICとドライバレベルの調整は、提供可能な総容量の向上に集中していましたが、CPUスケジューリングの調整は、コンテンツを一貫して配信できる方法を強化することに重点を置いていました。
これらの調整がなければ、受信メッセージと送信メッセージはリソースを奪い合う必要があります。 根本原因の調査を開始したとき、リソースを巡る競合は、カーネルがこれらのメッセージの処理をどのようにスケジューリングしているかに起因していることがわかりました。 これは、問題のCPUが飽和状態になるまで、ピークトラフィックの間に負荷が移行されないことを意味します。 これを修正するために、WebサーバープロセスのCPUアフィニティを設定して、着信ネットワークトラフィックの処理専用のCPUを除外します。
上のグラフは、3月21日から22日にCDN全体でCPUスケジューリング調整をグローバルに有効にした場合の影響を示しています。 パフォーマンスヘルスチェックメトリックの95パーセンタイル値と中央値に基づいて影響を評価します。パフォーマンスヘルスチェックメトリックは、サーバーの相対的な応答時間を示す複合メトリックです。 予想どおり、トラフィックの少ない谷は大幅に減少しませんでしたが、ピークは着信トラフィックと発信トラフィックの間の競合が大幅に減少したことを示しています。 これは、特にピーク負荷時に、外れ値と中央値の両方が大幅に改善されることを意味します。 ビデオストリームの再バッファリングや、すべてのユーザーに対するサーバーの全体的な応答性など、異常値の高い動作に関連するトラフィックの急増に適切に対処し、問題を解決できるようになりました。
カーネルパフォーマンスのアップデート
テクノロジースタックの上位レイヤーを最適化することは、下位レイヤーの要素を調整することと同じくらい重要です。 最近OSをアップグレードする過程で、Linuxカーネルコミュニティの上流エンジニアリング作業を利用するために、Linuxカーネルもアップグレードしました。 新しいカーネルは、以前のバージョンよりも約4年かけて開発されており、メモリ管理システムの改善も含まれていた。これにより、ページ割り当てのブロックを減らし、epoll APIとソケットシャーディングを使用するときの負荷分散とパフォーマンスが改善された。
上のグラフでは、11月下旬から1月上旬にかけてのアップグレードプロセスの影響を、99thパーセンタイルパフォーマンスヘルスチェックの低下として確認できます。 基盤となるカーネルの改善により、すべてのウェブサーバーリクエストプロセッサに負荷分散がより均等になりました。 これにより、これらの外れ値が大幅に減少し、すべてのお客様へのリクエストの信頼性が向上しました。
パフォーマンスの調整には大きな影響がある
過去2年間で、パフォーマンスとカーネルエンジニアリングが導入した広範囲にわたるシステム調整により、事実上すべてのパケットドロップが排除され(98%以上が削除され)、エッジサーバーのパフォーマンスヘルスチェックが半分になりました。 サーバ容量は10 ~ 40%増加しています(正確な量はお客様のプロファイルやイベントによって異なります)。これにより、より多くのトラフィックをより迅速に配信することができます。 異常値の挙動が大幅に改善され、一貫したエクスペリエンスが得られました。特にピーク負荷時に中央値が改善されました。 要約すると、 テクノロジースタック全体に合わせてパフォーマンスを調整すること で、予想外のトラフィックスパイク(ゲームコンソールのアップデートや人気のあるストリーミングビデオライブイベントなど)に適切に対応し、すべてのユーザーに一貫したパフォーマンスを提供できるようになりました。