web-dev-qa-db-ja.com

fstrimとiostat

新しいノートブックに新しいsamsungssdがあります。ディスク(Firefoxプロファイルとメモリ内の/var/log)への書き込みを回避するためにすべてを調整しました。relatimeext4 fsを使用し、fstrimを使用しています。私のssdをTRIMするために1日1回。

iostat -dhmでディスクの負荷を監視しています。 fstrimを実行する前にコマンドiostatが表示されます

Device:            tps    MB_read/s    MB_wrtn/s    MB_read    MB_wrtn
sda
              4.97         0.05         0.59       1856      20924

トリミング後/home

# fstrim -v /home
/home: 100.2 GiB (107555401728 bytes) trimmed

ìostatショー

Device:            tps    MB_read/s    MB_wrtn/s    MB_read    MB_wrtn
sda
              5.91         0.05         3.51       1859     123498

MB_wrtn増加102574 MBfstrim102574 MB = 100.2 GBをディスクに書き込んでいるということですか?

Trimは、有効なデータを含まないページを「マーク」し、書き込みを行わないことになっています。

iostatは、fstrimによって行われた操作を書き込みとして見たと思います(そうではない書き込みであっても)。どう思いますか?ディスクを監視するためのより良い方法はありますか?

注:iotopを使用しても、強制終了されたプロセスのデータ量が表示されないため、答えにはなりません。したがって、iotopの測定値は不正確です。

5
fclad

MB_wrtnは102574MB増加しました。これは、fstrimが102574 MB = 100.2 GBをディスクに書き込んでいることを意味しますか?

はい、それはまさにそれを意味します。 fstrimは基本的に、ブロックデバイスのすべてのブロックを調べ、そのブロックがファイルシステムによって使用されているかどうか(つまり、重要なデータが含まれているかどうか)を判断します。

  • ブロックが使用中です:無視してください。
  • ブロックは使用されていません。このブロックのATATRIMコマンドを基になるブロックデバイスに送信します。

完了すると、トリミングされたブロックの量は常にファイルシステムの空き領域と同じになります。 fstrim過去にすでにTRIMされているかどうかに関係なく、実行するたびに各空きブロックをTRIMするため、頻繁に実行しても高速になることはありません。

カーネルはおそらくTRIMコマンドを書き込みコマンドと見なすため、実行されたすべてのTRIMコマンドは4k書き込みコマンドとしてカウントされます。

Trimは、有効なデータを含まないページを「マーク」し、書き込みを行わないことになっています。

ブロックをトリミングとして「マーク」することは、内容が変わるため、ブロックを「書き込む」ことと同じです。誤って間違ったブロックをTRIMすると、データが失われます。間違ったブロックにゼロを書き込むとデータが失われるのと同じです。

3