[Ultramonkey-l7-develop 1027] Re: [RFP] using SO_REUSEPORT on UltraMonkey-L7

Back to archive index

TATEISHI Katsuyuki kt****@wheel*****
2014年 1月 21日 (火) 06:49:54 JST


タテイシです。

手伝えそうにないのに口だけ出してしまいますが・・・

1. SO_REUSEPORT以前にも複数のプロセス(スレッド)がひとつのソケットに
    対して accept する(kernel内で待ち合わせる)ことは可能だったけど、あんま
    り均等に割り振られない(特定のプロセスばかり動く)ことが多かった。

2. そのためaccept専用のプロセスがロードバランスするか、acceptをロックで
    保護してひとつのスレッド(プロセス)だけacceptするなど、ユーザランドで
    の工夫をおこなっていた。

3. SO_REUSEPORTを使えば、何も考えないで同時にacceptしてもうまくやっ
   てくれるようになった → ユーザランド側の設計をシンプルにできる

というものだと理解してます。また、シンプルにできるユーザランド側は v2
のようなIOイベントドリブンタイプが効率的かなと思うので、あるべき姿と
いうところでは、中野さんのおっしゃるように v2 ベースでいくのが近道かな
と思います。

ちなみにSSLに関してはわかりません・・・w

2014/1/16 Hiroaki Nakano <nakan****@nttco*****>

> 中野@幕張です。
>
> SO_REUSEPORTの使い方をいろいろ検討してみた
> ので、とりあえず提案してみます。
>
> [Abstruct]
> ・RHEL7よりSO_REUSEPORTというソケットオプションが追加されます。
> これは同じIPアドレス、同じport番号で複数のソケットをlisten状態で
> 待ち受けることができ、かつacceptをするときはOSが適宜ランダムに
> 一つのソケットを選んでacceptさせる、という機能です。
> kernel3.9から実装されています。概要はLWN.netの以下の記事で。
>
> https://lwn.net/Articles/542629/
>
> これを使ってUltraMonkey-L7で何か利点がないかなー、と検討しました。
>
> [Useage SO_REUSEPORT]
> ・使ってみた人がいました。
>
> http://umezawa.dyndns.info/wordpress/?p=3944
>
> この人のプログラムのように、同じIPアドレス、ポート番号に対して
> 一つのプロセス(スレッド)で独立したsocketインスタンスを作って、
> そのプロセス(スレッド)を複数作ることができます。
> 一つのcontext内で、open, bind,listen, accept, closeを
> 完結させることができます。
> 該当IPアドレス、ポートにパケットが到着したとき、どのsocket
> インスタンスでacceptするかはkernelが良しなに振ってくれます。
>
> [Suggesting UltraMonkey-L7 design using SO_REUSEPORT]
> ・V3ではopen, bind, listenをvirtualserviceスレッドで、
>   accept待ちを1つのセッションスレッドでやって、
>   accept以降の処理を並列化している構造。
> これを、上記のようにopenからそれぞれのスレッド内で完結するように
> 改造するのは大変そう・・・
> ・同じIP,portに対して完全に独立したsocketを起こせるなら、
> スレッドにしなくても子プロセスでいいんじゃないだろうか。
> 各スレッドがアクセスする大域変数も必要なくなりそうだし、
> 起動コストも事前にpreforkとして起動するようにすれば通信時には問題ない。
>
> →ということは、V3ベースに改造するより、V2を子プロセス化したほうが
> まだ楽なんじゃないか?
>
> ・ただし、SSLは実装しなきゃだし、SNMPもないし、バグとかも
> V3に比べてまだ残ってそう(X-Forwarded-Forとか)。それらを
> 実装、直すのと、V3の構造を作り直すのではどちらが楽だろうか・・・
> 個人的には、V2ベースの方が楽そう。
>
> ・あと、子プロセス化して独立したsocketインスタンスを生成するので
> あれば、SSL通信が速くなるのではないだろうか。
> →V3でSSLが遅いのはOpenSSLがまともにMultiThread対応してなくて、
> 証明書等スレッド間共有メモリにmutex掛けながら1スレッドずつ
> アクセスしなきゃいけないのが原因だし。
> 子プロセス内完結なら、SSLも独立したインスタンスになって、
> SSLを並列化できるんじゃないだろうか。
>
> ということで、V2ベースでSO_REUSEPORT使って子プロセス並列化
> というのを考えているのですが、どうでしょうか。


> いや、V3ベースの方が楽じゃね?とか、
> SSL並列化は無理じゃね?とか意見あったらお聞かせください。
>
> --
> 中野 宏朗 (NAKANO Hiroaki)
>
> _______________________________________________
> Ultramonkey-l7-develop mailing list
> Ultra****@lists*****
> http://lists.sourceforge.jp/mailman/listinfo/ultramonkey-l7-develop
>



-- 
TATEISHI Katsuyuki <kt****@wheel*****>
-------------- next part --------------
HTMLの添付ファイルを保管しました...
Descargar 



Ultramonkey-l7-develop メーリングリストの案内
Back to archive index