Depolama alanını uygulama

Android 8, Android cihazlarda depolama alanı metriklerini toplayıp yayınlayan Android'e özgü bir daemon olan storaged için destek ekler.

  • Günlük diskstats için storaged, /sys/block/mmcblk0/stat (eMMC depolama cihazları) veya /sys/block/sda/stat (eMMC olmayan cihazlar) dosyalarını düzenli olarak ayrıştırır.
  • eMMC kullanım ömrü için storaged, /d/mmc0/mmc0:001/ext_csd değerini (varsa) ayrıştırır.
  • Uygulama I/O suçlaması için storaged, /proc/uid_io/stats'ü düzenli olarak tarar ve ayrıştırılmış verileri (yalnızca çalışan uygulamalardan değil, tüm uygulamalardan gelen verileri) korur. dumpsys, uygulama G/Ç kullanımını bir hata raporuna kaydetmek için storaged'ı çağırabilir.

Diskstat (duraklamış disk istatistikleri dahil) ve eMMC bilgileri, platform check-in hizmetinin günlükleri topladığı Android etkinlik günlüğüne kaydedilir.

storaged işlemleri otomatik olarak gerçekleşir ve tamamen Android çerçevesi tarafından yönetilir. Bu nedenle herhangi bir uygulama çalışması yapmanız gerekmez. Bu sayfada, storaged'ün tasarımı (yeni arayüzler dahil) ve çekirdekten I/O durumunu almak için nasıl kullanılacağı açıklanmaktadır.

depolanan tasarım

Hesaplama ve izin esnekliği için storaged, standart proc/PID/io kullanmak yerine kullanıcı kimliği başına G/Ç bilgilerini döndüren bir çekirdek modülü olarak uygulanır. Her G/Ç isteği için ham G/Ç verileri, çekirdek task_struct'de depolanmaya ve güncellenmeye devam eder. Çekirdek, son storaged anket etkinliğinden itibaren gerçekleşen G/Ç kullanımını kaçırmamak için bir işlemin ne zaman sona erdiğini izler.

Modül, ham verileri okur ve yalnızca çerçeve bir uid ön plan/arka plan geçişi hakkında bilgi verdiğinde veya storaged daemon bir rapor istediğinde işler. Bu sırada modül, çerçeve ve storaged daemon ile iletişim kurmak için çekirdekten bir dosya düğümü dışa aktarır.

storaged, sistemdeki her UID için G/Ç istatistiklerinin listesini döndüren /proc/uid_io/stats arayüzünü kullanıma sunar. Biçim şu şekildedir:

<uid>: <foreground read bytes> <foreground write bytes> <foreground read chars> <foreground write chars> <background read bytes> <background write bytes> <background read chars> <background write chars>
  • Okunan/yazılan baytlar, bir depolama cihazından gelen G/Ç etkinlikleridir.
  • read/write chars (bayt cinsinden de olabilir), read/write sistem çağrıları tarafından istenen verilerdir.

Çekirdekten G/Ç durumunu alma

Çekirdekteki G/Ç kullanımını dökmek için storaged komutunu -u seçeneğiyle kullanın.

Komut: storaged -u

Komut çıkışı biçimi: name/uid fg_rchar fg_wchar fg_rbytes fg_wbytes bg_rchar bg_wchar bg_rbytes bg_wbytes fg_fsync bg_fsync

Not: Bu çıkış, proc/uid_io/stats içinki çıkışa benzer. Bunun nedeni, storaged'ün /proc/uid_io/stats'daki verileri işleyip kendi verilerini oluşturmasıdır.

Örnek çıkış:

com.google.android.backuptransport  2269  60  0  0  1719845663  143912573  149065728  184180736
com.android.vending  2170  60  0  0  219904796  38693092  174436352  18944000