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

หลังจากสองเดือนของการพัฒนา Linus Torvalds ได้เปิดตัวเคอร์เนล Linux 6.0 การเปลี่ยนแปลงหมายเลขเวอร์ชันที่สำคัญมีไว้เพื่อเหตุผลด้านสุนทรียศาสตร์และเป็นขั้นตอนที่เป็นทางการเพื่อบรรเทาความรู้สึกไม่สบายจากการสะสมปัญหาจำนวนมากในซีรีส์ (Linus พูดติดตลกว่าเหตุผลในการเปลี่ยนหมายเลขสาขามีแนวโน้มว่าเขานิ้วจะหมดมากกว่า และนิ้วเท้านับเลขเวอร์ชั่น) การเปลี่ยนแปลงที่โดดเด่นที่สุด: รองรับการเขียนบัฟเฟอร์แบบอะซิงโครนัสใน XFS, ไดรเวอร์บล็อก ublk, การเพิ่มประสิทธิภาพของตัวกำหนดเวลางาน, กลไกในการตรวจสอบการทำงานที่ถูกต้องของเคอร์เนล, รองรับรหัสบล็อก ARIA

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

  • ระบบย่อยของดิสก์ I/O และระบบไฟล์
    • ระบบไฟล์ XFS ได้เพิ่มการสนับสนุนสำหรับการเขียนบัฟเฟอร์แบบอะซิงโครนัสโดยใช้กลไก io_uring การทดสอบประสิทธิภาพดำเนินการโดยใช้เครื่องมือ fio (1 เธรด, ขนาดบล็อก 4kB, 600 วินาที, การเขียนตามลำดับ) แสดงการเพิ่มขึ้นของการดำเนินการอินพุต/เอาท์พุตต่อวินาที (IOPS) จาก 77k เป็น 209k ความเร็วการถ่ายโอนข้อมูลจาก 314MB/s เป็น 854MB /s และเวลาแฝงลดลงจาก 9600ns เป็น 120ns (80 ครั้ง)
    • ระบบไฟล์ Btrfs ใช้เวอร์ชันที่สองของโปรโตคอลสำหรับคำสั่ง “send” ซึ่งใช้การรองรับข้อมูลเมตาเพิ่มเติม การส่งข้อมูลในบล็อกขนาดใหญ่ (มากกว่า 64K) และการส่งขอบเขตในรูปแบบที่บีบอัด ประสิทธิภาพของการดำเนินการอ่านโดยตรงเพิ่มขึ้นอย่างมาก (สูงสุด 3 เท่า) เนื่องจากการอ่านพร้อมกันสูงสุด 256 ส่วน ลดการแย่งชิงการล็อกและเร่งการตรวจสอบข้อมูลเมตาโดยการลดข้อมูลเมตาที่สงวนไว้สำหรับองค์ประกอบที่เลื่อนออกไป
    • การดำเนินการ ioctl ใหม่ EXT4_IOC_GETFSUUID และ EXT4_IC_SETFSUUID ได้รับการเพิ่มไปยังระบบไฟล์ ext4 เพื่อดึงข้อมูลหรือตั้งค่า UUID ที่จัดเก็บไว้ในซูเปอร์บล็อก
    • ระบบไฟล์ F2FS นำเสนอโหมดการใช้หน่วยความจำต่ำ ซึ่งจะเพิ่มประสิทธิภาพการทำงานบนอุปกรณ์ที่มี RAM จำนวนเล็กน้อย และช่วยให้คุณลดการใช้หน่วยความจำโดยที่ต้นทุนของประสิทธิภาพลดลง
    • เพิ่มการสนับสนุนสำหรับการรับรองความถูกต้องของไดรฟ์ NVMe
    • เซิร์ฟเวอร์ NFSv4 ดำเนินการจำกัดจำนวนไคลเอ็นต์ที่ใช้งานอยู่ ซึ่งถูกกำหนดให้เป็นไคลเอ็นต์ที่ถูกต้อง 1024 รายการสำหรับ RAM แต่ละกิกะไบต์ในระบบ
    • การใช้งานไคลเอนต์ CIFS ได้ปรับปรุงประสิทธิภาพในโหมดการส่งผ่านหลายช่องทาง
    • มีการเพิ่มแฟล็กใหม่ FAN_MARK_IGNORE ลงในระบบย่อยการติดตามเหตุการณ์ใน fanotify FS เพื่อละเว้นเหตุการณ์เฉพาะ
    • ใน Overlayfs FS เมื่อประกอบเข้ากับ FS ที่มีการแมป ID ผู้ใช้ จะมีการรองรับรายการควบคุมการเข้าถึงที่สอดคล้องกับ POSIX อย่างถูกต้อง
    • เพิ่มไดรเวอร์บล็อก ublk ซึ่งจะย้ายตรรกะเฉพาะไปที่ด้านข้างของกระบวนการพื้นหลังในพื้นที่ผู้ใช้และใช้ระบบย่อย io_uring
  • บริการหน่วยความจำและระบบ
    • มีการเพิ่มคุณสมบัติใหม่ให้กับระบบย่อย DAMON (Data Access MONitor) ซึ่งไม่เพียงแต่ช่วยให้ตรวจสอบการเข้าถึงกระบวนการ RAM จากพื้นที่ผู้ใช้เท่านั้น แต่ยังมีอิทธิพลต่อการจัดการหน่วยความจำอีกด้วย โดยเฉพาะอย่างยิ่ง มีการเสนอโมดูลใหม่ “LRU_SORT” ซึ่งมีการจัดกลุ่มรายการ LRU (ใช้ล่าสุดน้อยที่สุด) ใหม่เพื่อเพิ่มลำดับความสำคัญของเพจหน่วยความจำบางหน้า
    • ความสามารถในการสร้างขอบเขตหน่วยความจำใหม่ได้ถูกนำมาใช้โดยใช้ความสามารถของบัส CXL (Compute Express Link) ซึ่งใช้ในการจัดระเบียบการโต้ตอบความเร็วสูงระหว่าง CPU และอุปกรณ์หน่วยความจำ CXL ช่วยให้คุณสามารถเชื่อมต่อขอบเขตหน่วยความจำใหม่ที่ได้รับจากอุปกรณ์หน่วยความจำภายนอก และใช้เป็นทรัพยากรพื้นที่ที่อยู่ทางกายภาพเพิ่มเติมเพื่อขยายหน่วยความจำเข้าถึงโดยสุ่ม (DDR) หรือหน่วยความจำถาวร (PMEM) ของระบบ
    • แก้ไขปัญหาประสิทธิภาพการทำงานของโปรเซสเซอร์ AMD Zen ที่เกิดจากโค้ดที่เพิ่มเมื่อ 20 ปีที่แล้วเพื่อแก้ไขปัญหาฮาร์ดแวร์ในชิปเซ็ตบางรุ่น (คำสั่ง WAIT เพิ่มเติมถูกเพิ่มเพื่อทำให้โปรเซสเซอร์ช้าลง เพื่อให้ชิปเซ็ตมีเวลาเข้าสู่สถานะไม่ได้ใช้งาน) การเปลี่ยนแปลงส่งผลให้ประสิทธิภาพการทำงานลดลงภายใต้ปริมาณงานซึ่งมักสลับกันระหว่างสถานะไม่ได้ใช้งานและไม่ว่าง ตัวอย่างเช่น หลังจากปิดใช้งานวิธีแก้ปัญหา คะแนนการทดสอบ tbench เฉลี่ยเพิ่มขึ้นจาก 32191 MB/s เป็น 33805 MB/s
    • รหัสที่มีการวิเคราะห์พฤติกรรมได้ถูกลบออกจากตัวกำหนดเวลางาน เพื่อให้มั่นใจว่าการโยกย้ายกระบวนการไปยัง CPU ที่โหลดน้อยที่สุด โดยคำนึงถึงการเพิ่มขึ้นของการใช้พลังงานที่คาดการณ์ไว้ นักพัฒนาสรุปว่าฮิวริสติกไม่มีประโยชน์เพียงพอ และง่ายกว่าที่จะลบและย้ายกระบวนการโดยไม่ต้องมีการประเมินเพิ่มเติม เมื่อใดก็ตามที่การย้ายดังกล่าวอาจส่งผลให้มีการใช้พลังงานน้อยลง (เช่น เมื่อ CPU เป้าหมายอยู่ในระดับพลังงานที่ต่ำกว่า) การปิดใช้งานการวิเคราะห์พฤติกรรมช่วยลดการใช้พลังงานเมื่อทำงานที่เข้มข้น เช่น ในการทดสอบการถอดรหัสวิดีโอ การใช้พลังงานลดลง 5.6%
    • การกระจายงานข้ามคอร์ CPU บนระบบขนาดใหญ่ได้รับการปรับปรุงให้เหมาะสม ซึ่งได้ปรับปรุงประสิทธิภาพสำหรับเวิร์กโหลดบางประเภท
    • อินเทอร์เฟซ I/O แบบอะซิงโครนัส io_uring นำเสนอแฟล็กใหม่ IORING_RECV_MULTISHOT ซึ่งช่วยให้คุณใช้โหมดมัลติช็อตด้วยการเรียกระบบ recv() เพื่อดำเนินการอ่านหลายรายการจากซ็อกเก็ตเครือข่ายเดียวกันในครั้งเดียว io_uring ยังรองรับการถ่ายโอนเครือข่ายโดยไม่มีการบัฟเฟอร์ระดับกลาง (การคัดลอกเป็นศูนย์)
    • นำความสามารถในการทำให้โปรแกรม BPF ที่แนบมากับ uprobe เข้าสู่สถานะสลีป BPF ยังเพิ่ม ksym ตัววนซ้ำใหม่สำหรับการทำงานกับตารางสัญลักษณ์เคอร์เนล
    • อินเทอร์เฟซ "efivars" ที่ล้าสมัยใน sysfs ซึ่งมีไว้สำหรับการเข้าถึงตัวแปรการบูต UEFI ได้ถูกลบออกแล้ว (ตอนนี้ FS เสมือน efivarfs ถูกใช้ในระดับสากลเพื่อเข้าถึงข้อมูล EFI)
    • ยูทิลิตี้ perf มีรายงานใหม่สำหรับการวิเคราะห์ข้อขัดแย้งในการล็อคและเวลาที่ใช้โดยโปรเซสเซอร์ในการรันส่วนประกอบเคอร์เนล
    • การตั้งค่า CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE_O3 ได้ถูกลบออกแล้ว ซึ่งอนุญาตให้สร้างเคอร์เนลในโหมดเพิ่มประสิทธิภาพ "-O3" มีข้อสังเกตว่าการทดลองกับโหมดการปรับให้เหมาะสมที่สุดสามารถทำได้โดยการส่งแฟล็กระหว่างการประกอบ (“make KCFLAGS=-O3”) และการเพิ่มการตั้งค่าให้กับ Kconfig จำเป็นต้องมีการทำโปรไฟล์ประสิทธิภาพที่ทำซ้ำได้ ซึ่งแสดงให้เห็นว่าการคลายลูปที่ใช้ในโหมด “-O3” ให้ ประโยชน์เมื่อเปรียบเทียบกับระดับการปรับให้เหมาะสม "-O2"
    • มีการเพิ่มอินเทอร์เฟซ debugfs เพื่อรับข้อมูลเกี่ยวกับการทำงานของ "ตัวลดขนาดหน่วยความจำ" แต่ละตัว (ตัวจัดการจะเรียกใช้เมื่อมีหน่วยความจำไม่เพียงพอและบรรจุโครงสร้างข้อมูลเคอร์เนลเพื่อลดการใช้หน่วยความจำ)
    • สำหรับสถาปัตยกรรม OpenRISC และ LoongArch จะมีการรองรับบัส PCI
    • สำหรับสถาปัตยกรรม RISC-V มีการใช้ส่วนขยาย “Zicbom” เพื่อจัดการอุปกรณ์ที่มี DMA ที่ไม่เชื่อมโยงแคช
  • การจำลองเสมือนและความปลอดภัย
    • มีการเพิ่มกลไกการตรวจสอบ RV (การตรวจสอบรันไทม์) เพื่อตรวจสอบการทำงานที่ถูกต้องบนระบบที่เชื่อถือได้สูง ซึ่งรับประกันว่าไม่มีข้อผิดพลาด การตรวจสอบจะดำเนินการในขณะรันไทม์โดยการแนบตัวจัดการเพื่อติดตามจุดที่ตรวจสอบความคืบหน้าที่แท้จริงของการดำเนินการกับแบบจำลองที่กำหนดการอ้างอิงที่กำหนดไว้ล่วงหน้าของเครื่องซึ่งกำหนดลักษณะการทำงานที่คาดหวังของระบบ การยืนยันด้วยโมเดล ณ รันไทม์นั้นถือเป็นวิธีการที่ใช้ง่ายและง่ายต่อการนำไปใช้ในการยืนยันความถูกต้องของการดำเนินการบนระบบที่สำคัญ ซึ่งจะช่วยเสริมวิธีการตรวจสอบความน่าเชื่อถือแบบคลาสสิก ข้อดีอย่างหนึ่งของ RV คือความสามารถในการให้การตรวจสอบที่เข้มงวดโดยไม่ต้องมีการใช้งานระบบทั้งหมดแยกต่างหากในภาษาการสร้างแบบจำลอง เช่นเดียวกับการตอบสนองต่อเหตุการณ์ที่ไม่คาดคิดอย่างยืดหยุ่น
    • ส่วนประกอบเคอร์เนลแบบรวมสำหรับการจัดการเครือข่ายที่ใช้เทคโนโลยี Intel SGX2 (Software Guard eXtensions) ซึ่งช่วยให้แอปพลิเคชันสามารถรันโค้ดในพื้นที่หน่วยความจำที่เข้ารหัสแบบแยกส่วน ซึ่งส่วนที่เหลือของระบบมีการเข้าถึงที่จำกัด เทคโนโลยี Intel SGX2 ได้รับการสนับสนุนในชิป Intel Ice Lake และ Gemini Lake และแตกต่างจาก Intel SGX1 ในคำแนะนำเพิ่มเติมสำหรับการจัดการหน่วยความจำแบบไดนามิกของ Enclaves
    • สำหรับสถาปัตยกรรม x86 ได้มีการนำความสามารถในการถ่ายโอนข้อมูลเริ่มต้นสำหรับตัวสร้างตัวเลขสุ่มเทียมผ่านการตั้งค่า bootloader แล้ว
    • ขณะนี้โมดูล SafeSetID LSM มีความสามารถในการจัดการการเปลี่ยนแปลงที่ทำผ่านการเรียก setgroups() SafeSetID ช่วยให้บริการระบบสามารถจัดการผู้ใช้ได้อย่างปลอดภัยโดยไม่ต้องเพิ่มสิทธิ์ (CAP_SETUID) และไม่ได้รับสิทธิ์รูท
    • เพิ่มการรองรับ ARIA block cipher
    • โมดูลการจัดการความปลอดภัยที่ใช้ BPF ให้ความสามารถในการแนบตัวจัดการกับแต่ละกระบวนการและกลุ่มกระบวนการ (cgroups)
    • มีการเพิ่มกลไกที่มีการใช้งานเฝ้าระวังเพื่อตรวจจับการแฮงค์ของระบบแขกโดยอิงตามการตรวจสอบกิจกรรม vCPU
  • ระบบย่อยของเครือข่าย
    • มีการเพิ่มตัวจัดการสำหรับการสร้างและการตรวจสอบคุกกี้ SYN เข้ากับระบบย่อย BPF ที่เพิ่มเข้ามาคือชุดฟังก์ชัน (kfunc) สำหรับการเข้าถึงและเปลี่ยนสถานะการเชื่อมต่อ
    • สแตกไร้สายได้เพิ่มการรองรับกลไก MLO (การทำงานหลายลิงก์) ที่กำหนดไว้ในข้อกำหนด WiFi 7 และอนุญาตให้อุปกรณ์รับและส่งข้อมูลพร้อมกันโดยใช้คลื่นความถี่และช่องสัญญาณที่แตกต่างกัน ตัวอย่างเช่น เพื่อสร้างช่องทางการสื่อสารหลายช่องพร้อมกันระหว่าง จุดเข้าใช้งานไปยังอุปกรณ์ไคลเอ็นต์
    • ประสิทธิภาพของโปรโตคอล TLS ที่สร้างไว้ในเคอร์เนลได้รับการปรับปรุงแล้ว
    • เพิ่มตัวเลือกบรรทัดคำสั่งเคอร์เนล "hostname=" เพื่ออนุญาตให้ตั้งชื่อโฮสต์ตั้งแต่ต้นในกระบวนการบู๊ต ก่อนที่ส่วนประกอบพื้นที่ผู้ใช้จะเริ่มทำงาน
  • Оборудование
    • ไดรเวอร์ i915 (Intel) ให้การสนับสนุนการ์ดวิดีโอแยก Intel Arc (DG2/Alchemist) A750 และ A770 มีการเสนอการใช้งานการสนับสนุนเบื้องต้นสำหรับ Intel Ponte Vecchio (Xe-HPC) และ GPU Meteor Lake งานยังคงสนับสนุนแพลตฟอร์ม Intel Raptor Lake ต่อไป
    • ไดรเวอร์ amdgpu ยังคงให้การสนับสนุนแพลตฟอร์ม AMD RDNA3 (RX 7000) และ CDNA (Instinct)
    • ไดรเวอร์ Nouveau ได้ทำโค้ดสนับสนุนใหม่สำหรับเอ็นจิ้นการแสดงผล NVIDIA nv50 GPU
    • เพิ่มไดรเวอร์ logicvc DRM ใหม่สำหรับหน้าจอ LogiCVC
    • ไดรเวอร์ v3d (สำหรับ Broadcom Video Core GPU) รองรับบอร์ด Raspberry Pi 4
    • เพิ่มการรองรับ GPU Qualcomm Adreno 619 ให้กับไดรเวอร์ msm
    • เพิ่มการรองรับ ARM Mali Valhall GPU ให้กับไดรเวอร์ Panfrost
    • เพิ่มการรองรับเบื้องต้นสำหรับโปรเซสเซอร์ Qualcomm Snapdragon 8cx Gen3 ที่ใช้ในแล็ปท็อป Lenovo ThinkPad X13s
    • เพิ่มไดรเวอร์เสียงสำหรับแพลตฟอร์ม AMD Raphael (Ryzen 7000), AMD Jadeite, Intel Meteor Lake และ Mediatek MT8186
    • เพิ่มการรองรับตัวเร่งความเร็วการเรียนรู้ของเครื่อง Intel Habana Gaudi 2
    • เพิ่มการรองรับ ARM SoC Allwinner H616, NXP i.MX93, Sunplus SP7021, Nuvoton NPCM8XX, Marvell Prestera 98DX2530, Google Chameleon v3

ในเวลาเดียวกันมูลนิธิซอฟต์แวร์เสรีลาตินอเมริกาได้ก่อตั้งเวอร์ชันของเคอร์เนลฟรี 6.0 - Linux-libre 6.0-gnu ซึ่งล้างองค์ประกอบของเฟิร์มแวร์และไดรเวอร์ที่มีส่วนประกอบหรือส่วนของโค้ดที่ไม่ฟรีซึ่งมีขอบเขตคือ จำกัดโดยผู้ผลิต รุ่นใหม่ปิดใช้งานการใช้ blobs ในไดรเวอร์ CS35L41 HD-audio และไดรเวอร์ UCSI สำหรับไมโครคอนโทรลเลอร์ STM32G0 ไฟล์ DTS สำหรับชิป Qualcomm และ MediaTek ได้รับการทำความสะอาดแล้ว การปิดใช้งาน blobs ในไดรเวอร์ MediaTek MT76 ได้รับการแก้ไขแล้ว อัปเดตโค้ดการทำความสะอาดหยดในไดรเวอร์และระบบย่อย AMDGPU, Adreno, Tegra VIC, Netronome NFP และ Habanalabs Gaudi2 หยุดการทำความสะอาดไดรเวอร์ VXGE ซึ่งถูกลบออกจากเคอร์เนล

ที่มา: opennet.ru

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