Shinya TAKEBAYASHI
takeb****@oss*****
2009年 8月 21日 (金) 17:15:43 JST
竹林です. > Montrealで行われたLinuxSimposiumでフェルナンド様と話をしていたMonkey側か > らkernel側へのリクエスト用件をまとめました。 ありがとうございます. > まず、MQやRPSに最大限対応すべくMultiThreadの設計をすると > http://sourceforge.jp/projects/ultramonkey-l7/wiki/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%83%A2%E3%83%87%E3%83%AB > このリンク先の説明になります。 > 方式的には「CPUに結びついたThreadPoolを持つ」のが特色でしょうか。 論理 CPU の数だけスレッドプールを作って,各々のスレッドプールに 各ソケットを処理するスレッドをプーリングする,という思想で良いでしょうか. sched_setaffinity に tid と mask を渡して,擬似的に スレッドプールを作るような・・・. > そして、タイトルにあるようにこの方式を実現するためにはkernelから情報を取 > 得出来なければなりません。 > その案を示しました。 > http://sourceforge.jp/projects/ultramonkey-l7/wiki/KernelRequestL7vsd wiki にまとめて頂いている情報を整理すると・・・ ・UM-L7 起動時に必要な情報 - MultiQueuing の使用可否(使うか否かではなく,使えるか否か) → スレッドプールを分散させるか否かの判断をするために必要. - Queue の総数 → どれだけスレッドプールを作れるかを判断するために必要. NIC の queue の数が CPU 数を下回る可能性があるため. e.g.: i82575 だと RX も TX も 4 本しかないので,8cores 以上だと 一杯一杯に使えない. - CPU 数 → いくつスレッドプールを作るかを決めるために必要. - ハッシュ関数のインタフェイス → リアルサーバに一番近い どんな情報が必要かも含む. ・コネクションの処理にあたって必要な情報 - FD に紐付いた CPU → FD を握っている CPU が持つスレッドプールを特定するために必要. - Queue 割り付けのハッシュ → リアルサーバ通信用スレッドを起こすためにスレッドプールを 特定するために必要. といったところでしょうか. 方式の面では,先日話したように,起動時にのみ必要な情報は sysfs などで, コネクション処理で必要な情報については ioctl などで取ってくるように した方が良いかもしれません. # sockaddr_storage を内包する構造を新しく定義するとか必要? 必要な情報についてもう少し精査しましょう. ----------------------------------------------------------- Shinya TAKEBAYASHI E-mail: takeb****@oss***** GPG ID: 395EFCE8 GPG FP: 58B2 B5D0 A692 1BD8 328B E31E E027 AC35 395E FCE8 -----------------------------------------------------------