ใช้พื้นที่เก็บข้อมูล

Android 8 เพิ่มการรองรับ 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 (รวมถึง Diskstat ที่ค้าง) และ eMMC ลงในบันทึกเหตุการณ์ของ Android ซึ่งบริการเช็คอินของแพลตฟอร์มจะรวบรวมบันทึก

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

การออกแบบที่เก็บไว้

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

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

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 จากอุปกรณ์จัดเก็บข้อมูล
  • read/write chars (เป็นไบต์เช่นกัน) คือข้อมูลที่ขอโดย read/write 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