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