コンテンツへスキップ

[Linux] ファイルシステムとパフォーマンス測定

あるツールの処理中にCPU使用率を見るとI/O待ちが発生していました。巨大なファイルを中間生成していてこれがI/O待ちの原因でしたが、結構な時間がかかっています。これを少しでも解消するため、パフォーマンスの良いファイルシステムを探してみました。

Temporary向きのファイルシステムを探して

ことの発端はスマートフォンアプリのMaps.me用地図の自作を始めたことでした。ツールを使って地図データをOSMから専用形式に変換するわけですが、これがメモリを大量に必要とするのです。本家はメモリをがっつり積んだサーバで作成しているの対して、我が家にそんな贅沢な環境は無いのでストレージをメモリ代わりにするモードで動作させています。当たり前ながら結構時間がかかります。遅いなりになんとか改善出来ないものか・・・と考えた末、じゃあ一時ファイルを書き出すストレージを用意してパフォーマンス優先でチューニングすればマシになるのではと考えました。

本記事ではツールが生成する中間生成ファイルを読み書きするためだけの、謂わばTemporary専用HDDとしての使用に適したファイルシステムを探すことを目的としています。Temporary専用なので、ファイルシステムはパフォーマンスを第一に考えて選択したいと考えています。信頼性については、不意のシステムダウンが発生してファイルシステムが破損してもテンポラリファイル以外無いので最悪フォーマットしてしまえばいい、というスタンスです。

Screenshot_20180518-153829.png
自作した等高線入りのMaps.me地図。なかなか便利なのですが、作るのに丸一日かかったりします。

環境

かなり古いPCです。このPCに巨大な中間生成ファイル書き出し先としてテンポラリ専用HDDを接続してベンチマークを取り、最もパフォーマンスの良くなるものを探したいと思います。

  • CPU:Core2Duo E8400 (3.0GHz)
  • Memory:8BGyte
  • MothorBoard:Asus P5K-E
  • OS:Ubuntu18.04 (64bit)
  • kernel:4.15.0-36-generic
  • Storage:
    • HDD(System)
    • HDD(データ保存用)
    • HDD(ベンチマーク用)

ベンチマーク用HDDは以下のものを使用します。

  • WesternDigital WD15EADS(1.5GByte)
R0013628.JPG
このHDD(WD15EADS)を使ってベンチマークを行います。ただコレ、先日セクタエラーに起因する異音から復活した半病人です。HDDがこれしか空いてませんでした。。。

試験内容

測定方法

ベンチマーク用HDDにファイルシステムを作成して、bonnie++を使用してベンチマークを行いました。


$ bonnie -d /target/ -n 256:1024:1024:16

比較対象のファイルシステム

パフォーマンスの良いファイルシステムと言っても、でかいファイルが作られるのでファイルのサイズ制限が小さいと使えませんし、ツールの仕様上シンボリックリンクが使えなくても困ります。ということで選択肢はそう多くはありませんでした。

  • ext4
  • ext2
  • xfs

ブロックサイズはそれぞれデフォルト値の4096byteです。加えて、それぞれのファイルシステムでパフォーマンスに影響すると思しきマウントオプションを変更して比較を行います。

なお、zfsは搭載メモリが少ないとパフォーマンスを発揮できないらしいので今回は除外しました。

測定結果

測定した結果をスプレッドシートにまとめてみました。計測値は同じパラメータでも毎回バラツキ(10%くらいは前後してそう)があるようなので参考程度に見てください。

比較してみると・・・

今回の目的であるツールの一時ファイル置き場としては、恐らくバイト単位のRead/Writeが多発すると思われます。それに関係する数値をグラフにしてみました(かなり見難くて申し訳ないですが、ext4から順にマウントオプション毎の数値になっています)。

バイト単位の読み込み速度

バイト単位の書き込み速度

Seek

こうして見るとext2(マウントオプションdefault)がバランス良くパフォーマンスが出ているようですね。ジャーナリングシステムが無い分シンプルだからでしょうか。サポートする日付範囲が2038年までなのがちょっとアレですが、しばらくTemporary専用HDDにext2を採用して様子を見ようと思います。

 

所感

思い付きから始まったベンチマークの結果、意外(でもない?)とバイト単位のRead/Write性能ではext2に軍配があがりました。もちろん、この結果は一時ファイルしか置かない作業用ストレージという使い方故の選択です(システムや重要なデータが入っているのにはext4を使っています)。あるいはHDDではなくSSDだったら違う結果になったかもしれません。

個人的に意外だったのは、ext4にnobarrierやdate=writeback等といったパフォーマンス優先のマウントオプションを指定しても思ったようにパフォーマンスが伸びない(ものによっては低下している)ことです。おそらく環境や使い方によるのだと思いますが、実際に測ったみないと分からないものですね。

 

参考

この記事は以下の内容を参考にさせていただきました。

 

公開日 カテゴリー PC

sukeについて

自転車で日本一周旅行に出ようとー思い立ったエンジニア。 ガジェット類やセミナーに目がない。 将来は田舎でほっこりとしたいですねー

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください