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

หลังจากสองเดือนของการพัฒนา Linus Torvalds ได้เปิดตัว Linux kernel 5.15 การเปลี่ยนแปลงที่โดดเด่น ได้แก่: ไดรเวอร์ NTFS ใหม่พร้อมการสนับสนุนการเขียน, โมดูล ksmbd พร้อมการใช้งานเซิร์ฟเวอร์ SMB, ระบบย่อย DAMON สำหรับการตรวจสอบการเข้าถึงหน่วยความจำ, การล็อคแบบดั้งเดิมแบบเรียลไทม์, รองรับ fs-verity ใน Btrfs, การเรียกระบบ process_mrelease สำหรับหน่วยความจำระบบตอบสนองต่อความอดอยาก, โมดูลการรับรองระยะไกล dm-ima.

เวอร์ชันใหม่ประกอบด้วยการแก้ไข 13499 รายการจากนักพัฒนา 1888 ราย ขนาดแพตช์คือ 42 MB (การเปลี่ยนแปลงส่งผลต่อไฟล์ 10895 ไฟล์ มีการเพิ่มโค้ด 632522 บรรทัด และลบ 299966 บรรทัด) ประมาณ 45% ของการเปลี่ยนแปลงทั้งหมดที่นำมาใช้ใน 5.15 เกี่ยวข้องกับไดรเวอร์อุปกรณ์ ประมาณ 14% ของการเปลี่ยนแปลงเกี่ยวข้องกับการอัพเดตโค้ดเฉพาะสำหรับสถาปัตยกรรมฮาร์ดแวร์ 14% เกี่ยวข้องกับสแต็กเครือข่าย 6% เกี่ยวข้องกับระบบไฟล์ และ 3% เกี่ยวข้องกับระบบย่อยเคอร์เนลภายใน

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

  • ระบบย่อยของดิสก์ I/O และระบบไฟล์
    • เคอร์เนลได้นำการใช้งานระบบไฟล์ NTFS ใหม่มาใช้ ซึ่งเปิดโดยซอฟต์แวร์ Paragon ไดรเวอร์ใหม่สามารถทำงานในโหมดเขียนและรองรับฟีเจอร์ทั้งหมดของ NTFS 3.1 เวอร์ชันปัจจุบัน รวมถึงแอตทริบิวต์ไฟล์เพิ่มเติม รายการเข้าถึง (ACL) โหมดการบีบอัดข้อมูล การทำงานอย่างมีประสิทธิภาพกับพื้นที่ว่างในไฟล์ (เบาบาง) และการเล่นซ้ำการเปลี่ยนแปลงจาก บันทึกเพื่อเรียกคืนความสมบูรณ์หลังจากความล้มเหลว
    • ระบบไฟล์ Btrfs รองรับกลไก fs-verity ซึ่งใช้เพื่อควบคุมความสมบูรณ์และความถูกต้องของแต่ละไฟล์อย่างโปร่งใส โดยใช้แฮชหรือคีย์ที่เข้ารหัสลับที่เกี่ยวข้องกับไฟล์ ซึ่งจัดเก็บไว้ในพื้นที่เมทาดาทา ก่อนหน้านี้ fs-verity ใช้งานได้กับระบบไฟล์ Ext4 และ F2fs เท่านั้น

      Btrfs ยังเพิ่มการรองรับการแมป ID ผู้ใช้สำหรับระบบไฟล์ที่เมาท์ (ก่อนหน้านี้รองรับระบบไฟล์ FAT, ext4 และ XFS) คุณลักษณะนี้ช่วยให้คุณสามารถเปรียบเทียบไฟล์ของผู้ใช้เฉพาะบนพาร์ติชันภายนอกที่เมาท์กับผู้ใช้รายอื่นในระบบปัจจุบัน

      การเปลี่ยนแปลงอื่นๆ ใน Btrfs ได้แก่: การเพิ่มคีย์ลงในดัชนีไดเร็กทอรีได้เร็วขึ้น เพื่อปรับปรุงประสิทธิภาพการสร้างไฟล์ ความสามารถในการทำงาน raid0 ด้วยอุปกรณ์หนึ่งเครื่อง และ raid10 ด้วยสองอุปกรณ์ (เช่น ในระหว่างกระบวนการกำหนดค่าอาร์เรย์ใหม่) ตัวเลือก “rescue=ibadroots” เพื่อละเว้นแผนผังขอบเขตที่ไม่ถูกต้อง การเร่งความเร็วของการดำเนินการ "ส่ง" การลดข้อขัดแย้งในการล็อคระหว่างการดำเนินการเปลี่ยนชื่อ ความสามารถในการใช้เซกเตอร์ 4K บนระบบที่มีขนาดหน้าหน่วยความจำ 64K

    • ใน XFS ความสามารถในการใช้วันที่หลังปี 2038 ในระบบไฟล์ได้รับความเสถียร ใช้กลไกสำหรับการปิดใช้งาน inode ที่ล่าช้าและการสนับสนุนสำหรับการติดตั้งและการลบแอตทริบิวต์ของไฟล์ที่ล่าช้า เพื่อขจัดปัญหา ความสามารถในการปิดใช้งานโควต้าดิสก์สำหรับพาร์ติชั่นที่ติดตั้งไว้แล้วจึงถูกลบออก (คุณสามารถบังคับปิดการใช้งานโควต้าได้ แต่การคำนวณที่เกี่ยวข้องจะดำเนินต่อไป ดังนั้นจึงจำเป็นต้องต่อเชื่อมใหม่เพื่อปิดการใช้งานโควต้าทั้งหมด)
    • ใน EXT4 มีการทำงานเพื่อเพิ่มประสิทธิภาพของการเขียนบัฟเฟอร์ delalloc และการประมวลผลไฟล์เด็กกำพร้าที่ยังคงมีอยู่เนื่องจากยังคงเปิดอยู่ แต่ไม่เชื่อมโยงกับไดเร็กทอรี การประมวลผลการดำเนินการทิ้งถูกย้ายออกจากเธรด jbd2 kthread เพื่อหลีกเลี่ยงการบล็อกการดำเนินการด้วยข้อมูลเมตา
    • F2FS เพิ่มตัวเลือก "discard_unit=block|segment|section" เพื่อผูกการดำเนินการทิ้ง (ทำเครื่องหมายบล็อกที่ปล่อยว่างซึ่งอาจไม่ถูกจัดเก็บทางกายภาพอีกต่อไป) เข้ากับการจัดตำแหน่งที่สัมพันธ์กับบล็อก เซกเตอร์ เซ็กเมนต์ หรือส่วน เพิ่มการรองรับสำหรับการติดตามการเปลี่ยนแปลงในเวลาแฝง I/O
    • ระบบไฟล์ EROFS (Extendable Read-Only File System) เพิ่มการรองรับ I/O โดยตรงสำหรับไฟล์ที่บันทึกโดยไม่มีการบีบอัด เช่นเดียวกับการรองรับ fiemap
    • OverlayFS ใช้การจัดการที่ถูกต้องของแฟล็กการเมานต์ "ไม่เปลี่ยนรูป", "ต่อท้ายเท่านั้น", "ซิงค์" และ "noatime"
    • NFS ได้ปรับปรุงการจัดการสถานการณ์ที่เซิร์ฟเวอร์ NFS หยุดตอบสนองต่อคำร้องขอ เพิ่มความสามารถในการเมานต์จากเซิร์ฟเวอร์ที่ใช้งานอยู่แล้ว แต่สามารถเข้าถึงได้ผ่านที่อยู่เครือข่ายอื่น
    • การเตรียมการได้เริ่มต้นขึ้นสำหรับการเขียนระบบย่อย FSCACHE ใหม่
    • เพิ่มการรองรับพาร์ติชัน EFI ด้วยการจัดวางตาราง GPT ที่ไม่ได้มาตรฐาน
    • กลไก fanotify ใช้แฟล็กใหม่ FAN_REPORT_PIDFD ซึ่งทำให้ pidfd รวมไว้ในข้อมูลเมตาที่ส่งคืน Pidfd ช่วยจัดการสถานการณ์การนำ PID มาใช้ซ้ำเพื่อระบุกระบวนการที่เข้าถึงไฟล์ที่ถูกตรวจสอบได้แม่นยำยิ่งขึ้น (pidfd เชื่อมโยงกับกระบวนการเฉพาะและไม่มีการเปลี่ยนแปลง ในขณะที่ PID สามารถเชื่อมโยงกับกระบวนการอื่นได้หลังจากที่กระบวนการปัจจุบันที่เกี่ยวข้องกับ PID นั้นสิ้นสุดลง)
    • เพิ่มความสามารถในการเพิ่มจุดเชื่อมต่อไปยังกลุ่มที่ใช้ร่วมกันที่มีอยู่ในการเรียกระบบ move_mount() ซึ่งแก้ปัญหาเกี่ยวกับการบันทึกและการกู้คืนสถานะกระบวนการใน CRIU เมื่อมีพื้นที่เชื่อมต่อหลายช่องที่ใช้ร่วมกันในคอนเทนเนอร์ที่แยกออกมา
    • เพิ่มการป้องกันสภาวะการแข่งขันที่ซ่อนอยู่ซึ่งอาจทำให้ไฟล์เสียหายเมื่ออ่านแคชขณะประมวลผลช่องว่างในไฟล์
    • การสนับสนุนการล็อกไฟล์แบบบังคับ (บังคับ) ซึ่งดำเนินการผ่านการบล็อกการเรียกของระบบที่นำไปสู่การเปลี่ยนแปลงไฟล์ได้ถูกยกเลิกแล้ว เนื่องจากสภาพการแข่งขันที่เป็นไปได้ ล็อคเหล่านี้จึงถือว่าไม่น่าเชื่อถือและเลิกใช้งานไปหลายปีแล้ว
    • ระบบย่อย LightNVM ได้ถูกลบออกแล้ว ซึ่งอนุญาตให้เข้าถึงไดรฟ์ SSD ได้โดยตรง โดยข้ามเลเยอร์การจำลอง LightNVM สูญเสียความหมายไปหลังจากการถือกำเนิดของมาตรฐาน NVMe ที่กำหนดการแบ่งเขต (ZNS, Zoned Namespace)
  • บริการหน่วยความจำและระบบ
    • ระบบย่อย DAMON (Data Access MONitor) ได้รับการปรับใช้ ทำให้คุณสามารถตรวจสอบกิจกรรมที่เกี่ยวข้องกับการเข้าถึงข้อมูลใน RAM ที่เกี่ยวข้องกับกระบวนการที่เลือกซึ่งทำงานในพื้นที่ผู้ใช้ ระบบย่อยช่วยให้คุณวิเคราะห์พื้นที่หน่วยความจำที่กระบวนการเข้าถึงระหว่างการดำเนินการทั้งหมด และพื้นที่หน่วยความจำใดที่ยังคงไม่มีการอ้างสิทธิ์ DAMON มีโหลด CPU ต่ำ การใช้หน่วยความจำต่ำ มีความแม่นยำสูง และโอเวอร์เฮดคงที่ที่คาดการณ์ได้ โดยไม่ขึ้นกับขนาด ระบบย่อยสามารถใช้ได้ทั้งโดยเคอร์เนลเพื่อปรับการจัดการหน่วยความจำให้เหมาะสม และโดยยูทิลิตี้ในพื้นที่ผู้ใช้เพื่อทำความเข้าใจว่ากระบวนการกำลังทำอะไรอยู่และปรับการใช้หน่วยความจำให้เหมาะสม ตัวอย่างเช่น การเพิ่มหน่วยความจำส่วนเกินสำหรับระบบ
    • การเรียกระบบ process_mrelease ถูกนำมาใช้เพื่อเร่งกระบวนการปล่อยหน่วยความจำของกระบวนการที่เสร็จสิ้นการดำเนินการ ภายใต้สถานการณ์ปกติ การปล่อยทรัพยากรและการยกเลิกกระบวนการจะไม่เกิดขึ้นทันทีและอาจล่าช้าด้วยเหตุผลหลายประการ ซึ่งรบกวนระบบตอบสนองล่วงหน้าของหน่วยความจำพื้นที่ผู้ใช้ เช่น oomd (จัดทำโดย systemd) และ lmkd (ใช้โดย Android) ด้วยการเรียก process_mrelease ระบบดังกล่าวสามารถกระตุ้นการเรียกคืนหน่วยความจำจากกระบวนการบังคับได้อย่างคาดการณ์ได้มากขึ้น
    • จากสาขาเคอร์เนล PREEMPT_RT ซึ่งพัฒนาการสนับสนุนสำหรับการทำงานแบบเรียลไทม์ ตัวแปรดั้งเดิมสำหรับการจัดระเบียบล็อค mutex, ww_mutex, rw_semaphore, spinlock และ rwlock ที่อิงตามระบบย่อย RT-Mutex ได้ถูกถ่ายโอนไปแล้ว เพิ่มการเปลี่ยนแปลงในการจัดสรรแผ่น SLUB เพื่อปรับปรุงการทำงานในโหมด PREEMPT_RT และลดผลกระทบต่อการขัดจังหวะ
    • เพิ่มการสนับสนุนสำหรับแอตทริบิวต์ตัวกำหนดเวลางาน SCHED_IDLE ให้กับ cgroup แล้ว ทำให้คุณสามารถจัดเตรียมแอตทริบิวต์นี้ให้กับกระบวนการทั้งหมดของกลุ่มที่รวมอยู่ใน cgroup ที่ระบุได้ เหล่านั้น. กระบวนการเหล่านี้จะทำงานเมื่อไม่มีงานอื่นรอดำเนินการบนระบบเท่านั้น ต่างจากการตั้งค่าแอตทริบิวต์ SCHED_IDLE ให้กับแต่ละกระบวนการแยกกัน เมื่อเชื่อมโยง SCHED_IDLE กับ cgroup น้ำหนักสัมพัทธ์ของงานภายในกลุ่มจะถูกนำมาพิจารณาเมื่อเลือกงานที่จะดำเนินการ
    • กลไกในการบัญชีสำหรับการใช้หน่วยความจำใน cgroup ได้รับการขยายด้วยความสามารถในการติดตามโครงสร้างข้อมูลเคอร์เนลเพิ่มเติม รวมถึงโครงสร้างที่สร้างขึ้นสำหรับการโพล การประมวลผลสัญญาณ และเนมสเปซ
    • เพิ่มการสนับสนุนสำหรับการกำหนดเวลาแบบไม่สมมาตรของการเชื่อมโยงงานกับแกนประมวลผลบนสถาปัตยกรรมซึ่ง CPU บางตัวอนุญาตให้ดำเนินการงานแบบ 32 บิตได้ และบางตัวทำงานเฉพาะในโหมด 64 บิตเท่านั้น (เช่น ARM) โหมดใหม่ช่วยให้คุณพิจารณาเฉพาะ CPU ที่รองรับงาน 32 บิตเมื่อกำหนดเวลางาน 32 บิต
    • ขณะนี้อินเทอร์เฟซ I/O แบบอะซิงโครนัส io_uring รองรับการเปิดไฟล์โดยตรงในตารางดัชนีไฟล์คงที่ โดยไม่ต้องใช้ตัวอธิบายไฟล์ ซึ่งทำให้สามารถเร่งความเร็วการดำเนินการบางประเภทได้อย่างมาก แต่ขัดแย้งกับกระบวนการ Unix แบบดั้งเดิมในการใช้ตัวอธิบายไฟล์ เพื่อเปิดไฟล์

      io_uring สำหรับระบบย่อย BIO (Block I/O Layer) ใช้กลไกการรีไซเคิลใหม่ (“การรีไซเคิล BIO”) ซึ่งช่วยลดค่าใช้จ่ายในกระบวนการจัดการหน่วยความจำภายใน และเพิ่มจำนวนการดำเนินการ I/O ที่ประมวลผลต่อวินาทีประมาณ 10% . io_uring ยังเพิ่มการรองรับการเรียกระบบ mkdirat(), symlinkat() และ linkat()

    • สำหรับโปรแกรม BPF ความสามารถในการร้องขอและประมวลผลเหตุการณ์ตัวจับเวลาได้ถูกนำมาใช้แล้ว มีการเพิ่มตัววนซ้ำสำหรับซ็อกเก็ต UNIX และความสามารถในการรับและตั้งค่าตัวเลือกซ็อกเก็ตสำหรับ setsockopt ได้ถูกนำมาใช้แล้ว ตอนนี้รถเท BTF รองรับข้อมูลที่พิมพ์แล้ว
    • บนระบบ NUMA ที่มีหน่วยความจำประเภทต่างๆ ซึ่งมีประสิทธิภาพแตกต่างกัน เมื่อพื้นที่ว่างหมด หน้าหน่วยความจำที่ถูกขับออกจะถูกถ่ายโอนจากหน่วยความจำแบบไดนามิก (DRAM) ไปยังหน่วยความจำถาวรที่ช้ากว่า (หน่วยความจำถาวร) แทนที่จะลบหน้าเหล่านี้ การทดสอบแสดงให้เห็นว่ากลยุทธ์ดังกล่าวมักจะปรับปรุงประสิทธิภาพของระบบดังกล่าว NUMA ยังจัดเตรียมความสามารถในการจัดสรรเพจหน่วยความจำสำหรับกระบวนการจากชุดโหนด NUMA ที่เลือกไว้
    • สำหรับสถาปัตยกรรม ARC ได้มีการนำการสนับสนุนตารางเพจหน่วยความจำสามและสี่ระดับมาใช้ ซึ่งจะช่วยให้สามารถรองรับโปรเซสเซอร์ ARC 64 บิตเพิ่มเติมได้
    • สำหรับสถาปัตยกรรม s390 มีการใช้กลไก KFENCE เพื่อตรวจจับข้อผิดพลาดเมื่อทำงานกับหน่วยความจำ และเพิ่มการรองรับเครื่องตรวจจับสภาพการแข่งขัน KCSAN แล้ว
    • เพิ่มการสนับสนุนสำหรับการสร้างดัชนีรายการข้อความที่ส่งออกผ่าน printk() ช่วยให้คุณสามารถดึงข้อความดังกล่าวทั้งหมดในครั้งเดียวและติดตามการเปลี่ยนแปลงในพื้นที่ผู้ใช้
    • mmap() ได้ยกเลิกการสนับสนุนสำหรับตัวเลือก VM_DENYWRITE และรหัสเคอร์เนลได้ถูกลบออกจากการใช้โหมด MAP_DENYWRITE ซึ่งได้ลดจำนวนสถานการณ์ที่นำไปสู่การบล็อกการเขียนไปยังไฟล์ที่มีข้อผิดพลาด ETXTBSY
    • มีการเพิ่มการตรวจสอบประเภทใหม่ "โพรบเหตุการณ์" ให้กับระบบย่อยการติดตาม ซึ่งสามารถแนบกับเหตุการณ์การติดตามที่มีอยู่ เพื่อกำหนดรูปแบบเอาต์พุตของคุณเอง
    • เมื่อสร้างเคอร์เนลโดยใช้คอมไพเลอร์ Clang ตอนนี้แอสเซมเบลอร์เริ่มต้นจากโปรเจ็กต์ LLVM จะถูกนำมาใช้
    • ในฐานะส่วนหนึ่งของโปรเจ็กต์ที่จะกำจัดเคอร์เนลของโค้ดที่นำไปสู่คำเตือนที่คอมไพเลอร์ส่งออกไป การทดลองได้ดำเนินการโดยเปิดโหมด "-Werror" ไว้เป็นค่าเริ่มต้น ซึ่งคำเตือนของคอมไพเลอร์จะถูกประมวลผลเป็นข้อผิดพลาด ในการเตรียมการสำหรับการเปิดตัว 5.15 นั้น Linus เริ่มยอมรับเฉพาะการเปลี่ยนแปลงที่ไม่ส่งผลให้เกิดคำเตือนเมื่อสร้างเคอร์เนลและเปิดใช้งานสิ่งปลูกสร้างด้วย "-Werror" แต่จากนั้นก็ตกลงกันว่าการตัดสินใจดังกล่าวเกิดขึ้นก่อนกำหนดและล่าช้าในการเปิดใช้งาน "-Werror" ตามค่าเริ่มต้น . การรวมแฟล็ก "-Werror" ในระหว่างการประกอบถูกควบคุมโดยใช้พารามิเตอร์ WERROR ซึ่งตั้งค่าเป็น COMPILE_TEST ตามค่าเริ่มต้น เช่น ขณะนี้เปิดใช้งานเฉพาะรุ่นทดสอบเท่านั้น
  • การจำลองเสมือนและความปลอดภัย
    • มีการเพิ่มตัวจัดการ dm-ima ใหม่ลงใน Device Mapper (DM) ด้วยการใช้กลไกการรับรองระยะไกลตามระบบย่อย IMA (Integrity Measuring Architecture) ซึ่งช่วยให้บริการภายนอกสามารถตรวจสอบสถานะของระบบย่อยเคอร์เนลเพื่อให้มั่นใจในความถูกต้อง . ในทางปฏิบัติ dm-ima ช่วยให้คุณสร้างพื้นที่จัดเก็บข้อมูลโดยใช้ Device Mapper ที่เชื่อมโยงกับระบบคลาวด์ภายนอก ซึ่งมีการตรวจสอบความถูกต้องของการกำหนดค่าเป้าหมาย DM ที่เปิดใช้งานโดยใช้ IMA
    • prctl() ใช้ตัวเลือกใหม่ PR_SPEC_L1D_FLUSH ซึ่งเมื่อเปิดใช้งาน จะทำให้เคอร์เนลล้างเนื้อหาของแคชระดับแรก (L1D) ทุกครั้งที่มีการสลับบริบทเกิดขึ้น โหมดนี้อนุญาตให้เลือกสำหรับกระบวนการที่สำคัญที่สุด เพื่อใช้การป้องกันเพิ่มเติมต่อการใช้การโจมตีช่องทางด้านข้างที่ดำเนินการเพื่อกำหนดข้อมูลที่จัดอยู่ในแคชอันเป็นผลมาจากช่องโหว่ที่เกิดจากการดำเนินการตามคำสั่งแบบเก็งกำไรใน CPU ค่าใช้จ่ายในการเปิดใช้งาน PR_SPEC_L1D_FLUSH (ไม่ได้เปิดใช้งานโดยค่าเริ่มต้น) ถือเป็นค่าปรับด้านประสิทธิภาพที่สำคัญ
    • เป็นไปได้ที่จะสร้างเคอร์เนลด้วยการเพิ่มแฟล็ก “-fzero-call-used-regs=used-gpr” ให้กับ GCC ซึ่งช่วยให้มั่นใจได้ว่ารีจิสเตอร์ทั้งหมดจะถูกรีเซ็ตเป็นศูนย์ก่อนที่จะส่งคืนการควบคุมจากฟังก์ชัน ตัวเลือกนี้ช่วยให้คุณป้องกันการรั่วไหลของข้อมูลจากฟังก์ชันต่างๆ และลดจำนวนบล็อกลง 20% ที่เหมาะสมสำหรับการสร้างอุปกรณ์ ROP (Return-Oriented Programming) ในการหาประโยชน์
    • ความสามารถในการสร้างเคอร์เนลสำหรับสถาปัตยกรรม ARM64 ในรูปแบบของไคลเอนต์สำหรับไฮเปอร์ไวเซอร์ Hyper-V ได้ถูกนำมาใช้แล้ว
    • มีการเสนอเฟรมเวิร์กการพัฒนาไดรเวอร์ใหม่ “VDUSE” ซึ่งช่วยให้สามารถนำอุปกรณ์บล็อกเสมือนไปใช้ในพื้นที่ผู้ใช้ และใช้ Virtio เป็นพาหนะสำหรับการเข้าถึงจากระบบของแขก
    • เพิ่มไดรเวอร์ Virtio สำหรับบัส I2C ทำให้สามารถจำลองคอนโทรลเลอร์ I2C ในโหมด paravirtualization โดยใช้แบ็กเอนด์แยกกันได้
    • เพิ่มไดรเวอร์ Virtio gpio-virtio เพื่อให้แขกสามารถเข้าถึงสาย GPIO ที่จัดทำโดยระบบโฮสต์
    • เพิ่มความสามารถในการจำกัดการเข้าถึงเพจหน่วยความจำสำหรับไดรเวอร์อุปกรณ์ที่รองรับ DMA บนระบบที่ไม่มี I/O MMU (หน่วยการจัดการหน่วยความจำ)
    • ไฮเปอร์ไวเซอร์ KVM มีความสามารถในการแสดงสถิติในรูปแบบของฮิสโตแกรมเชิงเส้นและลอการิทึม
  • ระบบย่อยของเครือข่าย
    • เพิ่มโมดูล ksmbd ลงในเคอร์เนลด้วยการใช้งานไฟล์เซิร์ฟเวอร์โดยใช้โปรโตคอล SMB3 โมดูลนี้ช่วยเสริมการใช้งานไคลเอนต์ SMB ที่มีอยู่ในเคอร์เนลก่อนหน้านี้ และแตกต่างจากเซิร์ฟเวอร์ SMB ที่ทำงานในพื้นที่ผู้ใช้ ตรงที่มีประสิทธิภาพมากกว่าในแง่ของประสิทธิภาพ การใช้หน่วยความจำ และการผสานรวมกับความสามารถเคอร์เนลขั้นสูง Ksmbd ได้รับการขนานนามว่าเป็นส่วนขยาย Samba ประสิทธิภาพสูงและพร้อมฝังตัว ซึ่งผสานรวมกับเครื่องมือและไลบรารีของ Samba ตามต้องการ ความสามารถของ ksmbd รวมถึงการสนับสนุนที่ได้รับการปรับปรุงสำหรับเทคโนโลยีแคชไฟล์แบบกระจาย (การเช่า SMB) บนระบบท้องถิ่น ซึ่งสามารถลดการรับส่งข้อมูลได้อย่างมาก ในอนาคต พวกเขาวางแผนที่จะเพิ่มการรองรับ RDMA (“smbdirect”) และส่วนขยายโปรโตคอลที่เกี่ยวข้องกับการเพิ่มความน่าเชื่อถือของการเข้ารหัสและการตรวจสอบโดยใช้ลายเซ็นดิจิทัล
    • ไคลเอนต์ CIFS ไม่รองรับ NTLM และอัลกอริธึมการรับรองความถูกต้องแบบ DES ที่อ่อนแอกว่าที่ใช้ในโปรโตคอล SMB1 อีกต่อไป
    • การสนับสนุนมัลติคาสต์ถูกนำมาใช้ในการใช้งานบริดจ์เครือข่ายสำหรับ vlan
    • ไดรเวอร์การเชื่อมที่ใช้ในการรวมอินเทอร์เฟซเครือข่าย ได้เพิ่มการรองรับสำหรับระบบย่อย XDP (eXpress Data Path) ซึ่งช่วยให้คุณสามารถจัดการแพ็กเก็ตเครือข่ายในขั้นตอนก่อนที่จะประมวลผลโดยสแต็กเครือข่ายเคอร์เนล Linux
    • สแตกไร้สาย mac80211 รองรับ 6GHZ STA (การอนุญาตชั่วคราวพิเศษ) ในโหมด LPI, SP และ VLP รวมถึงความสามารถในการตั้งค่า TWT (Target Wake Time) แต่ละรายการในโหมดจุดเข้าใช้งาน
    • เพิ่มการรองรับ MCTP (Management Component Transport Protocol) ซึ่งใช้สำหรับการโต้ตอบระหว่างตัวควบคุมการจัดการและอุปกรณ์ที่เกี่ยวข้อง (โปรเซสเซอร์โฮสต์ อุปกรณ์ต่อพ่วง ฯลฯ)
    • การบูรณาการเข้ากับแกนหลักของ MPTCP (MultiPath TCP) ซึ่งเป็นส่วนขยายของโปรโตคอล TCP สำหรับการจัดระเบียบการดำเนินการของการเชื่อมต่อ TCP พร้อมการส่งแพ็กเก็ตพร้อมกันไปตามหลายเส้นทางผ่านอินเทอร์เฟซเครือข่ายที่แตกต่างกันที่เกี่ยวข้องกับที่อยู่ IP ที่แตกต่างกัน รุ่นใหม่เพิ่มการรองรับที่อยู่ในโหมด fullmesh
    • มีการเพิ่มตัวจัดการสำหรับสตรีมเครือข่ายที่ห่อหุ้มในโปรโตคอล SRv6 (Segment Routing IPv6) ใน netfilter
    • เพิ่มการรองรับ sockmap สำหรับซ็อกเก็ตสตรีมมิ่ง Unix
  • Оборудование
    • ไดรเวอร์ amdgpu รองรับ Cyan Skillfish APU (พร้อมกับ Navi 1x GPU) Yellow Carp APU รองรับตัวแปลงสัญญาณวิดีโอแล้ว ปรับปรุงการรองรับ GPU Aldebaran เพิ่มตัวระบุแผนที่ใหม่โดยใช้ GPU Navi 24 “Beige Goby” และ RDNA2 เสนอให้มีการใช้งานหน้าจอเสมือน (VKMS) ที่ได้รับการปรับปรุง มีการรองรับการตรวจสอบอุณหภูมิของชิป AMD Zen 3 แล้ว
    • ไดรเวอร์ amdkfd (สำหรับ GPU แยก เช่น Polaris) ใช้ตัวจัดการหน่วยความจำเสมือนที่ใช้ร่วมกัน (SVM, หน่วยความจำเสมือนที่ใช้ร่วมกัน) โดยอิงตามระบบย่อย HMM (การจัดการหน่วยความจำต่างกัน) ซึ่งอนุญาตให้ใช้อุปกรณ์ที่มีหน่วยการจัดการหน่วยความจำของตัวเอง (MMU , หน่วยจัดการหน่วยความจำ) ซึ่งสามารถเข้าถึงหน่วยความจำหลักได้ โดยเฉพาะอย่างยิ่ง เมื่อใช้ HMM คุณสามารถจัดระเบียบพื้นที่ที่อยู่ที่ใช้ร่วมกันระหว่าง GPU และ CPU ซึ่ง GPU สามารถเข้าถึงหน่วยความจำหลักของกระบวนการได้
    • ไดรเวอร์ i915 สำหรับการ์ดวิดีโอ Intel ขยายการใช้งานตัวจัดการหน่วยความจำวิดีโอ TTM และรวมถึงความสามารถในการจัดการการใช้พลังงานตาม GuC (Graphics micro Controller) การเตรียมการได้เริ่มขึ้นสำหรับการดำเนินการรองรับกราฟิกการ์ด Intel ARC Alchemist และ GPU Intel Xe-HP
    • ไดรเวอร์ Nouveau ใช้การควบคุมแบ็คไลท์สำหรับแผง eDP โดยใช้ DPCD (ข้อมูลการกำหนดค่า DisplayPort)
    • เพิ่มการรองรับ Adreno 7c Gen 3 และ Adreno 680 GPU ให้กับไดรเวอร์ msm
    • มีการใช้งานไดรเวอร์ IOMMU สำหรับชิป Apple M1
    • เพิ่มไดรเวอร์เสียงสำหรับระบบที่ใช้ AMD Van Gogh APU
    • เพิ่มไดรเวอร์ Realtek R8188EU ลงในสาขาการจัดเตรียม ซึ่งแทนที่เวอร์ชันเก่าของไดรเวอร์ (rtl8188eu) สำหรับชิปไร้สาย Realtek RTL8188EU 802.11 b/g/n
    • ไดรเวอร์ ocp_pt รวมอยู่ในบอร์ด PCIe ที่พัฒนาโดย Meta (Facebook) พร้อมการใช้งานนาฬิกาอะตอมขนาดเล็กและตัวรับ GNSS ซึ่งสามารถใช้เพื่อจัดระเบียบการทำงานของเซิร์ฟเวอร์การซิงโครไนซ์เวลาที่แน่นอนที่แยกจากกัน
    • เพิ่มการรองรับสำหรับ Sony Xperia 10II (Snapdragon 665), Xiaomi Redmi 2 (Snapdragon MSM8916), Samsung Galaxy S3 (Snapdragon MSM8226), สมาร์ทโฟน Samsung Gavini/Codina/Kyle
    • เพิ่มการรองรับ ARM SoС และ NVIDIA Jetson TX2 NX Developer Kit, Sancloud BBE Lite, PicoITX, DRC02, SolidRun SolidSense, SKOV i.MX6, Nitrogen8, Traverse Ten64, GW7902, Microchip SAMA7, ualcomm Snapdragon SDM636/SM8150, Renesas R-Car H3e บอร์ด -2G/M3e-2G, Marvell CN913x, ASpeed ​​​​AST2600 (บอร์ดเซิร์ฟเวอร์ Facebook Cloudripper, Elbert และ Fuji), 4KOpen STiH418-b2264
    • เพิ่มการรองรับสำหรับแผง LCD Gopher 2b, EDT ETM0350G0DH6/ETMV570G2DHU, LOGIC Technologies LTTD800480070-L6WH-RT, Multi-Innotechnology MI1010AIT-1CP1, Innolux EJ030NA 3.0, ilitek ili9341, E Ink VB3300-KCA, Samsung ATNA33XC20 7430, ซัมซุง DB2401, WideChips WSXNUMX .
    • เพิ่มไดรเวอร์ LiteETH ที่รองรับคอนโทรลเลอร์อีเธอร์เน็ตที่ใช้ในซอฟต์แวร์ LiteX SoC (สำหรับ FPGA)
    • มีการเพิ่มตัวเลือกเวลาแฝงต่ำลงในไดรเวอร์ usb-audio เพื่อควบคุมการรวมการทำงานในโหมดเวลาแฝงขั้นต่ำ เพิ่มตัวเลือก quirk_flags เพื่อส่งการตั้งค่าเฉพาะอุปกรณ์ด้วย

ในเวลาเดียวกันมูลนิธิซอฟต์แวร์เสรีลาตินอเมริกาได้ก่อตั้งเวอร์ชันของเคอร์เนลฟรี 5.15 - Linux-libre 5.15-gnu ซึ่งล้างองค์ประกอบของเฟิร์มแวร์และไดรเวอร์ที่มีส่วนประกอบหรือส่วนโค้ดที่ไม่ฟรีซึ่งมีขอบเขตจำกัด โดยผู้ผลิต รีลีสใหม่ใช้เอาต์พุตของข้อความไปยังบันทึกเกี่ยวกับการทำความสะอาดให้เสร็จสิ้น ปัญหาในการสร้างแพ็คเกจโดยใช้ mkspec ได้รับการแก้ไขแล้ว การสนับสนุนแพ็คเกจ snap ได้รับการปรับปรุงแล้ว ลบคำเตือนบางอย่างที่แสดงเมื่อประมวลผลไฟล์ส่วนหัวของ Firmware.h อนุญาตให้ส่งออกคำเตือนบางประเภท ("format-extra-args", ความคิดเห็น, ฟังก์ชันที่ไม่ได้ใช้ และตัวแปร) เมื่อสร้างในโหมด "-Werror" เพิ่มการทำความสะอาดไดรเวอร์ gehc-achc อัปเดตโค้ดการทำความสะอาด Blob ในไดรเวอร์และระบบย่อย adreno, btusb, btintel, brcmfmac, aarch64 qcom หยุดการทำความสะอาดไดรเวอร์ prism54 (ลบออก) และ rtl8188eu (แทนที่ด้วย r8188eu) แล้ว

ที่มา: opennet.ru

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