#topicpath ** SSDとLinux [#s7ba1d10] *** SSD の選択について [#g15b233e] + 大量のデータを読み書きする場合~ 1セルの電子量の状態を1ビットでなく3ビット記録できる TLC(Triple Level Cell) が推奨される。~ ~ *** カーネル・パーティションについて [#led2413b] + バージョン 3.9 以上~ SSD キャッシングが使える。ただし、これは、SSDをハードディスクのキャッシュとして使うものであるので、~ SSD の寿命を伸ばすことは関係なさそうだ。~ ~ + 最新のファームウエアを使うこと~ sudo smartctl -a /dev/sda などで確かめる。~ ~ + I/O スケジューラ~ Linux カーネル 2.6.10 から、デバイス毎スケジューラを切り替えることが出きるようになった。通常、ハードディスクの場合には、データが~ 分散して書かれているために、ヘッドの移動などを考慮して最適化した方がアクセスが早くなる。SSD の場合には、そのような心配はない。そこ~ SSD の場合には、スケジューラを[[用いない(noopにする)のがいいという議論>http://d.hatena.ne.jp/yohei-a/20131005/1380980124]]と、[[deadlineにするのがいいという議論>https://wiki.debian.org/SSDOptimization#Low-Latency_IO-Scheduler]]とがある。~ 劇的な違いはなく、寿命も関係なさそうだ。~ ~ + パーティション~ 4kB のページサイズを考慮してパーティションを分けなければならない。[[このページ>https://wiki.debian.org/SSDOptimization#Partitions_and_Alignment]]によるとwheezy でパーティションを分けるなら意識しなくてもいいようだ。~ ~ *** swapについて [#h3d19f8f] + swap 領域をSSDに作らない。~ メモリを多めにする、ということ。決まった仕事しかしないだろうので、あらかじめ見当をつけるべき。~ ~ + ハイバネーションなどのために swap を作るときは、できるだけ swap を起こさないようにする。~ /etc/sysctl.conf に次のように書き加える。 vm.swappiness = 0 メモリがいっぱいになるまでスワップしなくなる。(cf. [[Wikipedia>http://ja.wikipedia.org/wiki/Swappiness]])~ ~ *** ファイルシステムについて [#l8c75d8f] + 永続的な記憶領域に btrfs を使う。~ 最も先進的である btrfs は、SSD に対する配慮があるらしい。詳しくは、例えば [[ArchLinuxのBtrfsの解説>https://wiki.archlinux.org/index.php/Btrfs_(%E6%97%A5%E6%9C%AC%E8%AA%9E)]]を見れば良い。~ ~ + マウント時にアクセス記録(atime)を記録しないようにする。~ オプションに noatime を追加する。ただし、ls -a などで最終アクセス記録を参照できなくなる(多分。)。~ 例: /dev/sda1 / ext4 noatime,errors=remount-ro 0 0 ~ + SSDの空き領域を開放する TRIM を自動で実行する。~ オプションに discard を加える。btrfs, ext4 で有効。TRIMについては[[2011年の記事がこちら>http://www.dosv.jp/other/1005/18.htm]]にある。~ 例: /dev/sda1 / ext4 noatime,discard,errors=remount-ro 0 0 ~ ただし、ファイルシステムがいっぱいに近くなったときに有効かも、という話であって、[[TRIM は不要だという議論>http://www.spinics.net/lists/raid/msg40916.html]]もある。~ また、あらかじめ領域を余分に 15% ほどとっている SSD があるようだ。[[そういう場合には TRIM は不要であるという議論>http://www.spinics.net/lists/raid/msg40866.html]]がある。。~ ~ + 一時的な記憶領域に tmpfs を使う。~ RAM の一部をファイルシステムにするのが tmpfs である。指定したサイズは最大値であり、空いている部分は普通に~ メインメモリとして利用される。設定方法は二つある。~ ++ /etc/fstab に設定する方法~ この方法は、次に書く設定方法よりも優先的に設定される。例えば、/etc/fstab に次のように書き加えると /tmp が tmpfs になる。~ 例: tmpfs /tmp tmpfs defaults,size=512m 0 0 ~ ++ /etc/default/tmpfs (squeeze までは /etc/default/rcS ) に設定する方法~ wheezy になって変わったところなので、[[それなりのドキュメント>https://www.debian.org/releases/stable/kfreebsd-i386/release-notes/ch-whats-new.ja.html#tmpfs-filesystems]]を参照すること。[[この記事>http://mizupc8.bio.mie-u.ac.jp/pukiwiki/index.php?TIPS%2FLinux%2F056#r53e3d50]]も具体的な設定として参考になる。~ ~ ※ tmpfs に書き出しておいて、ときどき、SSD に同期(シンクロナイズ)する、つまり、定期的に SSD に書き出すのも推奨される。~ そのためのツールとして、[[anything-sync-daemon>https://github.com/graysky2/anything-sync-daemon]] とか [[goanysync>https://github.com/wor/goanysync]] がある。~ ~ *** キャッシュの書き込み [#ncb01590] + メモリ上にキャッシュされた書き込みは、定期的にディスクに書き込まれます。その時間を確かめるには cat /proc/sys/vm/dirty_writeback_centisecs とします。単位は1/100秒なので、500 と表示されたら、5秒ごとに書き込むということのようです。これを長くすると、ファイルに再度変更があった場合にまとめて書き込まれます。 /etc/sysctl.conf に以下の行を追加します。 vm.dirty_writeback_centisecs = 1500 ~ *** cron で動いているプログラム [#b6e3013b] + mlocate~ mlocate は locate コマンドでファイルを探すためのデータベースを cron で作っています。使わなければパッケージごと削除しましょう。~ ~ ~ ** リンク集 [#eea8caf8] - [[Ubuntu LinuxでSSDの寿命を延ばすための設定/おいぬま日報>http://blog.lampetty.net/blog_ja/index.php/archives/299]] - [[TIPS/Linux/056>http://mizupc8.bio.mie-u.ac.jp/pukiwiki/index.php?TIPS/Linux/056]] - [[Debian SSD Optimization>https://wiki.debian.org/SSDOptimization]]