การเปิดตัวเคอร์เนล Linux 6.1

หลังจากสองเดือนของการพัฒนา Linus Torvalds ได้เปิดตัว Linux kernel 6.1 การเปลี่ยนแปลงที่โดดเด่นที่สุด: การสนับสนุนการพัฒนาไดรเวอร์และโมดูลในภาษา Rust, ความทันสมัยของกลไกในการกำหนดหน้าหน่วยความจำที่ใช้, ตัวจัดการหน่วยความจำพิเศษสำหรับโปรแกรม BPF, ระบบสำหรับการวินิจฉัยปัญหาหน่วยความจำ KMSAN, KCFI (Kernelk Control -Flow Integrity) กลไกการป้องกันการแนะนำต้นไม้โครงสร้างเมเปิ้ล

เวอร์ชันใหม่ประกอบด้วยการแก้ไข 15115 รายการจากนักพัฒนา 2139 ราย ขนาดแพตช์คือ 51 MB ซึ่งเล็กกว่าขนาดของแพตช์จากเคอร์เนล 2 และ 6.0 ประมาณ 5.19 เท่า การเปลี่ยนแปลงส่งผลกระทบต่อไฟล์ 13165 ไฟล์ เพิ่มโค้ด 716247 บรรทัด และลบ 304560 บรรทัด ประมาณ 45% ของการเปลี่ยนแปลงทั้งหมดที่นำมาใช้ใน 6.1 เกี่ยวข้องกับไดรเวอร์อุปกรณ์ ประมาณ 14% ของการเปลี่ยนแปลงเกี่ยวข้องกับการอัปเดตโค้ดเฉพาะสำหรับสถาปัตยกรรมฮาร์ดแวร์ 14% เกี่ยวข้องกับสแต็กเครือข่าย 3% เกี่ยวข้องกับระบบไฟล์ และ 3% เกี่ยวข้องกับระบบย่อยเคอร์เนลภายใน

นวัตกรรมที่สำคัญในเคอร์เนล 6.1:

  • บริการหน่วยความจำและระบบ
    • เพิ่มความสามารถในการใช้ Rust เป็นภาษาที่สองในการพัฒนาไดรเวอร์และโมดูลเคอร์เนล เหตุผลหลักในการสนับสนุน Rust คือเพื่อให้ง่ายต่อการเขียนไดรเวอร์อุปกรณ์ที่ปลอดภัยและมีคุณภาพสูงโดยลดโอกาสที่จะเกิดข้อผิดพลาดเมื่อทำงานกับหน่วยความจำ การสนับสนุน Rust ถูกปิดใช้งานตามค่าเริ่มต้น และไม่ส่งผลให้ Rust ถูกรวมไว้เป็นการพึ่งพาการสร้างเคอร์เนลที่จำเป็น จนถึงขณะนี้เคอร์เนลได้นำแพตช์เวอร์ชันที่แยกออกมาน้อยที่สุดมาใช้ ซึ่งลดลงจาก 40 เหลือ 13 บรรทัดของโค้ด และให้ขั้นต่ำที่จำเป็นเท่านั้น ซึ่งเพียงพอสำหรับการสร้างโมดูลเคอร์เนลอย่างง่ายที่เขียนด้วยภาษา Rust ในอนาคต มีการวางแผนที่จะค่อยๆ เพิ่มฟังก์ชันการทำงานที่มีอยู่ โดยถ่ายโอนการเปลี่ยนแปลงอื่นๆ จากสาขา Rust-for-Linux ในขณะเดียวกัน โครงการต่างๆ กำลังได้รับการพัฒนาเพื่อใช้โครงสร้างพื้นฐานที่นำเสนอเพื่อพัฒนาไดรเวอร์สำหรับไดรฟ์ NVMe, โปรโตคอลเครือข่าย 9p และ Apple M1 GPU ในภาษา Rust
    • สำหรับระบบที่ใช้สถาปัตยกรรม AArch64, RISC-V และ LoongArch พร้อมด้วย EFI ได้มีการนำความสามารถในการโหลดอิมเมจเคอร์เนลที่บีบอัดโดยตรงมาใช้ เพิ่มตัวจัดการสำหรับการโหลด รัน และขนถ่ายเคอร์เนลอิมเมจ เรียกโดยตรงจาก EFI zboot มีการเพิ่มตัวจัดการสำหรับการติดตั้งและการลบโปรโตคอลจากฐานข้อมูลโปรโตคอล EFI ก่อนหน้านี้การแกะกล่องจะดำเนินการโดย bootloader แยกต่างหาก แต่ตอนนี้ตัวจัดการในเคอร์เนลสามารถทำได้แล้ว - อิมเมจเคอร์เนลถูกสร้างขึ้นเป็นแอปพลิเคชัน EFI
    • องค์ประกอบประกอบด้วยส่วนหนึ่งของแพตช์ที่มีการนำโมเดลการจัดการหน่วยความจำหลายระดับไปใช้ซึ่งช่วยให้คุณสามารถแยกธนาคารหน่วยความจำที่มีคุณสมบัติด้านประสิทธิภาพที่แตกต่างกันได้ ตัวอย่างเช่น เพจที่มีการใช้งานมากที่สุดอาจถูกจัดเก็บไว้ในหน่วยความจำที่เร็วที่สุด ในขณะที่เพจที่ไม่ค่อยได้ใช้มากที่สุดอาจถูกจัดเก็บไว้ในหน่วยความจำที่ค่อนข้างช้า เคอร์เนล 6.1 แนะนำกลไกในการพิจารณาว่าเพจที่มีการใช้งานหนักอยู่ที่ใดในหน่วยความจำช้า เพื่อให้สามารถเลื่อนระดับเป็นหน่วยความจำเร็วได้ และยังแนะนำแนวคิดทั่วไปเกี่ยวกับระดับหน่วยความจำและประสิทธิภาพที่สัมพันธ์กัน
    • ประกอบด้วยกลไก MGLRU (Multi-Generational LRU) ซึ่งมาแทนที่การใช้งาน LRU แบบเก่า (ใช้น้อยที่สุด) โดยอิงตามคิวสองคิวด้วยโครงสร้างแบบหลายขั้นตอนที่จะกำหนดได้ดีขึ้นว่าเพจหน่วยความจำใดที่ใช้งานอยู่จริง และเพจใดที่สามารถผลักออกไปได้ พาร์ติชั่นสลับ
    • เพิ่มการรองรับโครงสร้างข้อมูล "ต้นเมเปิล" ที่เสนอโดยวิศวกรของ Oracle ซึ่งได้รับการวางตำแหน่งให้ทดแทนโครงสร้าง "ต้นไม้สีแดง-ดำ" ได้อย่างมีประสิทธิภาพมากขึ้น ต้นเมเปิลเป็นอีกรูปแบบหนึ่งของ B-tree ที่รองรับการจัดทำดัชนีช่วง และได้รับการออกแบบมาเพื่อใช้แคชของโปรเซสเซอร์สมัยใหม่อย่างมีประสิทธิภาพ ระบบย่อยการจัดการหน่วยความจำบางระบบได้ถูกถ่ายโอนไปยังต้นเมเปิ้ลแล้ว ซึ่งส่งผลดีต่อประสิทธิภาพการทำงาน ในอนาคต ต้นเมเปิลสามารถนำมาใช้ในการล็อคระยะได้
    • เพิ่มความสามารถในการสร้างโปรแกรม BPF แบบ "ทำลายล้าง" ที่ออกแบบมาเป็นพิเศษเพื่อเริ่มต้นการปิดระบบฉุกเฉินผ่านการเรียก crash_kexec() ให้กับระบบย่อย BPF โปรแกรม BPF ดังกล่าวอาจจำเป็นสำหรับวัตถุประสงค์ในการตรวจแก้จุดบกพร่องเพื่อเริ่มต้นการสร้างการถ่ายโอนข้อมูลข้อขัดข้อง ณ จุดใดจุดหนึ่ง ในการเข้าถึงการดำเนินการทำลายล้างเมื่อโหลดโปรแกรม BPF คุณต้องระบุแฟล็ก BPF_F_DESTRUCTIVE เปิดใช้งาน sysctl kernel.destructive_bpf_enabled และมีสิทธิ์ CAP_SYS_BOOT
    • สำหรับโปรแกรม BPF เป็นไปได้ที่จะระบุองค์ประกอบ cgroup ตลอดจนระบุทรัพยากร (ไฟล์, vma, กระบวนการ ฯลฯ ) ของเธรดหรืองานเฉพาะ มีการนำแผนที่ประเภทใหม่มาใช้เพื่อสร้างบัฟเฟอร์วงแหวนผู้ใช้
    • เพิ่มการเรียกพิเศษสำหรับการจัดสรรหน่วยความจำในโปรแกรม BPF (ตัวจัดสรรหน่วยความจำ) ซึ่งให้การจัดสรรหน่วยความจำที่ปลอดภัยกว่าในบริบท BPF มากกว่า kmalloc มาตรฐาน ()
    • ส่วนแรกของการเปลี่ยนแปลงได้รับการบูรณาการ ทำให้สามารถสร้างไดรเวอร์สำหรับอุปกรณ์อินพุตที่มีอินเทอร์เฟซ HID (Human Interface Device) ซึ่งนำไปใช้ในรูปแบบของโปรแกรม BPF
    • เคอร์เนลได้ลบโค้ดออกทั้งหมดเพื่อรองรับรูปแบบไฟล์ปฏิบัติการ a.out ซึ่งเลิกใช้แล้วในรุ่น 5.1 และถูกปิดใช้งานสำหรับสถาปัตยกรรมหลักตั้งแต่เวอร์ชัน 5.18 และ 5.19 รูปแบบ a.out เลิกใช้แล้วบนระบบ Linux มานานแล้ว และการสร้างไฟล์ a.out ไม่ได้รับการสนับสนุนโดยเครื่องมือสมัยใหม่ในการกำหนดค่าเริ่มต้นของ Linux ตัวโหลดสำหรับไฟล์ a.out สามารถนำไปใช้งานได้ทั้งหมดในพื้นที่ผู้ใช้
    • สำหรับระบบที่ใช้สถาปัตยกรรมชุดคำสั่ง LoongArch ที่ใช้ในโปรเซสเซอร์ Loongson 3 5000 และการใช้งาน RISC ISA ใหม่ ซึ่งคล้ายกับ MIPS และ RISC-V จะมีการรองรับเหตุการณ์การวัดประสิทธิภาพ (เหตุการณ์ perf) การรวบรวม kexec, kdump และ BPF JIT .
    • อินเทอร์เฟซ I/O แบบอะซิงโครนัส io_uring นำเสนอโหมดใหม่ IORING_SETUP_DEFER_TASKRUN ซึ่งช่วยให้งานที่เกี่ยวข้องกับบัฟเฟอร์วงแหวนถูกเลื่อนออกไปชั่วคราวจนกว่าจะมีการร้องขอแอปพลิเคชัน ซึ่งสามารถนำไปใช้ในการทำงานเป็นชุดและหลีกเลี่ยงปัญหาความล่าช้าเนื่องจากการขอล่วงหน้า ผิดเวลา
    • กระบวนการในพื้นที่ผู้ใช้ได้รับความสามารถในการเริ่มต้นการแปลงช่วงของเพจหน่วยความจำปกติเป็นชุดของเพจหน่วยความจำขนาดใหญ่ (Transparent Huge-Pages)
    • เพิ่มการใช้งานอุปกรณ์ /dev/userfaultfd ซึ่งอนุญาตให้เข้าถึงฟังก์ชันการทำงานของการเรียกของระบบ userfaultfd() โดยใช้สิทธิ์การเข้าถึงใน FS ฟังก์ชัน userfaultfd ช่วยให้คุณสร้างตัวจัดการสำหรับการเข้าถึงเพจหน่วยความจำที่ไม่ได้จัดสรร (ข้อบกพร่องของเพจ) ในพื้นที่ผู้ใช้
    • ข้อกำหนดสำหรับเวอร์ชันของยูทิลิตี้ GNU Make ได้รับการเพิ่มขึ้น - ตอนนี้จำเป็นต้องมีเวอร์ชันอย่างน้อย 3.82 เพื่อสร้างเคอร์เนล
  • ระบบย่อยของดิสก์ I/O และระบบไฟล์
    • มีการปรับปรุงประสิทธิภาพการทำงานที่สำคัญกับระบบไฟล์ Btrfs เหนือสิ่งอื่นใด ประสิทธิภาพของการเรียก FIEMAP ioctl ได้รับการเพิ่มขึ้นตามลำดับความสำคัญ เพิ่มการรองรับการเขียนบัฟเฟอร์แบบอะซิงโครนัสสำหรับแอปพลิเคชันที่ใช้ io_uring เพิ่มการรองรับไฟล์ที่ได้รับการป้องกันด้วย fs-verity ในการดำเนินการ "ส่ง"
    • ระบบไฟล์ ext4 ได้เพิ่มการเพิ่มประสิทธิภาพที่เกี่ยวข้องกับการบำรุงรักษาเจอร์นัลและการดำเนินการแบบอ่านอย่างเดียว
    • ระบบไฟล์ EROFS (Enhanced Read-Only File System) ออกแบบมาเพื่อใช้กับพาร์ติชันที่สามารถเข้าถึงได้ในโหมดอ่านอย่างเดียว ใช้ความสามารถในการแบ่งปันข้อมูลที่ซ้ำกันในระบบไฟล์ต่างๆ
    • เพิ่มการเรียกของระบบ statx() เพื่อแสดงข้อมูลเกี่ยวกับว่า I/O โดยตรงสามารถนำไปใช้กับไฟล์ได้หรือไม่
    • เพิ่มการสนับสนุนสำหรับการสร้างไฟล์ชั่วคราวด้วยการตั้งค่าสถานะ O_TMPFILE ในระบบย่อย FUSE (ระบบไฟล์ในพื้นที่ผู้ใช้)
  • การจำลองเสมือนและความปลอดภัย
    • การใช้งานกลไกการป้องกัน CFI (Control Flow Integrity) ได้รับการแทนที่ โดยเพิ่มการตรวจสอบก่อนการเรียกใช้ฟังก์ชันทางอ้อมแต่ละครั้งเพื่อตรวจจับพฤติกรรมที่ไม่ได้กำหนดบางรูปแบบซึ่งอาจนำไปสู่การละเมิดลำดับการดำเนินการปกติ (โฟลว์การควบคุม) เป็น ผลจากการใช้ช่องโหว่ที่เปลี่ยนพอยน์เตอร์เป็นฟังก์ชันที่จัดเก็บไว้ในหน่วยความจำ การใช้งานมาตรฐานของ CFI จากโครงการ LLVM ถูกแทนที่ด้วยตัวเลือกที่อิงตามการใช้ Clang ด้วย แต่ได้รับการดัดแปลงเป็นพิเศษเพื่อปกป้องระบบย่อยระดับต่ำและเคอร์เนลของระบบปฏิบัติการ ใน LLVM การใช้งานใหม่จะถูกนำเสนอใน Clang 16 release และจะเปิดใช้งานด้วยตัวเลือก "-fsanitize=kcfi" ข้อแตกต่างที่สำคัญในการใช้งานใหม่คือ ไม่เชื่อมโยงกับการเพิ่มประสิทธิภาพเวลาลิงก์ (LTO) และไม่ส่งผลให้ตัวชี้ฟังก์ชันถูกแทนที่ด้วยลิงก์ในตารางข้าม
    • สำหรับโมดูล LSM (Linux Security Module) คุณสามารถสร้างตัวจัดการที่สกัดกั้นการดำเนินการเพื่อสร้างเนมสเปซได้
    • มีเครื่องมือสำหรับตรวจสอบลายเซ็นดิจิทัล PKCS#7 ในโปรแกรม BPF
    • ความสามารถในการเปิดในโหมดไม่บล็อก (O_NONBLOCK) ซึ่งถูกลบออกโดยไม่ได้ตั้งใจในเคอร์เนล 5.6 ถูกส่งกลับไปยัง /dev/random
    • บนระบบที่มีสถาปัตยกรรม x86 มีการเพิ่มคำเตือนในกรณีของการแมปเพจหน่วยความจำโดยระบบย่อยเคอร์เนลที่อนุญาตให้ดำเนินการและเขียนได้พร้อมกัน ในอนาคต มีการพิจารณาถึงความเป็นไปได้ในการห้ามการทำแผนที่หน่วยความจำดังกล่าวโดยสิ้นเชิง
    • เพิ่มกลไกการดีบัก KMSAN (Kernel Memory Sanitizer) เพื่อตรวจจับการใช้หน่วยความจำที่ไม่ได้เตรียมใช้งานในเคอร์เนล รวมถึงการรั่วไหลของหน่วยความจำที่ไม่ได้เตรียมใช้งานระหว่างพื้นที่ผู้ใช้และอุปกรณ์
    • มีการปรับปรุงตัวสร้างตัวเลขสุ่มหลอก CRNG ที่ปลอดภัยด้วยการเข้ารหัสลับซึ่งใช้ในการโทร getrandom การเปลี่ยนแปลงนี้จัดทำโดย Jason A. Donenfeld ผู้เขียน VPN WireGuard และมีเป้าหมายเพื่อปรับปรุงความปลอดภัยของการแยกจำนวนเต็มแบบสุ่มหลอก
  • ระบบย่อยของเครือข่าย
    • สแต็ก TCP มอบความสามารถ (ปิดใช้งานโดยค่าเริ่มต้น) ในการใช้ตารางแฮชซ็อกเก็ตแยกกันสำหรับแต่ละเนมสเปซ ซึ่งปรับปรุงประสิทธิภาพบนระบบที่มีเนมสเปซจำนวนมาก
    • รหัสที่ถูกลบออกเพื่อรองรับโปรโตคอล DECnet ดั้งเดิม Stub API ของพื้นที่ผู้ใช้จะยังคงอยู่เพื่อให้สามารถคอมไพล์แอปพลิเคชันที่ใช้ DECnet ได้ แต่แอปพลิเคชันเหล่านี้จะไม่สามารถเชื่อมต่อกับเครือข่ายได้
    • โปรโตคอล netlink ได้รับการบันทึกไว้
  • Оборудование
    • ไดรเวอร์ amdgpu ได้เพิ่มการสนับสนุนสำหรับการส่งต่อ DSC (Display Stream Compression) สำหรับการบีบอัดข้อมูลแบบไม่สูญเสียเมื่อแลกเปลี่ยนข้อมูลกับหน้าจอที่รองรับความละเอียดสูงมาก งานยังคงให้การสนับสนุนแพลตฟอร์ม AMD RDNA3 (RX 7000) และ CDNA (Instinct) เพิ่มการรองรับสำหรับส่วนประกอบ IP DCN 3.2, SMU 13.x, NBIO 7.7, GC 11.x, PSP 13.x, SDMA 6.x และ GMC 11.x ไดรเวอร์ amdkfd (สำหรับ GPU แยก AMD เช่น Polaris) ให้การสนับสนุน GFX 11.0.3
    • ไดรเวอร์ i915 (Intel) รวมถึงการสนับสนุน Meteor Lake GPU Meteor Lake และ GPU รุ่นใหม่รองรับอินเทอร์เฟซ DP 2.0 (DisplayPort) เพิ่มตัวระบุสำหรับการ์ดวิดีโอตามสถาปัตยกรรมไมโคร Alder Lake S
    • เพิ่มการรองรับระบบย่อยเสียงที่ใช้ในโปรเซสเซอร์ Apple Silicon, Intel SkyLake และ Intel KabyLake ไดรเวอร์เสียง CS35L41 HDA รองรับโหมดสลีป เพิ่มการรองรับ ASoC (ระบบ ALSA บนชิป) สำหรับชิปเสียงในตัว Apple Silicon, AMD Rembrant DSPs, AMD Pink Sardine ACP 6.2, Everest ES8326, Intel Sky Lake และ Kaby Lake, Mediatek MT8186, NXP i.MX8ULP DSPs, Qualcomm SC8280XP, SM8250, SM8450 และ Texas Instruments SRC4392
    • เพิ่มการรองรับสำหรับแผง LCD Samsung LTL101AL01, B120XAN01.0, R140NWF5 RH, Densitron DMT028VGHMCMI-1A TFT, AUO B133UAN02.1, IVO M133NW4J-R3, Innolux N120ACA-EA1, AUO B116XAK01.6, BOE NT116WH M-N21, INX N116BCA- EA2 , INX N116BCN-EA1, เทคโนโลยี Multi-Inno MI0800FT-9.
    • เพิ่มการรองรับคอนโทรลเลอร์ AHCI SATA ที่ใช้ใน Baikal-T1 SoC
    • เพิ่มการรองรับชิป Bluetooth MediaTek MT7921, Intel Magnetor (CNVi, การเชื่อมต่อแบบรวม), Realtek RTL8852C, RTW8852AE และ RTL8761BUV (Edimax BT-8500)
    • ไดรเวอร์ ath11k สำหรับโมดูลไร้สายของ Qualcomm ได้เพิ่มการรองรับการสแกนสเปกตรัมในช่วง 160 MHz, การใช้งาน NAPI แบบมัลติเธรด และปรับปรุงการรองรับชิป Wi-Fi ของ Qualcomm WCN6750
    • เพิ่มไดรเวอร์สำหรับคีย์บอร์ด PinePhone, ทัชแพด InterTouch (ThinkPad P1 G3), X-Box Adaptive Controller, PhoenixRC Flight Controller, VRC-2 Car Controller, DualSense Edge Controller, IBM Operation Panel, XBOX One Elite Remotes, แท็บเล็ต XP-PEN Deco Pro S และ Intuos Pro Small (PTH-460)
    • เพิ่มไดรเวอร์สำหรับตัวเร่งความเร็วการเข้ารหัส Aspeed HACE (Hash และ Crypto Engine)
    • เพิ่มการรองรับคอนโทรลเลอร์ Intel Meteor Lake ของ Thunderbolt/USB4
    • เพิ่มการรองรับสำหรับสมาร์ทโฟน Sony Xperia 1 IV, Samsung Galaxy E5, E7 และ Grand Max, Pine64 Pinephone Pro
    • เพิ่มการรองรับ ARM SoC และบอร์ด: AMD DaytonaX, Mediatek MT8186, Rockchips RK3399 และ RK3566, TI AM62A, NXP i.MX8DXL, Renesas R-Car H3Ne-1.7G, Qualcomm IPQ8064-v2.0, IPQ8062, IPQ8065, Kontron SL/ BL i.MX8MM OSM-S, MT8195 (Acer Tomato), Radxa ROCK 4C+, NanoPi R4S Enterprise Edition, JetHome JetHub D1p. อัปเดตไดรเวอร์สำหรับ SoC Samsung, Mediatek, Renesas, Tegra, Qualcomm, Broadcom และ NXP

ในเวลาเดียวกันมูลนิธิซอฟต์แวร์เสรีลาตินอเมริกาได้ก่อตั้งเวอร์ชันของเคอร์เนลฟรี 6.1 - Linux-libre 6.1-gnu ซึ่งล้างองค์ประกอบของเฟิร์มแวร์และไดรเวอร์ที่มีส่วนประกอบหรือส่วนของโค้ดที่ไม่ฟรีซึ่งมีขอบเขตคือ จำกัดโดยผู้ผลิต รุ่นใหม่จะล้างไดรเวอร์ rtw8852b ใหม่และไฟล์ DTS สำหรับ Qualcomm และ MediaTek SoC ต่างๆ พร้อมโปรเซสเซอร์ที่ใช้สถาปัตยกรรม AArch64 อัปเดตรหัสการทำความสะอาดหยดในไดรเวอร์และระบบย่อย amdgpu, i915, brcmfmac, r8188eu, rtw8852c, Intel ACPI การทำความสะอาดการ์ดทีวี tm6000 ที่ล้าสมัย, cpia2 v4l, sp8870, av7110 ได้รับการแก้ไขแล้ว

ที่มา: opennet.ru

เพิ่มความคิดเห็น