プロフィール

kosaki

Author:kosaki
連絡先はコチラ

ブログ検索
最近の記事
最近のコメント
最近のトラックバック
リンク
カテゴリー
月別アーカイブ
RSSフィード
FC2ブログランキング

スポンサーサイト このエントリーをはてなブックマークに追加

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


スポンサー広告 | 【--------(--) --:--:--】 | Trackback(-) | Comments(-)

"vmscan: bail out of direct reclaim after swap_cluster_max pages" がmainline入り このエントリーをはてなブックマークに追加

去年やっていた reclaim throttleの一部をRik van Rielが切り出して -mmに入れてくれていたのですが、いきなりmainlineに送られるとはおもわなかった。

何をやっているかというと、従来は最初にきめたスキャン数だけページをスキャンし終わるまではreclaimを途中で抜ける事が絶対なかったので、回収しすぎる事がよくあった。
Direct Reclaimはメモリ確保を呼んだタスクのコンテキストを借りてメモリを回収するしくみなので、これが起きると、

・回収が長引いた分、そのタスクの本来の処理がその間とまる
・キャッシュを不要に回収した分、キャッシュミスが増える

とダブルパンチで痛かった。
なので、今後は32page以上回収したらいったん呼び出し元に戻ります。hugepageのように32page以上欲しいときはalloc_pages_internal()にリトライ機構があるので、ご安心を。

なにが大変だったって、Andrew Mortonが「うーん、昔似たようなパッチを作った事があって、2.6系の初期はこういう打ちきり動作してたんだよね、2年ぐらい。で、regressionがあったから消したはずなんだが、理由が思い出せん」とか言い出して、当時のregressionが再発しない事を証明するのがえらい大変だった。
過去MLや過去commit logをあさりまくり。

いつものように、Rikはコード書いた後はなにもしないので、性能向上証明とかも全部やったちゅーねん。


これでhackbench性能30%アップ


関連記事
linux | 【2009-01-07(Wed) 09:31:05】 | Trackback:(0) | Comments:(0)

mlock中もSIGKILLで死ぬようになります このエントリーをはてなブックマークに追加

kernel watchに登場したGoogleの Ying Han が投稿したもう1つのパッチ、mlock中にSIGKILLで死ぬようにするパッチがmainline入り。2.6.29から使えます。

Linuxにおいては、シグナルはシステムコールの出入り口以外には、かなり限られた場所でしかシグナルをチェックしていなくて、従来、mlock()の処理途中ではシグナルチェックはしていませんでした。

しかし、mlock()は指定したアドレスに物理ページが張り付いていることを保障するシステムコールなので、内部的にページフォルトを指定ページ数回おこしているので、とても遅い。
場合によっては分単位で時間がかかる。
しかも、うっかり引数間違えて、でっかいアドレス範囲を指定してしまうとシグナル見てないので、なにをやっても中止できずにOOM killerまっしぐら。という困ったちゃんだったのでした。

これをSIGKILLに限ってみるようにするパッチ。全部のシグナルみるようにしちゃうと、EINTRを想定してないアプリが非互換で壊れちゃうから。

これも、監視デーモンがSIGKILL投げたらすぐ死ねよ活動の一環。


関連記事
linux | 【2009-01-07(Wed) 09:10:21】 | Trackback:(0) | Comments:(0)

"sys_execve and sys_uselib do not call into fsnotify" パッチがmainline入り このエントリーをはてなブックマークに追加

kernel watchで書いた、Eric Parisのexecve時にinotify/dnotify通知があがるようにするパッチがmainline入り、2.6.29からexec時のinotifyの挙動がかわることになります。


関連記事
linux | 【2009-01-07(Wed) 09:01:19】 | Trackback:(0) | Comments:(0)

getrusage()::ru_maxrss が-mm入り このエントリーをはてなブックマークに追加

Jiri Pirko と一緒に開発していた getrusage(2) のru_maxrssの実装が-mm入り
以下のようにtimeコマンドでプロセスのメモリ使用量が簡単に見積もれるようになる。

% /usr/bin/time --format="mem %M" cmd


ただし、今のところシステムコールが(BSD互換にするため)KB単位でメモリ量を返しているのに
timeコマンドがページ数で返って来ると思っているのでページサイズ分だけ数値が狂っている。
これはJiriからtimeコマンドのメンテナに連絡を取る事になっている。

perlだとUnix::Getrusage or BSD::Resource、PHPならgetrusage()で使えるようだ

Unjix::Getrusagehttp://search.cpan.org/~taffy/Unix-Getrusage-0.03/lib/Unix/Getrusage.pm
BSD::Resource http://fleur.hio.jp/perldoc/mix/lib/BSD/Resource.html
PHP getrusage http://jp.php.net/getrusage


関連記事
linux | 【2009-01-07(Wed) 08:57:38】 | Trackback:(0) | Comments:(0)

老舗の英高級陶器「ウェッジウッド」破綻 このエントリーをはてなブックマークに追加

http://headlines.yahoo.co.jp/hl?a=20090105-00000055-yom-bus_all

あ、ありえーん。

関連記事
雑談 | 【2009-01-06(Tue) 01:01:07】 | Trackback:(0) | Comments:(1)

kernel watch 1月号 このエントリーをはてなブックマークに追加

なんか公開されましたね。編集さんGJ!
それはさておき、今週中に2月号を書き終えないといけない鬼スケジュールに超憂鬱なのであった。

関連記事
linux | 【2009-01-05(Mon) 22:52:23】 | Trackback:(0) | Comments:(0)

FreeBSD7.1 でcpuset機能が入ったらしい このエントリーをはてなブックマークに追加

http://www.jp.freebsd.org/cgi/mroff.cgi?sect=1&cmd=&lc=1&subdir=man&dir=jpman-8.0.2%2Fman&subdir=man&man=cpuset
http://www.jp.freebsd.org/cgi/mroff.cgi?sect=2&cmd=&lc=1&subdir=man&dir=jpman-8.0.2%2Fman&subdir=man&man=cpuset

でも、LinuxのCPUSETとは全然違う。
cpuset(1)はLinuxのtaskset(1)相当
cpuset(2)はLinuxのsched_setaffinity(2)相当なんだけど、階層化がサポートされているので、がんばればLinuxのCPUSET(のCPU制御部分)相当も出来る。

・・・が、不必要に複雑にしてる気がするな。
せめて名前ぐらいはLinuxとバッティングしないようにして欲しかった。まぎらわしい。



関連記事
linux | 【2009-01-05(Mon) 19:36:01】 | Trackback:(0) | Comments:(0)

SplitLRU for memcgroup は 2.6.29のマージされます このエントリーをはてなブックマークに追加

Andrew Mortonの-mm merge planに書いてあったから多分確実

関連記事
linux | 【2009-01-05(Mon) 18:36:08】 | Trackback:(0) | Comments:(0)

校正つれーーー このエントリーをはてなブックマークに追加

いろいろあって、12/22に提出した原稿を明日までに書き直さないといけないのだが、自分の原稿読み直すのって精神的にきつい。年末年始で状況がだいぶ変わっているので全部書き直したくなっちゃうんだよね。

編集さんに大迷惑がかかるので、もちろんそんな事は出来ないが。

そういうわけで、さっきからちっとも作業が進まん


関連記事
雑談 | 【2009-01-04(Sun) 22:39:43】 | Trackback:(0) | Comments:(2)

getrusage(RUSAGE_THREAD) このエントリーをはてなブックマークに追加

getrusage(RUSAGE_THREAD) ってさりげなくregressionしてるな。ほぼ唯一スレッド単位で意味がある統計値のutimeとstimeに常に0が返ってきておる。

誰も気づいていないと言うことはまったく使われていないに違いないww

とりあえず、修正パッチをポストしておいた。
バグ修正パッチはテストが楽でいいね。


関連記事
linux | 【2009-01-04(Sun) 05:54:22】 | Trackback:(0) | Comments:(0)

tty修正パッチ第二弾 このエントリーをはてなブックマークに追加

天泣記で言及されていたTTYのバグ(http://cvs.m17n.org/~akr/diary/2008-12.html)の修正パッチ第二弾を投稿した。

TTYのコードなんて見るもんじゃないな。目が腐る。


関連記事
linux | 【2009-01-03(Sat) 10:01:15】 | Trackback:(0) | Comments:(0)

改めて思ったが このエントリーをはてなブックマークに追加

会社が休みになると普段の3倍のスピードで仕事が進むな。自分はかなり恵まれている方だが、いかに会社組織というものが無駄な作業を作り続けているかという証だな。

関連記事
雑談 | 【2009-01-02(Fri) 01:47:37】 | Trackback:(0) | Comments:(0)

sysbenchのOLTPテストの流し方を調べてみたのでまとめ このエントリーをはてなブックマークに追加


1.以下のパッケージをインストール
perl-DBD-MySQL
mysql-devel
mysql
mysql-server

2.sysbenchをインストールする

./configure && make && make install

3.データベースを作成する

$ su
# mysql
mysql> CREATE DATABASE test_db;

4.実行

sysbench --test=oltp --db-driver=mysql --mysql-table-engine=innodb --oltp-table-size=1000000 --mysql-user=root --mysql-db=test_db --oltp-table-name=test_t prepare
sysbench --test=oltp --num-threads=10 --db-driver=mysql --mysql-table-engine=innodb --oltp-table-size=1000000 --mysql-user=root --mysql-db=test_db --oltp-table-name=test_t run > sysbench_oltp.out


5.後片付け

以下のスクリプトを用意して実行

delete_table
-----------------
use test_db;
drop table test_t;
exit
----------------------

# mysql -uroot < delete_table



関連記事
linux | 【2009-01-02(Fri) 00:31:39】 | Trackback:(0) | Comments:(0)

stapgamesで遊んでみた感想 このエントリーをはてなブックマークに追加

http://sourceforge.net/projects/stapgames/

とりあえず、OSが最新でないと全然実用にならないことが分かった。
うちはCentOSで5.0からyumで5.2相当までアップしているような環境なんだけど
うちの環境のstapは

・println()関数がない。ので動かないスクリプト多数
・%演算子の扱いがおかしい get_cycles() % 7 が常に0を返す。なんだそりゃ!
どうも桁数が大きいときの処理がバグっているらしく、 (get_cycles() & 0xff) % 7 とかすると
ちゃんと動く。
テトリスとで四角ブロックしか落ちてこないので何事かと思ったよ

という感じ。
SystemTapが環境依存が激しいのはこれに限ったことではないのだけれど、うーん、厳しいなぁー





関連記事
プログラミング | 【2009-01-01(Thu) 23:21:31】 | Trackback:(0) | Comments:(4)

gccがweak関数のコンパイルをしくる話は このエントリーをはてなブックマークに追加

結局 Adrian Bunk が以下のパッチを -mmに入れました。
今後、RHEL5.1のgccでカーネルをコンパイルしようとすると、ビルドエラーが起きます。



------------------------------------------------------
Subject: #error for gcc 4.1.{0,1}
From: Adrian Bunk

gcc 4.1.0 and 4.1.1 are known to miscompile the kernel:
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=27781

Usage of weak functions has become a common pattern in the kernel, and
usages get added in each kernel version increasing the probability of
bugs with each kernel release.

This miscompilation of weak functions can result in subtle runtime
errors.

#error for gcc 4.1.0 and 4.1.1 to prevent users from running into
this bug.

Note:
We already printed a #warning for gcc 4.1.0 due to a different bug.

Signed-off-by: Adrian Bunk
Cc: Roland Dreier
Cc: Ingo Molnar
Cc: Ian Campbell
Cc: Jeremy Fitzhardinge
Cc: Helge Deller
Cc: Rusty Russell
Cc: Kyle McMartin
Cc: Randolph Chung
Cc: Sam Ravnborg
Cc: John David Anglin
Cc: Linus Torvalds
Signed-off-by: Andrew Morton
---

init/main.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)

diff -puN init/main.c~error-for-gcc-4101 init/main.c
--- a/init/main.c~error-for-gcc-4101
+++ a/init/main.c
@@ -81,8 +81,9 @@
* trouble.
*/

-#if __GNUC__ == 4 && __GNUC_MINOR__ == 1 && __GNUC_PATCHLEVEL__ == 0
-#warning gcc-4.1.0 is known to miscompile the kernel. A different compiler version is recommended.
+/* due to http://gcc.gnu.org/bugzilla/show_bug.cgi?id=27781 */
+#if __GNUC__ == 4 && __GNUC_MINOR__ == 1 && (__GNUC_PATCHLEVEL__ == 0 || __GNUC_PATCHLEVEL__ == 1)
+#error gcc 4.1.0 and 4.1.1 are known to miscompile the kernel.
#endif

static int kernel_init(void *);
_


関連記事
linux | 【2009-01-01(Thu) 16:52:40】 | Trackback:(0) | Comments:(0)

櫻井翔から年賀状北 このエントリーをはてなブックマークに追加

と、おもったら年賀状についてきた郵便局の広告だった。

ところで櫻井翔ってだれ?

僕が思うに無名な人をつかうから、もしかして知り合いかな?とか誤解が生まれるんだと思うな

関連記事
雑談 | 【2009-01-01(Thu) 16:29:59】 | Trackback:(0) | Comments:(2)
前のページ
  1. 無料アクセス解析
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。