11 คะแนน โดย GN⁺ 2024-09-16 | 3 ความคิดเห็น | แชร์ทาง WhatsApp
  • 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 ความคิดเห็น

 
ehlegeth 2024-10-03

"อัปเดตเป็น 6.10.10 แล้ว แต่ก็ยังมีอาการไม่ยอมตื่นจากโหมดสลีปเป็นพัก ๆ"
ที่แท้ก็ไม่ได้เป็นอยู่คนเดียวสินะ...

 
xcutz 2024-09-16

พี่ Torvalds คงต้องมีชีวิตอยู่อีกสัก 200 ปีเลย

 
GN⁺ 2024-09-16
ความคิดเห็นใน Hacker News
  • เวอร์ชัน 6.10 มีปัญหามากจากบั๊กสำคัญหลายตัว
    • บั๊กที่เกี่ยวข้องกับ amdgpu 3 ตัวทำให้วิดีโอเสียหาย ระบบหยุดทำงาน และแครช
    • แม้อัปเดตเป็น 6.10.10 แล้ว ก็ยังมีอาการไม่ยอมตื่นจากโหมดสลีปเป็นบางครั้ง
  • นับตั้งแต่ Linux เวอร์ชัน 3.11 ก็มีความก้าวหน้ามากมาย
  • รู้สึกทึ่งที่ Torvalds ยังคงเขียนบันทึกประจำรุ่นของเคอร์เนล Linux อยู่
  • เป็นข่าวที่น่ายินดี
    • รองรับการเขียนบล็อกไดรเวอร์ด้วย Rust
    • รองรับการเขียนแบบอะตอมมิกใน block layer
  • คาดหวังกับเวอร์ชัน 6.12: sched_ext, PREEMPT_RT
  • ขอความเห็นเกี่ยวกับการรองรับ Snapdragon X ใหม่
  • สงสัยว่าจะนำ runtime constant ไปใช้งานอย่างไร
  • สงสัยว่ายุคของ GNU/Linux บนสมาร์ตโฟนจะมาถึงเมื่อไร
    • Android ไม่เหมาะ
    • อยากให้ติดตั้งดิสโทรลงสมาร์ตโฟนได้ง่ายเหมือนเดสก์ท็อป
  • สงสัยว่าตอนนี้สามารถ suspend Linux laptop ลง RAM ได้หรือยัง
  • รอวันที่ Ubuntu จะบอกว่าได้นำฟีเจอร์นี้ไปใช้และทดสอบบน Oracular beta มาหลายวันแล้ว