- Linus Torvalds ได้ปล่อยเคอร์เนล 6.11 แล้ว
- ข้อความของเขา: "ผมกำลังเดินทางอีกครั้ง และนี่ไม่ใช่เขตเวลาปกติของผม แต่ที่เวียนนาตอนนี้เป็นบ่ายวันอาทิตย์ และ 6.11 ก็ออกแล้ว"
- การเปลี่ยนแปลงสำคัญในรีลีสนี้ ได้แก่ โอเปอเรชัน
bind() และ listen() ใหม่ใน io_uring, แพตช์ nested half-locking, ความสามารถในการเขียนลงไฟล์ executable ที่กำลังถูกใช้งาน, การรองรับการเขียน block driver ด้วย Rust, การรองรับการเขียนแบบ atomic ใน block layer, ตัวจัดสรร dedicated bucket slab และการติดตั้งใช้งาน getrandom() บน vDSO เป็นต้น
การเปลี่ยนแปลงตามสถาปัตยกรรม
- สถาปัตยกรรม Arm 64 บิต รองรับ CPU hotplug บนระบบ ACPI แล้ว ดูรายละเอียดได้ที่คอมมิตเอกสารนี้
- ตอนนี้เคอร์เนล X86 สามารถรันเป็น guest โดยใช้ฟีเจอร์ Secure Encrypted Virtualization ของ AMD แบบ SEV-SNP ได้ โดยใช้ secure VM service module
- ฟีเจอร์ "fake EFI memory map" บน X86 ถูกถอดออกแล้ว ฟีเจอร์นี้เคยช่วยให้สร้างรายการ memory map ปลอมระหว่างบูตได้ แต่ไม่สอดคล้องกับการตั้งค่า confidential computing
- มี implementation ใหม่ของรหัสลับ AES-GCM สำหรับระบบ x86-64 แม้การเพิ่มประสิทธิภาพจะเป็นเรื่องน่ายินดีอยู่แล้ว แต่ผลงานชิ้นนี้ยังโดดเด่นด้วยเอกสารประกอบอย่างละเอียดทั้งตัวโค้ดและการทำงาน ดูเพิ่มเติมได้ที่คอมมิตนี้
- ถอดการรองรับแพลตฟอร์ม PowerPC 40x ออก
- เพิ่มการรองรับ memory hotplugging ให้ระบบ RISC-V
เคอร์เนลแกนหลัก
- ซับซิสเต็ม io_uring ตอนนี้มีโอเปอเรชันที่ติดตั้งใช้งาน bind() และ listen() แล้ว
- ชุดโอเปอเรชัน ioctl() ใหม่ของระบบไฟล์ nsfs (namespace) ใช้สำหรับแปลง process และ thread group ID ข้าม PID namespace
- ระบบไฟล์ pidfd รองรับคำสั่ง ioctl() ใหม่สำหรับขอ namespace file descriptor ของโปรเซสที่แสดงด้วย pidfd
- แพตช์ nested bottom-half locking ถูกรวมเข้ามาแล้ว โดยหลักแล้วมีไว้เพื่อปรับปรุง latency ของเคอร์เนลแบบเรียลไทม์ แต่ผู้ใช้กลุ่มอื่นก็น่าจะได้ประโยชน์ด้วย
- มี system call ใหม่ชื่อ uretprobe() ซึ่งปัจจุบันติดตั้งใช้งานเฉพาะบนระบบ x86-64 หน้าที่ของมันคือเพิ่มประสิทธิภาพการจัดการ uretprobe (จุดติดตามการคืนค่าของฟังก์ชัน) ที่ถูกแทรกแบบไดนามิกในโปรเซส user space
- ยกเลิกข้อจำกัดผู้ใช้เดี่ยวของ function-graph tracer
- สามารถจองพื้นที่หน่วยความจำที่ตั้งชื่อไว้ได้ด้วยพารามิเตอร์บรรทัดคำสั่ง reserve_mem= ซึ่งมีไว้เพื่อใช้ร่วมกับพารามิเตอร์ ramoops.mem_name= ใหม่ในซับซิสเต็ม pstore
ระบบไฟล์และบล็อก I/O
- system call statx() ตอนนี้สามารถให้ path argument เป็น null pointer ได้เมื่อมีการตั้งค่าแฟลก AT_EMPTY_PATH
- system call open_by_handle_at() ใน 6.11 ได้ผ่อนคลายการตรวจสอบสิทธิ์บางส่วนลงในกรณีที่เคอร์เนลสามารถยืนยันได้ว่าผู้เรียกมีสิทธิ์เข้าถึงไฟล์นั้นอย่างเหมาะสม
- โดยปกติแล้วลินุกซ์เคอร์เนลจะบล็อกการเขียนลง executable file ที่กำลังถูกใช้งานโดยโปรเซสใดก็ตามในระบบ เพื่อป้องกันเรื่องไม่พึงประสงค์กับโปรแกรมที่กำลังรันอยู่ นักพัฒนาเคอร์เนลได้ค่อย ๆ ยกเลิกข้อจำกัดนี้มาหลายปีแล้ว และตั้งแต่ 6.11 เป็นต้นไป เคอร์เนลจะไม่ป้องกันการเขียนลง executable file ที่กำลังถูกใช้งานอีกต่อไป
- ระบบไฟล์ Btrfs รู้จักค่าใหม่บางรายการของตัวเลือกเมานต์ rescue= ได้แก่ ignoremetacsums และ ignoresuperflags เพื่อรองรับการกู้คืนระบบไฟล์ที่ถูกแปลงโดยเครื่องมือ user space ไปแล้วบางส่วน โดยเฉพาะระบบไฟล์ที่มีการแปลง checksum
- ปรับปรุงวิธีที่ Btrfs ทำ block-group reclaim เพื่อหลีกเลี่ยงสถานการณ์ที่ไม่สามารถใช้พื้นที่ว่างได้แม้ว่าระบบไฟล์จะยังไม่เต็ม คำอธิบายการทำงานของ dynamic reclaim threshold ใหม่ดูได้ที่คอมมิตนี้
การรองรับฮาร์ดแวร์
- ตัวควบคุมนาฬิกากล้อง Qualcomm SM8650
- ฮาร์ดแวร์มอนิเตอร์ เช่น เซนเซอร์อุณหภูมิที่สอดคล้องกับ SPD5118 และคอนโทรลเลอร์ดิจิทัล multi-phase แบบ dual-loop Monolithic Power Systems MP2993
- อื่น ๆ เช่น เซนเซอร์ของ ChromeOS embedded controller และตัวควบคุมการชาร์จที่ใช้ ChromeOS EC
- งานเครือข่าย เช่น อะแดปเตอร์เครือข่ายไร้สาย USB Realtek RTL8192DU, อินเทอร์เฟซ Renesas Ethernet-TSN และอินเทอร์เฟซ Vining 800 CAN
- ด้าน clock เช่น ตัวควบคุมนาฬิกา PLL ของ Amlogic C3 และตัวควบคุมนาฬิกาสำหรับ display/camera/video ของ Qualcomm SM7150
- GPIO และ pin control เช่น หน่วย pin control ของ NXP IMX91 และคอนโทรลเลอร์ pin/GPIO ของ Nuvoton MA35
- กราฟิก เช่น พาเนล Lincoln Technologies lcd197 และพาเนลที่ใช้ Ilitek ILI9806E
- เพิ่มการรองรับฮาร์ดแวร์ใหม่ในหลายด้าน เช่น industrial I/O, อุปกรณ์รับเข้า, media, อื่น ๆ, PHY, sound, USB เป็นต้น
อื่น ๆ
- มีซับซิสเต็ม power sequencing ใหม่สำหรับทำให้อุปกรณ์ในระบบเริ่มทำงานตามลำดับที่ถูกต้อง
- โมดูล "sloppy logic analyzer" สามารถเปลี่ยนชุดสาย GPIO ให้เป็นเครื่องวิเคราะห์ลอจิกราคาประหยัดได้
- เพิ่มความสามารถใหม่จำนวนมากให้กับเครื่องมือ perf
- มีการรวม ชุด abstraction ขนาดเล็กของ Rust สำหรับการโหลดเฟิร์มแวร์ เข้ามาแล้ว แม้ยังมีอีกหลายส่วนที่จำเป็นสำหรับการเขียนไดรเวอร์สำคัญด้วย Rust แต่รายการนั้นก็กำลังสั้นลงเรื่อย ๆ
เครือข่าย
- สามารถปรับค่า timeout ขั้นต่ำของการ retransmit สำหรับ TCP socket ได้ด้วย sysctl knob ใหม่ net.tcp_rto_min_us
- ยูทิลิตี ethtool สามารถปรับแต่งการตั้งค่า interrupt แบบละเอียดสำหรับอินเทอร์เฟซที่ใช้ Net DIM ได้แล้ว
ด้านความปลอดภัย
เวอร์ชวลไลเซชันและคอนเทนเนอร์
- เพิ่มการรองรับเบื้องต้นใน KVM สำหรับกลไก Secure Encrypted Virtualization ของ AMD แบบ SEV-SNP
- มีคำสั่ง KVM ioctl() ใหม่สำหรับเติมข้อมูลล่วงหน้าให้หน่วยความจำของ guest ก่อนที่ guest จะเริ่มรัน
การเปลี่ยนแปลงภายในเคอร์เนล
- การเปลี่ยนแปลงรายการแรกที่ถูกรวมใน 6.11 คือกลไก "runtime constants" ใหม่ที่เพิ่มโดย Linus Torvalds
- ในที่สุดก็มี เอกสารบางส่วน สำหรับซับซิสเต็ม iomap
- เวอร์ชันขั้นต่ำของ GNU Make ที่ต้องใช้ในการบิลด์เคอร์เนลถูกยกระดับเป็น 4.0
- ใน 6.11 มีการลบ exported symbols 118 รายการ และเพิ่ม 464 รายการ ทำให้เพิ่มสุทธิ 346 รายการ และยังมี kfunc ใหม่อีก 6 รายการ
ความเห็นของ GN⁺
- รีลีสเคอร์เนล 6.11 น่าประทับใจตรงที่มีการปรับปรุงเฉพาะสถาปัตยกรรมหลายอย่างและการขยายการรองรับฮาร์ดแวร์อย่างชัดเจน โดยเฉพาะ CPU hotplug บน ARM 64 บิตและการรองรับ AMD SEV-SNP บน x86 ซึ่งมีความหมายมากในด้านความปลอดภัยและเวอร์ชวลไลเซชัน
- เมื่อมีฟีเจอร์ใหม่เพิ่มเข้ามาใน io_uring และ BPF แนวโน้มของการเสริมการรองรับระดับเคอร์เนลสำหรับ high-performance I/O และการเขียนโปรแกรม eBPF ก็ยิ่งชัดเจนขึ้น ซึ่งจะช่วยอย่างมากต่อการปรับแต่งประสิทธิภาพระบบ การมอนิเตอร์ และงานเครือข่าย
- การมาของซับซิสเต็มและโมดูลใหม่ เช่น power sequencing และ sloppy logic analyzer คาดว่าจะช่วยเพิ่มการใช้งานลินุกซ์เคอร์เนลในสภาพแวดล้อม embedded และ IoT
- ยังมีการปรับแต่งโค้ดภายในเคอร์เนลและปรับปรุงความสะดวกในการพัฒนาอย่างต่อเนื่อง เช่น runtime constants และการปรับปรุงเอกสาร แต่ก็ยังมีหลายส่วนที่เอกสารไม่เพียงพอ จึงดูเหมือนว่ายังต้องการความร่วมมือจากชุมชนอีกมาก
- ในช่วงท้ายของหน้าต่าง merge window สำหรับ 6.11 ประเด็นหลักคือการปรับปรุงประสิทธิภาพสำหรับหลายสถาปัตยกรรมและการรองรับฮาร์ดแวร์ใหม่ โดยเฉพาะการปรับแต่งรหัสลับ AES-GCM บน x86-64 และการรองรับ memory hotplugging บน RISC-V ที่น่าจับตา
- ด้านความปลอดภัยของเวอร์ชวลไลเซชันก็มีความคืบหน้า เช่น การเพิ่มการรองรับเบื้องต้นสำหรับ AMD SEV-SNP ใน KVM ซึ่งชี้ให้เห็นว่าบทบาทของลินุกซ์เคอร์เนลในสภาพแวดล้อมคลาวด์และ edge computing จะยิ่งขยายตัว
- การนำ Rust abstraction มาใช้สำหรับการโหลดเฟิร์มแวร์และการป้องกัน heap spray แสดงให้เห็นถึงศักยภาพของ Rust ในฐานะภาษาสำหรับ system programming และคาดว่าสัดส่วนของโค้ด Rust ในเคอร์เนลจะค่อย ๆ เพิ่มขึ้นในอนาคต
- น่าเสียดายที่การรวม scalable scheduler class ถูกเลื่อนออกไป แต่ก็ดูเป็นทางเลือกที่หลีกเลี่ยงไม่ได้เพื่อให้มีเวลาทบทวนและทำให้เสถียรมากพอ เนื่องจาก scheduler ส่งผลโดยตรงต่อประสิทธิภาพของระบบ จึงจำเป็นต้องใช้แนวทางที่รอบคอบ
3 ความคิดเห็น
"อัปเดตเป็น 6.10.10 แล้ว แต่ก็ยังมีอาการไม่ยอมตื่นจากโหมดสลีปเป็นพัก ๆ"
ที่แท้ก็ไม่ได้เป็นอยู่คนเดียวสินะ...
พี่ Torvalds คงต้องมีชีวิตอยู่อีกสัก 200 ปีเลย
ความคิดเห็นใน Hacker News