Bản phát hành nhân Linux 6.7

Sau hai tháng phát triển, Linus Torvalds đã trình làng việc phát hành nhân Linux 6.7. Trong số những thay đổi đáng chú ý nhất: tích hợp hệ thống tệp Bcachefs, ngừng hỗ trợ kiến ​​​​trúc Itanium, khả năng Nouvea hoạt động với phần mềm GSP-R, hỗ trợ mã hóa TLS trong NVMe-TCP, khả năng sử dụng ngoại lệ trong BPF, hỗ trợ futex trong io_uring, tối ưu hóa hiệu suất của bộ lập lịch fq (Xếp hàng công bằng), hỗ trợ tiện ích mở rộng TCP-AO (Tùy chọn xác thực TCP) và khả năng hạn chế kết nối mạng trong cơ chế bảo mật Landlock, thêm kiểm soát truy cập vào không gian tên người dùng và io_uring thông qua AppArmor.

Phiên bản mới bao gồm 18405 bản sửa lỗi từ 2066 nhà phát triển, kích thước bản vá là 72 MB (các thay đổi ảnh hưởng đến 13467 tệp, 906147 dòng mã đã được thêm vào, 341048 dòng đã bị xóa). Bản phát hành cuối cùng có 15291 bản sửa lỗi từ 2058 nhà phát triển, kích thước bản vá là 39 MB. Khoảng 45% tất cả các thay đổi được giới thiệu trong 6.7 có liên quan đến trình điều khiển thiết bị, khoảng 14% 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, 13% liên quan đến ngăn xếp mạng, 5% 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.7:

  • Hệ thống con đĩa, I/O và hệ thống tệp
    • Hạt nhân sử dụng mã hệ thống tệp Bcachefs, cố gắng đạt được hiệu suất, độ tin cậy và khả năng mở rộng của XFS, kết hợp với các yếu tố của chức năng nâng cao có trong Btrfs và ZFS. Ví dụ: Bcachefs hỗ trợ các tính năng như bao gồm nhiều thiết bị trong một phân vùng, bố trí ổ đĩa nhiều lớp (lớp dưới cùng chứa dữ liệu được sử dụng thường xuyên dựa trên ổ SSD nhanh và lớp trên cùng chứa dữ liệu ít được sử dụng từ ổ cứng), sao chép (RAID). 1/10), bộ nhớ đệm, nén dữ liệu trong suốt (chế độ LZ4, gzip và ZSTD), lát cắt trạng thái (ảnh chụp nhanh), xác minh tính toàn vẹn bằng cách sử dụng tổng kiểm tra, khả năng lưu trữ mã sửa lỗi Reed-Solomon (RAID 5/6), lưu trữ thông tin trong dạng mã hóa (ChaCha20 và Poly1305 được sử dụng). Về hiệu suất, Bcachefs đi trước Btrfs và các hệ thống tệp khác dựa trên cơ chế Copy-on-Write và thể hiện tốc độ hoạt động gần bằng Ext4 và XFS.
    • Hệ thống tệp Btrfs giới thiệu chế độ hạn ngạch đơn giản hóa cho phép bạn đạt được hiệu suất cao hơn bằng cách chỉ theo dõi các phạm vi trong phân vùng phụ mà chúng được tạo, giúp đơn giản hóa đáng kể các phép tính và cải thiện hiệu suất, nhưng không cho phép bạn tính đến các phạm vi được chia sẻ trong một số các phân vùng phụ.
    • Btrfs đã thêm cấu trúc dữ liệu "cây sọc" mới, phù hợp để ánh xạ phạm vi logic trong các tình huống mà ánh xạ vật lý không khớp giữa các thiết bị. Cấu trúc hiện được sử dụng để triển khai RAID0 và RAID1 cho các thiết bị khối được khoanh vùng. Trong tương lai, họ có kế hoạch sử dụng cấu trúc này trong các RAID cấp cao hơn, điều này sẽ giải quyết một số vấn đề tồn tại trong quá trình triển khai hiện tại.
    • Hệ thống tệp Ceph triển khai hỗ trợ ánh xạ ID người dùng của hệ thống tệp được gắn, được sử dụng để khớp các tệp của một người dùng cụ thể trên phân vùng nước ngoài được gắn với một người dùng khác trên hệ thống hiện tại.
    • Đã thêm khả năng chỉ định uid và gid khi mount vào efivarfs để cho phép các tiến trình không phải root thay đổi các biến UEFI.
    • Đã thêm lệnh gọi ioctl vào exFAT để đọc và thay đổi thuộc tính FS. Đã thêm xử lý các thư mục có kích thước bằng không.
    • F2FS triển khai khả năng sử dụng các khối 16K.
    • Cơ chế automount của autofs đã được chuyển sang sử dụng API gắn phân vùng mới.
    • OverlayFS cung cấp các tùy chọn gắn kết "lowdir+" và "datadir+". Đã thêm hỗ trợ để gắn OverlayFS lồng nhau với xattrs.
    • XFS đã tối ưu hóa tải CPU trong mã phân bổ khối thời gian thực. Khả năng thực hiện đồng thời các thao tác đọc và FICLONE được cung cấp.
    • Mã EXT2 đã được chuyển đổi để sử dụng folio trang.
  • Dịch vụ bộ nhớ và hệ thống
    • Hỗ trợ cho kiến ​​trúc ia64 được sử dụng trong bộ xử lý Intel Itanium, vốn đã ngừng hoạt động hoàn toàn vào năm 2021, đã ngừng hoạt động. Bộ xử lý Itanium được Intel giới thiệu vào năm 2001, nhưng kiến ​​trúc ia64 không thể cạnh tranh với AMD64, chủ yếu là do hiệu năng cao hơn của AMD64 và quá trình chuyển đổi mượt mà hơn từ bộ xử lý x32 86-bit. Kết quả là, mối quan tâm của Intel đã chuyển sang ủng hộ bộ xử lý x86-64 và lô hàng của Itanium vẫn là máy chủ HP Integrity, đơn đặt hàng đã bị dừng ba năm trước. Mã hỗ trợ ia64 đã bị xóa khỏi kernel chủ yếu do thiếu hỗ trợ cho nền tảng này trong thời gian dài, trong khi Linus Torvalds bày tỏ sẵn sàng trả lại hỗ trợ ia64 cho kernel, nhưng chỉ khi có người bảo trì có thể chứng minh chất lượng cao. hỗ trợ cho nền tảng này bên ngoài kernel chính trong ít nhất một năm.
    • Đã thêm tham số lệnh dòng hạt nhân “ia32_emulation”, cho phép bạn bật hoặc tắt hỗ trợ mô phỏng chế độ 32 bit trong các hạt nhân được xây dựng cho kiến ​​trúc x86-64 ở giai đoạn khởi động. Về mặt thực tế, tùy chọn mới cho phép bạn xây dựng kernel có hỗ trợ tương thích với các ứng dụng 32 bit, nhưng tắt chế độ này theo mặc định để giảm vectơ tấn công trên kernel, vì API tương thích ít được kiểm tra hơn kernel chính giao diện.
    • 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). Phiên bản mới thực hiện quá trình chuyển đổi sang sử dụng bản phát hành Rust 1.73 và cung cấp một bộ liên kết để làm việc với hàng công việc.
    • Có thể sử dụng cơ chế binfmt_misc để thêm hỗ trợ cho các định dạng tệp thực thi mới (ví dụ: để chạy các ứng dụng Java hoặc Python đã biên dịch) trong các không gian tên không có đặc quyền riêng biệt.
    • Bộ điều khiển cgroup cpuset, cho phép bạn kiểm soát việc sử dụng lõi CPU khi thực hiện một tác vụ, cung cấp sự phân chia thành phân vùng cục bộ và phân vùng từ xa, khác nhau ở việc cgroup gốc có phải là phần gốc chính xác hay không. Các cài đặt mới “cpuset.cpus.exclusive” và “cpuset.cpus.excluisve.effect” cũng đã được thêm vào cpuset để liên kết CPU độc quyền.
    • Hệ thống con BPF triển khai hỗ trợ cho các trường hợp ngoại lệ, được xử lý như một lối thoát khẩn cấp khỏi chương trình BPF với khả năng giải phóng các khung ngăn xếp một cách an toàn. Ngoài ra, các chương trình BPF cho phép sử dụng con trỏ kptr kết nối với CPU.
    • Hỗ trợ cho các hoạt động với futex đã được thêm vào hệ thống con io_uring và các hoạt động mới đã được triển khai: IORING_OP_WAITID (phiên bản không đồng bộ của waitid), SOCKET_URING_OP_GETSOCKOPT (tùy chọn getsockoptand), SOCKET_URING_OP_SETSOCKOPT (tùy chọn setsockopt) và IORING_OP_READ_MULTISHOT (nhiều thao tác đọc không dừng trong khi có dữ liệu hoặc không có bộ đệm đầy đủ).
    • Đã thêm việc triển khai các hàng đợi FIFO được kết nối đơn nhẹ, chỉ yêu cầu khóa quay để loại bỏ hàng đợi trong ngữ cảnh quy trình và loại bỏ khóa quay để bổ sung nguyên tử vào hàng đợi trong bất kỳ ngữ cảnh nào.
    • Đã thêm bộ đệm vòng "objpool" với khả năng triển khai hàng đợi hiệu suất cao có thể mở rộng để phân bổ và trả về các đối tượng.
    • Phần ban đầu của các thay đổi đã được thêm vào để triển khai API futex2 mới, có hiệu suất tốt hơn trên hệ thống NUMA, hỗ trợ các kích thước khác ngoài 32 bit và có thể được sử dụng thay cho lệnh gọi hệ thống futex() đa kênh.
    • Đối với kiến ​​trúc ARM32 và S390x, hỗ trợ cho tập lệnh BPF hiện tại (cpuv4) đã được thêm vào.
    • Đối với kiến ​​trúc RISC-V, có thể sử dụng chế độ kiểm tra Shadow-Call Stack có sẵn trong Clang 17, được thiết kế để bảo vệ chống ghi đè địa chỉ trả về từ một hàm trong trường hợp tràn bộ đệm trên ngăn xếp. Bản chất của việc bảo vệ là lưu địa chỉ trả về vào một ngăn xếp “bóng” riêng biệt sau khi chuyển quyền điều khiển sang một hàm và truy xuất địa chỉ này trước khi thoát khỏi hàm.
    • Chế độ quét trang bộ nhớ thông minh mới đã được thêm vào cơ chế hợp nhất các trang bộ nhớ giống hệt nhau (KSM: Kernel Samepage Merging), giúp theo dõi các trang được quét không thành công và giảm cường độ quét lại chúng. Để bật chế độ mới, cài đặt /sys/kernel/mm/ksm/smart_scan đã được thêm vào.
    • Đã thêm lệnh ioctl mới PAGEMAP_SCAN, khi được sử dụng với userfaultfd(), cho phép bạn xác định thực tế ghi vào một phạm vi bộ nhớ cụ thể. Ví dụ: tính năng mới có thể được sử dụng trong hệ thống để lưu và khôi phục trạng thái của quy trình CRIU hoặc trong hệ thống chống gian lận trong trò chơi.
    • Trong hệ thống hợp ngữ, nếu có sẵn trình biên dịch Clang, việc tập hợp các ví dụ về sử dụng hệ thống con perf, được viết dưới dạng chương trình BPF, được bật theo mặc định.
    • Lớp videobuf cũ, được sử dụng để quản lý bộ đệm khung trong hệ thống con phương tiện và đã được thay thế bằng cách triển khai videobuf10 mới hơn 2 năm trước, đã bị xóa.
  • Ảo hóa và bảo mật
    • Khả năng mã hóa dữ liệu theo khối nhỏ hơn kích thước khối trong hệ thống tệp đã được thêm vào hệ thống con fscrypt. Điều này có thể được yêu cầu để kích hoạt các cơ chế mã hóa phần cứng chỉ hỗ trợ các khối nhỏ (ví dụ: bộ điều khiển UFS chỉ hỗ trợ kích thước khối 4096 có thể được sử dụng với hệ thống tệp có kích thước khối 16K).
    • Hệ thống con “iommufd”, cho phép bạn quản lý các bảng trang bộ nhớ IOMMU (Đơn vị quản lý bộ nhớ I/O) thông qua bộ mô tả tệp từ không gian người dùng, đã thêm tính năng theo dõi dữ liệu chưa được xóa khỏi bộ đệm (bẩn) cho DMA các hoạt động cần thiết để xác định bộ nhớ với dữ liệu chưa được xóa trong quá trình di chuyển quá trình.
    • Hỗ trợ xác định quy tắc kiểm soát truy cập cho ổ cắm TCP đã được thêm vào cơ chế Landlock, cho phép bạn hạn chế sự tương tác của một nhóm quy trình với môi trường bên ngoài. Ví dụ: bạn có thể tạo quy tắc chỉ cho phép truy cập vào cổng mạng 443 để thiết lập kết nối HTTPS.
    • Hệ thống con AppArmor đã bổ sung khả năng kiểm soát quyền truy cập vào cơ chế io_uring và tạo không gian tên người dùng, cho phép bạn chỉ cho phép truy cập có chọn lọc vào các khả năng này đối với một số quy trình nhất định.
    • Đã thêm API chứng thực máy ảo để xác minh tính toàn vẹn của quá trình khởi động máy ảo.
    • Hệ thống LoongArch hỗ trợ ảo hóa bằng cách sử dụng bộ ảo hóa KVM.
    • Khi sử dụng bộ ảo hóa KVM trên hệ thống RISC-V, đã xuất hiện hỗ trợ cho tiện ích mở rộng Smstateen, ngăn chặn máy ảo truy cập vào các thanh ghi CPU không được bộ ảo hóa hỗ trợ rõ ràng. Cũng đã thêm hỗ trợ cho việc sử dụng tiện ích mở rộng Zicond trong hệ thống khách, cho phép sử dụng một số phép toán số nguyên có điều kiện.
    • Trong các hệ thống khách dựa trên x86 chạy trong KVM, cho phép tối đa 4096 CPU ảo.
  • Hệ thống con mạng
    • Trình điều khiển NVMe-TCP (NVMe over TCP), cho phép bạn truy cập ổ NVMe qua mạng (NVM Express over Fabrics) bằng giao thức TCP, đã bổ sung hỗ trợ mã hóa kênh truyền dữ liệu bằng TLS (sử dụng KTLS và quy trình nền). trong không gian người dùng tlshd để đàm phán kết nối).
    • Hiệu suất của bộ lập lịch gói fq (Xếp hàng công bằng) đã được tối ưu hóa, giúp tăng thông lượng thêm 5% khi tải nặng trong thử nghiệm tcp_rr (Yêu cầu/Phản hồi TCP) và 13% với luồng gói UDP không giới hạn.
    • TCP bổ sung khả năng đánh dấu thời gian chính xác đến micro giây (TCP TS) tùy chọn (RFC 7323), cho phép ước tính độ trễ chính xác hơn và các mô-đun kiểm soát tắc nghẽn nâng cao hơn. Để kích hoạt nó, bạn có thể sử dụng lệnh “ip Route add 10/8 ... tính năng tcp_usec_ts”.
    • Ngăn xếp TCP đã thêm hỗ trợ cho tiện ích mở rộng TCP-AO (Tùy chọn xác thực TCP, RFC 5925), giúp xác minh các tiêu đề TCP bằng mã MAC (Mã xác thực tin nhắn), sử dụng các thuật toán hiện đại hơn HMAC-SHA1 và CMAC-AES- 128 thay vào đó là tùy chọn TCP-MD5 có sẵn trước đây dựa trên thuật toán MD5 cũ.
    • Một loại thiết bị mạng ảo mới “netkit” đã được thêm vào, logic truyền dữ liệu được thiết lập bằng chương trình BPF.
    • KSMBD, một triển khai cấp hạt nhân của máy chủ SMB, đã thêm hỗ trợ để phân giải tên tệp chứa các cặp ký tự ghép thay thế.
    • NFS đã cải thiện việc triển khai các luồng với các dịch vụ RPC. Đã thêm hỗ trợ cho ủy quyền ghi (đối với NFSv4.1+). NFSD đã thêm hỗ trợ cho trình xử lý liên kết mạng rpc_status. Cải thiện hỗ trợ cho máy khách NFSv4.x khi tái xuất sang knfsd.
  • Оборудование
    • Hỗ trợ ban đầu cho chương trình cơ sở GSP-RM đã được thêm vào mô-đun hạt nhân Nouveau, được sử dụng trong GPU NVIDIA RTX 20+ để di chuyển các hoạt động khởi tạo và điều khiển GPU sang một bên của bộ vi điều khiển GSP (Bộ xử lý hệ thống GPU) riêng biệt. Hỗ trợ GSP-RM cho phép trình điều khiển Nouveau hoạt động thông qua các lệnh gọi chương trình cơ sở, thay vì lập trình trực tiếp các tương tác phần cứng, giúp việc thêm hỗ trợ cho GPU NVIDIA mới dễ dàng hơn nhiều bằng cách sử dụng các lệnh gọi dựng sẵn để khởi tạo và quản lý nguồn.
    • Trình điều khiển AMDGPU hỗ trợ GC 11.5, NBIO 7.11, SMU 14, SMU 13.0 OD, DCN 3.5, VPE 6.1 và DML2. Cải thiện hỗ trợ tải liền mạch (không nhấp nháy khi chuyển chế độ video).
    • Trình điều khiển i915 bổ sung hỗ trợ cho chip Intel Meteor Lake và bổ sung triển khai ban đầu của Intel LunarLake (Xe 2).
    • Đã thêm hỗ trợ cho các kênh truyền không đối xứng được thêm vào thông số kỹ thuật USB4 v2 (120/40G).
    • Đã thêm hỗ trợ cho ARM SoC: Qualcomm Snapdragon 720G (được sử dụng trong điện thoại thông minh Xiaomi), AMD Pensando Elba, Renesas, R8A779F4 (R-Car S4-8), USRobotics USR8200 (được sử dụng trong bộ định tuyến và NAS).
    • Đã thêm hỗ trợ cho điện thoại thông minh Fairphone 5 và bo mạch ARM Orange Pi 5, QuartzPro64, Turing RK1, Variscite MX6, BigTreeTech CB1, Freescale LX2162, Google Spherion, Google Hayato, Genio 1200 EVK, RK3566 Powkiddy RGB30.
    • Đã thêm hỗ trợ cho bo mạch RISC-V Milk-V Pioneer và Milk-V Duo.
    • Đã thêm hỗ trợ cho giao diện âm thanh của máy tính xách tay Huawei được cung cấp CPU AMD. Đã thêm hỗ trợ cho loa bổ sung được cài đặt trên máy tính xách tay Dell Oasis 13/14/16. Đã thêm hỗ trợ cho loa tích hợp ASUS K6500ZC. Đã thêm hỗ trợ cho chỉ báo tắt tiếng trên máy tính xách tay HP 255 G8 và G10. Đã thêm hỗ trợ cho trình điều khiển âm thanh acp6.3. Đã thêm hỗ trợ cho giao diện ghi âm chuyên nghiệp Focusrite Clarett+ 2Pre và 4Pre.

Đồ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.7 hoàn toàn miễn phí - Linux-libre 6.7-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.7, mã dọn dẹp blob đã được cập nhật trong nhiều trình điều khiển và hệ thống con khác nhau, chẳng hạn như trong trình điều khiển amdgpu, nouveau, adreno, mwifiex, mt7988, ath11k, avs và btqca. Mã để dọn dẹp trình điều khiển localtalk và rtl8192u đã bị xóa do chúng bị loại khỏi kernel. Đã xóa các thành phần không cần thiết để làm sạch trình điều khiển xhci-pci, rtl8xxxu và rtw8822b, được thêm vào trước đó do nhầm lẫn. 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 mới mt7925, tps6598x, aw87390 và aw88399.

Nguồn: opennet.ru

Thêm một lời nhận xét