PID名前空間で名前空間をとくに使わない時(CONFIG_PID_NS=yな環境で特に分離させてない時)とPID名前空間の分離を多段でやってみた時で、getpid(2)に影響があるのかどうかというのを見てみました。 まず、getpid(2)の仕組みですが、これは以前書いたCLONE_NEWPIDを調べる:getpid()とpid namespace - φ(・・*)ゞ ウーン カーネルとか弄ったりのメモを見てみてください。自分はマウント名前空間の処理とごっちゃになってたので、名前空間の探索にループがあると思ってたけど、見なおしたらループはありませんでしたw
まず使ったものは、PID名前空間の分離は手を抜いてlwn.netにあるns_child_exec.c [LWN.net]で行いました。その他、使ったものはgistに上げました。
getpid(2)の実行はpidns_tester.cでやってます。getpidはlibcのラッパーを使わずにsyscall(2)で実行してます。実行にかかった時間は、時間ではなくてクロック数でとっています。 内容としてはfork(2)して子プロセスがgetpid(2)して共有メモリにかかったクロック数を書き込んで終了。親プロセスは子プロセスが終了するまで待って、終わったら次のループという感じになってます。
計測は1回のテストで100000回のgetpid(2)を実行して、それを5セットです。
実行結果はこうなりました。
クロック数平均
pidnsなし | pidns 5段階 | pidns 10段階 |
---|---|---|
35558.81541 | 38438.74045 | 33723.59867 |
34981.49544 | 35868.07209 | 34241.29666 |
33820.61964 | 34375.09794 | 35546.38836 |
38316.59297 | 32984.40835 | 37544.71303 |
35215.90891 | 34550.26301 | 36613.06395 |
クロック数中央値
pidnsなし | pidns 5段階 | pidns 10段階 |
---|---|---|
42438 | 34527 | 39011 |
31590 | 32817 | 31515 |
35322 | 33440 | 36672 |
40734 | 38241 | 35301 |
47516 | 31677 | 35103 |
この結果から見えてくるのは、なんですかね。。。 PID名前空間は名前空間を分離してもしなくても明確に差が出ることは無さそうってことでしょうか。中央値でみるとpidnsを分離していないやつのがクロック数を多く使うことが多いけど、試行回数を増やせばもっとフラットになるのかな?
Dockerエキスパート養成読本[活用の基礎と実践ノウハウ満載!] (Software Design plus)
- 作者: 杉山貴章,大瀧隆太,Yugui(Yuki Sonoda),中津川篤司,前佛雅人,松原豊,米林正明,松本勇気
- 出版社/メーカー: 技術評論社
- 発売日: 2015/06/18
- メディア: 大型本
- この商品を含むブログ (2件) を見る