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

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

ฟีเจอร์ใหม่ของเคอร์เนล 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 ในช่วงแรก
  • การปรับปรุงการแก้ไขฟีเจอร์ทางเลือกส่งผลให้ขนาดอิมเมจเคอร์เนลเล็กลง