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

Sau hai tháng phát triển, Linus Torvalds đã giới thiệu bản phát hành nhân Linux 6.1. Trong số những thay đổi đáng chú ý nhất: hỗ trợ phát triển trình điều khiển và mô-đun bằng ngôn ngữ Rust, hiện đại hóa cơ chế xác định các trang bộ nhớ đã sử dụng, trình quản lý bộ nhớ đặc biệt cho các chương trình BPF, hệ thống chẩn đoán các vấn đề về bộ nhớ KMSAN, KCFI (Kernelk Control -Flow Integrity) cơ chế bảo vệ, giới thiệu cây cấu trúc Maple.

Phiên bản mới bao gồm 15115 bản sửa lỗi từ 2139 nhà phát triển, kích thước bản vá là 51 MB, nhỏ hơn khoảng 2 lần so với kích thước của các bản vá từ kernel 6.0 và 5.19. Những thay đổi đã ảnh hưởng đến 13165 tệp, 716247 dòng mã đã được thêm vào và 304560 dòng đã bị xóa. Khoảng 45% tất cả các thay đổi được giới thiệu trong 6.1 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, 14% liên quan đến ngăn xếp mạng, 3% 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.1:

  • Dịch vụ bộ nhớ và hệ thống
    • Đã thêm khả năng sử dụ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. Lý do chính để hỗ trợ Rust là giúp viết trình điều khiển thiết bị an toàn và chất lượng cao dễ dàng hơn bằng cách giảm khả năng mắc lỗi khi làm việc với bộ nhớ. Hỗ trợ Rust bị tắt theo mặc định và không dẫn đến việc Rust được đưa vào như một phần phụ thuộc xây dựng kernel bắt buộc. Cho đến nay, kernel đã áp dụng một phiên bản vá lỗi tối thiểu, rút ​​gọn, đã giảm từ 40 xuống 13 nghìn dòng mã và chỉ cung cấp mức tối thiểu cần thiết, đủ để xây dựng một mô-đun hạt nhân đơn giản được viết bằng ngôn ngữ Rust. Trong tương lai, dự kiến ​​​​sẽ tăng dần chức năng hiện có, chuyển các thay đổi khác từ nhánh Rust-for-Linux. Song song đó, các dự án đang được phát triển để sử dụng cơ sở hạ tầng được đề xuất nhằm phát triển trình điều khiển cho ổ NVMe, giao thức mạng 9p và GPU Apple M1 bằng ngôn ngữ Rust.
    • Đối với các hệ thống dựa trên kiến ​​trúc AArch64, RISC-V và LoongArch có EFI, khả năng tải trực tiếp hình ảnh hạt nhân nén đã được triển khai. Đã thêm trình xử lý để tải, chạy và dỡ tải hình ảnh hạt nhân, được gọi trực tiếp từ EFI zboot. Trình xử lý để cài đặt và xóa giao thức khỏi cơ sở dữ liệu giao thức EFI cũng đã được thêm vào. Trước đây, việc giải nén được thực hiện bởi một bộ tải khởi động riêng biệt, nhưng bây giờ việc này có thể được thực hiện bởi một trình xử lý trong chính kernel - hình ảnh kernel được hình thành dưới dạng một ứng dụng EFI.
    • Thành phần bao gồm một phần của các bản vá với việc triển khai mô hình quản lý bộ nhớ đa cấp, cho phép bạn tách các ngân hàng bộ nhớ với các đặc tính hiệu suất khác nhau. Ví dụ: các trang được sử dụng nhiều nhất có thể được lưu trữ trong bộ nhớ nhanh nhất, trong khi các trang được sử dụng ít nhất có thể được lưu trữ trong bộ nhớ tương đối chậm. Kernel 6.1 giới thiệu một cơ chế xác định vị trí các trang được sử dụng nhiều trong bộ nhớ chậm để chúng có thể được nâng cấp lên bộ nhớ nhanh, đồng thời giới thiệu khái niệm chung về các cấp bộ nhớ và hiệu suất tương đối của chúng.
    • Nó bao gồm cơ chế MGLRU (LRU đa thế hệ), thay thế cho việc triển khai LRU (Ít được sử dụng gần đây nhất) cũ dựa trên hai hàng đợi có cấu trúc nhiều giai đoạn giúp xác định tốt hơn trang bộ nhớ nào thực sự đang được sử dụng và trang nào có thể được đẩy ra ngoài. phân vùng trao đổi.
    • Đã thêm hỗ trợ cho cấu trúc dữ liệu “cây phong” do các kỹ sư của Oracle đề xuất, được coi là sự thay thế hiệu quả hơn cho cấu trúc “cây đỏ-đen”. Cây phong là một biến thể của cây B hỗ trợ lập chỉ mục phạm vi và được thiết kế để sử dụng hiệu quả bộ đệm của bộ xử lý hiện đại. Một số hệ thống con quản lý bộ nhớ đã được chuyển sang cây phong, điều này có tác động tích cực đến hiệu suất của chúng. Trong tương lai, cây phong có thể được sử dụng để thực hiện khóa phạm vi.
    • Khả năng tạo các chương trình BPF “phá hoại” được thiết kế đặc biệt để bắt đầu tắt khẩn cấp thông qua lệnh gọi Crash_kexec() đã được thêm vào hệ thống con BPF. Các chương trình BPF như vậy có thể được yêu cầu cho mục đích gỡ lỗi để bắt đầu tạo kết xuất sự cố tại một thời điểm nhất định. Để truy cập các hoạt động phá hoại khi tải chương trình BPF, bạn phải chỉ định cờ BPF_F_DESTRUCTIVE, kích hoạt sysctl kernel.structive_bpf_enabled và có quyền CAP_SYS_BOOT.
    • Đối với các chương trình BPF, có thể liệt kê các phần tử cgroup, cũng như liệt kê các tài nguyên (tệp, vma, quy trình, v.v.) của một luồng hoặc tác vụ cụ thể. Một loại bản đồ mới đã được triển khai để tạo vùng đệm vòng cho người dùng.
    • Đã thêm lệnh gọi đặc biệt để cấp phát bộ nhớ trong các chương trình BPF (bộ cấp phát bộ nhớ), cung cấp cấp phát bộ nhớ an toàn hơn trong ngữ cảnh BPF so với kmalloc() tiêu chuẩn.
    • Phần đầu tiên của những thay đổi đã được tích hợp, cung cấp khả năng tạo trình điều khiển cho các thiết bị đầu vào với giao diện HID (Thiết bị giao diện con người), được triển khai dưới dạng chương trình BPF.
    • Hạt nhân đã loại bỏ hoàn toàn mã để hỗ trợ định dạng tệp thực thi a.out, định dạng này không được dùng nữa trong bản phát hành 5.1 và đã bị vô hiệu hóa đối với các kiến ​​trúc chính kể từ phiên bản 5.18 và 5.19. Định dạng a.out từ lâu đã không còn được dùng nữa trên các hệ thống Linux và việc tạo tệp a.out không được các công cụ hiện đại hỗ trợ trong cấu hình Linux mặc định. Trình tải cho tệp a.out có thể được triển khai hoàn toàn trong không gian người dùng.
    • Đối với các hệ thống dựa trên kiến ​​trúc tập lệnh LoongArch được sử dụng trong bộ xử lý Loongson 3 5000 và triển khai ISA RISC mới, tương tự như MIPS và RISC-V, hỗ trợ cho các sự kiện đo lường hiệu suất (sự kiện hoàn hảo), quá trình biên dịch kexec, kdump và BPF JIT được triển khai .
    • Giao diện I/O không đồng bộ io_uring cung cấp một chế độ mới, IORING_SETUP_DEFER_TASKRUN, cho phép tạm thời trì hoãn công việc liên quan đến bộ đệm vòng cho đến khi một yêu cầu ứng dụng được thực hiện, chế độ này có thể được sử dụng để làm việc hàng loạt và tránh các vấn đề về độ trễ do ứng dụng được ưu tiên trước. sai thời điểm.
    • Các quy trình trong không gian người dùng được cung cấp khả năng bắt đầu chuyển đổi một loạt các trang bộ nhớ thông thường thành một tập hợp các trang bộ nhớ lớn (Trang lớn trong suốt).
    • Đã thêm triển khai thiết bị /dev/userfaultfd, cho phép truy cập vào chức năng của lệnh gọi hệ thống userfaultfd() bằng quyền truy cập trong FS. Chức năng userfaultfd cho phép bạn tạo các trình xử lý để truy cập các trang bộ nhớ chưa được phân bổ (lỗi trang) trong không gian người dùng.
    • Các yêu cầu đối với phiên bản của tiện ích GNU Make đã được tăng lên - hiện nay cần ít nhất phiên bản 3.82 để xây dựng kernel.
  • Hệ thống con đĩa, I/O và hệ thống tệp
    • Tối ưu hóa hiệu suất đáng kể đã được thực hiện đối với hệ thống tệp Btrfs; trong số những thứ khác, hiệu suất của lệnh gọi FIEMAP ioctl đã được tăng lên theo cấp độ lớn. Đã thêm hỗ trợ cho việc ghi vào bộ đệm không đồng bộ cho các ứng dụng sử dụng io_uring. Hỗ trợ cho các tệp được bảo vệ bằng fs-verity đã được thêm vào thao tác “gửi”.
    • Hệ thống tệp ext4 đã bổ sung các tính năng tối ưu hóa hiệu suất liên quan đến bảo trì nhật ký và hoạt động chỉ đọc.
    • Hệ thống tệp EROFS (Hệ thống tệp chỉ đọc nâng cao), được thiết kế để sử dụng trên các phân vùng có thể truy cập ở chế độ chỉ đọc, triển khai khả năng chia sẻ dữ liệu trùng lặp trong các hệ thống tệp khác nhau.
    • Lệnh gọi hệ thống statx() đã được thêm vào để hiển thị thông tin về việc liệu I/O trực tiếp có thể được áp dụng cho một tệp hay không.
    • Hỗ trợ tạo các tệp tạm thời với cờ O_TMPFILE đã được thêm vào hệ thống con FUSE (Hệ thống tệp trong không gian người dùng).
  • Ảo hóa và bảo mật
    • Việc triển khai cơ chế bảo vệ CFI (Tính toàn vẹn của luồng điều khiển) đã được thay thế, thêm các kiểm tra trước mỗi lệnh gọi hàm gián tiếp để phát hiện một số dạng hành vi không xác định có khả năng dẫn đến vi phạm thứ tự thực hiện thông thường (luồng điều khiển) như một kết quả của việc sử dụng các khai thác làm thay đổi con trỏ thành các hàm được lưu trong bộ nhớ. Việc triển khai CFI tiêu chuẩn từ dự án LLVM đã được thay thế bằng một tùy chọn cũng dựa trên việc sử dụng Clang, nhưng được điều chỉnh đặc biệt để bảo vệ các hệ thống con và nhân hệ điều hành cấp thấp. Trong LLVM, một triển khai mới sẽ được cung cấp trong bản phát hành Clang 16 và sẽ được bật với tùy chọn "-fsanitize=kcfi". Điểm khác biệt chính với cách triển khai mới là nó không bị ràng buộc với việc tối ưu hóa thời gian liên kết (LTO) và không dẫn đến việc các con trỏ hàm bị thay thế bằng các liên kết trong bảng nhảy.
    • Đối với các mô-đun LSM (Mô-đun bảo mật Linux), có thể tạo các trình xử lý chặn các hoạt động để tạo không gian tên.
    • Các công cụ được cung cấp để xác minh chữ ký số PKCS#7 trong các chương trình BPF.
    • Khả năng mở ở chế độ không chặn (O_NONBLOCK), vốn vô tình bị xóa trong kernel 5.6, đã được trả về /dev/random.
    • Trên các hệ thống có kiến ​​trúc x86, một cảnh báo đã được thêm vào trong trường hợp ánh xạ các trang bộ nhớ bởi các hệ thống con kernel cho phép thực thi và ghi đồng thời. Trong tương lai, khả năng cấm hoàn toàn việc ánh xạ bộ nhớ như vậy đang được xem xét.
    • Đã thêm cơ chế gỡ lỗi KMSAN (Kernel Memory Sanitizer) để phát hiện việc sử dụng bộ nhớ chưa được khởi tạo trong kernel, cũng như rò rỉ bộ nhớ chưa được khởi tạo giữa không gian người dùng và thiết bị.
    • Các cải tiến đã được thực hiện đối với trình tạo số giả ngẫu nhiên CRNG bảo mật bằng mật mã được sử dụng trong lệnh gọi getrandom. Những thay đổi này do Jason A. Donenfeld, tác giả của VPN WireGuard, chuẩn bị và nhằm mục đích cải thiện tính bảo mật của việc trích xuất số nguyên giả ngẫu nhiên.
  • Hệ thống con mạng
    • Ngăn xếp TCP cung cấp khả năng (bị tắt theo mặc định) để sử dụng các bảng băm ổ cắm riêng biệt cho từng không gian tên, giúp cải thiện hiệu suất trên các hệ thống có số lượng lớn không gian tên.
    • Đã xóa mã để hỗ trợ giao thức DECnet cũ. Các nhánh API không gian người dùng được giữ nguyên để cho phép biên dịch các ứng dụng sử dụng DECnet, nhưng các ứng dụng này sẽ không thể kết nối với mạng.
    • Giao thức netlink được ghi lại.
  • Оборудование
    • Trình điều khiển amdgpu đã bổ sung hỗ trợ chuyển tiếp DSC (Nén luồng hiển thị) để nén dữ liệu không mất dữ liệu khi trao đổi thông tin với màn hình hỗ trợ độ phân giải rất cao. Công việc tiếp tục cung cấp hỗ trợ cho nền tảng AMD RDNA3 (RX 7000) và CDNA (Bản năng). Đã thêm hỗ trợ cho các thành phần IP DCN 3.2, SMU 13.x, NBIO 7.7, GC 11.x, PSP 13.x, SDMA 6.x và GMC 11.x. Trình điều khiển amdkfd (dành cho GPU AMD rời như Polaris) cung cấp hỗ trợ cho GFX 11.0.3.
    • Trình điều khiển i915 (Intel) bao gồm hỗ trợ GPU Meteor Lake. Meteor Lake và các GPU mới hơn hỗ trợ giao diện DP 2.0 (DisplayPort). Đã thêm số nhận dạng cho thẻ video dựa trên vi kiến ​​trúc Alder Lake S.
    • Đã thêm hỗ trợ cho các hệ thống con âm thanh được triển khai trong bộ xử lý Apple Silicon, Intel SkyLake và Intel KabyLake. Trình điều khiển âm thanh CS35L41 HDA hỗ trợ chế độ ngủ. Đã thêm hỗ trợ ASoC (ALSA System on Chip) cho chip âm thanh tích hợp Apple Silicon, AMD Rembrant DSP, AMD Pink Sardine ACP 6.2, Everest ES8326, Intel Sky Lake và Kaby Lake, Mediatek MT8186, NXP i.MX8ULP DSP, Qualcomm SC8280XP, SM8250, SM8450 và Texas Instruments SRC4392
    • Đã thêm hỗ trợ cho màn hình LCD Samsung LTL101AL01, B120XAN01.0, R140NWF5 RH, Densitron DMT028VGHMCMI-1A TFT, AUO B133UAN02.1, IVO M133NW4J-R3, Innolux N120ACA-EA1, AUO B116XAK01.6, BOE NT116WHM -N21, IN X N116BCA-EA2 , INX N116BCN-EA1, Công nghệ đa Inno MI0800FT-9.
    • Đã thêm hỗ trợ cho bộ điều khiển AHCI SATA được sử dụng trong SoC Baikal-T1.
    • Đã thêm hỗ trợ cho chip Bluetooth MediaTek MT7921, Intel Magnetor (CNVi, Kết nối tích hợp), Realtek RTL8852C, RTW8852AE và RTL8761BUV (Edimax BT-8500).
    • Trình điều khiển ath11k cho các mô-đun không dây của Qualcomm đã bổ sung hỗ trợ quét quang phổ trong phạm vi 160 MHz, triển khai NAPI đa luồng và cải thiện hỗ trợ cho chip Wi-Fi Qualcomm WCN6750.
    • Đã thêm trình điều khiển cho bàn phím PinePhone, bàn di chuột InterTouch (ThinkPad P1 G3), Bộ điều khiển thích ứng X-Box, Bộ điều khiển chuyến bay PhoenixRC, Bộ điều khiển ô tô VRC-2, Bộ điều khiển DualSense Edge, Bảng điều khiển IBM, điều khiển từ xa XBOX One Elite, máy tính bảng XP-PEN Deco Pro S và Intuos Pro Nhỏ (PTH-460).
    • Đã thêm trình điều khiển cho bộ tăng tốc mật mã Aspeed HACE (Hash và Crypto Engine).
    • Đã thêm hỗ trợ cho bộ điều khiển Intel Meteor Lake Thunderbolt/USB4 tích hợp.
    • Đã thêm hỗ trợ cho điện thoại thông minh Sony Xperia 1 IV, Samsung Galaxy E5, E7 và Grand Max, Pine64 Pinephone Pro.
    • Đã thêm hỗ trợ cho ARM SoC và bo mạch: AMD DaytonaX, Mediatek MT8186, Rockchips RK3399 và RK3566, TI AM62A, NXP i.MX8DXL, Renesas R-Car H3Ne-1.7G, Qualcomm IPQ8064-v2.0, IPQ8062, IPQ8065, Kontron SL/ BL i.MX8MM OSM-S, MT8195 (Acer Tomato), Radxa ROCK 4C+, NanoPi R4S Enterprise Edition, JetHome JetHub D1p. Trình điều khiển được cập nhật cho SoC Samsung, Mediatek, Renesas, Tegra, Qualcomm, Broadcom và NXP.

Đồ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 hạt nhân 6.1 hoàn toàn miễn phí - Linux-libre 6.1-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 nó là bị giới hạn bởi nhà sản xuất. Bản phát hành mới làm sạch trình điều khiển rtw8852b mới và các tệp DTS cho nhiều SoC Qualcomm và MediaTek khác nhau với bộ xử lý dựa trên kiến ​​trúc AArch64. Đã cập nhật mã dọn dẹp blob trong trình điều khiển và hệ thống con amdgpu, i915, brcmfmac, r8188eu, rtw8852c, Intel ACPI. Sửa lỗi driver tm6000 TV card, cpia2 v4l, sp8870, av7110 lỗi thời.

Nguồn: opennet.ru

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