ใน Android เวอร์ชันก่อนหน้า ระบบจะสแกนไปทั่วไฟล์ทั้งหมดที่แอปหนึ่งๆ เป็นเจ้าของเพื่อวัดการใช้งานดิสก์ การวัดด้วยตนเองนี้อาจใช้เวลาหลายนาทีในการประมวลผลก่อนที่จะแสดงผลลัพธ์ต่อผู้ใช้ในการตั้งค่า
นอกจากนี้ อัลกอริทึมภายในสำหรับการล้างไฟล์ข้อมูลที่แคชไว้จะพิจารณาเฉพาะเวลาที่มีการแก้ไขในแอปทั้งหมด ซึ่งทำให้แอปที่เป็นอันตรายสามารถลดประสบการณ์โดยรวมของผู้ใช้ได้โดยการตั้งค่าเวลาที่แก้ไขไว้ในอนาคตอันไกลโพ้นเพื่อแสดงข้อมูลให้ตัวเองโดดเด่นกว่าแอปอื่นๆ อย่างไม่เป็นธรรม
Android 8.0 เสนอให้ใช้ประโยชน์จากการสนับสนุน "โควต้า" ของระบบไฟล์ ext4 เพื่อแสดงสถิติการใช้งานดิสก์เกือบจะทันที เพื่อปรับปรุงประสบการณ์การใช้งานเหล่านี้ ฟีเจอร์โควต้านี้ยังช่วยปรับปรุงความเสถียรของระบบด้วย โดยป้องกันไม่ให้แอปใดแอปหนึ่งใช้พื้นที่ในดิสก์เกิน 90% หรือ inode เกิน 50%
การใช้งาน
ฟีเจอร์โควต้าเป็นส่วนหนึ่งของการใช้งาน installd
โดยค่าเริ่มต้น
installd
จะใช้ฟีเจอร์โควต้าโดยอัตโนมัติเมื่อเปิดใช้ในระบบไฟล์ที่เจาะจง ระบบจะกลับมาคำนวณด้วยตนเองโดยอัตโนมัติและโปร่งใสเมื่อฟีเจอร์โควต้าไม่ได้เปิดใช้หรือรองรับในอุปกรณ์บล็อกที่วัด
วิธีเปิดใช้การรองรับโควต้าในอุปกรณ์บล็อกหนึ่งๆ
- เปิดใช้ตัวเลือกเคอร์เนล
CONFIG_QUOTA
,CONFIG_QFMT_V2
และCONFIG_QUOTACTL
- เพิ่มตัวเลือก
quota
ลงในพาร์ติชัน userdata ในไฟล์ fstab โดยทำดังนี้/dev/block/platform/soc/624000.ufshc/by-name/userdata /data ext4 noatime,nosuid,nodev,barrier=1,noauto_da_alloc latemount,wait,check,formattable,fileencryption=ice,quota
คุณเปิดหรือปิดใช้ตัวเลือก fstab
ในอุปกรณ์ที่มีอยู่ได้อย่างปลอดภัย ในระหว่างการบูตครั้งแรกหลังจากเปลี่ยนตัวเลือก fstab
ระบบจะบังคับให้ fsck
ผ่านเพื่ออัปเดตโครงสร้างข้อมูลโควต้าทั้งหมด ซึ่งอาจทำให้การบูตครั้งแรกใช้เวลานานขึ้นเล็กน้อยfsmgr
ส่วนการบูตครั้งต่อๆ ไปจะไม่ได้รับผลกระทบ
เราได้ทดสอบการรองรับโควต้าใน ext4 และ Linux 3.18 ขึ้นไปเท่านั้น หากเปิดใช้ในระบบไฟล์อื่นๆ หรือในเคอร์เนลเวอร์ชันเก่า ผู้ผลิตอุปกรณ์มีหน้าที่รับผิดชอบในการทดสอบและตรวจสอบความถูกต้องของสถิติ
ไม่ต้องใช้การสนับสนุนฮาร์ดแวร์พิเศษ
การตรวจสอบความถูกต้อง
การทดสอบ CTS อยู่ใน StorageHostTest
ซึ่งจะใช้ API สาธารณะเพื่อวัดการใช้งานดิสก์ API เหล่านี้ควรแสดงผลค่าที่ถูกต้องไม่ว่าจะเปิดหรือปิดใช้การรองรับโควต้าก็ตาม
การแก้ไขข้อบกพร่อง
แอปทดสอบจะจัดสรรพื้นที่ว่างในดิสก์อย่างระมัดระวังโดยใช้จำนวนเฉพาะที่ไม่ซ้ำกันสำหรับขนาดนั้นๆ เมื่อแก้ไขข้อบกพร่องของการทดสอบเหล่านี้ ให้ใช้ข้อมูลนี้เพื่อระบุสาเหตุของความคลาดเคลื่อน เช่น หากการทดสอบล้มเหลวโดยมี Delta เท่ากับ 11 MB ให้ตรวจสอบเมธอด Utils.useSpace()
เพื่อดูว่ามีการจัดเก็บ Blob ขนาด 11 MB ใน getExternalCacheDir()
นอกจากนี้ การทดสอบภายในบางอย่างอาจมีประโยชน์สำหรับการแก้ไขข้อบกพร่อง แต่อาจต้องปิดใช้การตรวจสอบความปลอดภัยเพื่อดำเนินการต่อ
runtest -x frameworks/base/services/tests/servicestests/ \ src/com/android/server/pm/InstallerTest.java
adb shell /data/nativetest64/installd_utils_test/installd_utils_test
adb shell /data/nativetest64/installd_cache_test/installd_cache_test
adb shell /data/nativetest64/installd_service_test/installd_service_test