タグ

ブックマーク / mkosaki.blog46.fc2.com (10)

  • 革命の日々! ruby 2.0 の dtrace featureを systemtap から使う方法

    この記事は Ruby の Advent Calendar に参加しようとして用意しましたが、間に合わなかったものです。 Ruby 2.0でdtrace対応が入りました。この機能はLinuxのsystemtapからもアクセス出来ます。でも、どこにもドキュメントがないのでいっちょ使い方を解説しようという、そういう趣旨の記事です。 まず、基の使い方ですが、以下の様に process(プロセス名).provider("ruby").mark(Rubyで定義されてるprobe名) で引っ掛けるイベント名を 記述して、tapscriptを記述します ruby.stp probe process("./ruby").provider("ruby").mark("find__require__entry") { printf("%s %s %d\n", user_string($arg1), user_

  • 革命の日々! ディレクトリ操作を asyncに行うのはもはやPOSIX non-comformance

    Linuxでは伝統的にディレクトリ操作(ファイルのrenameとか)を asyncに行なってきた。これはBSDなどよりも性能がいい理由の一つだったんだけど、クラッシュした時にとんでもない壊れ方をするのでまあ色々と評判が悪かった。 さて、じゃあこのようなシステムで安全なアプリケーションを書くためにはどうすればいいかという話になるが、頭の良い人がディレクトリに対してfdatasyncすればいいじゃん。と言い出して、みんなそれがPOSIX filesystem のルールだと思ってたんだな。 で、今回、aio_fsync()がなぜか write permissionを要求してるので、ディレクトリにaio_fsync()できねーじゃねーか。という規格の不整合を上訴したひとがいて、議論の結果「ディレクトリに操作に対してfdatasync()を要求するようなasyncなファイルシステムはPOSIX準拠じ

    gfx
    gfx 2013/04/25
  • 革命の日々! realloc(ptr, 0)の挙動について

    glibcでrealloc(ptr, 0)とわたしたときに、mtraceのログがおかしいというバグがあってその議論が面白かったのでご紹介。 http://sourceware.org/bugzilla/show_bug.cgi?id=14981 reallocという関数がある。まあ、みなさんよくご存知のように realloc(ptr, size)とわたしたときにptrをsizeの大きさに拡張(縮小)してくれる関数である。 malloc(0)がNULLを返しても非NULLを返してもいいように、realloc(ptr, 0)も挙動に実装の自由度がある 1.realloc(ptr, 1) と同等(mallocが非NULLを返すケースではこれが普通) 2.ptrは解放され、NULLが返る(mallocがNULLを返すケースでは常識的な挙動) 3.ptrは解放されず、NULLが返る(mallocがN

    gfx
    gfx 2013/01/05
  • 革命の日々! 誰も読まないOSのソース・コード

    日経BPのサイトに、誰も読まないOSのソース・コードという記事がアップされている。 わりと衝撃的な見出しから始まるのでさくっと引用 まず,結論から言おう。 「エンジニアがOSのソース・コードを読めるようになると,活躍の場が一気に広がる」。そして,「コツさえ分かれば,OSのソース・コードはびっくりするほど簡単に読める」。 赤松氏が「ソースを読んでいる人がほとんどいない」と感じる理由はもう1つある。それは,誰もがよく使うソフトでさえバグが大量にある,ということだ。少しでもソースをのぞけば,誰にでもすぐに見つけられるほど簡単なバグなのに,ネットにも情報が上がらず放置されているという。例えば,赤松氏が見つけたバグの具体例を一つだけお見せしよう。 まあ、寝言は寝てから言ってくれといった感じだが、カーネル読めるぐらいで生活は楽にならんっちゅーの。 だいたい、アンタprocfsとネットワークしか読んでな

    gfx
    gfx 2012/10/17
  • 革命の日々! 3.1からRLIMIT_NPROCの挙動が変わった件について

    小ネタ 3.1からLinux の RLIMIT_NPROC のあつかいがちょっと変わります。端的にいうとNetBSDちっくな動きになりました。 まずバックグランドを説明すると、NPROCはユーザあたりのプロセス数を制限する機能であると。端的にいうとプロセス数超過するとforkがEAGAIN返して失敗する。プロセスを作る方法は1つしかないから一見自明に見える。 ところが「ユーザあたりのプロセス数」というのがキモで、プロセスの所有ユーザを変えてしまうという手がある。set*uid() 族と setuidされたプログラムに対するexec()族である。 余談。従来Linuxはset*uid()族はNPROCチェックをしてEAGAINを返していたが、execではチェックしていなかった。ついでにいうとforkでのチェックもちゃんとロックされてなかったので、プロセス数の厳密な保証はもとから無かった。NP

  • 革命の日々! 2.6.34のused once ページに対する改善をcopybenchで検証してみた

    従来のLinuxはread(2)やwrite(2)によるメモリアクセスは二回タッチでactiveリストへ移動だったのに、 mmapによるタッチは(pteのaccess bitが1bitしかない関係で)1回タッチでactiveリストになっていた。 そのため、現代的なマシンではmmapを使ってコピーすると逆に遅いという自体が発生していた。 以下のURL参照 http://d.hatena.ne.jp/kzk/20060513 んで、1年ぐらい前にmadviseしたときだけ、page activationを控えめにするパッチが入っていたのだが 今回2.6.34において、madviseなしでもused onceページはactiveリストに移動しないように論理が変更された。 と、定性的に説明するのも芸がないので、ベンチをとってみた。 測定ソフト --------------------------

    gfx
    gfx 2012/01/17
  • 革命の日々! systemの挙動について

    ちょっとakrさんと議論する機会があったのでメモ 現状のRubyだと子プロセス実行中に Ctrl-Cが効かないという問題がある http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/31007 実際に、困っているひともいて。Rubyのtarに含まれているmake testが子プロセスをつくって子供がテストして結果をかえすというスタイルなので、Ctrl-Cで中断できなくて開発者は日々イライラしている。 で、このスレッドで、そうなっている理由が明らかに。 http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/31117 ところで、別件であるがperl の真似をしたといいつつ、perlはSIGHUPをマスクしてはいない。 ちょっと気になったので実装をいくつか調べてみた。

    gfx
    gfx 2011/11/12
    "(perlは)forkしたあとでSIG_IGNしてるからレースがある"
  • 革命の日々! [書評] 実践デバッグ技法

    御礼 なんで献もらえたのかまったく不明なんだけど(^^; ちまたではデバッグ三部作のトリを飾る一作と呼ばれているらしい。 いちおう、DDDとEclipseについても書いてあるけど、メインはどうみてもgdb。なので、Linux上でC言語開発をする羽目になった新人プログラマが読むと、一気にスキルが上がってお得。 昔、新人教育をやっていた時代にこれがあったら、全員に買わせたかもしれん。 ちょっと、長いけど目次を引用 推薦の言葉 まえがき 1章 初心者にもプロにも役立つ予備知識 1.1 書で扱うデバッガ 1.2 使用するプログラミング言語 1.3 デバッグの原則 1.3.1 デバッグの質:確認の原則 1.3.2 確認の原則にとってデバッガの価値とは? 1.3.3 その他のデバッグ原則 1.4 テキストベース vs. GUIベース(そして両者の折衷形態) 1.4.1 インタフェースの簡単な

    gfx
    gfx 2011/05/12
  • 革命の日々! Rubyで学ぶx86_64 ABI

    ひさしぶりにプログラミングの話題でも。 現在のRubyのtrunkをx86_64上のFedora12でmake test-allすると8個ぐらいテストが失敗するのだが、その中の1つにこういうエラーがある 1) Failure: test_sin(DL::TestDL) [/home/kosaki/linux/ruby/test/dl/test_dl2.rb:95]: <1.0> expected but was <1.38523885234213e-309>. test/dl/test_dl2.rbというのが、なにをしているテストかというと、ようするに以下のようにdlモジュールを使ってlibmのsin関数を呼んでいるわけだ module DL class TestDL < TestBase # TODO: refactor test repetition def test_sin() pi

    gfx
    gfx 2010/01/22
  • 革命の日々! カーネル読書会で講演してきました

    7月にLMSで発表したglibc mallocの解説を、ブラッシュアップしてYLUG・カーネル読書会でも発表してきた。 人の知らない間にビデオ撮影をして、YouTubeにアップするとかいう話になっていたので、「ちょ・・業務用です・・・か??」とでも言わんばかり、かなり格的ビデオカメラが会場に設置されていた。 もうダメである。 緊張しまくり、用意しておいた小ネタギャグは一切言えなかった。 熱いトークを期待したいた皆さん(いるのか?)ごめんなさい。 てゆーか、ネクタイに指す、アナウンサー向けっぽげなマイクが用意されているあたりがYLUGスゴス。と思った。 まあ、それはさて置き、当日の感想としてはhyoshiokさんのBlogあたりの感想がよくまとまっていていい感じなのではないかと思う。 結論: みんなRubyが好きなんだよ。 kernel hackerもLL hackerも交流しようよ と

  • 1