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

หลังจากสองเดือนของการพัฒนา Linus Torvalds ส่ง การปล่อยเคอร์เนล Linux 5.1. การเปลี่ยนแปลงที่โดดเด่นที่สุด ได้แก่ อินเทอร์เฟซใหม่สำหรับ I/O แบบอะซิงโครนัส io_uring ความสามารถในการใช้ NVDIMM เป็น RAM รองรับหน่วยความจำเสมือนที่ใช้ร่วมกันใน Nouveau รองรับการตรวจสอบระบบไฟล์ขนาดใหญ่มากที่ปรับขนาดได้ผ่าน fanotify ความสามารถในการกำหนดค่าการบีบอัด Zstd ระดับใน Btrfs, ตัวจัดการ cpuidle TEO ใหม่, การใช้งานการเรียกระบบเพื่อแก้ปัญหา 2038, ความสามารถในการบูตจากอุปกรณ์ตัวทำแผนที่อุปกรณ์โดยไม่มี initramfs, โมดูล SafeSetID LSM, รองรับแพตช์สดแบบรวม

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

  • ระบบย่อยของดิสก์ I/O และระบบไฟล์
    • ใช้อินเทอร์เฟซใหม่สำหรับ I/O แบบอะซิงโครนัส - io_ingซึ่งมีความโดดเด่นในด้านการสนับสนุนการสำรวจ I/O และความสามารถในการทำงานโดยมีหรือไม่มีการบัฟเฟอร์ ให้เราระลึกว่ากลไก I/O แบบอะซิงโครนัสที่เสนอก่อนหน้านี้ “aio” ไม่รองรับ I/O ที่บัฟเฟอร์ สามารถทำงานได้ในโหมด O_DIRECT เท่านั้น (โดยไม่ต้องบัฟเฟอร์และข้ามแคช) มีปัญหาในการล็อคเนื่องจากการรอความพร้อมใช้งานของข้อมูลเมตา และ มีต้นทุนค่าโสหุ้ยจำนวนมากเนื่องจากการคัดลอกข้อมูลในหน่วยความจำ

      ภายใน API
      นักพัฒนา io_uring พยายามกำจัดข้อบกพร่องของอินเทอร์เฟซ aio แบบเก่า โดย ผลผลิต io_uring อยู่ใกล้มาก สพป และเหนือกว่า libaio อย่างมากเมื่อเปิดใช้งานการสำรวจความคิดเห็น ไลบรารีได้รับการจัดเตรียมสำหรับการใช้ io_uring ในแอปพลิเคชันปลายทางที่ทำงานในพื้นที่ผู้ใช้ การปลดปล่อยซึ่งจัดเตรียมเฟรมเวิร์กระดับสูงบนอินเทอร์เฟซเคอร์เนล

    • ในกลไกการติดตามเหตุการณ์ใน FS fanotify() เพิ่ม รองรับการติดตามสถานการณ์ซูเปอร์บล็อกและการเปลี่ยนแปลงโครงสร้าง แตกต่าง (เหตุการณ์การสร้าง ลบ และย้ายไดเร็กทอรี) คุณสมบัติที่นำเสนอช่วยแก้ปัญหาความสามารถในการปรับขนาดที่เกิดขึ้นเมื่อสร้างการติดตามการเปลี่ยนแปลงแบบเรียกซ้ำในระบบไฟล์ขนาดใหญ่มากโดยใช้กลไก inotify (ก่อนหน้านี้การเปลี่ยนแปลงโดยตรงสามารถติดตามได้ผ่าน inotify เท่านั้น แต่
      ประสิทธิภาพในเงื่อนไขของการติดตามแบบเรียกซ้ำของไดเร็กทอรีที่ซ้อนกันขนาดใหญ่เหลือความต้องการอีกมาก) ขณะนี้การตรวจสอบดังกล่าวสามารถทำได้อย่างมีประสิทธิภาพผ่าน fanotify

    • บนระบบไฟล์ Btrfs เพิ่ม ความสามารถในการปรับแต่งระดับการบีบอัดสำหรับอัลกอริธึม zstd ซึ่งถือเป็นการประนีประนอมที่เหมาะสมที่สุดระหว่าง lz4 ที่เร็วแต่ไม่ได้ผลกับการบีบอัด xz ที่ช้าแต่ดี จากการเปรียบเทียบกับวิธีที่ก่อนหน้านี้สามารถตั้งค่าระดับการบีบอัดเมื่อใช้ zlib ได้เพิ่มการรองรับตัวเลือกการเมานต์ “-o compress=zstd:level” สำหรับ zstd แล้ว ในระหว่างการทดสอบ ระดับแรกขั้นต่ำมีการบีบอัดข้อมูล 2.658 เท่าด้วยความเร็วการบีบอัด 438.47 MB/s ความเร็วในการแตกไฟล์ 910.51 MB/s และการใช้หน่วยความจำ 780 MB และระดับสูงสุด 15 ให้ 3.126 เท่า แต่มีการบีบอัด ความเร็ว 37.30 MB/s กำลังแกะกล่อง 878.84 MB/s และใช้หน่วยความจำ 2547 MB;
    • เพิ่ม ความสามารถในการบูตจากระบบไฟล์ที่อยู่ในอุปกรณ์ตัวทำแผนที่โดยไม่ต้องใช้ initramfs ตั้งแต่เคอร์เนลรีลีสปัจจุบัน อุปกรณ์-ตัวแมปอุปกรณ์สามารถใช้ได้โดยตรงระหว่างกระบวนการบูต เช่น เป็นพาร์ติชันที่มีระบบไฟล์รูท พาร์ติชันได้รับการกำหนดค่าโดยใช้พารามิเตอร์การบูต “dm-mod.create” โมดูลตัวทำแผนที่อุปกรณ์ที่อนุญาตให้โหลด ได้แก่ “crypt”, “delay”, “linear”, “snapshot-origin” และ “verity”;
    • มีการเพิ่มแฟล็ก F2FS_NOCOW_FL ลงในระบบไฟล์ F2FS ที่เน้นไปที่แฟลชไดรฟ์ ซึ่งช่วยให้คุณสามารถปิดใช้งานโหมดคัดลอกเมื่อเขียนสำหรับไฟล์ที่ระบุได้
    • ระบบไฟล์ถูกลบออกจากเคอร์เนล เอ็กซอฟซึ่งเป็นตัวแปรหนึ่งของ ext2 ซึ่งปรับให้ทำงานกับพื้นที่จัดเก็บอ็อบเจ็กต์ OSD (Object-based Storage Device) การสนับสนุนโปรโตคอล SCSI สำหรับอุปกรณ์เก็บข้อมูลอ็อบเจ็กต์ดังกล่าวก็ถูกลบออกเช่นกัน
  • การจำลองเสมือนและความปลอดภัย
    • เพิ่มตัวเลือก PR_SPEC_DISABLE_NOEXEC ให้กับ prctl() เพื่อควบคุมการดำเนินการตามคำสั่งแบบเก็งกำไรสำหรับกระบวนการที่เลือก ตัวเลือกใหม่ช่วยให้คุณสามารถเลือกปิดการใช้งานการดำเนินการเก็งกำไรสำหรับกระบวนการที่อาจถูกโจมตีโดยการโจมตี Spectre การล็อคจะคงอยู่จนกว่าจะมีการเรียก exec();
    • ใช้โมดูล LSM SafeSetIDซึ่งช่วยให้บริการระบบสามารถจัดการผู้ใช้ได้อย่างปลอดภัยโดยไม่ต้องเพิ่มสิทธิ์ (CAP_SETUID) และไม่ได้รับสิทธิ์รูท สิทธิพิเศษถูกกำหนดโดยการกำหนดกฎในการรักษาความปลอดภัยตามรายการสีขาวของการผูกที่ถูกต้อง (ในรูปแบบ “UID1:UID2”);
    • เพิ่มการเปลี่ยนแปลงระดับต่ำที่จำเป็นสำหรับการโหลดโมดูลความปลอดภัย (LSM) แบบสแต็ก แนะนำตัวเลือกการบูตเคอร์เนล "lsm" เพื่อควบคุมโมดูลที่จะโหลดและในลำดับใด
    • เพิ่มการรองรับเนมสเปซไฟล์ให้กับระบบย่อยการตรวจสอบแล้ว
    • ขยายแล้ว ความสามารถของโครงสร้างปลั๊กอิน GCC ซึ่งช่วยให้คุณสามารถบล็อกการรั่วไหลของเนื้อหาหน่วยความจำได้ มีการเตรียมการเริ่มต้นของตัวแปรใด ๆ ที่ใช้ในโค้ดผ่านการเข้าถึงการอ้างอิงบนสแต็ก
  • ระบบย่อยของเครือข่าย
    • สำหรับซ็อกเก็ต นำไปใช้ ตัวเลือกใหม่ "SO_BINDTOIFINDEX" คล้ายกับ
      "SO_BINDTODEVICE" แต่ใช้เป็นอาร์กิวเมนต์หมายเลขดัชนีของอินเทอร์เฟซเครือข่ายแทนชื่ออินเทอร์เฟซ

    • สแต็ก mac80211 ได้เพิ่มความสามารถในการกำหนด BSSID หลายรายการ (ที่อยู่ MAC) ให้กับอุปกรณ์เครื่องเดียว ในฐานะที่เป็นส่วนหนึ่งของโปรเจ็กต์เพื่อเพิ่มประสิทธิภาพ WiFi สแต็ค mac80211 ได้เพิ่มการบัญชีเวลาออกอากาศและความสามารถในการกระจายเวลาออกอากาศระหว่างหลายสถานี (เมื่อทำงานในโหมดจุดเข้าใช้งาน จะจัดสรรเวลาการส่งสัญญาณน้อยลงเพื่อทำให้สถานีไร้สายช้าลง แทนที่จะกระจายเวลาอย่างเท่าเทียมกันระหว่างทั้งหมด สถานี);
    • เพิ่มกลไก "สุขภาพของเดฟลิงค์" ซึ่งให้การแจ้งเตือนเมื่อเกิดปัญหากับอินเทอร์เฟซเครือข่าย
  • บริการหน่วยความจำและระบบ
    • ดำเนินการแล้ว การส่งสัญญาณที่ปลอดภัยซึ่งช่วยให้สามารถนำ PID มาใช้ซ้ำได้ ตัวอย่างเช่น เมื่อเรียก kill ก่อนหน้านี้ สถานการณ์อาจเกิดขึ้นโดยทันทีหลังจากส่งสัญญาณ PID ​​เป้าหมายอาจถูกปลดปล่อยเนื่องจากกระบวนการยุติและถูกครอบครองโดยกระบวนการอื่น และสัญญาณจะถูกส่งต่อไปยังกระบวนการอื่น เพื่อกำจัดสถานการณ์ดังกล่าว จึงได้มีการเพิ่มการเรียกระบบใหม่ pidfd_send_signal ซึ่งใช้ตัวอธิบายไฟล์จาก /proc/pid เพื่อให้แน่ใจว่ากระบวนการรวมมีเสถียรภาพ แม้ว่า PID จะถูกนำมาใช้ซ้ำในระหว่างการประมวลผลการเรียกของระบบ ตัวอธิบายไฟล์จะไม่เปลี่ยนแปลงและสามารถใช้เพื่อส่งสัญญาณไปยังกระบวนการได้อย่างปลอดภัย
    • เพิ่ม ความสามารถในการใช้อุปกรณ์หน่วยความจำถาวร (เช่น หน่วยความจำถาวร เป็นต้น NVDIMM) เป็นแรม จนถึงขณะนี้เคอร์เนลรองรับอุปกรณ์เช่นอุปกรณ์จัดเก็บข้อมูล แต่ตอนนี้สามารถใช้เป็น RAM เพิ่มเติมได้ คุณลักษณะนี้ถูกนำมาใช้เพื่อตอบสนองความต้องการของผู้ใช้ที่เต็มใจที่จะรับมือกับความล่าช้าด้านประสิทธิภาพและต้องการใช้ API การจัดการหน่วยความจำเคอร์เนล Linux ดั้งเดิม แทนที่จะใช้ระบบการจัดสรรหน่วยความจำพื้นที่ผู้ใช้ที่มีอยู่ซึ่งทำงานบน mmap สำหรับ dax ไฟล์;
    • เพิ่มตัวจัดการ CPU idle ใหม่ (cpuidle ตัดสินใจว่าเมื่อใดที่ CPU สามารถเข้าสู่โหมดประหยัดพลังงานแบบลึก ยิ่งโหมดลึกเท่าไร การประหยัดก็จะมากขึ้นเท่านั้น แต่ยังใช้เวลานานกว่าในการออกจากโหมดด้วย) - TEO (Timer Events Oriented Governor ). จนถึงขณะนี้ มีการเสนอตัวจัดการ cpuidle สองตัว - "เมนู" และ "บันได" ซึ่งแตกต่างกันในการวิเคราะห์พฤติกรรม ตัวจัดการ "เมนู" ทราบปัญหาในการตัดสินใจแบบศึกษาสำนึก เพื่อกำจัดสิ่งที่ตัดสินใจเตรียมตัวจัดการใหม่ TEO อยู่ในตำแหน่งเป็นทางเลือกแทนตัวจัดการ "เมนู" ซึ่งช่วยให้มีประสิทธิภาพสูงขึ้นในขณะที่ยังคงรักษาระดับการใช้พลังงานเท่าเดิม
      คุณสามารถเปิดใช้งานตัวจัดการใหม่ได้โดยใช้พารามิเตอร์การบูต “cpuidle.governor=teo”;

    • เป็นส่วนหนึ่งของงานกำจัด ปัญหาของปี 2038ซึ่งเกิดจากการโอเวอร์โฟลว์ของประเภท 32-บิต time_t รวมถึงการเรียกระบบที่นำเสนอตัวนับเวลา 32-บิตสำหรับสถาปัตยกรรม 64-บิต ด้วยเหตุนี้ โครงสร้าง time_t แบบ 64 บิตจึงสามารถใช้กับสถาปัตยกรรมทั้งหมดได้แล้ว การเปลี่ยนแปลงที่คล้ายกันได้ถูกนำไปใช้ในระบบย่อยเครือข่ายสำหรับตัวเลือกต่างๆ การประทับเวลา ซ็อกเก็ตเครือข่าย
    • เข้าสู่ระบบการแพตช์ร้อนสำหรับคอร์ (การแพตช์สด) เพิ่ม คุณสมบัติ “การแทนที่แบบอะตอม” สำหรับการนำชุดการเปลี่ยนแปลงไปใช้กับฟังก์ชันเดียวแบบอะตอม คุณสมบัตินี้ช่วยให้คุณสามารถแจกจ่ายแพตช์สรุปซึ่งครอบคลุมการเปลี่ยนแปลงหลายอย่างในคราวเดียว แทนที่จะใช้กระบวนการใช้งานแพตช์สดแบบทีละขั้นตอนตามลำดับที่กำหนดไว้อย่างเคร่งครัด ซึ่งค่อนข้างยากต่อการบำรุงรักษา ในขณะที่ก่อนหน้านี้การเปลี่ยนแปลงแต่ละครั้งที่ตามมาจะต้องขึ้นอยู่กับสถานะของฟังก์ชันหลังจากการเปลี่ยนแปลงครั้งล่าสุด ขณะนี้มีความเป็นไปได้ที่จะเผยแพร่การเปลี่ยนแปลงหลายอย่างที่เชื่อมโยงกับสถานะเริ่มต้นเดียวในคราวเดียว (กล่าวคือ ผู้ดูแลสามารถรักษาหนึ่งแพตช์รวมที่สัมพันธ์กับเคอร์เนลฐานแทนได้ ของห่วงโซ่ของแพทช์ที่พึ่งพาซึ่งกันและกัน );
    • ประกาศแล้ว การสนับสนุนที่เลิกใช้แล้วสำหรับรูปแบบไฟล์ปฏิบัติการ a.out และ
      ลบออก รหัสสำหรับสร้างไฟล์หลักในรูปแบบ a.out ซึ่งอยู่ในสถานะละทิ้ง ไม่ได้ใช้รูปแบบ a.out บนระบบ Linux มาเป็นเวลานาน และการสร้างไฟล์ a.out ไม่ได้รับการสนับสนุนมานานแล้วโดยเครื่องมือสมัยใหม่ในการกำหนดค่าเริ่มต้นของ Linux นอกจากนี้ ตัวโหลดสำหรับไฟล์ a.out ยังสามารถนำมาใช้ในพื้นที่ผู้ใช้ได้ทั้งหมด

    • เพิ่มความสามารถในการระบุและลบรหัสที่ไม่ได้ใช้ลงในกลไกการตรวจสอบโปรแกรม BPF เคอร์เนลยังมีแพตช์ที่รองรับ Spinlock สำหรับระบบย่อย BPF ซึ่งให้ความสามารถเพิ่มเติมในการจัดการการดำเนินการแบบขนานของโปรแกรม BPF
  • Оборудование
    • ในไดรเวอร์นูโว เพิ่ม รองรับการจัดการหน่วยความจำที่แตกต่างกัน ทำให้ CPU และ GPU สามารถเข้าถึงพื้นที่หน่วยความจำที่ซิงโครไนซ์ทั่วไปได้ ระบบหน่วยความจำเสมือนที่ใช้ร่วมกัน (SVM, หน่วยความจำเสมือนที่ใช้ร่วมกัน) ถูกนำมาใช้บนพื้นฐานของระบบย่อย HMM (การจัดการหน่วยความจำที่แตกต่างกัน) ซึ่งอนุญาตให้ใช้อุปกรณ์ที่มีหน่วยการจัดการหน่วยความจำของตัวเอง (MMU, หน่วยการจัดการหน่วยความจำ) ซึ่งสามารถเข้าถึง หน่วยความจำหลัก. โดยเฉพาะอย่างยิ่ง เมื่อใช้ HMM คุณสามารถจัดระเบียบพื้นที่ที่อยู่ที่ใช้ร่วมกันระหว่าง GPU และ CPU ซึ่ง GPU สามารถเข้าถึงหน่วยความจำหลักของกระบวนการได้ ขณะนี้การสนับสนุน SVM เปิดใช้งานเฉพาะกับ GPU ตระกูล Pascal เท่านั้น แม้ว่าจะมีการรองรับ GPU Volta และ Turing ก็ตาม ยิ่งไปกว่านั้นในนูโว เพิ่ม ioctl ใหม่เพื่อควบคุมการย้ายพื้นที่หน่วยความจำกระบวนการไปยังหน่วยความจำ GPU
    • ในไดรเวอร์ Intel DRM สำหรับ GPU Skylake และใหม่กว่า (gen9+) เปิด ตามค่าเริ่มต้น โหมด fastboot จะกำจัดการเปลี่ยนแปลงโหมดที่ไม่จำเป็นระหว่างการบู๊ต เพิ่ม ใหม่ ตัวระบุอุปกรณ์ตามสถาปัตยกรรมไมโครของ Coffelake และ Ice Lake สำหรับคอฟฟี่เลคชิป เพิ่ม การสนับสนุน GVT (การจำลองเสมือนของ GPU). สำหรับ GPU เสมือน นำไปใช้ รองรับ VFIO EDID สำหรับแผง LCD MIPI/DSI เพิ่ม รองรับองค์ประกอบ ACPI/PMIC ดำเนินการแล้ว โหมดทีวีใหม่ ทีวี 1080p30/50/60;
    • เพิ่มการรองรับ Vega10/20 BACO GPU ให้กับไดรเวอร์ amdgpu ใช้การจัดการพลังงาน Vega 10/20 และตารางควบคุมความเย็น Vega 10 เพิ่มตัวระบุอุปกรณ์ PCI ใหม่สำหรับ Picasso GPU เพิ่ม อินเทอร์เฟซสำหรับการจัดการการพึ่งพาตามกำหนดเวลาเพื่อหลีกเลี่ยงการหยุดชะงัก
    • เพิ่ม ไดรเวอร์ DRM/KMS สำหรับตัวเร่งความเร็วหน้าจอ อาร์ม โคเมดะ (มาลี D71);
    • เพิ่มการรองรับสำหรับแผงหน้าจอ Toppoly TPG110, Sitronix ST7701, PDA 91-00156-A0, LeMaker BL035-RGB-002 3.5 และ Kingdisplay kd097d04
    • เพิ่มการรองรับตัวแปลงสัญญาณเสียง Rockchip RK3328, Cirrus Logic CS4341 และ CS35L36, MediaTek MT6358, Qualcomm WCD9335 และ Ingenic JZ4725B รวมถึงแพลตฟอร์มเสียง Mediatek MT8183
    • เพิ่มการรองรับคอนโทรลเลอร์ NAND Flash STMicroelectronics FMC2, Amlogic Meson;
    • เพิ่มการรองรับตัวเร่งความเร็วสำหรับระบบฮาร์ดแวร์ Habana AI
    • เพิ่มการรองรับคอนโทรลเลอร์กิกะบิตอีเทอร์เน็ต NXP ENETC และอินเทอร์เฟซไร้สาย MediaTek MT7603E (PCIe) และ MT76x8

ในเวลาเดียวกัน มูลนิธิซอฟต์แวร์เสรีลาตินอเมริกา เกิดขึ้น
การเลือก เคอร์เนลฟรี 5.1 - Linux-libre 5.1-gnuปราศจากองค์ประกอบของเฟิร์มแวร์และไดรเวอร์ที่มีส่วนประกอบหรือส่วนของโค้ดที่ไม่ฟรี ซึ่งขอบเขตดังกล่าวถูกจำกัดโดยผู้ผลิต ในรีลีสใหม่ การโหลด Blob ถูกปิดใช้งานในไดรเวอร์ mt7603 และ Goya อัปเดตรหัสการทำความสะอาด Blob ในไดรเวอร์และระบบย่อย wilc1000, iwlwifi, soc-acpi-intel, brcmfmac, mwifiex, btmrvl, btmtk และ touchscreen_dmi การทำความสะอาด Blob ในตัวโหลดเฟิร์มแวร์ lantiq xrx200 หยุดทำงานเนื่องจากการถอดออกจากเคอร์เนล

ที่มา: opennet.ru

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