หลังจากสองเดือนของการพัฒนา Linus Torvalds
- ระบบย่อยของดิสก์ 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 สำหรับอุปกรณ์เก็บข้อมูลอ็อบเจ็กต์ดังกล่าวก็ถูกลบออกเช่นกัน
- ใช้อินเทอร์เฟซใหม่สำหรับ I/O แบบอะซิงโครนัส -
- การจำลองเสมือนและความปลอดภัย
- เพิ่มตัวเลือก 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
- ในไดรเวอร์นูโว
ในเวลาเดียวกัน มูลนิธิซอฟต์แวร์เสรีลาตินอเมริกา
การเลือก
ที่มา: opennet.ru