From h-nakano @ iwao.net Thu Aug 27 17:46:12 2009 From: h-nakano @ iwao.net (=?ISO-2022-JP?B?GyRCQ2ZMbjkoTy8bKEI=?=) Date: Thu, 27 Aug 2009 17:46:12 +0900 Subject: [Ultramonkey-l7-develop 530] Re: =?iso-2022-jp?b?TVEbJEIkSBsoQlJQUxskQiRYJE4lZiE8JTYhPDZ1GyhC?= =?iso-2022-jp?b?GyRCNFYkKyRpJE4lIiVXJW0hPCVBJEskRCQkJEYbKEI=?= In-Reply-To: <4A8D3F9F.8000101@sdy.co.jp> References: <4A8D3F9F.8000101@sdy.co.jp> Message-ID: 中野です。 ざっとみました。 GoogleのRPSはまだパッチ読んでないのでパスw ixgbeのコード読みながら、UM側要求としてへんなところがないかと、カーネルへのインパクトを見てみました。 要求としては大体良いかと思います。 ただ、ixgbeでもチップが32598か32599かで大分違います。 32599だとFlowDirectorが入っていて、キューにつかうhashをドライバ内から 取ってこれたりします。 32598だとhashはNICの内部に隠蔽されていて、キューのアドレスしかわかりません。 それぞれのデータシートは以下です。 ・32598 http://download.intel.com/design/network/datashts/319282.pdf ・32599 http://download.intel.com/design/network/datashts/82599_datasheet.pdf ixgbe以外のNICはまた違うでしょうし、ドライバ初期化時にわかる情報はsysfs配下に NICドライバ毎(NICコントローラ毎?)にディレクトリをつくって、その中にとってこれる情報だけ 表示させるって感じがいいかと。 【起動時に必要な情報(MQ)】 MQのON/OFF・・・これはレジスタから取ってこれるはず。32598だとMRQCレジスタ。ドライバでそれを取っているところがあればそこから、なければそれを取ってくるパッチをドライバにいれて、sysfsで見せるようにすればOK。 FlowDirectorのON/OFF・・・こっちは82599の方をみなければ・・・まだ見ていません。 Queueの振り分け種別・・・82598はIPとport固定っぽい。それかMACアドレス。ドライバでは何もしてなくて、NICにパケットが届くとNICが勝手にIPパケットまで解析して、IPアドレスとportを見つけて、勝手にキューに振り分けます(汗) 82599では drivers/net/ixgbe/ixgbe_type.h の中にあるstruct ixgbe_atr_input構造体に振り分け材料がコメントで書いてあります。 これにmodprobe.confか何かでその上にあるIXGBE_ATR_SRC_IPV4_OFFSETなどのmaskを組み合わせて、不必要なものを フィルタリングして決定します。 82599ではさらにhashの種類としてbucket hashとsignature hashという2種類があるみたいです(謎) Queue総数・・・調査中。不明です。ないのかな? 各Queueに紐づけられているCPU・・・調査中です。なければドライバにパッチを当てるしかないですが、net/core/dev.c や include/net/sch_generic.h に既にないかと探しています。 struct netdevice_queueとか、struct Qdiscとか、netif_rx()とか。Qdiscにでもあれば、構造体メンバを参照するだけでいけるのですが・・・ なければ、netdevide_queueのようなgenericな構造体にメンバを追加しないといけないかもしれません。 【HTTPサーバをMultiQueueで中継する場合】 acceptしたfdからのCPU情報・・・まだ見れていませんが、82598のデータシートでは"RSS is a mechanism to post each received packet into one of several descriptor queues."とあるので、fdとqueueが1:1だといいなぁなんて思っています。 ただ、queueの構造体にCPU情報がなければ、メンバ追加しないといけないかもです。 ADDRINFOからのCPU情報・・・82599はドライバ内でhashを返しているので、そこを突破口にすれば良いような気がしますが、82598はADDRINFO自体をNICに突っ込む処理がドライバにありません(汗) どこかに突破口はないか・・・最悪、Peterに聞いた方が早い気がします。 とりあえず、今はこんなところ。 2009/08/20 21:20 に 中居憲久 さんは書きました: > TO:フェルナンド様、竹林様、中野様、岡田様 > CC:Monkey-develop > > 中居です。 > お疲れ様です。 > > MultiQueueそしてRPSやFlowDirectorなどlinuxを取り巻くネットワーク環境は > 今非常に速い速度で進化しております。 > 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を持つ」のが特色でしょうか。 > > そして、タイトルにあるようにこの方式を実現するためにはkernelから情報を取 > 得出来なければなりません。 > その案を示しました。 > http://sourceforge.jp/projects/ultramonkey-l7/wiki/KernelRequestL7vsd > > 上記は中居が意識している部分でまとめました。 > 足りない部分、もしくはもっとよい方法が存在する部分、 > 間違っている部分(RPSの送信側については調査が不十分ですし、 > MultiQueue+RPSも出来ますが動きをまだ考え切れていません)等がまだ残ってい > ると考えられます。 > > 一度目を通していただき、些細なことでかまいませんので > コメントをいただけますと幸いかと思います。 > > どうぞよろしくお願いします。 > > > -- > _____________________________________________ > 中居 憲久[Norihisa NAKAI] > n.nakai @ sdy.co.jp > 株式会社SDY tel:047-401-7210/fax:047-401-7207 > > _______________________________________________ > Ultramonkey-l7-develop mailing list > Ultramonkey-l7-develop @ lists.sourceforge.jp > http://lists.sourceforge.jp/mailman/listinfo/ultramonkey-l7-develop > > From takebayashi.shinya @ oss.ntt.co.jp Thu Aug 27 18:28:22 2009 From: takebayashi.shinya @ oss.ntt.co.jp (Shinya TAKEBAYASHI) Date: Thu, 27 Aug 2009 18:28:22 +0900 Subject: [Ultramonkey-l7-develop 531] Re: =?iso-2022-jp?b?TVEbJEIkSBsoQlJQUxskQiRYJE4lZiE8JTYhPDZ1GyhC?= =?iso-2022-jp?b?GyRCNFYkKyRpJE4lIiVXJW0hPCVBJEskRCQkJEYbKEI=?= In-Reply-To: References: <4A8D3F9F.8000101@sdy.co.jp> Message-ID: 竹林です. 最近息切れ気味です. とりあえず分かる範囲でフォローします. > ixgbe以外のNICはまた違うでしょうし、ドライバ初期化時にわかる情報はsysfs配下に > NICドライバ毎(NICコントローラ毎?)にディレクトリをつくって、その中にとってこれ る情報だけ > 表示させるって感じがいいかと。 > > 【起動時に必要な情報(MQ)】 > MQのON/OFF・・・これはレジスタから取ってこれるはず。32598だとMRQCレジスタ。ドラ イバでそれを取っているところがあればそこから、なければそれを取ってくるパッチをド ライバにいれて、sysfsで見せるようにすればOK。 82599 でも MRQC レジスタです. Section 7.1.2.8 Receive-Side Scaling (RSS) に記載があります. Enabling rules: ・ RSS is enabled in the MRQC register. マスクを使って設定するあたりも,i82598 と同じようです. > FlowDirectorのON/OFF・・・こっちは82599の方をみなければ・・・まだ見ていません。 これは FDIRCTRL レジスタ. > Queueの振り分け種別・・・82598はIPとport固定っぽい。それかMACアドレス。ドライバ では何もしてなくて、NICにパケットが届くとNICが勝手にIPパケットまで解析して、IPア ドレスとportを見つけて、勝手にキューに振り分けます(汗) > 82599では drivers/net/ixgbe/ixgbe_type.h の中にあるstruct > ixgbe_atr_input構造体に振り分け材料がコメントで書いてあります。 > これにmodprobe.confか何かでその上にあるIXGBE_ATR_SRC_IPV4_OFFSETなどのmaskを組 み合わせて、不必要なものを > フィルタリングして決定します。 > 82599ではさらにhashの種類としてbucket hashとsignature hashという2種類があるみた いです(謎) こちらも追っていますが,いまいち謎な状態・・・. ixgbe_fdir_add_signature_filter_82599() あたりから呼ばれたりするので, Flow Director の絡みかもしれません. > Queue総数・・・調査中。不明です。ないのかな? RQTC レジスタに入っていそう. RSS Queues Per Traffic Class Register なんて書いてあります. ----------------------------------------------------------- Shinya TAKEBAYASHI E-mail: takebayashi.shinya @ oss.ntt.co.jp GPG ID: 395EFCE8 GPG FP: 58B2 B5D0 A692 1BD8 328B E31E E027 AC35 395E FCE8 -----------------------------------------------------------