ลินุกซ์เคอร์เนล5.14

ลินุกซ์เคอร์เนล5.14

หลังจากสองเดือนของการพัฒนา Linus Torvalds ส่ง การปล่อยเคอร์เนล Linux 5.14. การเปลี่ยนแปลงที่โดดเด่นที่สุด: การเรียกระบบ quotactl_fd() และ memfd_secret() ใหม่, การลบไดรเวอร์ ide และ raw, ตัวควบคุมลำดับความสำคัญ I/O ใหม่สำหรับ cgroup, โหมดการกำหนดเวลางาน SCHED_CORE, โครงสร้างพื้นฐานสำหรับการสร้างโปรแกรมโหลดเดอร์ BPF ที่ตรวจสอบแล้ว

เวอร์ชันใหม่ประกอบด้วยการแก้ไข 15883 รายการจากนักพัฒนา 2002 ราย ขนาดแพตช์คือ 69 MB (การเปลี่ยนแปลงส่งผลกระทบต่อไฟล์ 12580 ไฟล์ เพิ่มโค้ด 861501 บรรทัด และลบ 321654 บรรทัด) ประมาณ 47% ของการเปลี่ยนแปลงทั้งหมดที่นำมาใช้ใน 5.14 เกี่ยวข้องกับไดรเวอร์อุปกรณ์ ประมาณ 14% ของการเปลี่ยนแปลงเกี่ยวข้องกับการอัพเดตโค้ดเฉพาะสำหรับสถาปัตยกรรมฮาร์ดแวร์ 13% เกี่ยวข้องกับสแต็กเครือข่าย 3% เกี่ยวข้องกับระบบไฟล์ และ 3% เกี่ยวข้องกับระบบย่อยเคอร์เนลภายใน

หลัก นวัตกรรม:

  • ระบบย่อยของดิสก์ อินพุต/เอาท์พุต และระบบไฟล์:
    • สำหรับซีกรุ๊ป ดำเนินการ ตัวควบคุมลำดับความสำคัญ I/O ใหม่ - rq-qos ซึ่งสามารถควบคุมลำดับความสำคัญในการประมวลผลของคำขอเพื่อบล็อกอุปกรณ์ที่สร้างโดยสมาชิกของแต่ละกลุ่ม cgroup เพิ่มการสนับสนุนคอนโทรลเลอร์ลำดับความสำคัญใหม่ให้กับตัวกำหนดเวลา I/O ของ mq-deadline แล้ว
    • บนระบบไฟล์ ext4 นำไปใช้ คำสั่ง ioctl ใหม่ EXT4_IOC_CHECKPOINT ซึ่งบังคับธุรกรรมที่ค้างอยู่ทั้งหมดจากบันทึกและบัฟเฟอร์ที่เกี่ยวข้องไปยังดิสก์ และยังเขียนทับพื้นที่ที่ใช้โดยหน่วยเก็บข้อมูลบันทึกเข้าสู่ระบบ การเปลี่ยนแปลงนี้จัดทำขึ้นโดยเป็นส่วนหนึ่งของความคิดริเริ่มเพื่อป้องกันการรั่วไหลของข้อมูลจากระบบไฟล์
    • ใน Btrfs เข้ามา การเพิ่มประสิทธิภาพการทำงาน: ด้วยการขจัดการบันทึกที่ไม่จำเป็นของแอตทริบิวต์เพิ่มเติมระหว่างการดำเนินการ fsync ประสิทธิภาพของการดำเนินการที่เข้มข้นพร้อมคุณลักษณะเพิ่มเติมจึงเพิ่มขึ้นสูงสุด 17% นอกจากนี้ เมื่อดำเนินการตัดแต่งที่ไม่ส่งผลกระทบต่อขอบเขต การซิงโครไนซ์แบบเต็มจะถูกปิดใช้งาน ซึ่งทำให้เวลาดำเนินการลดลง 12% มีการเพิ่มการตั้งค่าใน sysfs เพื่อจำกัดแบนด์วิดท์ I/O เมื่อตรวจสอบ FS เพิ่มการเรียก ioctl เพื่อยกเลิกการปรับขนาดและการลบการทำงานของอุปกรณ์
    • ใน XFS ทำใหม่ การใช้งานบัฟเฟอร์แคชซึ่งถูกถ่ายโอนไปยังการจัดสรรเพจหน่วยความจำในโหมดแบตช์ ปรับปรุงประสิทธิภาพของแคช
    • F2FS เพิ่มตัวเลือกในการทำงานในโหมดอ่านอย่างเดียวและใช้โหมดแคชบล็อกที่บีบอัด (compress_cache) เพื่อปรับปรุงประสิทธิภาพการอ่านแบบสุ่ม มีการใช้งานการสนับสนุนสำหรับการบีบอัดไฟล์ที่แมปกับหน่วยความจำโดยใช้การดำเนินการ mmap() หากต้องการปิดใช้งานการบีบอัดไฟล์แบบเลือกโดยใช้มาสก์ จึงมีการเสนอตัวเลือกการเมาท์ใหม่ nocompress
    • งานเสร็จสิ้นในไดรเวอร์ exFAT เพื่อปรับปรุงความเข้ากันได้กับที่เก็บข้อมูลของกล้องดิจิตอลบางรุ่น
    • เพิ่มการเรียกของระบบ quotactl_fd()ซึ่งช่วยให้คุณจัดการโควต้าได้ไม่ผ่านไฟล์อุปกรณ์พิเศษ แต่โดยการระบุตัวอธิบายไฟล์ที่เกี่ยวข้องกับระบบไฟล์ที่ใช้โควต้า
    • ไดรเวอร์เก่าสำหรับอุปกรณ์บล็อกที่มีอินเทอร์เฟซ IDE ได้ถูกลบออกจากเคอร์เนลแล้ว และถูกแทนที่ด้วยระบบย่อย libata มานานแล้ว การรองรับอุปกรณ์เก่ายังคงอยู่อย่างเต็มรูปแบบ การเปลี่ยนแปลงเกี่ยวข้องกับความสามารถในการใช้ไดรเวอร์เก่าเท่านั้น เมื่อใช้ซึ่งไดรฟ์ถูกเรียกว่า /dev/hd* ไม่ใช่ /dev/sd*;
    • ไดรเวอร์ "ดิบ" ถูกลบออกจากเคอร์เนล ทำให้สามารถเข้าถึงอุปกรณ์บล็อกได้อย่างไม่มีบัฟเฟอร์ผ่านทางอินเทอร์เฟซ /dev/raw ฟังก์ชันนี้ถูกนำมาใช้มานานแล้วในแอปพลิเคชันที่ใช้แฟล็ก O_DIRECT
  • บริการหน่วยความจำและระบบ:
    • มีการนำโหมดการกำหนดเวลาใหม่มาใช้ในตัวกำหนดเวลางาน กำหนดไว้_COREซึ่งช่วยให้คุณควบคุมได้ว่ากระบวนการใดสามารถทำงานร่วมกันบนแกน CPU เดียวกันได้ แต่ละกระบวนการสามารถกำหนดตัวระบุคุกกี้ซึ่งกำหนดขอบเขตความน่าเชื่อถือระหว่างกระบวนการ (เช่น เป็นของผู้ใช้หรือคอนเทนเนอร์เดียวกัน) เมื่อจัดระเบียบการเรียกใช้โค้ด ตัวกำหนดเวลาสามารถมั่นใจได้ว่า CPU คอร์หนึ่งจะถูกแชร์ระหว่างกระบวนการที่เกี่ยวข้องกับเจ้าของคนเดียวกันเท่านั้น ซึ่งสามารถใช้เพื่อบล็อกการโจมตี Spectre บางอย่างโดยป้องกันไม่ให้งานที่น่าเชื่อถือและไม่น่าไว้วางใจทำงานบนเธรด SMT (Hyper Threading) เดียวกัน ;
    • สำหรับกลไก cgroup ได้มีการนำการสนับสนุนสำหรับการดำเนินการ kill มาใช้ ซึ่งช่วยให้คุณสามารถฆ่ากระบวนการทั้งหมดที่เกี่ยวข้องกับกลุ่มได้ในคราวเดียว (ส่ง SIGKILL) โดยการเขียน "1" ลงในไฟล์เสมือน cgroup.kill
    • ความสามารถเพิ่มเติมที่เกี่ยวข้องกับการตอบสนองต่อการตรวจจับการแยกล็อค (“การแยกล็อค”) ที่เกิดขึ้นเมื่อเข้าถึงข้อมูลที่ไม่สอดคล้องกันในหน่วยความจำ เนื่องจากข้อเท็จจริงที่ว่าเมื่อดำเนินการคำสั่งอะตอมมิก ข้อมูลจะข้ามสองบรรทัดแคชของ CPU การบล็อกดังกล่าวทำให้ประสิทธิภาพลดลงอย่างมาก ดังนั้นก่อนหน้านี้จึงเป็นไปได้ที่จะยุติแอปพลิเคชันที่ทำให้เกิดการบล็อกโดยบังคับ รุ่นใหม่เพิ่มพารามิเตอร์บรรทัดคำสั่งเคอร์เนล “split_lock_detect=ratelimit:N” ซึ่งช่วยให้คุณสามารถกำหนดขีดจำกัดทั้งระบบเกี่ยวกับอัตราการดำเนินการล็อคต่อวินาที หลังจากเกินนั้นกระบวนการใดๆ ที่กลายเป็นแหล่งที่มาของการแยกล็อคจะ ถูกบังคับให้หยุดเป็นเวลา 20 มิลลิวินาทีแทนที่จะยุติ
    • ตัวควบคุมแบนด์วิดท์ cgroup CFS (ตัวควบคุมแบนด์วิดท์ CFS) ซึ่งกำหนดระยะเวลาประมวลผลที่สามารถจัดสรรให้กับแต่ละกลุ่ม cgroup มีความสามารถในการกำหนดขีดจำกัดที่จำกัดโดยระยะเวลาการดำเนินการที่กำหนด ซึ่งช่วยให้ควบคุมโหลดที่ไวต่อความหน่วงได้ดีขึ้น ตัวอย่างเช่น การตั้งค่า cpu.cfs_quota_us เป็น 50000 และ cpu.cfs_ period_us เป็น 100000 จะทำให้กลุ่มของกระบวนการเสียเวลา CPU 100 มิลลิวินาทีทุกๆ 50 มิลลิวินาที
    • เพิ่ม โครงสร้างพื้นฐานเริ่มต้นสำหรับการสร้างโปรแกรมโหลดเดอร์ BPF ซึ่งจะอนุญาตให้ดาวน์โหลดเฉพาะโปรแกรม BPF ที่ลงนามด้วยคีย์ดิจิทัลที่เชื่อถือได้เท่านั้น
    • เพิ่มการดำเนินการ futex ใหม่ FUTEX_LOCK_PI2 ซึ่งใช้ตัวจับเวลาแบบโมโนโทนิกในการคำนวณการหมดเวลาซึ่งจะคำนึงถึงเวลาที่ระบบใช้ในโหมดสลีป
    • สำหรับสถาปัตยกรรม RISC-V รองรับเพจหน่วยความจำขนาดใหญ่ (Transparent Huge-Pages) และความสามารถในการใช้ เคเฟนซ์ เพื่อระบุข้อผิดพลาดเมื่อทำงานกับหน่วยความจำ
    • ในการเรียกระบบ madvise() ซึ่งให้วิธีการเพิ่มประสิทธิภาพการจัดการหน่วยความจำกระบวนการ เพิ่ม MADV_POPULATE_READ และ MADV_POPULATE_WRITE ตั้งค่าสถานะเพื่อสร้าง "ข้อบกพร่องของเพจ" บนเพจหน่วยความจำทั้งหมดที่แมปสำหรับการดำเนินการอ่านหรือเขียน โดยไม่ต้องดำเนินการอ่านหรือเขียนจริง (ค่าเริ่มต้น) การใช้แฟล็กอาจมีประโยชน์ในการลดความล่าช้าในการทำงานของโปรแกรมด้วยการดำเนินการเชิงรุกของตัวจัดการ "ข้อบกพร่องของเพจ" สำหรับเพจที่ไม่ได้ถูกจัดสรรทั้งหมดในคราวเดียว โดยไม่ต้องรอการเข้าถึงจริง
    • ในระบบการทดสอบหน่วย คูนิต เพิ่ม รองรับการทดสอบรันในสภาพแวดล้อม QEMU
    • เพิ่มการติดตามใหม่: "ออสนอยส์" เพื่อติดตามความล่าช้าของแอปพลิเคชันที่เกิดจากการจัดการกับการขัดจังหวะ และ " timerlat " เพื่อแสดงข้อมูลโดยละเอียดเกี่ยวกับความล่าช้าเมื่อตื่นขึ้นจากสัญญาณตัวจับเวลา
  • การจำลองเสมือนและความปลอดภัย:
    • เพิ่ม การโทรของระบบ memfd_secret()ซึ่งช่วยให้คุณสามารถสร้างพื้นที่หน่วยความจำส่วนตัวในพื้นที่ที่อยู่แยก ซึ่งมองเห็นได้เฉพาะกระบวนการของเจ้าของเท่านั้น ไม่สะท้อนให้เห็นในกระบวนการอื่น ๆ และไม่สามารถเข้าถึงได้โดยตรงโดยเคอร์เนล
    • ในระบบกรองการเรียกระบบ seccomp เมื่อย้ายตัวจัดการการล็อกไปยังพื้นที่ผู้ใช้ คุณสามารถใช้การดำเนินการแบบอะตอมมิกเดียวเพื่อสร้างตัวอธิบายไฟล์สำหรับงานที่แยกออกมา และส่งคืนเมื่อประมวลผลการเรียกของระบบ การดำเนินการที่นำเสนอจะแก้ไขได้ ปัญหา มีการหยุดชะงักของตัวจัดการในพื้นที่ผู้ใช้เมื่อมีสัญญาณมาถึง
    • เพิ่ม กลไกใหม่ เพื่อจัดการการจำกัดทรัพยากรในเนมสเปซ ID ผู้ใช้ ซึ่งจะผูกตัวนับ rlimit แต่ละตัวกับผู้ใช้ใน "เนมสเปซผู้ใช้" การเปลี่ยนแปลงแก้ปัญหาด้วยการใช้ตัวนับทรัพยากรทั่วไปเมื่อผู้ใช้รายหนึ่งรันกระบวนการในคอนเทนเนอร์ที่แตกต่างกัน
    • ไฮเปอร์ไวเซอร์ KVM สำหรับระบบ ARM64 ได้เพิ่มความสามารถในการใช้ส่วนขยาย MTE (MemTag, Memory Tagging Extension) ในระบบเกสต์ ซึ่งช่วยให้คุณสามารถผูกแท็กเข้ากับการดำเนินการจัดสรรหน่วยความจำแต่ละครั้ง และจัดระเบียบการตรวจสอบการใช้พอยน์เตอร์ที่ถูกต้องเพื่อป้องกันการใช้ประโยชน์จาก ช่องโหว่ที่เกิดจากการเข้าถึงบล็อกหน่วยความจำที่ว่างแล้ว บัฟเฟอร์ล้น การเข้าถึงก่อนการเริ่มต้น และการใช้งานนอกบริบทปัจจุบัน
    • การรับรองความถูกต้องของตัวชี้ที่จัดทำโดยแพลตฟอร์ม ARM64 สามารถกำหนดค่าแยกต่างหากสำหรับเคอร์เนลและพื้นที่ผู้ใช้ได้แล้ว เทคโนโลยีนี้ช่วยให้คุณใช้คำสั่งพิเศษ ARM64 เพื่อตรวจสอบที่อยู่ผู้ส่งโดยใช้ลายเซ็นดิจิทัลที่เก็บไว้ในบิตบนที่ไม่ได้ใช้ของตัวชี้เอง
    • ใน Linux โหมดผู้ใช้ เพิ่ม รองรับการใช้ไดรเวอร์สำหรับอุปกรณ์ PCI ที่มีบัส PCI เสมือนซึ่งใช้งานโดยไดรเวอร์ PCI-over-virtio
    • สำหรับระบบ x86 เพิ่มการรองรับอุปกรณ์พาราเวอร์ชวลไลซ์ virtio-iommu ซึ่งช่วยให้คุณส่งคำขอ IOMMU เช่น ATTACH, DETACH, MAP และ UNMAP ผ่านการขนส่ง virtio โดยไม่ต้องจำลองตารางเพจหน่วยความจำ
    • สำหรับ Intel CPU ตั้งแต่ตระกูล Skylake ไปจนถึง Coffee Lake การใช้ Intel TSX (Transactional Synchronization Extensions) ซึ่งมีเครื่องมือสำหรับการปรับปรุงประสิทธิภาพของแอปพลิเคชันแบบมัลติเธรดโดยการกำจัดการดำเนินการซิงโครไนซ์ที่ไม่จำเป็นแบบไดนามิกจะถูกปิดใช้งานตามค่าเริ่มต้น ส่วนขยายถูกปิดใช้งานเนื่องจากอาจถูกโจมตี โหลดซอมบี้จัดการการรั่วไหลของข้อมูลผ่านช่องทางบุคคลที่สามที่เกิดขึ้นระหว่างการทำงานของกลไกสำหรับการหยุดชะงักของการดำเนินการแบบอะซิงโครนัส (TAA, TSX Asynchronous Abort)
  • ระบบย่อยเครือข่าย:
    • บูรณาการอย่างต่อเนื่องในแกนหลักของ MPTCP (MultiPath TCP) ซึ่งเป็นส่วนขยายของโปรโตคอล TCP สำหรับจัดระเบียบการทำงานของการเชื่อมต่อ TCP พร้อมการส่งแพ็กเก็ตพร้อมกันไปตามหลายเส้นทางผ่านอินเทอร์เฟซเครือข่ายที่แตกต่างกันที่เกี่ยวข้องกับที่อยู่ IP ที่แตกต่างกัน ในฉบับใหม่ เพิ่ม กลไกในการตั้งค่านโยบายแฮชการรับส่งข้อมูลของคุณเองสำหรับ IPv4 และ IPv6 (นโยบายแฮชแบบหลายเส้นทาง) ทำให้เป็นไปได้จากพื้นที่ผู้ใช้เพื่อกำหนดว่าฟิลด์ใดในแพ็คเก็ตรวมถึงแพ็คเก็ตที่ห่อหุ้มจะถูกใช้ในการคำนวณแฮชที่กำหนดทางเลือกของเส้นทาง สำหรับแพ็คเก็ต;
    • เพิ่มการรองรับซ็อกเก็ตให้กับ virtual Transport virtio SOCK_SEQPACKET (การส่งข้อมูลดาต้าแกรมอย่างเป็นระเบียบและเชื่อถือได้)
    • ความสามารถของกลไกซ็อกเก็ต SO_REUSEPORT ได้รับการขยาย ซึ่งช่วยให้ซ็อกเก็ตการฟังหลายซ็อกเก็ตเชื่อมต่อกับพอร์ตเดียวพร้อมกันเพื่อรับการเชื่อมต่อกับการกระจายคำขอที่เข้ามาพร้อมกันในซ็อกเก็ตทั้งหมดที่เชื่อมต่อผ่าน SO_REUSEPORT ซึ่งช่วยลดความยุ่งยากในการสร้างแอปพลิเคชันเซิร์ฟเวอร์แบบมัลติเธรด . ในเวอร์ชั่นใหม่ เพิ่ม หมายถึงการถ่ายโอนการควบคุมไปยังซ็อกเก็ตอื่นในกรณีที่เกิดความล้มเหลวเมื่อประมวลผลคำขอโดยซ็อกเก็ตที่เลือกในตอนแรก (แก้ปัญหาการสูญเสียการเชื่อมต่อแต่ละรายการเมื่อเริ่มบริการใหม่)
  • อุปกรณ์:
    • ในไดรเวอร์ amdgpu นำไปใช้ รองรับ GPU ซีรีส์ AMD Radeon RX 6000 ใหม่ซึ่งมีชื่อรหัสว่า "Beige Goby" (Navi 24) และ "Yellow Carp" รวมถึงการปรับปรุงการรองรับ Aldebaran GPU (gfx90a) และ Van Gogh APU เพิ่มความสามารถในการทำงานพร้อมกันกับแผง eDP หลายแผง สำหรับ APU Renoir ได้มีการนำการสนับสนุนการทำงานกับบัฟเฟอร์ที่เข้ารหัสในหน่วยความจำวิดีโอ (TMZ, Trusted Memory Zone) มาใช้ เพิ่มการรองรับกราฟิกการ์ดแบบ hot-unplug สำหรับ GPU Radeon RX 6000 (Navi 2x) และ GPU AMD รุ่นเก่า การสนับสนุนกลไกการประหยัดพลังงาน ASPM (Active State Power Management) จะถูกเปิดใช้งานตามค่าเริ่มต้น ซึ่งก่อนหน้านี้เปิดใช้งานเฉพาะสำหรับ GPU Navi 1x, Vega และ Polaris เท่านั้น
    • สำหรับชิป AMD มีการเพิ่มการรองรับหน่วยความจำเสมือนที่ใช้ร่วมกัน (SVM, หน่วยความจำเสมือนที่ใช้ร่วมกัน) ตามระบบย่อย HMM (การจัดการหน่วยความจำที่แตกต่างกัน) ซึ่งอนุญาตให้ใช้อุปกรณ์ที่มีหน่วยจัดการหน่วยความจำของตัวเอง (MMU, หน่วยจัดการหน่วยความจำ) ซึ่งสามารถเข้าถึงหน่วยความจำหลักได้ รวมถึงการใช้ HMM คุณสามารถจัดระเบียบพื้นที่ที่อยู่ที่ใช้ร่วมกันระหว่าง GPU และ CPU ซึ่ง GPU สามารถเข้าถึงหน่วยความจำหลักของกระบวนการได้
    • เพิ่มการสนับสนุนเทคโนโลยีเบื้องต้น เอเอ็มดี สมาร์ทชิฟต์ซึ่งจะเปลี่ยนพารามิเตอร์การใช้พลังงานของ CPU และ GPU บนแล็ปท็อปที่มีชิปเซ็ตและกราฟิกการ์ด AMD แบบไดนามิก เพื่อเพิ่มประสิทธิภาพเมื่อเล่นเกม การตัดต่อวิดีโอ และการเรนเดอร์ 3D
    • ในไดรเวอร์ i915 สำหรับการ์ดแสดงผล Intel รวมอยู่ด้วย รองรับชิป Intel Alderlake P;
    • เพิ่มไดรเวอร์ drm/hyperv สำหรับอะแดปเตอร์กราฟิกเสมือน Hyper-V
    • เพิ่ม ไดรเวอร์กราฟิก simpledrm ที่ใช้ EFI-GOP หรือ VESA framebuffer ที่ได้รับจากเฟิร์มแวร์ UEFI หรือ BIOS สำหรับเอาต์พุต วัตถุประสงค์หลักของไดร์เวอร์คือเพื่อให้มีความสามารถในการเอาท์พุตแบบกราฟิกในระหว่างขั้นตอนเริ่มต้นของการบูต ก่อนที่จะสามารถใช้ไดรเวอร์ DRM แบบเต็มได้ ไดรเวอร์ยังสามารถใช้เป็นโซลูชันชั่วคราวสำหรับอุปกรณ์ที่ยังไม่มีไดรเวอร์ DRM ดั้งเดิม
    • เพิ่ม รองรับคอมพิวเตอร์ออลอินวัน ราสเบอร์รี่ Pi 400;
    • เพิ่มไดรเวอร์ dell-wmi-privacy เพื่อรองรับสวิตช์ฮาร์ดแวร์กล้องและไมโครโฟนที่รวมอยู่ในแล็ปท็อป Dell
    • สำหรับแล็ปท็อป Lenovo เพิ่ม อินเทอร์เฟซ WMI สำหรับการเปลี่ยนพารามิเตอร์ BIOS ผ่าน sysfs /sys/class/firmware-attributes/;
    • ขยาย รองรับอุปกรณ์ที่มีอินเตอร์เฟส USB4;
    • เพิ่ม รองรับการ์ดเสียงและตัวแปลงสัญญาณ AmLogic SM1 TOACODEC, Intel AlderLake-M, NXP i.MX8, NXP TFA1, TDF9897, Rockchip RK817, Qualcomm Quinary MI2 และ Texas Instruments TAS2505 ปรับปรุงการรองรับเสียงบนแล็ปท็อป HP และ ASUS เพิ่ม แพตช์เพื่อลดความล่าช้าก่อนที่เสียงจะเริ่มเล่นบนอุปกรณ์ที่มีอินเทอร์เฟซ USB

ที่มา – opennet.ru

ที่มา: linux.org.ru