ดำเนินการจัดเก็บ

Android O เพิ่มการรองรับ storaged ซึ่งเป็นดีมอนเนทีฟของ Android ที่รวบรวมและเผยแพร่เมตริกพื้นที่เก็บข้อมูลบนอุปกรณ์ Android

  • สำหรับ diskstats รายวัน ที่ storaged จะแยกวิเคราะห์เป็นระยะ /sys/block/mmcblk0/stat (อุปกรณ์เก็บข้อมูล eMMC) หรือ /sys/block/sda/stat (อุปกรณ์ที่ไม่ใช่ eMMC)
  • สำหรับอายุการใช้งาน eMMC ให้แยกวิเคราะห์ storaged /d/mmc0/mmc0:001/ext_csd (ถ้ามี)
  • สำหรับการตำหนิ I/O ของแอปพลิเคชัน storaged จะสำรวจ /proc/uid_io/stats เป็นระยะ และรักษาข้อมูลที่แยกวิเคราะห์ ซึ่งรวมถึงข้อมูลจากแอปพลิเคชันทั้งหมด (ไม่ใช่แค่แอปพลิเคชันที่รันอยู่) dumpsys สามารถเรียก storaged เพื่อบันทึกการใช้งาน I/O ของแอปพลิเคชันในรายงานข้อบกพร่อง

Diskstat (รวมถึง diskstats ที่หยุดทำงาน) และข้อมูล eMMC จะถูกบันทึกไว้ในบันทึกเหตุการณ์ของ Android ซึ่งบริการเช็คอินแพลตฟอร์มจะรวบรวมบันทึกดังกล่าว

การดำเนินการ storaged จะเกิดขึ้นโดยอัตโนมัติและได้รับการจัดการโดยเฟรมเวิร์ก Android ทั้งหมด ดังนั้นคุณไม่จำเป็นต้องดำเนินการใช้งานใดๆ หน้านี้อธิบายการออกแบบ storaged (รวมถึงอินเทอร์เฟซใหม่) และวิธีการใช้งานเพื่อรับสถานะ I/O จากเคอร์เนล

การออกแบบที่จัดเก็บ

เพื่อความยืดหยุ่นในการบัญชีและการอนุญาต storaged จะถูกนำไปใช้เป็นโมดูลเคอร์เนลที่ส่งคืนข้อมูล I/O per-uid (แทนที่จะใช้มาตรฐาน proc/PID/io ) ข้อมูล I/O ดิบสำหรับคำขอ I/O แต่ละรายการยังคงถูกจัดเก็บและอัปเดตในเคอร์เนล task_struct และเคอร์เนลจะติดตามเมื่อกระบวนการออก ดังนั้นจึงไม่พลาดการใช้งาน I/O ที่เกิดขึ้นจากเหตุการณ์การสำรวจ storaged ครั้งล่าสุด

โมดูลอ่านข้อมูลดิบและประมวลผลเฉพาะเมื่อเฟรมเวิร์กแจ้งเตือนถึงสวิตช์ส่วนหน้า/พื้นหลังของ uid หรือเมื่อ daemon storaged ข้อมูลร้องขอรายงาน ในขณะนั้น โมดูลจะส่งออกโหนดไฟล์จากเคอร์เนลเพื่อสื่อสารกับเฟรมเวิร์กและดีมอน storaged

storaged แนะนำอินเทอร์เฟซ /proc/uid_io/stats ซึ่งจะส่งคืนรายการสถิติ I/O สำหรับแต่ละ UID ในระบบ รูปแบบคือ:

<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>
  • ไบต์การอ่าน/เขียนคือเหตุการณ์ I/O จากอุปกรณ์จัดเก็บข้อมูล
  • ตัวอักษรการอ่าน/เขียน (มีหน่วยเป็นไบต์ด้วย) คือข้อมูลที่ร้องขอโดย syscalls การอ่าน/เขียน

รับสถานะ I/O จากเคอร์เนล

หากต้องการดัมพ์การใช้งาน I/O จากเคอร์เนล ให้ใช้คำสั่ง storaged พร้อมกับอ็อพชัน -u

คำสั่ง: storaged -u

รูปแบบเอาต์พุตคำสั่ง: name/uid fg_rchar fg_wchar fg_rbytes fg_wbytes bg_rchar bg_wchar bg_rbytes bg_wbytes fg_fsync bg_fsync

หมายเหตุ: เอาต์พุตนี้คล้ายกับเอาต์พุตสำหรับ proc/uid_io/stats เนื่องจาก storaged ข้อมูลประมวลผลข้อมูลจาก /proc/uid_io/stats และสร้างข้อมูลของตัวเอง

ตัวอย่างผลลัพธ์:

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