Mengimplementasikan dengan penyimpanan

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

  • Untuk diskstats harian, storaged akan mengurai secara berkala /sys/block/mmcblk0/stat (perangkat penyimpanan eMMC) atau /sys/block/sda/stat (perangkat non-eMMC).
  • Untuk masa aktif eMMC, storaged akan mengurai /d/mmc0/mmc0:001/ext_csd (jika yang tersedia).
  • Untuk menyalahkan I/O aplikasi, storaged akan melintas secara berkala /proc/uid_io/stats dan mempertahankan data yang diuraikan, yang mencakup data dari semua aplikasi (bukan hanya aplikasi yang berjalan). dumpsys dapat panggil storaged untuk mencatat penggunaan I/O aplikasi dalam laporan bug.

{i>Diskstat<i} (termasuk {i>diskstats<i} yang macet) dan informasi eMMC dicatat ke Log aktivitas Android, tempat layanan check in platform mengumpulkan log.

Operasi storaged terjadi secara otomatis dan ditangani sepenuhnya oleh 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 {i>kernel<i}.

desain yang disimpan

Untuk fleksibilitas akuntansi dan izin, storaged diimplementasikan sebagai kernel modul yang mengembalikan informasi I/O per UID (bukan menggunakan proc/PID/io). Data I/O mentah untuk setiap permintaan I/O terus disimpan dan diperbarui di {i> kernel<i} task_struct, dan {i>kernel<i} menyimpan melacak kapan proses keluar sehingga tidak lupa penggunaan I/O yang terjadi dari storaged peristiwa pemungutan suara terakhir.

Modul ini membaca data mentah dan memprosesnya hanya jika framework memberitahukannya tombol latar depan/latar belakang uid atau saat daemon storaged meminta laporan. Pada saat itu, modul mengekspor {i> node<i} file dari {i>kernel<i} untuk komunikasi dengan framework dan daemon storaged.

storaged memperkenalkan antarmuka /proc/uid_io/stats, yang menampilkan 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 baca/tulis {i>syscall<i}.

Mendapatkan status I/O dari kernel

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

Perintah: storaged -u

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

Catatan: Output ini mirip dengan output untuk proc/uid_io/stats. Hal ini karena storaged memproses data dari /proc/uid_io/stats, lalu menghasilkan datanya sendiri.

Contoh output:

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