สถิติพื้นที่เก็บข้อมูลที่รวดเร็วขึ้น

ใน Android เวอร์ชันก่อนหน้า ระบบจะสแกนไปทั่วไฟล์ทั้งหมดที่แอปหนึ่งๆ เป็นเจ้าของเพื่อวัดการใช้งานดิสก์ การวัดด้วยตนเองนี้อาจใช้เวลาหลายนาทีในการประมวลผลก่อนที่จะแสดงผลลัพธ์ต่อผู้ใช้ในการตั้งค่า

นอกจากนี้ อัลกอริทึมภายในสำหรับการล้างไฟล์ข้อมูลที่แคชไว้จะพิจารณาเฉพาะเวลาที่มีการแก้ไขในแอปทั้งหมด ซึ่งทำให้แอปที่เป็นอันตรายสามารถลดประสบการณ์โดยรวมของผู้ใช้ได้โดยการตั้งค่าเวลาที่แก้ไขไว้ในอนาคตอันไกลโพ้นเพื่อแสดงข้อมูลให้ตัวเองโดดเด่นกว่าแอปอื่นๆ อย่างไม่เป็นธรรม

Android 8.0 เสนอให้ใช้ประโยชน์จากการสนับสนุน "โควต้า" ของระบบไฟล์ ext4 เพื่อแสดงสถิติการใช้งานดิสก์เกือบจะทันที เพื่อปรับปรุงประสบการณ์การใช้งานเหล่านี้ ฟีเจอร์โควต้านี้ยังช่วยปรับปรุงความเสถียรของระบบด้วย โดยป้องกันไม่ให้แอปใดแอปหนึ่งใช้พื้นที่ในดิสก์เกิน 90% หรือ inode เกิน 50%

การใช้งาน

ฟีเจอร์โควต้าเป็นส่วนหนึ่งของการใช้งาน installd โดยค่าเริ่มต้น installd จะใช้ฟีเจอร์โควต้าโดยอัตโนมัติเมื่อเปิดใช้ในระบบไฟล์ที่เจาะจง ระบบจะกลับมาคำนวณด้วยตนเองโดยอัตโนมัติและโปร่งใสเมื่อฟีเจอร์โควต้าไม่ได้เปิดใช้หรือรองรับในอุปกรณ์บล็อกที่วัด

วิธีเปิดใช้การรองรับโควต้าในอุปกรณ์บล็อกหนึ่งๆ

  1. เปิดใช้ตัวเลือกเคอร์เนล CONFIG_QUOTA, CONFIG_QFMT_V2 และ CONFIG_QUOTACTL
  2. เพิ่มตัวเลือก 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