tc filter と cgroup の関連を知りたい

424 views
Skip to first unread message

OGATA Takahiro

unread,
Dec 12, 2013, 5:50:41 AM12/12/13
to lxc...@googlegroups.com

緒方と申します。




https://kernel.org/doc/Documentation/cgroups/net_cls.txt
のページ末尾に
tc filter add dev eth0 parent 10: protocol ip prio 10 handle 1: cgroup
という一行があり、tc filter で cgroup という
私にとっては謎の記述をしています。

それを見ながら試してみたら、私の期待と異なる部分もありましたが
一応、帯域制限らしきものが効きました。




tc filter での cgroup に関して、解説記事等ご存じでしたら
紹介していただけないでしょうか。

よろしくお願いいたします。







KATOH Yasufumi

unread,
Dec 13, 2013, 2:34:57 AM12/13/13
to lxc...@googlegroups.com
加藤泰文です.緒方さんこんにちわ.

>>> On Thu, 12 Dec 2013 19:50:41 +0900
in message "[lxc JP:166] tc filter と cgroup の関連を知りたい"
OGATA Takahiro-san wrote:

> https://kernel.org/doc/Documentation/cgroups/net_cls.txt
> のページ末尾に
> tc filter add dev eth0 parent 10: protocol ip prio 10 handle 1: cgroup
> という一行があり、tc filter で cgroup という
> 私にとっては謎の記述をしています。

確かに cgroup + tc に関する文書って上記の簡単なカーネル付属文書以外に
はないですね.

私は tc はほとんど理解してないのですが, (コマンドも仕組みもカオスなの
で逃げてます ^^;),上記はフィルタとして cgroup ってのを使っているとい
う指定で,普通の tc の使い方ではないでしょうか.

# cgroup にも iproute2 のソースを見る限りではオプションがあるみたいで
# すが説明はソース以外には見つけられませんでした.

この辺りは
http://lartc.org/howto/lartc.qdisc.html
http://linuxjf.sourceforge.jp/JFdocs/Adv-Routing-HOWTO/lartc.qdisc.html
(古い)
を参照でしょうか.カーネル付属文書の例は HTB ってのを使ってるので,
http://linuxjf.sourceforge.jp/JFdocs/Adv-Routing-HOWTO/lartc.qdisc.classful.html#AEN1078
辺りですかね.フィルタについては
http://linuxjf.sourceforge.jp/JFdocs/Adv-Routing-HOWTO/lartc.adv-filter.html
辺りで,ここに fw とか u32 とかあるのと同列で cgroup ってのがある,っ
て理解をしました.

# ↑間違ってるかも? ^^;

--
==============================================
(((( 加藤泰文
○-○ karma @ jazz.email.ne.jp
==============================================
(Web Page) http://www.ten-forward.ws/
==============================================

OGATA Takahiro

unread,
Dec 13, 2013, 3:13:08 AM12/13/13
to lxc...@googlegroups.com
緒方です。



お時間割いてくださりありがとうございます。

そうなんですよね。。。。u32, fw, route の同列に cgroup がある。
(で、u32, fw, route の説明は見つかるけど cgroup の説明は見当たらない)



1. コンテナが使う帯域を制限したい。
2. 慣れない tc を試す。
3. HTB な tc は (少しだけ・期待通りに) 使えるようになった。
4. カーネル付属文書に、何これ?な例を発見。
-> カーネル付属文書の通りだと一応期待通りに帯域制限が効く。
-> 次は、これを LXC と組み合わせて・・・ダメっぽい。
というか組み合わせ方が謎。

もう少し、試行錯誤してみます。
(あきらめるかも・・・)

KATOH Yasufumi

unread,
Dec 13, 2013, 3:39:37 AM12/13/13
to lxc...@googlegroups.com
加藤泰文です.

>>> On Fri, 13 Dec 2013 17:13:08 +0900
in message "Re: [lxc JP:168] tc filter と cgroup の関連を知りたい"
OGATA Takahiro-san wrote:

> もう少し、試行錯誤してみます。

期待してまーすw

OGATA Takahiro

unread,
Dec 13, 2013, 11:52:59 PM12/13/13
to lxc...@googlegroups.com
緒方です。

コンテナで net_cls を活用するのはあきらめました。

で、下記2つの記事を参考にして
コンテナへのインバウンドとアウトバウンドの帯域を制限しました。




実践! Xenで実現するサーバ統合(5):リソース制御でサービスレベルを確保せよ (3/3) - @IT
http://www.atmarkit.co.jp/ait/articles/0803/18/news147_3.html

Traffic shaping with tc - OpenVZ Linux Containers Wiki
http://openvz.org/Traffic_shaping_with_tc

peo3

unread,
Dec 14, 2013, 12:55:19 AM12/14/13
to lxc...@googlegroups.com
peo3です

解説記事ではないですが、コミットログ
に使い方ぽいものが書かれていますね。

tc ... cgroup helpでオプション情報が見れるようです。

後はインラインで。

2013年12月13日金曜日 17時13分08秒 UTC+9 OGATA Takahiro:
緒方です。



お時間割いてくださりありがとうございます。

そうなんですよね。。。。u32, fw, route の同列に cgroup がある。
(で、u32, fw, route の説明は見つかるけど cgroup の説明は見当たらない)



1. コンテナが使う帯域を制限したい。
2. 慣れない tc を試す。
3. HTB な tc は (少しだけ・期待通りに) 使えるようになった。
4. カーネル付属文書に、何これ?な例を発見。
    -> カーネル付属文書の通りだと一応期待通りに帯域制限が効く。

これが動いて
 
    -> 次は、これを LXC と組み合わせて・・・ダメっぽい。
        というか組み合わせ方が謎。

こっちが動かないというのがちょっと謎ですね。

lxc.confにcgroup.net_cls.classid = 0x100001
とか書いても動きませんでしたでしょうか?

あと/sys/fs/cgroup/lxc/<name>/net_cls.classidに何か設定されている
でしょうか?
 

もう少し、試行錯誤してみます。
(あきらめるかも・・・)

OGATA Takahiro

unread,
Dec 14, 2013, 8:20:05 AM12/14/13
to lxc...@googlegroups.com
緒方です。


tc/f_cgroup.c に記載の使い方は・・・・読んだけど理解できず。
lxc.conf に class id っぽい情報は・・・記入しました。
/sys/fs/cgroup/lxc/<name>/net_cls.classid には・・・コンテナの中のプロセス番号が並んでいます。



----------------------------------------------------------------------
# grep classid /var/lib/lxc/{CN001,CN002}/config
/var/lib/lxc/CN001/config:lxc.cgroup.net_cls.classid = 0x00100001
/var/lib/lxc/CN002/config:lxc.cgroup.net_cls.classid = 0x00100002
# modprobe cls_cgroup
# mkdir /sys/fs/cgroup/net_cls
# mount -t cgroup -o net_cls aiueo /sys/fs/cgroup/net_cls
# lxc-start -d -n CN001
# lxc-start -d -n CN002
# cat /sys/fs/cgroup/net_cls/CN001/net_cls.classid
1048577
# cat /sys/fs/cgroup/net_cls/CN002/net_cls.classid
1048578
# printf '%x\n' 1048577
100001
# printf '%x\n' 1048578
100002
# cat /sys/fs/cgroup/net_cls/CN001/tasks
( CN001 コンテナの中の init や sshd の PID が表示される )
# cat /sys/fs/cgroup/net_cls/CN002/tasks
( CN002 コンテナの中の init や sshd の PID が表示される )
# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.002481b2ac2d no eth0
vethM0LOMH
vethXGIH6N
lxcbr0 8000.000000000000 no
----------------------------------------------------------------------

ここまで準備して、その後に tc を用いた設定をあちこち
(br0, eth0, vethM0LOMH, vethXGIH6N)
順番に一か所ずつ施しては、iperf で測定した・・・のですが、制限は効きませんでした。




tc/f_cgroup.c に記載の使い方を見て、それが理解できない時点で私にはダメかなぁ・・・と。



peo3

unread,
Dec 15, 2013, 8:34:16 AM12/15/13
to lxc...@googlegroups.com
peo3です

2013年12月14日土曜日 22時20分05秒 UTC+9 OGATA Takahiro:
確かに動かないですね、これ(´・ω・`)

私の環境はこんな感じです。
$ uname -a
Linux fedora19 3.11.8-200.fc19.x86_64 #1 SMP Wed Nov 13 16:29:59 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
$ rpm -qf $(which tc)
iproute-3.9.0-2.fc19.x86_64
$ lxc-version
lxc version: 0.9.0

実際、動かないどころかtcを設定するとiperfの挙動がおかしくなる
(iperf -c中にiperf -sとの通信が切れる)ので、もう色々だめだめな感じ
ですね。
# 時間があればカーネルのコードを追ってみたいところですが...

というわけで現状ではXen/OpenVZの記事にあるようにtcでsrc ipを
指定するとか、iptables --set-markでマークしてtcで引っ掛けるとか
しないといけないようですね。(逆に、それがあるのでLXCではcgroup
じゃなくても良いという...)

お力になれずにすみません(´・ω・`)
 



tc/f_cgroup.c に記載の使い方を見て、それが理解できない時点で私にはダメかなぁ・・・と。



OGATA Takahiro

unread,
Dec 15, 2013, 10:01:10 AM12/15/13
to lxc...@googlegroups.com


緒方です。

peo3 さん、試してくださりありがとうございます。




あきらめてはいるのですが、しつこくググっていたら
最近の投稿でこんなのを見つけました。

cgroup filter on physics interface can't container ? Linux Network Development
http://www.spinics.net/lists/netdev/msg260379.html

条件があるけど、コンテナ + tc + cgroup が効く、、、、と言っているようですね。むー


Reply all
Reply to author
Forward
0 new messages