หน้านี้สรุปฟีเจอร์หลักๆ ในแต่ละรุ่นของเคอร์เนลและมี ลิงก์ไปยังข้อมูลเพิ่มเติม
ฟีเจอร์ใหม่ของเคอร์เนล 6.12
ส่วนนี้จะอธิบายฟีเจอร์ใหม่ในเคอร์เนล 6.12
การสร้างโปรไฟล์การจัดสรรหน่วยความจำ
กุญแจสำคัญในการทำความเข้าใจการใช้หน่วยความจำคือการทราบว่ามีการจัดสรรที่ใด
เคอร์เนล 6.12 มีระบบการระบุแหล่งที่มาของการจัดสรรหน่วยความจำใหม่ที่เรียกว่า
การสร้างโปรไฟล์การจัดสรรหน่วยความจำ (CONFIG_MEM_ALLOC_PROFILING
ในการกำหนดค่า)
การทำโปรไฟล์การจัดสรรหน่วยความจำจะเชื่อมโยงการจัดสรรแต่ละรายการกับบรรทัดแหล่งที่มาที่ไม่ซ้ำกัน
เพื่อให้ระบุปัญหาเกี่ยวกับการจัดสรรได้อย่างรวดเร็ว
นอกจากนี้ การสร้างโปรไฟล์การจัดสรรหน่วยความจำยังช่วยให้คุณทำสิ่งต่อไปนี้ได้
ใช้ในระหว่างระยะการออกแบบ แต่จะพร้อมใช้งานใน อิมเมจ GKI มาตรฐาน
เปิดใช้ได้โดยใช้พารามิเตอร์
sysctl.vm.mem_profiling
bootใช้ได้ทั้งกับโมดูลในเคอร์เนลและโมดูลที่โหลด
io_uring ที่เร็วขึ้นด้วยการอ่านแบบ Zero-Copy และ Multishot
ในเคอร์เนล 6.12 โมดูล statsd
และ logd
จะใช้ sendfile
zero-copy ซึ่งช่วยปรับปรุงประสิทธิภาพ
นอกจากนี้ เคอร์เนลเวอร์ชันนี้ยังใช้การอ่านแบบหลายช็อต ซึ่งการอ่าน ครั้งเดียวจะดึงข้อมูลหลายชิ้นพร้อมกันได้ ซึ่งช่วยปรับปรุง ประสิทธิภาพ
ความสามารถและการรองรับ 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 จะแทนที่ Completely Fair Scheduler (CFS) เพื่อปรับสมดุลการเข้าถึง CPU ระหว่างงานที่ใช้เวลาสั้นๆ และงานที่ใช้เวลานานให้ดียิ่งขึ้น
ลดการใช้พลังงานจากการเรียกกลับของการอัปเดตสำเนาแบบอ่าน (RCU)
RCU_LAZY
ตัวเลือกนี้ใช้วิธีการจัดกลุ่มการเรียกกลับของ RCU ตามตัวจับเวลาเพื่อ
ประหยัดพลังงาน สำหรับระบบที่มีการโหลดน้อยหรือไม่ได้ใช้งาน ตัวเลือกนี้จะช่วยลด
การใช้พลังงานได้ 5% ถึง 10%
การบีบอัดหน่วยความจำ ZRAM ที่ดีขึ้น
การตั้งค่าบิลด์ CONFIG_ZRAM_MULTI_COMP
ใหม่ช่วยให้ ZRAM บีบอัดหน้าเว็บอีกครั้งได้โดยใช้อัลกอริทึมสำรอง 3 แบบ การบีบอัดซ้ำนี้
จะลดขนาดหน่วยความจำที่บีบอัดแล้วให้เล็กลงไปอีก ทำให้มีพื้นที่ว่างมากขึ้นสำหรับงานที่ใช้งานอยู่
ฟีเจอร์ใหม่ของเคอร์เนล 6.1
ส่วนนี้จะอธิบายฟีเจอร์ใหม่ในเคอร์เนล 6.1
การรักษาความปลอดภัยที่รวดเร็วขึ้นด้วยการควบคุมโฟลว์ของเคอร์เนล (KCFI)
KCFI จะแทนที่การตรวจสอบความสมบูรณ์ของโฟลว์การควบคุม (CFI) ซึ่งจะช่วยลดต้นทุนรันไทม์ และไม่มีต้นทุนเวลาบิลด์ ต้นทุนรันไทม์ที่ลดลงช่วยให้เปิดใช้ KCFI ได้ใน หลายที่มากกว่า CFI โดยเฉพาะอย่างยิ่ง Tracepoint และ Vendor Hook
นอกจาก KCFI แล้ว เคอร์เนล 6.1 ยังมีฟีเจอร์ด้านความปลอดภัยหลายอย่าง เช่น
การตรวจสอบขอบเขตmemcpy
อย่างเข้มงวดและการลดผลกระทบจากการโจมตีแบบคาดเดาเส้นตรง
ดูข้อมูลเพิ่มเติมเกี่ยวกับ KCFI ได้ที่ความสมบูรณ์ของโฟลว์การควบคุมเคอร์เนล
LRU หลายรุ่น (MGLRU)
เราได้เพิ่ม MGLRU ลงในเคอร์เนล 6.1 เพื่อปรับปรุงการจัดการหน่วยความจำด้วยการระบุหน้าเว็บที่ใช้งานจริงได้ดียิ่งขึ้น การปรับปรุงนี้ช่วยลดความจำเป็น ในการหยุดแอปชั่วคราวเมื่อระบบมีหน่วยความจำไม่เพียงพอ การอัปเดตนี้ยังช่วยปรับปรุงประสบการณ์ของผู้ใช้ด้วย เนื่องจากโดยรวมแล้วอุปกรณ์จะตอบสนองได้ดีขึ้น
การใช้งาน MGLRU ยังรวมถึงการรองรับ Maple Tree ใหม่ที่ปลอดภัยสำหรับ RCU ซึ่งในบางกรณีสามารถใช้แทน Red-Black Tree (rbtree) ได้ เมื่อใช้แล้ว ต้นเมเปิลที่ปลอดภัยสำหรับ 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 ในช่วงแรก
- การปรับปรุงการแก้ไขฟีเจอร์ทางเลือกส่งผลให้ขนาดอิมเมจเคอร์เนลเล็กลง