Sau hai tháng phát triển, Linus Torvalds đã phát hành nhân hệ điều hành. Linux 6.11. Trong số những thay đổi đáng chú ý nhất: hỗ trợ các thao tác ghi nguyên tử ở cấp khối, hỗ trợ các thao tác bind() và listen() trong io_uring, một cơ chế mới để chặn các trình xử lý ngắt phần mềm, khả năng ghi vào các tệp thực thi được sao chép bộ nhớ, hỗ trợ viết trình điều khiển thiết bị khối bằng ngôn ngữ Rust, tối ưu hóa lệnh gọi getrandom(), một triển khai mới của AES-GCM.
Phiên bản mới bao gồm 15130 bản sửa lỗi từ 2078 nhà phát triển, kích thước bản vá là 85 MB (các thay đổi ảnh hưởng đến 13282 tệp, 985857 dòng mã đã được thêm vào, 268915 dòng đã bị xóa). Bản phát hành cuối cùng có 14564 bản sửa lỗi từ các nhà phát triển năm 1989, kích thước bản vá là 41 MB (bằng một nửa kích thước của bản vá kernel 6.11). Khoảng 46% tất cả các thay đổi được giới thiệu trong 6.11 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, 10% 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.11:
- Hệ thống con đĩa, I/O và hệ thống tệp
- Hỗ trợ cho các hoạt động ghi nguyên tử ở cấp khối đã được triển khai, trong đó toàn bộ tập hợp các khối được chỉ định hoặc không có khối nào được ghi vào ổ đĩa, điều này cho phép bạn bảo vệ khỏi các tình huống trong đó, sau lỗi phần cứng, chỉ một phần trong số các khối được ghi, trong khi thông tin cũ vẫn còn ở phần còn lại. Để bật chế độ ghi nguyên tử, cờ RWF_ATOMIC đã được thêm vào lệnh gọi hệ thống pwritev(). Thông tin về hỗ trợ ghi nguyên tử (atomic_write_unit_min, Atomic_write_unit_max và Atomic_write_segments_max) liên quan đến các tệp riêng lẻ có thể được lấy bằng hàm statx().
- Cung cấp hỗ trợ cho việc ghi vào các tập tin thực thi được liên kết với các tiến trình đang chạy. Trước đây, cũng như trong các hệ thống tương tự Unix khác, kernel sẽ hiển thị lỗi khi cố gắng ghi vào tệp thực thi của một tiến trình đang chạy. Hạn chế này đã được loại bỏ vì nó không có ý nghĩa thực tế.
- Khả năng phát triển trình điều khiển thiết bị khối bằng ngôn ngữ Rust đã được triển khai. Ví dụ: trình điều khiển rnull đã được thêm vào kernel, tương tự như trình điều khiển null_blk, được viết bằng ngôn ngữ Rust.
- Trong hệ thống tệp Btrfs, tùy chọn gắn kết “rescue=” triển khai hỗ trợ cho các chế độ “ignoremetacsums” và “ignoresuperflags” mới, có thể được sử dụng để di chuyển một số kiểm tra sang không gian người dùng khi khôi phục FS sau khi xảy ra lỗi. Việc thực hiện hoạt động của các nhóm khối trả về động đã được làm lại để loại bỏ tình trạng thiếu dung lượng trống khi hệ thống tệp chưa đầy.
- Hệ thống tệp ntfs3 hỗ trợ các thuộc tính “nén” và “không thay đổi”, xác định các tệp nén và không thể thay đổi.
- Trong hệ thống tệp F2FS và Ext4, việc xử lý tên tệp không phân biệt chữ hoa chữ thường (casefold) được đơn giản hóa bằng cách lưu trữ tên ở dạng chuỗi qstr mà không cần chuyển đổi chữ hoa chữ thường không cần thiết.
- Trong hệ thống tệp Ext4, việc triển khai hàm jbd2_transaction_commit được tối ưu hóa để cải thiện hiệu suất trên các ổ đĩa rất nhanh (trong các thử nghiệm, số thao tác được xử lý mỗi giây đã tăng lên tới 20% đã được ghi nhận).
- Lệnh gọi hệ thống statx() cho phép truyền con trỏ NULL thay vì một chuỗi trống có đường dẫn tệp nếu cờ AT_EMPTY_PATH được đặt.
- Cuộc gọi hệ thống open_by_handle_at() giúp kiểm tra quyền truy cập tệp dễ dàng trong trường hợp thiếu quyền CAP_DAC_READ_SEARCH để tìm kiếm không gian tên ban đầu. Trước đây, nhu cầu về quyền CAP_DAC_READ_SEARCH trên không gian tên ban đầu đã ngăn cản việc sử dụng lệnh gọi hệ thống open_by_handle_at() trong các vùng chứa.
- Khả năng của lệnh gọi hệ thống listmount() và statmount() đã được mở rộng. Đã thêm cờ LISTMOUNT_REVERSE vào listmount() để hiển thị nội dung của bảng điểm gắn kết theo thứ tự ngược lại (các mục mới nhất ở trên cùng). statmount() triển khai đầu ra của các tùy chọn được đặt khi gắn hệ thống tệp. Cả hai cuộc gọi hệ thống đều được phép hoạt động khi không có quyền truy cập vào không gian tên ban đầu (khi chỉ có quyền truy cập vào không gian tên cục bộ hoặc bên ngoài).
- Bcachefs FS triển khai hỗ trợ khôi phục tự động trong suốt dữ liệu có vấn đề bằng cách sử dụng mã khôi phục lỗi - nếu xảy ra lỗi I/O trong khi đọc hoặc tính toán tổng kiểm tra không khớp, khối dữ liệu có vấn đề sẽ tự động được ghi lại nếu có dư thừa để khôi phục.
- Dịch vụ bộ nhớ và hệ thống
- Thành phần này bao gồm các bản vá với việc triển khai cơ chế mới để chặn các trình xử lý ngắt phần mềm (BH, nửa dưới), đảm bảo chặn các cấu trúc dữ liệu đã sử dụng, nhưng không gây ra việc chặn thực thi song song các mã không liên quan. Cần lưu ý rằng sự thay đổi này không chỉ giúp giảm độ trễ cho các lõi hoạt động ở chế độ thời gian thực mà còn tăng hiệu suất của các lõi thông thường (ví dụ: đối với một số loại khối lượng công việc, hiệu suất của hệ thống con mạng đã tăng lên bằng 14.5%).
- Hệ thống con I/O không đồng bộ io_uring đã bổ sung hỗ trợ cho các hoạt động triển khai các hàm bind() và listen() được sử dụng để tạo các ổ cắm mạng chấp nhận kết nối.
- Đã thêm một tập hợp các thao tác ioctl cho NSFS pseudo-FS (NameSpace FS), được sử dụng để hoạt động với các không gian tên. Các ioctls mới cho phép chuyển đổi các mã định danh nhóm luồng và quy trình giữa các không gian tên định danh quy trình khác nhau (không gian tên PID). Các ioctls tương tự, cho phép xác định bộ mô tả tệp của các tiến trình trong các không gian tên riêng biệt dựa trên mã định danh pidfd, cũng đã được thêm vào giả FS pidfd.
- Đối với các chương trình BPF, tính năng hỗ trợ đã được thêm vào cho một trình vòng lặp mới để làm việc với mặt nạ bit, ví dụ: có thể được sử dụng để lặp qua các bit riêng lẻ trong vùng bộ nhớ, chẳng hạn như cpumask. Đã thêm cơ chế gửi thông báo tới các quy trình trong không gian người dùng rằng đối tượng struct_ops đã bị tách/hủy đăng ký. Phạm vi các kiểu có thể được sử dụng trong mảng đã được mở rộng (ví dụ: bạn có thể khai báo các mảng có các phần tử có kiểu kptr, bpf_rb_root và bpf_list_head). Một cơ chế Split BTF (Định dạng loại BPF) đáng tin cậy hơn đã được đề xuất, được sử dụng để kiểm tra các loại trong mã giả BPF.
- Một hệ thống con đã được thêm vào cho phép bạn sắp xếp nguồn điện cho các thiết bị theo một thứ tự nhất định, trong trường hợp một thiết bị phải được kích hoạt trước thiết bị khác (ví dụ: khi kích hoạt chip không dây trên nền tảng Qualcomm).
- Đã thêm mô-đun “Bộ phân tích logic cẩu thả”, cho phép bạn tạo các bộ phân tích tín hiệu logic đơn giản sử dụng GPIO và chạy trên lõi CPU riêng biệt.
- Đã thêm hỗ trợ cho các hằng số thời gian chạy, có thể được sử dụng thay cho các biến được khởi tạo một lần. Ví dụ: các hằng số thời gian chạy có thể được sử dụng thay cho các biến lưu trữ con trỏ và kích thước cho bộ đệm nha khoa. Các biến này được đặt lúc khởi động và sau đó không bao giờ thay đổi. Ý tưởng là thay thế trực tiếp các giá trị của các biến đó vào các hướng dẫn trong mã, loại bỏ chi phí liên quan đến thao tác con trỏ.
- Tiếp tục di chuyển các thay đổi từ nhánh Rust-for-LinuxLiên quan đến việc sử dụng Rust như một 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 được bật theo mặc định và không bao gồm Rust như một phụ thuộc bắt buộc khi xây dựng hạt nhân). Đã thêm hỗ trợ cho Rust 1.80 (Rust 1.78 vẫn được hỗ trợ như phiên bản tối thiểu). Ngoài các công cụ đã đề cập trước đó để phát triển trình điều khiển thiết bị khối, phiên bản mới bổ sung các lớp trừu tượng để tải firmware, truy cập không gian người dùng (uaccess) và làm việc với cấu trúc "trang".
- Đối với hệ thống x86-64, lệnh gọi hệ thống uretprobe() mới đã được triển khai nhằm tối ưu hóa cơ chế theo dõi uretprobe để theo dõi giá trị trả về của các hàm trong ứng dụng không gian người dùng.
- Đã thêm các tùy chọn dòng lệnh kernel: "reserve_mem" để dự trữ vùng bộ nhớ được đặt tên khi khởi động và "ramoops.mem_name" để sử dụng vùng bộ nhớ được tạo thông qua Reserve_mem trong pstore.
- Trong bộ điều khiển bộ nhớ dựa trên cgroup, tham số “swappiness” đã được thêm vào tệp Memory.reclaim, qua đó xác định cài đặt lấy lại bộ nhớ, cho phép bạn thay đổi sự cân bằng giữa việc chuyển các trang bộ nhớ ẩn danh sang phần trao đổi và giải phóng bộ nhớ các trang bị chiếm bởi bộ đệm tập tin.
- Đã thêm giao diện PROCMAP_QUERY ioctl để tìm kiếm Vùng bộ nhớ ảo trong /proc/PID/maps hiệu quả hơn.
- Đã thêm cờ MAP_DROPPABLE vào lệnh gọi hệ thống mmap() để yêu cầu bộ nhớ sẽ không bao giờ được chuyển vào phân vùng trao đổi và có thể bị xóa nếu không đủ bộ nhớ.
- Đối với kiến trúc ARM64, hỗ trợ cắm nóng (chuyển sang chế độ trực tuyến/ngoại tuyến) của CPU vật lý và ảo trên các hệ thống có ACPI đã được triển khai.
- Đối với kiến trúc RISC-V, hỗ trợ cắm nóng bộ nhớ được cung cấp và hỗ trợ cho plugin GCC STACKLEAK được thêm vào (khởi tạo tất cả các biến được lưu trữ trên ngăn xếp để ngăn rò rỉ thông tin từ kernel thông qua các biến chưa được khởi tạo có thể chứa phần còn lại của dữ liệu được lưu trữ trước đó trên ngăn xếp).
- Cơ chế ánh xạ bộ nhớ EFI giả trong quá trình khởi động đã bị loại bỏ. Cơ chế này không được sử dụng trong thực tế và cản trở sự phát triển trong lĩnh vực thực thi bí mật. máy ảo.
- Hỗ trợ cho nền tảng PowerPC 40x đã bị ngừng.
- Các yêu cầu đối với phiên bản GNU Make đã được tăng lên - cần có ít nhất một bản phát hành GNU Make được xuất bản vào năm 2013 để xây dựng kernel.
- Ảo hóa và bảo mật
- Các bản vá tích hợp giúp tăng tốc đáng kể (lên tới 15 lần) việc lấy số ngẫu nhiên thông qua lệnh gọi hệ thống getrandom(). Việc tối ưu hóa dựa trên việc sử dụng cơ chế vDSO (đối tượng chia sẻ động ảo), cho phép di chuyển trình xử lý cuộc gọi hệ thống từ kernel sang không gian người dùng và tránh chuyển đổi ngữ cảnh. Tải kernel thực hiện lệnh gọi hệ thống trực tiếp vào không gian địa chỉ của tiến trình.
- Đối với các hệ thống x86-64, bao gồm một triển khai mới của thuật toán mã hóa AES-GCM, hỗ trợ sử dụng các hướng dẫn vectơ VAES, VPCLMULQDQ và AVX512/AVX10 để tính toán nhanh hơn. Trong các thử nghiệm được thực hiện, mức tăng hiệu suất sau khi chuyển sang triển khai mới đạt 156%. Việc triển khai hợp ngữ của AES-GCM đã được viết lại hoàn toàn có tính đến tính chính xác, hiệu suất, kích thước và tài liệu toàn diện về mã.
- Khả năng chạy nhân hệ điều hành như một hệ thống khách trong môi trường ảo hóa bằng cách sử dụng phần mở rộng bộ xử lý AMD SEV-SNP (Secure Nested Paging), được thiết kế để đảm bảo hoạt động an toàn với các bảng trang bộ nhớ lồng nhau, đã được triển khai. Mô-đun SVSM có thể được sử dụng để cách ly thêm quyền truy cập vào các tài nguyên từ máy ảo (Linux Mô-đun dịch vụ VM bảo mật). Trong hypervisor KVM Đã thêm hỗ trợ ban đầu cho việc chạy các hệ thống khách được bảo vệ bởi AMD SEV-SNP.
- Một bộ phân bổ bản xô riêng biệt đã được thêm vào, được kích hoạt thông qua tham số CONFIG_SLAB_BUCKETS và cung cấp khả năng bảo vệ chống lại các cuộc tấn công bằng kỹ thuật “phun đống”.
- Lệnh gọi ioctl đã được thêm vào bộ ảo hóa KVM để chủ động phân bổ bộ nhớ cho hệ thống khách trước khi nó thực sự khởi động.
- Hệ thống con mạng
- Đã thêm tham số sysctl net.tcp_rto_min_us, qua đó bạn có thể định cấu hình thời gian chờ truyền lại tối thiểu cho các ổ cắm TCP.
- Khả năng tinh chỉnh cấu hình của trình xử lý ngắt cho giao diện mạng bằng giao diện Net DIM đã được thêm vào tiện ích ethtool.
- Оборудование
- Trình điều khiển AMDGPU bao gồm hỗ trợ ban đầu cho GPU AMD RDNA4 (“GFX12”). Đã thêm hỗ trợ cho các công nghệ DCN 4.0.x, GC 12.0, GMC 12.0, SDMA 7.0, MES12 và MMHUB 4.1.
- Công việc tiếp tục trên trình điều khiển Xe drm (Trình quản lý kết xuất trực tiếp) dành cho GPU dựa trên kiến trúc Intel Xe, được sử dụng trong card màn hình và đồ họa tích hợp dòng Intel Arc, bắt đầu với bộ xử lý Tiger Lake. Cải thiện hỗ trợ cho GPU dựa trên vi kiến trúc Battlemage, Arrow Lake và Lunar Lake.
- Trong hệ thống con DRM (Trình quản lý hiển thị trực tiếp), trình xử lý các tham số EDID (Dữ liệu nhận dạng hiển thị mở rộng) do màn hình đặt đã được viết lại.
- Trình điều khiển i915 bổ sung hỗ trợ cho GPU Battlemage Xe2 và bật chế độ CMRR (Tốc độ làm mới nội dung phù hợp) theo mặc định.
- Hỗ trợ cho nền tảng SM7150 và GPU X185 và a505 đã được thêm vào trình điều khiển DRM msm (GPU Qualcomm Adreno).
- Đã thêm hỗ trợ cho Lincoln Tech Sol LCD185-101CT, Microtips Technology 13-101HIEBCAF0-C, Microtips Technology MF-103HIEB0GA0, BOE nv110wum-l60, IVO t109nw41, WL-355608-A8, PrimeView PM070WL4, Lincoln Technologies LCD197, tấm màn hình Ortustech COM35H3P70 104ULC ,AUO G01STN101, K&d kd3ne40-XNUMXti.
- Hệ thống con âm thanh bổ sung hỗ trợ cho Intel Panther Lake, Asahi Kasei AK4619, Cirrus Logic CS530x, Everest Semiconductors ES8311, NXP i.MX95, LPC32xx, Qualcomm LPASS v2.5, WCD937x, Realtek RT1318, RT1320 và các chip và codec PCM5242 của Texas Instruments.
- Vòng thay đổi cuối cùng đã được thực hiện để cung cấp hỗ trợ cho ARM SoC Snapdragon X Elite, sử dụng CPU Oryon 12 nhân của Qualcomm và GPU Qualcomm Adreno. Con chip này hướng tới mục đích sử dụng trong máy tính xách tay và PC, đồng thời vượt trội so với chip Apple M3 và Intel Core Ultra 155H trong nhiều bài kiểm tra hiệu năng. Những thay đổi được thêm vào kernel 6.11 có liên quan đến việc hỗ trợ GPU Adreno X1-85 và quản lý năng lượng. Trong số các thiết bị dựa trên Snapdragon X Elite SoC, hỗ trợ cho máy tính xách tay ASUS Vivobook S15 và Lenovo Yoga Slim7x đã được công bố.
Đồng thời, Tổ chức Phần mềm Tự do Mỹ Latinh đã tạo ra một phiên bản nhân hệ điều hành 6.11 hoàn toàn miễn phí - Linux-libre 6.10-gnu, đã được làm sạch các thành phần firmware và trình điều khiển chứa các thành phần không miễn phí hoặc các phần mã có phạm vi giới hạn bởi nhà sản xuất. Phiên bản 6.11 bao gồm mã làm sạch blob được cập nhật trong các trình điều khiển mdgpu, adreno, vgxy61, atomisp, btnxpuart, prueth và tas2781. Đã làm sạch các trình điều khiển amdgpu isp, tn40, rtl8192du, cs40l50, rt1320 và pcie-rcar-gen4 mới. Tên blob trong các tệp dts (devicetree) cho kiến trúc Aarch64 đã được làm sạch. Một phiên bản im lặng của các nguyên thủy tải firmware (nowait-nowarn) đã được thêm vào. Mã để phát hiện các nguyên thủy tải firmware trong mã Rust đã được thêm vào.
Nguồn: opennet.ru
