Sau hai tháng phát triển, Linus Torvalds đã giới thiệu việc phát hành nhân Linux 6.6. Trong số những thay đổi đáng chú ý nhất: bộ lập lịch tác vụ EEVDF mới; cơ chế ngăn xếp bóng để bảo vệ khỏi bị khai thác; hỗ trợ fs-verity trong OverlayFS; thực hiện hạn ngạch và xattr trong tmpfs; chuẩn bị fsck trực tuyến trong XFS; tăng cường theo dõi việc xuất khẩu các ký hiệu “chỉ GPL”; hỗ trợ ổ cắm mạng trong io_uring; ngẫu nhiên hóa bộ nhớ trong kmalloc(); không được chấp nhận bởi ReiserFS; Nguyên thủy của trình điều khiển NVK Vulkan đã được thêm vào Nouveau.
Phiên bản mới bao gồm 15291 bản sửa lỗi từ 2058 nhà phát triển, kích thước bản vá là 39 MB (các thay đổi ảnh hưởng đến 14844 tệp, 553359 dòng mã đã được thêm vào, 284012 dòng đã bị xóa). Bản phát hành cuối cùng có 14674 bản sửa lỗi từ các nhà phát triển năm 2016, kích thước bản vá là 78 MB. Khoảng 44% tất cả các thay đổi được giới thiệu trong 6.6 có liên quan đến trình điều khiển thiết bị, khoảng 17% thay đổi có liên quan đến việc cập nhật mã dành riêng cho kiến trúc phần cứng, 11% liên quan đến ngăn xếp mạng, 4% liên quan đến hệ thống tệp và 3% có liên quan đến các hệ thống con kernel bên trong.
Những cải tiến chính trong kernel 6.6:
- Dịch vụ bộ nhớ và hệ thống
- Một bộ lập lịch tác vụ mới EEVDF (Hạn chót ảo đủ điều kiện sớm nhất trước tiên) đã được triển khai, thay thế bộ lập lịch CFS (Bộ lập lịch hoàn toàn công bằng), được cung cấp bắt đầu từ kernel 2.6.23. Bộ lập lịch mới, khi chọn quy trình tiếp theo để chuyển việc thực thi sang, sẽ tính đến các quy trình chưa nhận đủ tài nguyên bộ xử lý hoặc đã nhận được lượng thời gian xử lý quá lớn một cách không công bằng. Trong trường hợp đầu tiên, việc chuyển giao quyền kiểm soát cho quy trình là bắt buộc, còn trong trường hợp thứ hai thì ngược lại, nó bị hoãn lại. Bộ lập lịch CFS cũ sử dụng phương pháp phỏng đoán và tinh chỉnh để xác định các quy trình cần được chú ý đặc biệt, trong khi bộ lập lịch mới theo dõi chúng rõ ràng hơn và không yêu cầu tinh chỉnh. EEVDF dự kiến sẽ giảm bớt sự chậm trễ trong các nhiệm vụ mà CFS gặp phải vấn đề về lập kế hoạch.
- Các thay đổi đã được thực hiện đối với việc xử lý các ký hiệu nội bộ thuộc danh mục “chỉ dành cho GPL”, nhằm mục đích làm phức tạp việc sử dụng các lớp GPL của các mô-đun độc quyền nhằm vượt qua các hạn chế truy cập vào các hệ thống con hạt nhân chỉ cho phép mã theo giấy phép GPL. Hàm Symbol_get() ngăn các mô-đun độc quyền tìm kiếm các ký hiệu được đánh dấu là chỉ GPL và ngược lại, các mô-đun GPL sẽ không thể tìm thấy các ký hiệu được xuất bởi các mô-đun độc quyền.
- Đã thêm cài đặt bổ sung cho hàng đợi công việc không liên kết để cải thiện hiệu quả sử dụng lại bộ đệm của bộ xử lý trên các hệ thống lớn có nhiều bộ đệm cấp ba (L3). Hạt nhân cũng bao gồm tiện ích tools/workqueue/wq_dump.py để kiểm tra cấu hình hiện tại của hàng đợi công việc.
- Hệ thống con io_uring đã bổ sung hỗ trợ ban đầu cho các hoạt động và lệnh dành riêng cho ổ cắm mạng. Đã thêm sysctl io_uring_disabled để tắt io_uring trên toàn hệ thống. io_uring cũng tăng tốc đáng kể I/O trực tiếp ở chế độ không đồng bộ. Mức tăng thông lượng và giảm độ trễ khi thực hiện các thao tác I/O sau khi thực hiện thay đổi đạt 37%.
- Đối với kiến trúc PA-RISC, trình biên dịch JIT cho BPF đã được triển khai.
- Đã thêm hỗ trợ cho các tham số số vào cài đặt /sys/devices/system/cpu/smt/control để xác định số lượng luồng có sẵn cho mỗi lõi CPU (trước đây chỉ hỗ trợ các giá trị “bật” và “tắt” để bật hoặc tắt hỗ trợ đa luồng đối xứng). Tính năng mới này có thể được sử dụng trên một số bộ xử lý PowerPC hỗ trợ cắm nóng SMT để kích hoạt có chọn lọc SMT trên các lõi cụ thể trong quá trình hoạt động.
- Tiếp tục di chuyển các thay đổi từ nhánh Rust-for-Linux liên quan đến việc sử dụng ngôn ngữ Rust làm ngôn ngữ thứ hai để phát triển trình điều khiển và mô-đun hạt nhân (Hỗ trợ Rust không hoạt động theo mặc định và không dẫn đến việc đưa Rust vào trong số các phụ thuộc lắp ráp cần thiết cho kernel). Quá trình chuyển đổi sang sử dụng các bản phát hành Rust 1.71.1 và bindgen 0.65.1 đã được thực hiện. Đặc điểm 'Zeroable' đã được triển khai. Đã thêm macro thủ tục 'dán!' và '#[dẫn xuất (Zeroable)]'. Khả năng tương thích với '#[pin_data]' được đảm bảo. Đã thêm các hàm khởi tạo '{,pin_}init_array_from_fn()' và phương thức '{,pin_}chain'. Khả năng của mô-đun 'loại' đã được mở rộng. Khung kiểm tra đơn vị kunit đã bổ sung khả năng chạy thử nghiệm từ tài liệu Rust.
- Hệ thống con “eventfs” đã được thêm vào, cho phép bạn giảm đáng kể mức tiêu thụ bộ nhớ trong hệ thống theo dõi bằng cách loại bỏ việc lưu trữ các cấu trúc không cần thiết được sử dụng để thể hiện các điểm theo dõi trong hệ thống tệp. Trước đây, các cấu trúc tương tự đã được tạo cho tất cả các điểm theo dõi, bất kể việc sử dụng dấu vết. Với các sự kiện, các cấu trúc như vậy có thể được tạo một cách linh hoạt, chỉ khi cần thiết.
- Khả năng của tiện ích hoàn hảo đã được mở rộng.
- Thông tin đã được thêm vào tệp /proc/pid/smaps để chẩn đoán tính hiệu quả của cơ chế hợp nhất các trang bộ nhớ giống hệt nhau (KSM, Kernel Samepage Merging).
- API Frontswap đã bị xóa, cho phép đặt phân vùng trao đổi vào bộ nhớ không thể xử lý trực tiếp và không cung cấp thông tin vận hành về tính khả dụng của không gian trống. API này chỉ được sử dụng trong zswap, vì vậy người ta đã quyết định sử dụng trực tiếp chức năng này trong zswap, loại bỏ các lớp không cần thiết.
- Đối với kiến trúc RISC-V, đã thêm hỗ trợ để truy cập bộ đếm hiệu suất từ không gian người dùng và khả năng đặt kết xuất lõi sau khi xảy ra lỗi ở khu vực ngoài ranh giới 4GB.
- Đã thêm hỗ trợ ban đầu cho hướng dẫn ARM SME (Mở rộng ma trận có thể mở rộng).
- Khả năng sử dụng các công cụ gỡ lỗi KDB, KGDB, kcov, KFENCE và KASAN trên các hệ thống có kiến trúc LoongArch đã được triển khai.
- Đã thêm hỗ trợ cho các tệp kiểm tra kernel trong hệ thống tích hợp liên tục GitLab, được sử dụng để phát triển trình điều khiển đồ họa.
- Hệ thống con đĩa, I/O và hệ thống tệp
- Hệ thống tệp OverlayFS đã bổ sung hỗ trợ lưu trữ hàm băm fs-verity trong thuộc tính mở rộng lớp phủ.verity (xattr), thuộc tính này có thể được sử dụng để xác minh tính toàn vẹn và tính xác thực của các tệp trong các lớp cơ bản của OverlayFS bằng cách sử dụng khóa và hàm băm mật mã. Do đó, OverlayFS hiện bao gồm tất cả các thay đổi cần thiết để dự án Composefs hoạt động dưới dạng tiện ích bổ sung cho hệ thống tệp OverlayFS và EROFS.
- Hệ thống tệp XFS đã được chuẩn bị để triển khai khả năng sử dụng tiện ích fsck để kiểm tra và khắc phục các sự cố đã xác định trực tuyến mà không cần ngắt kết nối hệ thống tệp. Ngoài ra, XFS đã triển khai khả năng sử dụng các folio lớn trong bộ đệm trang và thêm một số tối ưu hóa liên quan giúp cải thiện đáng kể hiệu suất cho một số loại khối lượng công việc.
- Hệ thống tệp tmpfs đã thêm hỗ trợ cho các thuộc tính mở rộng của người dùng (xattrs người dùng), I/O trực tiếp cũng như hạn ngạch người dùng và nhóm. Sự bù đắp thư mục đã được ổn định, điều này đã giải quyết được các vấn đề khi xuất tmpfs qua NFS.
- Cờ FSCONFIG_CMD_CREATE_EXCL đã được thêm vào API Mount Control để cải thiện tính bảo mật nhằm ngăn chặn việc chia sẻ siêu khối trên nhiều điểm gắn kết (ngăn không cho một phân vùng được gắn vào nhiều điểm gắn kết). Tiện ích mount cung cấp tùy chọn “--exclusive” để kích hoạt cờ này.
- Hỗ trợ thay đổi trực tuyến các tham số với thời gian truy cập và thay đổi (atime, mtime) đã được thêm vào hệ thống con VFS. Trước đây, dữ liệu thời gian được phản ánh với một số độ trễ, điều này gây khó khăn cho việc theo dõi độ mới của dữ liệu trong bộ đệm trong các hệ thống như NFS (do sự chậm trễ trong việc phát hiện các thay đổi đối với tệp, hệ thống có thể nhầm tưởng rằng dữ liệu trong bộ đệm đã có sẵn). Tính năng mới có sẵn cho Btrfs, Ext4, tmpfs và XFS.
- Btrfs đã ngừng sử dụng cơ chế kiểm tra tính toàn vẹn tích hợp được bật tại thời điểm xây dựng thông qua tham số BTRFS_FS_CHECK_INTEGRITY. Cơ chế được chỉ định không được hỗ trợ, không còn được kiểm tra và tạo thêm tải cho CPU và bộ nhớ. Ngoài ra, Btrfs đã tối ưu hóa hiệu suất của mã xác minh FS mới (chà).
- Trong hệ thống tệp Ext4, các kiểm tra cập nhật siêu khối định kỳ đã được thêm vào và các hoạt động cấp phát bộ nhớ đã được tăng tốc khi ghi vào cuối tệp.
- Hệ thống con FUSE đã bổ sung hỗ trợ cho thuộc tính btime (“thời gian sinh”), thuộc tính này xác định thời gian tạo inode.
- Việc thay đổi quyền đối với các liên kết tượng trưng đều bị cấm.
- Đã thêm lệnh gọi hệ thống fchmodat2(), khác với lệnh gọi hệ thống fchmodat() ở một đối số bổ sung để chỉ định cờ. Trong số các cờ, hiện chỉ hỗ trợ AT_SYMLINK_NOFOLLOW và AT_EMPTY_PATH, cho phép triển khai trong chức năng libc fchmodat() việc cấm hủy bỏ các liên kết tượng trưng và khả năng sử dụng bộ mô tả tệp khi chỉ định một đường dẫn trống.
- Hệ thống tệp EROFS (Hệ thống tệp chỉ đọc có thể mở rộng), được thiết kế để sử dụng trên các phân vùng chỉ đọc, hiện hỗ trợ thuật toán nén Deflate. Để tăng tốc độ tìm kiếm các thuộc tính mở rộng, cấu trúc bộ lọc nở xác suất được sử dụng.
- Đã thêm cài đặt CONFIG_BUFFER_HEAD, cho phép bạn xây dựng kernel mà không cần sử dụng cấu trúc buffer_head. Khi xây dựng không có buffer_head, bạn có thể sử dụng các thiết bị khối và một số hệ thống tệp, ví dụ: xfs, btrfs, cramfs, erofs và squallfs.
- Trình điều khiển thiết bị khối ublk, cho phép bạn di chuyển logic cụ thể sang phía quy trình trong không gian người dùng, đã thêm hỗ trợ cho các thiết bị lưu trữ được khoanh vùng (chia các nhóm khối hoặc khu vực thành các vùng, trong đó chỉ được phép bổ sung dữ liệu tuần tự bằng cách cập nhật toàn bộ nhóm khối).
- Việc triển khai hệ thống tệp ReiserFS đã được chuyển từ trạng thái được hỗ trợ sang lỗi thời. ReiserFS dự kiến sẽ kết thúc hỗ trợ vào năm 2025. Các lý do khiến ReiserFS trở nên lỗi thời bao gồm sự trì trệ trong việc bảo trì FS này, vấn đề chưa được giải quyết của năm 2038, thiếu khả năng chịu lỗi và mong muốn giảm chi phí lao động để duy trì các thay đổi phổ biến đối với hệ thống tệp liên quan đến việc hỗ trợ API mới để gắn kết, iomap và folios ).
- Máy chủ NFS triển khai cơ chế ủy quyền ghi cho NFSv4, giúp cải thiện hiệu quả của bộ đệm ghi tệp để giảm lưu lượng. Hỗ trợ cho hoạt động READ_PLUS được xác định trong NFS 4.2 đã được bật.
- Hỗ trợ cho fscrypt đã được thêm vào hệ thống tệp Ceph.
- Ảo hóa và bảo mật
- Việc triển khai cơ chế Shadow Stack đã được thêm vào, cho phép bạn chặn hoạt động của nhiều hoạt động khai thác, sử dụng khả năng phần cứng của bộ xử lý Intel để bảo vệ chống ghi đè địa chỉ trả về từ một chức năng trong trường hợp tràn bộ đệm trên ngăn xếp. Bản chất của bảo vệ là sau khi điều khiển được chuyển sang một hàm, địa chỉ trả về được bộ xử lý lưu trữ không chỉ trong ngăn xếp thông thường mà còn trong một ngăn xếp “bóng” riêng biệt, không thể thay đổi trực tiếp. Trước khi thoát khỏi hàm, địa chỉ trả về được lấy ra từ ngăn xếp ẩn và được kiểm tra với địa chỉ trả về từ ngăn xếp chính. Địa chỉ không khớp dẫn đến việc tạo ra một ngoại lệ, chặn các tình huống trong đó việc khai thác đã ghi đè lên một địa chỉ trên ngăn xếp chính. Ngăn xếp bóng phần cứng chỉ được hỗ trợ trong các bản dựng 64 bit và mô phỏng phần mềm được sử dụng trong các bản dựng 32 bit.
- Đã thêm hỗ trợ xây dựng bằng trình biên dịch Clang có bật chế độ bảo vệ CFI (Tính toàn vẹn luồng điều khiển), chế độ này chặn các hành vi vi phạm thứ tự thực thi thông thường (luồng điều khiển) do sử dụng các khai thác làm thay đổi con trỏ hàm được lưu trữ trong bộ nhớ.
- Đối với kiến trúc RISC-V, việc ngẫu nhiên hóa vị trí hạt nhân trong bộ nhớ khi khởi động được bật.
- Cờ SECCOMP_USER_NOTIF_FD_SYNC_WAKE_UP đã được thêm vào lệnh gọi hệ thống seccomp(), cho phép bạn xử lý các sự kiện từ các quy trình được giám sát ở chế độ đồng bộ để bộ lập lịch tác vụ hoạt động hiệu quả hơn.
- Hàm kmalloc() cung cấp khả năng ngẫu nhiên hóa các bộ đệm phiến, khiến việc khai thác các lỗ hổng trong kernel trở nên khó khăn hơn.
- Đề cập đến Cơ quan An ninh Quốc gia Hoa Kỳ đã bị xóa khỏi các tùy chọn liên quan đến việc kích hoạt hệ thống kiểm soát truy cập thực thi SELinux. Vì dự án đã được phát triển dưới sự hỗ trợ của cộng đồng trong 20 năm và được hỗ trợ bởi các nhà bảo trì độc lập nên đã quyết định chuyển sang sử dụng tên “SELinux” thay vì “NSA SELinux” trong các nhận xét và tài liệu trong Kconfig (ví dụ: , phần giải thích cho tham số tập hợp SECURITY_SELINUX đã được thay đổi từ “Hỗ trợ NSA SELinux” thành “Hỗ trợ SELinux”).
- В системный вызов userfaultfd() добавлена операция UFFDIO_POISON, позволяющая пометить страницы памяти «отравленными» (poisoned), что может быть использовано для переноса повреждённых страниц памяти при миграции máy ảo с одной системы на другую.
- Giao diện ký tự mới (/dev/vfio/devices/vfioX) đã được thêm vào hệ thống con VFIO để quản lý các thiết bị VFIO, cho phép người dùng mở trực tiếp tệp thiết bị mà không cần truy cập vào giao diện nhóm cũ /dev/vfio/$groupID.
- В người phục vụ NFS прекращена поддержка устаревших типов шифрования Kerberos, использующих алгоритмы DES и 3DES.
- Khi chạy trong môi trường ảo hóa Hyper-V, hỗ trợ đã được thêm vào cho các hệ thống khách được bảo vệ bằng công nghệ AMD SEV-SNP (Phân trang lồng nhau an toàn) và Intel TDX (Tiện ích mở rộng miền đáng tin cậy).
- Khi xây dựng kernel ở chế độ "W=1", trình biên dịch mặc định đưa ra các cảnh báo "-Wformat-overflow", "-Wformat-truncation", "-Wstringop-overflow" và "-Wrestrict". Cảnh báo "-Wenum-conversion" được bật cho mọi bản dựng.
- Hệ thống con mạng
- Việc triển khai họ địa chỉ AF_XDP (Đường dẫn dữ liệu eXpress) đã được mở rộng để hoạt động với các gói được lưu trữ trong nhiều bộ đệm (ví dụ: một bộ đệm có thể chứa tiêu đề gói và dữ liệu thứ hai hoặc một chuỗi gồm một số bộ đệm có thể chứa Ethernet lớn khung hình). Giờ đây, các chương trình sử dụng ổ cắm AF_XDP có thể nhận và truyền gói tin từ nhiều bộ đệm cùng một lúc.
- Hỗ trợ chống phân mảnh các gói IPv4 và IPv6, cũng như khả năng lọc các gói bị phân mảnh, đã được thêm vào hệ thống con BPF.
- Một trình xử lý mới, update_socket_protocol, đã được thêm vào BPF để cho phép các chương trình BPF thay đổi giao thức được yêu cầu cho các ổ cắm mới. Ví dụ: chương trình BPF có thể thay thế TCP bằng MPTCP (TCP đa đường) một cách trong suốt để tối ưu hóa lưu lượng ứng dụng. BPF cũng bổ sung hỗ trợ cho việc kiểm soát việc định tuyến các gói thông qua các luồng khác nhau trong MPTCP.
- Cờ phát triển thử nghiệm đã bị xóa khỏi mô-đun ksmbd, mô-đun này cung cấp triển khai cấp hạt nhân của máy chủ tệp dựa trên giao thức SMB3. Đã thêm hỗ trợ cho việc kết hợp các thao tác đọc (truy vấn “đọc kết hợp”).
- Оборудование
- Các thay đổi đã được thực hiện đối với hệ thống con DRM (Trình quản lý kết xuất trực tiếp) cần thiết để trình điều khiển NVK mở hoạt động hiệu quả với việc triển khai API đồ họa Vulkan cho thẻ video NVIDIA. Trình điều khiển DRM của Nouveau ban đầu được thiết kế để triển khai OpenGL, do đó, nó thiếu các tính năng cơ bản cần thiết để trình điều khiển Vulkan hoạt động hiệu quả, chẳng hạn như hỗ trợ các đối tượng được đồng bộ hóa và quản lý không gian địa chỉ ảo.
- Trình điều khiển AMDGPU hỗ trợ SDMA 6.1.0, HDP 6.1, SMUIO 14.0, PSP 14.0, IH 6.1 và GFX 9.4.3. Mã tải chương trình cơ sở PSP (Bộ xử lý bảo mật nền tảng) đã được làm lại. Hỗ trợ mở rộng cho công nghệ đồng bộ hóa thích ứng FreeSync (hỗ trợ thêm cho Freesync Panel Replay V2).
- Trình điều khiển i915 tiếp tục hỗ trợ chip Intel Meteor Lake. Cải thiện hỗ trợ cho công nghệ bảo vệ bản sao HDCP (Bảo vệ nội dung số băng thông cao). Mã để tương tác với màn hình đã được làm lại.
- Các tùy chọn tắt tính năng tải vi mã ở giai đoạn xây dựng - MICROCODE_INTEL và MICROCODE_AMD - đã bị xóa khỏi Kconfig. Hiện tại, hạt nhân luôn được xây dựng bằng mã tải vi mã cho hệ thống x86, nhưng việc tải vi mã thực tế có thể bị vô hiệu hóa bằng cách chỉ định tham số hạt nhân 'dis_ucode_ldr'.
- Khả năng điều khiển các thiết bị âm thanh được kết nối qua hệ thống con IIO (I/O công nghiệp) đã được thêm vào hệ thống con âm thanh.
- Đã thêm hỗ trợ cho giao diện âm thanh Intel LunarLake, Intel ArrowLake và AMD ACP5x, codec Cirrus Logic CS42L43, Realtek RT1017 và TI TAS2781, cũng như bộ khuếch đại Cirrus Logic CS35L56 và winic aw88261. Đã thêm hỗ trợ cho AMD Van Gogh ASoC.
- Đã thêm trình điều khiển Tiện ích USB MIDI 2.0 mô phỏng giao diện USB MIDI 2.0 được liên kết với thiết bị rawmidi ALSA UMP.
- Đã thêm hỗ trợ cho bộ điều khiển Ethernet Broadcom ASP 2.0 và Marvell 88Q2XXX.
- Đã thêm hỗ trợ cho các bảng Visionox R66451, TDO TL050HDV35, KD070FHFID015, Inanbo T28CP45TN89 và EDT ET028013DMA, bộ điều khiển hiển thị Loongson và bộ điều khiển màn hình cảm ứng Azoteq IQS7222D/IQS7210A/7211A.
- Đã thêm hỗ trợ cho ARM SoC Qualcomm SM4450 (Snapdragon 4 Gen 2), TI AM62P5, Intel Agilex5, Qualcomm ipq5018, AN400 (Amlogic T7)
- Đã thêm hỗ trợ cho bo mạch ARM Samsung Galaxy Tab 3 8.0, FriendlyElec NanoPC T6, Amlogic A311D2, Khadas Vim4, Xiaomi SM7125, Facebook Yosemite 4, Orange Pi Zero 3, Radxa ROCK 4SE.
Đồng thời, Tổ chức Phần mềm Tự do Châu Mỹ Latinh đã hình thành một phiên bản kernel 6.6 hoàn toàn miễn phí - Linux-libre 6.6-gnu, loại bỏ các thành phần của chương trình cơ sở và trình điều khiển chứa các thành phần hoặc đoạn mã không tự do, phạm vi của chúng bị giới hạn bởi nhà sản xuất. Trong bản phát hành 6.6, mã dọn dẹp blob trong nhiều trình điều khiển và hệ thống con khác nhau đã được cập nhật, chẳng hạn như trong TI gigabit RU ethernet, MediaTek 792x wifi, Cirrus Logic cs42l43 mfd, cs35l56 HD-audio và aw88261 SoC. Làm sạch tên blob trong tệp dts cho kiến trúc Aarch64. Đã xóa các đốm màu trong trình điều khiển ivpu, trình điều khiển bluetooth, trình điều khiển màn hình cảm ứng và bộ mã hóa/giải mã Qualcomm Venus V4L2 mới.
Nguồn: opennet.ru
