2013年1月4日金曜日

Plextor PX-256M5P vs 東芝 DT01ACA300BOX

初SSD記念でベンチマーク取りました。

両方ともシステム入れて使ってたり、いろんなデータすでに置いている状態なので、理想状態よりは遅くなっているであろうことを申し添えておきます。

SSD: Plextor PX-256M5P

-----------------------------------------------------------------------
CrystalDiskMark 3.0.2 Shizuku Edition x64 (C) 2007-2013 hiyohiyo
                           Crystal Dew World : http://crystalmark.info/
-----------------------------------------------------------------------
* MB/s = 1,000,000 byte/s [SATA/300 = 300,000,000 byte/s]

           Sequential Read :   513.421 MB/s
          Sequential Write :   446.646 MB/s
         Random Read 512KB :   381.395 MB/s
        Random Write 512KB :   427.883 MB/s
    Random Read 4KB (QD=1) :    28.854 MB/s [  7044.4 IOPS]
   Random Write 4KB (QD=1) :    50.956 MB/s [ 12440.3 IOPS]
   Random Read 4KB (QD=32) :   388.745 MB/s [ 94908.5 IOPS]
  Random Write 4KB (QD=32) :   348.163 MB/s [ 85000.8 IOPS]

  Test : 1000 MB [C: 24.1% (57.3/238.0 GB)] (x5)
  Date : 2013/01/04 0:36:10
    OS : Windows 8  [6.2 Build 9200] (x64)

HDD: 東芝 DT01ACA300BOX(3TB, 7200rpm)

-----------------------------------------------------------------------
CrystalDiskMark 3.0.2 Shizuku Edition x64 (C) 2007-2013 hiyohiyo
                           Crystal Dew World : http://crystalmark.info/
-----------------------------------------------------------------------
* MB/s = 1,000,000 byte/s [SATA/300 = 300,000,000 byte/s]

           Sequential Read :   174.792 MB/s
          Sequential Write :   174.704 MB/s
         Random Read 512KB :    48.242 MB/s
        Random Write 512KB :    71.147 MB/s
    Random Read 4KB (QD=1) :     0.554 MB/s [   135.2 IOPS]
   Random Write 4KB (QD=1) :     0.620 MB/s [   151.4 IOPS]
   Random Read 4KB (QD=32) :     1.516 MB/s [   370.2 IOPS]
  Random Write 4KB (QD=32) :     0.641 MB/s [   156.5 IOPS]

  Test : 1000 MB [D: 25.3% (707.1/2794.4 GB)] (x5)
  Date : 2013/01/04 0:42:54
    OS : Windows 8  [6.2 Build 9200] (x64)

文字通り桁が違います。システムドライブはもう SSD 以外考えられません。

2013年1月3日木曜日

コミケ83報告

コミケ83で Linux Kernel Updates を出します!(31日東X-58b)の事後報告です。

予想外に好評をいただき、50部持っていったのですが11時半ごろに完売してしまいました。「どうせ余るだろうから、ゆっくりいらしてください」と事前にアナウンスしていたので、午後にいらっしゃった方々、申し訳ありませんでした。

いただいたご意見の中に「Linux の変更点を最近追いかけているサイトがないので、まとめてもらえるなら実は需要あるんじゃない」というものがありました。実は KernelNewbies.org がすごくよくまとまっているので、そこを見ながら、自分が気になった新機能についてはまとめていく、なんてことが出来ればいいなぁと思います。

夏コミにも応募します。もし受かれば内容は若干古くなってしまいますが、同じ物を再販して持っていきます。そして、新しい本も出します。今度は調子に乗ってもう少し多めに持っていくつもりです。中身はまだ決定はしていませんが、Linux Virtual Server の中身と、スケジューラーの SMP 対応コードの解説なんかを考えてます。

なお、冬コミ本の中身のうち What's New in Linux 3.7? については、旬を過ぎるとおもしろくないのでBlogに掲載しました。買ってくださった方には少し恐縮ですが、もともとが Web に載っている情報なのでご容赦いただければと思います。

What's New in Linux 3.7?

コミケ83でLinux Kernel Updatesという同人誌を出したのですが、予想外の好評をいただき11時半ごろに完売となってしまいました。

次の夏コミに受かれば再販する予定ですが、Kernel 3.7 のニュースは古くなってしまうので、こちらに掲載します。

What's New in Linux 3.7?

Linux 3.7 に含まれる主な変更点を kernelnewbies.org の記事から翻訳しました。

ARM Multi-platform support

x86 では一つのカーネルイメージが複数の PC 上で動作しますが、ARM は基本的にボードやプラットフォームごとにカスタムのカーネルを作成します。いわゆる組み込み文化です。ところがそのままだと Debian のような distributor が ARM 用の distribution を配布するのが大変なので、複数のプラットフォーム上で動作するカーネルイメージを作成可能にしました。 ただし、単に起動するだけといったレベルですので、実用的な使用には現時点ではボードごとの定義が必要です。

ARM 64-bit support

ARMv8 では 64bit コードの実行がサポートされましたので、Linux でも 64bit 版 ARM コードの生成をサポートしました。 x86 と異なり、 64bit ARM は 32bit ARM と全く互換性がないので、別のソースツリーで管理されることになりました。

Btrfs の改善

fsync() の改善: fsync() はデータをディスクにフラッシュするシステムコールです。btrfs はこれまで fsync() が遅かったのでいくつかのアプリケーションでのボトルネックになっていましたが、これが改善されました。 SATA の遅いドライブでも2割~5割、Fusion IO や RAMディスクなどの高速なドライブでは最大7倍程度の性能改善になります。

ディレクトリあたりのハードリンク数上限の解除: Btrfs は従来ディレクトリ内にはハードリンクを20しか許しませんでしたが、今回のバージョンから6万5000個のハードリンクを作成できるようになりました。また、これに伴いディスク上の構造に拡張が加えられました(古いバージョンのカーネルとは互換性がありません)。

Hole punching: ファイルのある一定の領域を未割り当てな状態とする、FALLOC_FL_PUNCH_HOLE オプションをサポートしました。蛇足ですがこのパッチは fusion-io の方からポストされています。やはり SSD にとっては TRIM されているかどうかは重要な様子です。

chattr による ファイルごとの NOCOW 属性のサポート: btrfs ではデフォルトでは COW(copy-on-write) を使用しますが、従来は nodatacow マウントオプションにより COW を無効にすることができました。COW は負荷によっては性能が悪化します。この変更では、ファイル単位で COW を無効にすることができます。ただし、すでに内容があるファイルの属性を変更することはできず、空のファイルにのみ適用できます。すでに中身があるファイルを変更したい場合は、一度テンポラリファイルを作成して属性を変更し、中身をコピーする必要があります。また、COW を無効にすると、チェックサムも無効になります。

perf trace, strace の代替

strace の代替として、新しい "perf trace" が perf profiling infrastructure に追加されました。従来 strace は ptrace() を使っていましたが、perf trace は Linux profiling infrastrcture を使用します。

まだ開発の初期バージョンでシステムコールのみ表示できますが、今後ページフォールト、task のライフタイムイベント、スケジューリングイベントなどをサポートする予定です。また、現在は live で表示することしか出来ませんが、 perf.data のようなファイルを出力して事後の解析ができるようになる予定です。

サーバー側 TCP Fast Open

3.6 ではクライアント側での TCP Fast Open のみサポートされていましたが、3.7 でサーバー側のサポートも追加され、 Linux の TCP Fast Open サポートが完了しました。

実験的な SMBv2 プロトコルサポート

CIFS ネットワークファイルシステムが SMB プロトコル version 2 をサポートしました。 SMB2 はよく使われている CIFS と SMB によるファイル共有の後継で、2006 に Windows Vista により導入されました。 SMBv2 は前のバージョンに比べて高い性能、セキュリティと多くの機能が提供されます。 ちなみに Samba 4.0 では SMB 2.1 がサポートされ、また Windows 8 からサポートされる SMB 3.0 のサーバー実装も進んでいます。需要がどれほどあるのか、少し不安なところもありますが、新しいプロトコルのサポートに期待です。

NFS v4.1 の「実験的」が取れました

NFS v4.1 (RFC5661) は長い時間をかけてサポートされてきましたが、今回はじめて「実験的(experimental)」ラベルが取れました。

NFC v4.1 の主な機能は pNFS (parallel NFS) です。pNFS を用いると、ファイルシステムやファイルを複数のサーバーに分散して配置し、並列にアクセスすることが可能になります。

拡張性のある VLAN トンネリングプロトコル

vxlan という、L2 ethernet over UDP のトンネリングプロトコルが Linux に追加されました。 vxlan はしばしば仮想化環境で仮想ネットワークをトンネリングするために使われます。

VXLAN プロトコルそのものは RFC ドラフトで、VLAN の数が 4096 に制限されていることを解決するためのトンネリングプロトコルです。 vxlan では識別子が 24bit に拡張されます。また、使用するUDPポートは一つです。他のほとんどのトンネリングプロトコルとは異なり、VXLAN は 1:1 だけではなく 1:n の接続もサポートしています。VXLAN デバイスは接続先のIPを自動識別してブリッジを自動構成することも可能ですし、または静的に転送設定を記述することもできます。 Open vSwitch のための VXLAN 実装もあります。

Intel SMAP のサポート

Intel SMAP (Supervisor Mode Access Prevention) は、将来の Intel プロセッサに導入されるセキュリティ拡張です。SMAP が有効になると、カーネルがユーザー空間のメモリにアクセスすることが禁止されます。いくつかの exploit の防止に役立ちます。

ext4 の改善

truncate / unlink が高速化されました。 あるベンチマークにおいて、60GB のファイルを rm する場合、従来 2.7秒かかっていたものが 0.6秒強まで短縮されています。

ディレクトリエントリのサイズを一定に制限することができるようになりました。

ネットワーク

loopback インタフェースのデフォルト MTU が 64kb に増えました。

まとめると、今回の目玉は ARM アーキテクチャの改善ですが、btrfs や ext4 のパフォーマンス改善など、実際に役に立つ変更も多数含まれています。また、 TCP Fast Open のサーバーサイドサポートも含まれましたので、Web アプリケーションの高速化には 3.7 以降が必須になってくるでしょう。

Part of the above article is translated from http://kernelnewbies.org/Linux_3.7, CC-BY Linux Kernel Newbies