บันทึกประจำรุ่นของเคอร์เนล

หน้านี้จะสรุปฟีเจอร์หลักในเคอร์เนลแต่ละรุ่นและมีลิงก์ไปยังข้อมูลเพิ่มเติม

ฟีเจอร์ใหม่ของเคอร์เนล 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
  • การปรับปรุงการแพตช์ฟีเจอร์ทางเลือกซึ่งทำให้ขนาดเคอร์เนลและรูปภาพเล็กลง