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

หลังจากสองเดือนของการพัฒนา Linus Torvalds ได้เปิดตัวเคอร์เนล Linux 5.14 การเปลี่ยนแปลงที่โดดเด่น ได้แก่ การเรียกระบบ Quoctl_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 และระบบไฟล์
    • ตัวควบคุมการจัดลำดับความสำคัญของ I/O ใหม่ rq-qos ถูกนำมาใช้สำหรับกลุ่ม c ซึ่งสามารถควบคุมลำดับความสำคัญของการประมวลผลคำขอเพื่อบล็อกอุปกรณ์ที่สร้างโดยสมาชิกของแต่ละกลุ่ม เพิ่มการรองรับตัวควบคุมลำดับความสำคัญใหม่ไปยังตัวกำหนดตารางเวลา 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 เพื่อปรับปรุงความเข้ากันได้กับที่เก็บข้อมูลกล้องดิจิทัลบางตัว
    • มีการเพิ่มการเรียกระบบ Quoctl_fd() ซึ่งช่วยให้คุณจัดการโควต้าไม่ได้ผ่านไฟล์อุปกรณ์พิเศษ แต่โดยการระบุตัวอธิบายไฟล์ที่เกี่ยวข้องกับระบบไฟล์ที่ใช้โควต้า
    • ไดรเวอร์อุปกรณ์บล็อก IDE เก่าถูกลบออกจากเคอร์เนล ซึ่งถูกแทนที่ด้วยระบบย่อย libata เมื่อนานมาแล้ว
    • ลบไดรเวอร์ "ดิบ" ออกจากเคอร์เนล ซึ่งให้การเข้าถึงแบบไม่มีบัฟเฟอร์เพื่อบล็อกอุปกรณ์ผ่านอินเทอร์เฟซ /dev/raw ฟังก์ชันนี้มีมานานแล้วในแอปพลิเคชันโดยใช้แฟล็ก O_DIRECT
  • บริการหน่วยความจำและระบบ
    • ตัวกำหนดตารางเวลางานมีโหมดการจัดตารางเวลาใหม่ SCHED_CORE ซึ่งช่วยให้คุณควบคุมได้ว่ากระบวนการใดที่สามารถทำงานพร้อมกันบนคอร์ CPU เดียวกันได้ แต่ละกระบวนการสามารถกำหนดตัวระบุคุกกี้ที่กำหนดขอบเขตของความไว้วางใจระหว่างกระบวนการ (เช่น เป็นของผู้ใช้หรือคอนเทนเนอร์เดียวกัน) เมื่อจัดระเบียบการเรียกใช้โค้ด ตัวกำหนดตารางเวลาสามารถรับประกันได้ว่าเฉพาะกระบวนการที่เกี่ยวข้องกับเจ้าของคนเดียวกันเท่านั้นที่ใช้ CPU คอร์เดียวร่วมกัน ซึ่งสามารถใช้บล็อกการโจมตีคลาส Spectre โดยป้องกันไม่ให้งานที่เชื่อถือได้และไม่น่าเชื่อถือทำงานบนเธรด SMT (Hyper Threading) เดียวกัน .
    • สำหรับ cgroup จะรองรับการดำเนินการ kill ซึ่งช่วยให้คุณฆ่ากระบวนการทั้งหมดที่แนบมากับกลุ่มได้ทันที (ส่ง SIGKILL) โดยเขียน "1" ลงในไฟล์ cgroup.kill เสมือน
    • ความสามารถที่เกี่ยวข้องกับการตอบสนองต่อการตรวจหาล็อคแยก ("แยกล็อค") ซึ่งเกิดขึ้นเมื่อเข้าถึงข้อมูลที่ไม่จัดแนวในหน่วยความจำเนื่องจากข้อเท็จจริงที่ว่าเมื่อดำเนินการตามคำสั่งอะตอม ข้อมูลข้ามสองบรรทัดของแคช CPU ได้รับ ขยายตัว การล็อกดังกล่าวทำให้ประสิทธิภาพการทำงานลดลงอย่างมาก ดังนั้นในอดีตจึงมักเป็นไปได้ที่จะบังคับให้แอปพลิเคชันยุติแอปพลิเคชันที่ทำให้เกิดการล็อก รีลีสใหม่นี้เพิ่มพารามิเตอร์บรรทัดคำสั่งเคอร์เนล "split_lock_detect=ratelimit:N" เพื่อตั้งค่าขีดจำกัดทั่วทั้งระบบสำหรับอัตราการดำเนินการล็อคต่อวินาที หลังจากนั้นกระบวนการใดๆ ที่กลายเป็นแหล่งที่มาของการแยกล็อคจะถูกบังคับให้ หยุดเป็นเวลา 20 ms แทนที่จะยุติ
    • ตัวควบคุมแบนด์วิธของกลุ่ม cFS (ตัวควบคุมแบนด์วิดท์ CFS) ซึ่งกำหนดระยะเวลาของโปรเซสเซอร์ที่สามารถจัดสรรให้กับแต่ละกลุ่ม มีความสามารถในการกำหนดขีดจำกัดที่จำกัดตามระยะเวลาการดำเนินการที่กำหนด ซึ่งช่วยให้สามารถควบคุมปริมาณงานที่มีความอ่อนไหวต่อความล่าช้าได้ดีขึ้น ตัวอย่างเช่น การตั้งค่า cpu.cfs_quota_us เป็น 50000 และ cpu.cfs_period_us เป็น 100000 จะทำให้กลุ่มกระบวนการเสียเวลา CPU 100ms ทุกๆ 50ms
    • มีการเพิ่มโครงสร้างพื้นฐานเริ่มต้นสำหรับการสร้างตัวโหลดโปรแกรม BPF ซึ่งในภายหลังจะอนุญาตให้โหลดได้เฉพาะโปรแกรม BPF ที่ลงนามด้วยคีย์ดิจิทัลที่เชื่อถือได้
    • มีการเพิ่มการดำเนินการ futex ใหม่ FUTEX_LOCK_PI2 ซึ่งใช้ตัวจับเวลาแบบโมโนโทนิกเพื่อคำนวณการหมดเวลาโดยคำนึงถึงเวลาที่ระบบใช้ในโหมดสลีป
    • สำหรับสถาปัตยกรรม RISC-V จะรองรับหน้าหน่วยความจำขนาดใหญ่ (Transparent Huge-Pages) และความสามารถในการใช้กลไก KFENCE เพื่อตรวจหาข้อผิดพลาดเมื่อทำงานกับหน่วยความจำ
    • เพิ่มแฟล็ก MADV_POPULATE_READ และ MADV_POPULATE_WRITE ในการเรียกระบบ madvise() ซึ่งมีวิธีการเพิ่มประสิทธิภาพการจัดการหน่วยความจำกระบวนการ เพื่อสร้าง "ข้อบกพร่องของเพจ" ในเพจหน่วยความจำทั้งหมดที่แมปสำหรับการดำเนินการอ่านหรือเขียนโดยไม่ต้องดำเนินการอ่านหรือเขียนจริง (ค่าเริ่มต้น ). การใช้แฟล็กอาจมีประโยชน์ในการลดความล่าช้าในการดำเนินการของโปรแกรมโดยการเรียกใช้งานตัวจัดการ "page fault" เชิงรุกสำหรับเพจที่ไม่ได้จัดสรรทั้งหมดในคราวเดียว โดยไม่ต้องรอให้เข้าถึงจริง
    • เพิ่มการสนับสนุนสำหรับการทดสอบการทำงานในสภาพแวดล้อม QEMU ในระบบการทดสอบหน่วย kunit
    • เพิ่มตัวติดตามใหม่: "osnoise" เพื่อตรวจสอบความล่าช้าของแอปพลิเคชันที่เกิดจากการจัดการการขัดจังหวะ และ "timerlat" เพื่อแสดงข้อมูลโดยละเอียดเกี่ยวกับความล่าช้าในการปลุกตัวจับเวลา
  • การจำลองเสมือนและความปลอดภัย
    • เพิ่มการเรียกระบบ memfd_secret() เพื่อสร้างพื้นที่หน่วยความจำส่วนตัวในพื้นที่ที่อยู่แยกที่มองเห็นได้เฉพาะกับกระบวนการของเจ้าของ ไม่สะท้อนไปยังกระบวนการอื่น และไม่สามารถเข้าถึงได้โดยตรงจากเคอร์เนล
    • ระบบการกรองการเรียกระบบ seccomp ให้ความสามารถในการใช้การดำเนินการแบบอะตอมเดียวเพื่อสร้างตัวอธิบายไฟล์สำหรับงานแยกและส่งกลับเมื่อประมวลผลการเรียกระบบเมื่อย้ายตัวจัดการล็อคไปยังพื้นที่ผู้ใช้ การดำเนินการที่เสนอช่วยแก้ปัญหาด้วยการขัดจังหวะตัวจัดการในพื้นที่ผู้ใช้เมื่อสัญญาณมาถึง
    • มีการเพิ่มกลไกใหม่เพื่อจัดการขีดจำกัดทรัพยากรในเนมสเปซ ID ผู้ใช้ ซึ่งผูกตัวนับ rlimit แต่ละตัวกับผู้ใช้ใน "เนมสเปซผู้ใช้" การเปลี่ยนแปลงนี้แก้ปัญหาด้วยการใช้ตัวนับทรัพยากรทั่วไปเมื่อผู้ใช้คนเดียวกันเริ่มกระบวนการในคอนเทนเนอร์ที่แตกต่างกัน
    • ในไฮเปอร์ไวเซอร์ KVM สำหรับระบบ ARM64 มีการเพิ่มความสามารถในการใช้ส่วนขยาย MTE (MemTag, Memory Tagging Extension) ในระบบเกสต์ ซึ่งช่วยให้คุณสามารถผูกแท็กกับการดำเนินการจัดสรรหน่วยความจำแต่ละครั้ง และจัดการตรวจสอบความถูกต้องของการใช้พอยน์เตอร์ บล็อกการใช้ประโยชน์จากช่องโหว่ที่เกิดจากการเข้าถึงบล็อกหน่วยความจำที่ว่างอยู่แล้ว บัฟเฟอร์ล้น การเรียกใช้การกำหนดค่าเริ่มต้นล่วงหน้า และการใช้งานนอกบริบทปัจจุบัน
    • การรับรองความถูกต้องของตัวชี้ที่จัดทำโดยแพลตฟอร์ม ARM64 สามารถกำหนดค่าแยกต่างหากสำหรับเคอร์เนลและพื้นที่ผู้ใช้ เทคโนโลยีนี้อนุญาตให้ใช้คำสั่งพิเศษ ARM64 เพื่อตรวจสอบที่อยู่ผู้ส่งคืนโดยใช้ลายเซ็นดิจิทัลที่จัดเก็บไว้ในบิตบนของตัวชี้ที่ไม่ได้ใช้
    • Linux โหมดผู้ใช้เพิ่มการรองรับสำหรับการใช้ไดรเวอร์สำหรับอุปกรณ์ PCI ที่มีบัส PCI เสมือนที่ใช้งานโดยไดรเวอร์ PCI-over-virtio
    • สำหรับระบบ x86 มีการเพิ่มการสนับสนุนสำหรับอุปกรณ์ virtio-iommu paravirtualized ซึ่งอนุญาตให้ส่งคำขอ IOMMU เช่น ATTACH, DETACH, MAP และ UNMAP ผ่านการขนส่ง virtio โดยไม่ต้องจำลองตารางหน้า
    • สำหรับ CPU ของ Intel ตั้งแต่ตระกูล Skylake ไปจนถึง Coffee Lake การใช้ส่วนขยาย Intel TSX (Transactional Synchronization Extensions) จะถูกปิดใช้งานตามค่าเริ่มต้น ซึ่งมีเครื่องมือสำหรับปรับปรุงประสิทธิภาพของแอพพลิเคชั่นแบบมัลติเธรดโดยการกำจัดการดำเนินการซิงโครไนซ์ที่ไม่จำเป็นแบบไดนามิก ส่วนขยายถูกปิดใช้งานเนื่องจากมีความเป็นไปได้ที่การโจมตี Zombieload จะจัดการการรั่วไหลของข้อมูลผ่านช่องทางของบุคคลที่สามที่เกิดขึ้นระหว่างการทำงานของกลไกการยกเลิกการดำเนินการแบบอะซิงโครนัส (TAA, TSX Asynchronous Abort)
  • ระบบย่อยของเครือข่าย
    • การรวมเข้ากับแกนหลักของ MPTCP (MultiPath TCP) อย่างต่อเนื่อง ซึ่งเป็นส่วนเสริมของโปรโตคอล TCP สำหรับการจัดระเบียบการทำงานของการเชื่อมต่อ TCP พร้อมการส่งแพ็กเก็ตพร้อมกันในหลายเส้นทางผ่านอินเทอร์เฟซเครือข่ายต่างๆ ที่เชื่อมโยงกับที่อยู่ IP ที่แตกต่างกัน รุ่นใหม่นี้เพิ่มกลไกในการตั้งค่านโยบายการแฮชการรับส่งข้อมูลของคุณเองสำหรับ IPv4 และ IPv6 (นโยบายการแฮชแบบหลายพาธ) ซึ่งช่วยให้ผู้ใช้กำหนดว่าฟิลด์ใดในแพ็กเก็ต รวมถึงฟิลด์ที่ห่อหุ้มจะถูกใช้เมื่อคำนวณแฮช ที่กำหนดทางเลือกของเส้นทางสำหรับแพ็กเก็ต
    • เพิ่มการสนับสนุนสำหรับซ็อกเก็ต SOCK_SEQPACKET (การส่งดาตาแกรมที่สั่งซื้อและเชื่อถือได้) ในการขนส่งเสมือน virtio
    • ความสามารถของกลไกซ็อกเก็ต SO_REUSEPORT ได้รับการขยาย ซึ่งช่วยให้ซ็อกเก็ตฟังหลายตัวเชื่อมต่อกับพอร์ตเดียวพร้อมกันเพื่อรับการเชื่อมต่อที่มีการกระจายคำขอขาเข้าพร้อมกันในซ็อกเก็ตทั้งหมดที่เชื่อมต่อผ่าน SO_REUSEPORT ซึ่งช่วยลดความยุ่งยากในการสร้างแอปพลิเคชันเซิร์ฟเวอร์แบบมัลติเธรด . เวอร์ชันใหม่เพิ่มเครื่องมือในการถ่ายโอนการควบคุมไปยังซ็อกเก็ตอื่นในกรณีที่เกิดความล้มเหลวขณะประมวลผลคำขอโดยซ็อกเก็ตที่เลือกไว้ในตอนแรก (แก้ปัญหาการสูญเสียการเชื่อมต่อแต่ละรายการเมื่อเริ่มบริการใหม่)
  • Оборудование
    • ไดรเวอร์ amdgpu เพิ่มการรองรับ GPU ซีรีส์ AMD Radeon RX 6000 ใหม่ที่มีชื่อรหัสว่า "Beige Goby" (Navi 24) และ "Yellow Carp" รวมถึงการสนับสนุนที่ดีขึ้นสำหรับ GPU Aldebaran (gfx90a) และ APU ของ Van Gogh เพิ่มความสามารถในการทำงานกับแผง eDP หลายแผงพร้อมกัน สำหรับ APU Renoir มีการรองรับการทำงานกับบัฟเฟอร์เข้ารหัสในหน่วยความจำวิดีโอ (TMZ, Trusted Memory Zone) เพิ่มการรองรับ hot-unplug สำหรับกราฟิกการ์ด Radeon RX 6000 (Navi 2x) และ GPU AMD รุ่นเก่าถูกเปิดใช้งานโดยค่าเริ่มต้นเพื่อรองรับกลไกการประหยัดพลังงาน ASPM (Active State Power Management) ซึ่งก่อนหน้านี้เปิดใช้งานเฉพาะสำหรับ Navi 1x, Vega และ Polaris GPUs เท่านั้น
    • สำหรับชิป AMD มีการเพิ่มการรองรับหน่วยความจำเสมือนที่ใช้ร่วมกัน (SVM, หน่วยความจำเสมือนที่ใช้ร่วมกัน) ตามระบบย่อย HMM (การจัดการหน่วยความจำต่างกัน) ซึ่งอนุญาตให้คุณใช้อุปกรณ์ที่มีหน่วยจัดการหน่วยความจำของตนเอง (MMU หน่วยจัดการหน่วยความจำ) ซึ่งสามารถเข้าถึงหน่วยความจำหลักได้ รวมถึงการใช้ HMM คุณสามารถจัดระเบียบพื้นที่ที่อยู่ที่ใช้ร่วมกันระหว่าง GPU และ CPU ซึ่ง GPU สามารถเข้าถึงหน่วยความจำหลักของกระบวนการได้
    • เพิ่มการรองรับเบื้องต้นสำหรับเทคโนโลยี AMD Smart Shift ซึ่งเปลี่ยนการตั้งค่าพลังงานของ CPU และ GPU บนแล็ปท็อปด้วยชิปเซ็ตและกราฟิกการ์ดของ AMD เพื่อเพิ่มประสิทธิภาพการเล่นเกม การตัดต่อวิดีโอ และการเรนเดอร์ 3D
    • ไดรเวอร์ i915 สำหรับการ์ดกราฟิก Intel รวมถึงการสนับสนุนชิป Intel Alderlake P
    • เพิ่มไดรเวอร์ drm/hyperv สำหรับอะแดปเตอร์กราฟิกเสมือน Hyper-V
    • เพิ่มการรองรับสำหรับคอมพิวเตอร์ monoblock Raspberry 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

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