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

Back to archive index

Hiroaki Nakano h-nak****@iwao*****
2014年 7月 15日 (火) 23:06:00 JST


たるすぴです。

v2ベースのfork版、サービス追加部分作り途中です。
結局名前付きパイプで、子プロセスと親プロセスを
通信させて、親から子へはプロトコルモジュール情報を、
子から親へはpidを通知するようにしています。
パイプはiomuxのepollを使ってイベント検知するようにしました。

そして、これまでのサービス管理系GListは子プロセスに
もたせて、親プロセスは別のGListでIP+portごとに
pidとプロトコルモジュールのリストを管理するようにしています。

もっとも、今の作りだと子から親への通信部分でエラーに
なって、親プロセスが消えてしまうバグがありますがw

ソースはここです。
http://pf.sourceforge.jp/gitroot/h/hi/hiroakinakano/UltraMonkeyL7_v4_nakano.git

このバグを取っても、基本部分を完成させるためには
・サービス削除
・サービス変更
・プロトコルモジュールのオプションをちゃんと渡す
くらいをさらに作らないとです。

さらにSSLだのモジュール分離だの、v3にあった機能を
作りこんだり、過去のチケットを回収したりと先は
長いです(´Д`)

(2014/02/03 15:51), Hiroaki Nakano wrote:
> 中野@幕張です。
> 
> (2014/01/24 5:43), TATEISHI Katsuyuki wrote:
>> タテイシです。
>>
>> 2014/1/22 Hiroaki Nakano <nakan****@nttco*****
>> <mailto:nakan****@nttco*****>>
>>
>>      virtual service自体はGLibの双方向リンクリスト
>>      で管理されてるので、配列とかと違って最大値を
>>      事前に設定せずともメモリのある限りアイテムは増やせるはず。
>>      epollのmax eventとかに関連があるんでしょうか?
>>
>>
>> ちょっと横道にそれるんですが・・・半ばひとりごとです。
>>
>> v2はオープンできるファイルディスクリプタがmax_eventsで制限され
>> ててチューニングに苦労した方も多いかと思います。
>> この変数によってv2が同時にオープンできるファイルディスクリプタ
>> 数が制限される、と言われていますが、この制限って必要なんですかね?
>>
>> この値、iomuxの中でepoll_createとepoll_waitの引数に使われてますが、
>> epoll_createでは現在使われませんし、epoll_waitに渡す方はあくまで
>> epoll_waitから同時にどれだけのファイルディスクリプタを取り出すか、
>> (カーネルに渡すepoll_eventのサイズ)を指定しているだけであってアプ
>> リケーション全体のファイルディスクリプタ数がこれで制限されてしま
>> うのはおかしい気がしています。
>> # epoll_eventのサイズとEPOLL_CTL_ADDできるFDの数は関係ないですよね
>>
>> 本来であればepoll_waitでカーネルと一度にやりとりするイベント数
>> (max_events)とアプリがオープン可能なファイルディスクリプタ数は
>> 個別に管理されていていいと思うのですが・・・
>>
>> # iomux.cのレイヤの都合でそうなってるのですかね。
> 
> これは調べきれてないのでおいらも疑問のままです。。。
> # たぶん、立石さんの言うとおり関係ない感じ。関係あるのって
> # /proc/sys/fs/epoll/max_user_watches くらいですよね。
> 
> 
> まったく話は変わるんですが、v2をIPとportのソケット生成時に
> 子プロセス化させるとすると、同じIPとportでprotocol module
> だけ違うサービスを後から追加するときに困ることに気が付きました。
> 
> v3でもそうですけど、UltraMonkeyL7のバーチャルサービスって、
> IPとport以外に、プロトコルモジュールの違いでも別サービスとして
> 作ることが可能でしたよね。
> 
> 後から同一IP:portでprotocol moduleだけ違うサービスを追加した場合、
> 新たに子プロセスを作るのではなく、既存の同一IP:portの子プロセスに
> サービスリストを追加してやらなくてはならない・・・
> →コマンドを受け付ける親プロセスから、たくさんの子プロセス達へ
>  プロセス間通信で情報送ってあげなきゃいけない。
>  →一番簡単なのはパイプかな。
>   →パイプだとファイルディスクリプタ数の上限の制限受けるな
> 
> と連想して、このメール思い出しましたw
> 
> パイプ以外に方法あるかなぁ。共有メモリでデータ共有して、
> シグナルかメッセージで通知する?
> そもそもプロセス間通信しなくてすむ方法がある?(←たぶん無い)
> 
> どの方式が一番いいかなぁ。
> 
>> -- 
>> TATEISHI Katsuyuki <kt****@wheel***** <mailto:kt****@wheel*****>>
> 
> 




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