Help us understand the problem. What is going on with this article?

epc

More than 3 years have passed since last update.

PGW(on epc)のHighAvailabilityについて

SGWとPGWのLayer2接続において、PGW側のエラー発生について考察する
この時、発生する障害には、次の二つが考えられ、これらのソリューションを定義した

  • PGWモジュール障害
  • mysqlデータベース障害

前提条件

前提として、PGW ControlPlaneは、ホストプロトコルスタック上に実装した一般的なBSD-Socketアプリケーションであり、例えば、CPU[10-14]の各コアに割り当てる
PGW DataPlaneは、netmap/dpdk等で実装したプロトコルスタックを介さない高速パケットプロセッシングアプリケーションであり、例えば一つのNIC-ringをCPU[28]に割り当てる

また、ControlPlaneとDataPlane間はデータ共有が必要であり、CPUコア間(スレッド共有)データは非ロック(mutex、semaphoreの同期waitを利用しないデータ同期プロトコル)データ共有とする[^1]

また、コア間データ共有には、http://qiita.com/l2nw/items/c0f7c5bb572cad31da3c
PGWシステム特性に特化した二面ロックフリー構造とする

PGWモジュール障害

今回設計したPGWモジュールは、ControlPlaneとDataPlaneを1モジュールとしているので、PGWモジュール自体はエラー発生時にプロセスダウンさせることで(具体的には、例外をスローしてプロセスを終了させている)、SGWが別PGWグループに再接続することでfailoverが実現できる

mysqlデータベース障害

mysql(筐体故障を含む)データベース障害発生時には、主に2パターンが考えられる

  • マスターデータベース障害
  • スレーブデータベース障害(マスター、スレーブ間接続障害含む)

mysqlに注目した正常動作時イメージ

w0120.png

障害発生時(パターンA)

w0122.png

パターンAは、PGWモジュールと、mysqlマスターデータベース間に何らかのエラーが発生し、その復旧には、mysqlへの再接続を必要とするパターンを表す
このケースでは、エラーを検知したPGWモジュールがサービス停止することにより、gtpv2プロトコルによって、SGWがバックアップPGWへ再接続する

障害発生時(パターンB)

w0123.png

パターンBは、定期的なSHOW SLAVE STATUSと、エラー判定を契機として、ステータス管理テーブルにactive=0(非アクティブ:GTPU-Echoに応答しない)を書き込む、その結果プライマリPGWはGTPU-Echoに応答せず、gtpv2プロトコルによって、バックアップPGWに再接続する

[^1] この例では、PGWの1パケット処理はCPUコア[28]スレッドで高速に連続実行させるため、1パケット処理毎にmutex-lock/unlock処理を行うと、高確率でContext-Switchを必要となる。40Gbps等50Mppsオーバーを必要とするパケットプロセッシングではContext-Switch発生を低く保たなければ到達できない

[^2]http://www.intel.com/content/dam/www/public/us/en/documents/white-papers/xeon-lock-scaling-analysis-paper.pdf

のロック・スケール章の記述通り、コア間をまたいだリソースはコスト高であった
実際に実装・評価してみて重要なコンフィグ、実装手法を以下に示す

  • NIC割り込み先のCPUコアをPCIEが直接接続されているコアに設定
  • ユーザランドアプリケーションの各スレッドは一つのコアで実行
  • 各スレッドは、そのコンテキスト毎にオペレーションに必要なデータ (例えばstd::map)を[スレッドの起動時に]インスタンシエートし、コンテキストをまたいだデータ領域は行わない)
  • ミューテクス、セマフォ等の同期オブジェクトが必要な処理としない
  • 広帯域でインスタンス化する変数を配列の形式で宣言しない(optimizeレベルで大きなパフォーマンス差異が発生する、CPU L2キャッシュを汚染)
l2nw
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした