Menerapkan penyimpanand

Android O menambahkan dukungan untuk storaged , daemon asli Android yang mengumpulkan dan memublikasikan metrik penyimpanan di perangkat Android.

  • Untuk diskstats harian, storaged mem-parsing secara berkala /sys/block/mmcblk0/stat (perangkat penyimpanan eMMC) atau /sys/block/sda/stat (perangkat non-eMMC).
  • Untuk masa pakai eMMC, storaged mem-parsing /d/mmc0/mmc0:001/ext_csd (jika tersedia).
  • Untuk aplikasi yang menyalahkan I/O, storaged secara berkala melintasi /proc/uid_io/stats dan memelihara data yang diurai, yang mencakup data dari semua aplikasi (tidak hanya aplikasi yang berjalan). dumpsys dapat memanggil storaged untuk mencatat penggunaan I/O aplikasi dalam laporan bug.

Diskstat (termasuk diskstats yang terhenti) dan informasi eMMC dicatat ke log peristiwa Android, tempat layanan check-in platform mengumpulkan log.

operasi storaged terjadi secara otomatis dan ditangani sepenuhnya oleh kerangka kerja Android, sehingga Anda tidak perlu melakukan pekerjaan implementasi apa pun. Halaman ini menjelaskan desain storaged (termasuk antarmuka baru) dan cara menggunakannya untuk mendapatkan status I/O dari kernel.

desain penyimpanan

Untuk fleksibilitas akuntansi dan izin, storaged diimplementasikan sebagai modul kernel yang mengembalikan informasi I/O per-uid (daripada menggunakan proc/PID/io standar). Data I/O mentah untuk setiap permintaan I/O terus disimpan dan diperbarui di kernel task_struct , dan kernel terus melacak kapan suatu proses keluar sehingga tidak melewatkan penggunaan I/O yang terjadi dari peristiwa polling terakhir storaged .

Modul membaca data mentah dan memprosesnya hanya ketika kerangka kerja memberitahukannya tentang saklar latar depan/latar belakang uid atau ketika daemon storaged meminta laporan. Pada saat itu, modul mengekspor node file dari kernel untuk komunikasi dengan kerangka kerja dan daemon storaged .

storaged memperkenalkan antarmuka /proc/uid_io/stats , yang mengembalikan daftar statistik I/O untuk setiap UID dalam sistem. Formatnya adalah:

<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>
  • byte baca/tulis adalah peristiwa I/O dari perangkat penyimpanan.
  • karakter baca/tulis (juga dalam byte) adalah data yang diminta oleh syscall baca/tulis.

Mendapatkan status I/O dari kernel

Untuk membuang penggunaan I/O dari kernel, gunakan perintah storaged dengan opsi -u .

Perintah: storaged -u

Format keluaran perintah: name/uid fg_rchar fg_wchar fg_rbytes fg_wbytes bg_rchar bg_wchar bg_rbytes bg_wbytes fg_fsync bg_fsync

Catatan: Keluaran ini mirip dengan keluaran untuk proc/uid_io/stats . Ini karena storaged memproses data dari /proc/uid_io/stats dan menghasilkan datanya sendiri.

Contoh keluaran:

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