私は最近、sabresd-6qのfstrim機能について少し掘り下げました。以下に詳細をリストします。
バックグラウンド:
Nexus 7が最初に登場したとき、多くのユーザーはそれがスピーディーで高性能であると感じました。しかし、アプリケーションをインストールしてタブレットを使用し始めて数か月後、事態は遅くなり始めました。これは、多くの人が新しいNexus 7(2013)モデルで修正されることを望んでいた摩擦点でした。しかし、話にはさらに多くのものがあります、それはGoogleがAndroid 4.3アップデートですべてのNexusデバイスでそのストレージI / Oのエージング問題を修正したことが判明しました。これには、将来のパフォーマンスに大きな影響を与える可能性のある少し誇大宣伝された機能が付属しています - fstrimによるTRIMサポート。
なぜペースを落とすのか?
ソフトウェアでファイルを削除しても、実際にはソリッドステートストレージ(SSDまたはeMMC)には通信されないことに注意してください。スペースはユーザーの視点から解放されますが、この場合の eMMC コントローラーは、NAND のページを有効なデータを持つものとして扱います。たとえば、3GBの映画を内部ストレージにコピーし、映画を視聴して、後で削除するとします。3GBを再利用できますが、これらのブロックを書き直すまで、eMMCコントローラーはすべての3GBを有効なデータとして扱います。eMMC コントローラーが使用するデータ構造は、NAND の論理的な位置と物理的な位置のマッピングを追跡します。ここでは詳しく説明しませんが、マッピングが複雑になり、追跡する場所が増えれば増えるほど、内部のNAND管理は遅くなります。なぜSSDにこのような問題があるのですか?根本的な原因は「フラッシュメモリがブロックに分割され、さらにページに分割されている」ことです。最小の書き込み単位はページですが、最小の消去単位はブロックです」と、時間が経つにつれて断片が発生します。
なぜfstrimなのか?
fstrim は TRIM から派生した Linux ファイルシステムのメカニズムの一つです。TRIM は linux2.6.33 からすでに導入されています。これは、オペレーティングシステムがファイルシステム内で空いているブロックをSSDに伝えるために送信できるコマンドの名前です。SSDはこの情報を使用して、ブロックを内部的に最適化し、空きページを迅速かつ効率的に書き込むことができるようにします。
フレームワークはandroid4.3でfstrimをどのようにトリガーしますか?
Android4.3 では、適切なタイミングで fstrim をトリガーするタイミングと方法を管理するための新しいサービス IdleMaintenanceService が導入されています。システムが次の条件を満たすと、MountService がリッスンする 1 つの "ACTION_IDLE_MAINTENANCE_START" インテントが送信されます。
Test fstrim on Imx.6
fstrimをトリガーするのを少し待つために、71分と24時間を待たないように次の変数を変更してみました。変更後、システムがアイドル状態になってから 2 分後に 30 分ごとに 1 回 fstrim がトリガーされます。
--- a/services/java/com/android/server/IdleMaintenanceService.java
+++ b/services/java/com/android/server/IdleMaintenanceService.java
- private static final long MIN_IDLE_MAINTENANCE_INTERVAL_MILLIS = 24 * 60 * 60 * 1000;1日間
+ private static final long MIN_IDLE_MAINTENANCE_INTERVAL_MILLIS = 30 * 60 * 1000;30分間
- private static final long MIN_USER_INACTIVITY_IDLE_MAINTENANCE_START = 71 * 60 * 1000;71分
+ private static final long MIN_USER_INACTIVITY_IDLE_MAINTENANCE_START = 2 * 60 * 1000;2分間
- プライベートスタティックファイナルロングMAX_IDLE_MAINTENANCE_DURATION = 71 * 60 * 1000;71分
+ private static final long MAX_IDLE_MAINTENANCE_DURATION = 2 * 60 * 1000;2分間
まず、Quadrant apkを実行して、最初にI / Oパフォーマンスを確認しますが、そのスコアは3544です。
この30分間で、システムをめちゃくちゃにしようとすることができます。ほとんどのapkをインストールするために最善を尽くしてください。バックグラウンドでモンキーテストを実行します。
次に、I/Oパフォーマンスを確認するためにQuadrantを再度実行しますが、そのスコアはわずかに低下しているだけです3538。
その後、「logcat |busybox grep -i fstrim」コンソールでfstrimのアクションを待つために、ここに私のlogcatがあります:
130|root@sabresd_6dq:/ # logcat -d | busybox grep -i fstrim
I/fstrim ( 2344): fstrim 作業を開始しています...
I/fstrim ( 2344): /data で FITRIM ioctl を呼び出しています。
I/fstrim ( 2344): /data の 6367305728 バイトをトリミング
I/fstrim ( 2344): /cache で FITRIM ioctl を呼び出しています。
I/fstrim ( 2344): /cache の 526355456 バイトをトリミング
I/fstrim ( 2344): fstrim の作業が完了しました。
OK、I / O情報を再度確認したところ、スコアは3546に復元されています。
まとめ
良い、fstrimが有効になります。したがって、android4.3 を使用した imx.6 では、fstrim も自動的に動作します。また、I/Oメモリでも良好なパフォーマンスを発揮します。すごい!
GGGOODDDDの