หน้านี้จะสรุปฟีเจอร์หลักในเคอร์เนลแต่ละรุ่นและมีลิงก์ไปยังข้อมูลเพิ่มเติม
ฟีเจอร์ใหม่ของเคอร์เนล 6.12
ส่วนนี้จะอธิบายฟีเจอร์ใหม่ในเคอร์เนล 6.12
การสร้างโปรไฟล์การจัดสรรหน่วยความจำ
กุญแจสำคัญในการทำความเข้าใจการใช้หน่วยความจําคือการทราบว่ามีการจองหน่วยความจําที่ใด
เคอร์เนล 6.12 มีระบบการระบุแหล่งที่มาของการจองหน่วยความจำใหม่ที่เรียกว่าการจัดเก็บโปรไฟล์การจองหน่วยความจำ (CONFIG_MEM_ALLOC_PROFILING
ในการกำหนดค่า)
การจัดเก็บโปรไฟล์การจัดสรรหน่วยความจำจะระบุแหล่งที่มาของบรรทัดที่ไม่ซ้ำกันสำหรับการจัดสรรแต่ละรายการเพื่อให้ระบุปัญหาเกี่ยวกับการจัดสรรได้อย่างรวดเร็ว
นอกจากนี้ การสร้างโปรไฟล์การจัดสรรหน่วยความจํายังทําสิ่งต่อไปนี้
ใช้ในระหว่างระยะวิศวกรรม แต่มีอยู่ในรูปภาพ GKI มาตรฐาน
เปิดใช้ได้โดยใช้พารามิเตอร์
sysctl.vm.mem_profiling
bootใช้ได้กับทั้งโมดูลในเคอร์เนลและโมดูลที่โหลด
io_uring ที่เร็วขึ้นด้วยการอ่านแบบไม่คัดลอกและแบบหลายครั้ง
ในเคอร์เนล 6.12 โมดูล statsd
และ logd
ใช้ sendfile แบบไม่ทำสำเนา ซึ่งช่วยปรับปรุงประสิทธิภาพ
นอกจากนี้ เวอร์ชันเคอร์เนลนี้ยังใช้การอ่านแบบหลายช็อตที่การดำเนินการอ่านเพียงครั้งเดียวสามารถดึงข้อมูลหลายรายการพร้อมกันได้ ซึ่งช่วยปรับปรุงประสิทธิภาพ
ปรับปรุงความสามารถและการรองรับ Berkeley Packet Filter (BPF)
ในเคอร์เนล 6.12 เราได้ย้ายชุดเครื่องมือ BPF ไปรองรับ CO-RE และฟีเจอร์สมัยใหม่หลายรายการ นอกจากนี้ โปรแกรมโหลด BPF ใหม่ยังช่วยให้ใช้ BPF สมัยใหม่สำหรับโปรแกรมที่เป็นส่วนหนึ่งของ AOSP ได้
การดำเนินการผ่านพร็อกซี
การดำเนินการพร็อกซีช่วยให้ผู้จัดกำหนดเวลายืมรอบการทำงานของ CPU จากกระบวนการที่มีลำดับความสำคัญสูงเพื่อกู้คืนการล็อกที่กระบวนการที่มีลำดับความสำคัญต่ำกว่าถือครองอยู่ ฟีเจอร์นี้ช่วยลดปัญหาลำดับความสำคัญกลับหัว
ฟีเจอร์ใหม่ของเคอร์เนล 6.6
ส่วนนี้จะอธิบายฟีเจอร์ใหม่ในเคอร์เนล 6.6
การรองรับ Rust
โปรเจ็กต์เคอร์เนล 6.6 หลายโปรเจ็กต์ใช้ Rust
การล็อกพื้นที่หน่วยความจำเสมือน (VMA) ต่อรายการ
เคอร์เนล 6.6 ใช้การล็อกพื้นที่หน่วยความจำเสมือนต่อรายการเพื่อแก้ไขปัญหาการแย่งกันใช้ mmap_sem
(เดิมชื่อ mmap_lock
) ดังนั้นแอปที่ใช้เธรดจํานวนมากอาจใช้เวลาในการเปิดลดลงถึง 20%
เครื่องมือจัดตารางเวลา Earliest Eligible Virtual Deadline First (EEVDF) จะมาแทนที่ CFS
EEVDF เข้ามาแทนที่ตัวจัดตารางเวลาแบบสมบูรณ์ (CFS) เพื่อปรับสมดุลการเข้าถึง CPU ระหว่างงานที่ทำงานเป็นระยะเวลาสั้นๆ กับงานที่ทำงานเป็นระยะเวลานานได้ดียิ่งขึ้น
ลดการใช้พลังงานจากการเรียกกลับการอัปเดตสำเนาที่อ่าน (RCU)
ตัวเลือก RCU_LAZY
ใช้วิธีการจัดกลุ่มการเรียกกลับ RCU ตามตัวจับเวลาเพื่อประหยัดพลังงาน สําหรับระบบที่มีภาระงานเบาหรือไม่ได้ใช้งาน ตัวเลือกนี้สามารถลดปริมาณการใช้พลังงานได้ 5-10%
การบีบอัดหน่วยความจำ ZRAM ที่ดีขึ้น
การตั้งค่าบิลด์ CONFIG_ZRAM_MULTI_COMP
ใหม่ช่วยให้ ZRAM บีบอัดหน้าเว็บอีกครั้งด้วยอัลกอริทึมทางเลือก 1 ใน 3 รายการ การบีบอัดอีกครั้งนี้จะช่วยลดขนาดหน่วยความจำที่บีบอัดไว้อีก ทำให้มีพื้นที่ว่างมากขึ้นสำหรับงานที่ใช้งานอยู่
ฟีเจอร์ใหม่ของเคอร์เนล 6.1
ส่วนนี้จะอธิบายฟีเจอร์ใหม่ในเคอร์เนล 6.1
รักษาความปลอดภัยได้เร็วขึ้นด้วยการควบคุมโฟลว์ข้อมูลของเคอร์เนล (KCFI)
KCFI เข้ามาแทนที่การควบคุมความสมบูรณ์ของโฟลว์ (CFI) ซึ่งทำให้ต้นทุนรันไทม์ลดลงและไม่มีต้นทุนเวลาสร้าง ค่าใช้จ่ายรันไทม์ที่ลดลงช่วยให้เปิดใช้ KCFI ได้มากขึ้นเมื่อเทียบกับ CFI โดยเฉพาะจุดติดตามและฮุกของผู้ให้บริการ
นอกจาก KCFI แล้ว เมล็ดพันธุ์ 6.1 ยังมีฟีเจอร์ด้านความปลอดภัยหลายอย่าง เช่น memcpy
การตรวจสอบขอบเขตที่เข้มงวดและการบรรเทาโจมตีแบบคาดเดาบรรทัดเดียว
ดูข้อมูลเพิ่มเติมเกี่ยวกับ KCFI ได้ที่ความสมบูรณ์ของโฟลว์การควบคุมเคอร์เนล
LRU รุ่นที่หลากหลาย (MGLRU)
เราได้เพิ่ม MGLRU ลงในเคอร์เนล 6.1 เพื่อปรับปรุงการจัดการหน่วยความจำโดยระบุหน้าที่ใช้งานอยู่จริงได้ดีขึ้น การปรับปรุงนี้ช่วยลดความจำเป็นในการหยุดแอปชั่วคราวเมื่อระบบหน่วยความจำไม่เพียงพอ การอัปเดตนี้ยังช่วยปรับปรุงประสบการณ์ของผู้ใช้ด้วยเนื่องจากอุปกรณ์ตอบสนองได้ดีขึ้นโดยรวม
การใช้งาน MGLRU ยังรองรับ Maple Tree รูปแบบใหม่ที่ปลอดภัยต่อ RCU ซึ่งในบางกรณีอาจใช้แทน Red-Black Tree (rbtree) ได้ เมื่อใช้ Maple Tree ที่ปลอดภัยสำหรับ RCU จะช่วยเพิ่มประสิทธิภาพเนื่องจากมีต้นทุนต่ำและไม่มีการล็อก
ดูข้อมูลเพิ่มเติมเกี่ยวกับ MGLRU ได้ที่LRU รุ่นต่างๆ
การตั้งเวลา
การดูแลรักษาและการอัปเดตตัวจัดตารางเวลาเป็นสิ่งสำคัญอย่างยิ่งในการปรับปรุงเคอร์เนล การอัปเดตเคอร์เนลใน 6.1 มีดังนี้
- เพิ่มการกำหนดเวลาแบบคุ้นเคยกับคลัสเตอร์ ซึ่งจะเพิ่มประสิทธิภาพด้วยการย้ายไปยังแกนประมวลผลที่ใช้แคช L2 ร่วมกัน
- นำการประเมินพลังงานส่วนต่างที่ไม่จำเป็นออก การอัปเดตนี้ช่วยประหยัดพลังงานได้สูงสุด 5% ด้วยการจำกัดการย้ายข้อมูลบางรายการ
- ปรับปรุงการจัดสรรภาระงานเพื่อลดเวลาในการตอบสนองของการเปิดเครื่อง
- ย้ายระยะเวลาผ่อนผันแบบเร่งด่วนของ RCU ไปยัง kthread แบบเรียลไทม์ การอัปเดตนี้ช่วยลดค่าเบี่ยงเบนมาตรฐานของเวลาในการตอบสนองที่เกี่ยวข้องกับ RCU ลงอย่างมาก
กราฟิก
เคอร์เนล 6.1 มีวิธีการใหม่ใน dma-buf สำหรับการส่งออกและนำเข้าไฟล์ซิงค์ ซึ่งสอดคล้องกับความต้องการสำหรับ Vulcan Video API
วิธี futex_waitv()
ใหม่ช่วยให้การพอร์ตเกมจากแพลตฟอร์มอื่นๆ ทำได้ง่ายขึ้นด้วยการรอ Futex หลายรายการพร้อมกัน
เครื่องมือแก้ไขข้อบกพร่อง
ใช้ Kernel Concurrency SANitizer (KCSAN) ในบิลด์แก้ไขข้อบกพร่องเพื่อระบุการแย่งกันใช้ทรัพยากรในโค้ดเคอร์เนล
นอกจากนี้ ให้ใช้ Kernel Memory SANitizer (KMSAN) เพื่อค้นหาค่าที่ยังไม่ได้เริ่มต้นในเคอร์เนล
การปรับปรุงการรองรับ ARM64
เคอร์เนล 6.1 มีการปรับปรุงหลายอย่างสำหรับสถาปัตยกรรม ARM64 ซึ่งรวมถึง
- การรองรับส่วนขยายตัวจับเวลา ARMv8.6
- การรองรับอัลกอริทึมการตรวจสอบสิทธิ์เคอร์เซอร์ QARMA3
- การรองรับเบื้องต้นสําหรับ Scalable Matrix Extension (SME) ของ ARMv9
- การปรับปรุงการแพตช์ฟีเจอร์ทางเลือกซึ่งทำให้ขนาดเคอร์เนลและรูปภาพเล็กลง