日記スマートフォン用の表示で見るぼちぼち日記おそらくプロトコルネタを書いていることが多いんじゃないかと思います。Node-v0.10.28とNode-v0.11.13のリリース先週末、安定版のNode-v0.10.28と開発版のNode-v0.11.13がリリースされました。*1次の0.11.14が0.11系の最後となる予定とアナウンス。Node-v0.12です。CLOCK_REALTIME_COARSEのような修正が入りました。Node-v0.10のV8でLinux向けにNode固有の性能向上パッチが適応されたようです。ライブラリ関数の形式で可能になりました。Objects)とは、カーネルスペースの処理をユーザスペースで代用実行できるライブラリ機能で、システムコールの呼び出しにかかる負荷を大幅に低減できる仕組みです。clock_gettime(2))に置き換えて、Date.now()の高速化を図ったものです。2.6.32以上)であること。必要で、この2つ目の条件がLinuxのディストリビューションによって違うみたいです(後述)。VitualBoxやVmwareなど仮想化ハイパーバイザー側でシステムコールを処理してCLOCK_REALTIME_COARSE対応有無にかかわらず性能が変わらないといったことも見受けられました(誰か詳細わかる人教えてください)。Date.now()が高速化できたのか、実際に測ってみました。機能でブロックされちゃったのが原因だろうと想像しています。Nodeは関係ないので独自にパッチを当てたのでしょう(0.11系にはまだ未対応)。CLOCK_REALTIME_COARSEが使えているか確認する先述した通り、CLOCK_REALTIME_COARSEの時間解像度が1msec以下であることが必要ですが、チェックしてみましょう。この時間解像度の値は、Linuxのタイマー割り込み頻度の設定に依存します。タイマー割り込みの頻度は、OS全体のパフォーマンスに影響するのですが、各ディストリビューションで提供されているカーネルの設定値は、歴史的な経緯もあってばらつきがあるようです。実際に確認してみましょう。\#CONFIG_HZ_250=yCONFIG_HZ=250次に実際にCLOCK_REALTIME_COARSEの時間解像度を求めてみます。4000000nsうわぁー、やっぱりUbuntuじゃVDSOの恩恵は受けられなさそうです。実行時の時刻取得システムコール(clock_gettime(2))を見てみましょう。0Fedoraの方は、CLOCK_REALTIMEの時刻取得のシステムコールがないので、VDSOが効いているのがわかります。どれだけDate.now()が速くなるのか?さぁ、どれだけ速くなるのかベンチマークです。Date.now()を実行してみます。Date.now();Node-v0.10.26とNode-v0.10.28で実行時間を比べてみます。Date.now()が約15倍速くなった。straceでシステムコール統計を取ってみるとその違いは明らかです。Node-v0.10.28では、システムコール数がわずか数百。Ubuntuで同じベンチをやってみたんですが、予想通りほとんど変わらずです。ベンチをしてみたのですが、結果ほとんど変わりませんでした(他のボトルネックの方が大きい)。先述の通り、仮想化環境やディストリビューションのカーネル設定に依存しますが、EC2上のRedHat系OSで時刻取得を頻繁に行うような処理をしているNodeがあれば、Node-v0.10.28へのバージョンアップを検討することをお勧めします。*1:Node-v0.10.27は、npmの変数名typoによる致命的なバグが見つかったので使わないようにしましょう。(Node本を書くのはホント大変なのよ)著者の高橋登史朗さんより献本して頂きました。ありがとうござ...2012-05-10node-v0.6.18からエラー表示がわかりやすくなります。第2.0版」を読んで月別アーカイブはてなブログをはじめよう!jovi0608さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。