- Linus Torvalds đã phát hành kernel 6.11
- Thông điệp của ông: "Một lần nữa tôi đang đi công tác xa, và hiện không ở múi giờ thông thường của mình, nhưng ở Vienna bây giờ vẫn là chiều Chủ nhật, và 6.11 đã ra mắt."
- Những thay đổi chính trong bản phát hành này bao gồm các thao tác
bind() và listen() mới trong io_uring, bản vá khóa bottom-half lồng nhau, khả năng ghi vào tệp thực thi đang bận, hỗ trợ viết trình điều khiển khối bằng Rust, hỗ trợ thao tác ghi nguyên tử trong lớp block, bộ cấp phát slab bucket chuyên dụng, triển khai vDSO của getrandom(), v.v.
Thay đổi theo kiến trúc
- Kiến trúc Arm 64-bit hiện hỗ trợ CPU hotplug trên các hệ thống ACPI. Xem thêm commit tài liệu này
- Kernel x86 hiện có thể chạy với vai trò guest bằng cách sử dụng tính năng mã hóa ảo hóa bảo mật SEV-SNP của AMD, thông qua mô-đun dịch vụ VM bảo mật
- Tính năng "fake EFI memory map" của x86 đã bị loại bỏ. Tính năng này cho phép tạo các mục bản đồ bộ nhớ hư cấu khi khởi động, nhưng không phù hợp với các cấu hình confidential computing
- Triển khai mới của mã hóa AES-GCM cho hệ thống x86-64. Việc cải thiện hiệu năng luôn đáng hoan nghênh, nhưng đóng góp này còn đáng chú ý nhờ tài liệu hóa rất rộng về mã và cách nó hoạt động. Xem thêm commit này
- Đã loại bỏ hỗ trợ cho nền tảng PowerPC 40x
- Đã bổ sung hỗ trợ memory hotplugging cho hệ thống RISC-V
Kernel lõi
- Phân hệ io_uring hiện cung cấp các thao tác triển khai bind() và listen()
- Tập thao tác ioctl() mới của hệ thống tệp nsfs (namespace) thực hiện chuyển đổi ID tiến trình và nhóm luồng giữa các PID namespace
- Hệ thống tệp pidfd hỗ trợ lệnh gọi ioctl() mới để lấy file descriptor namespace của tiến trình được biểu diễn bằng pidfd
- Bản vá khóa bottom-half lồng nhau đã được hợp nhất. Mục tiêu chính là cải thiện độ trễ của kernel thời gian thực, nhưng cũng sẽ mang lại lợi ích cho những người dùng khác
- Có một system call mới là uretprobe(), hiện chỉ được triển khai trên hệ thống x86-64. Vai trò của nó là tối ưu hóa việc xử lý uretprobe (điểm theo dõi trả về hàm) được chèn động vào các tiến trình không gian người dùng
- Giới hạn chỉ một người dùng đối với function-graph tracer đã được gỡ bỏ
- Có thể đặt trước một vùng nhớ được đặt tên bằng tham số dòng lệnh
reserve_mem= mới. Mục đích là để dùng cùng phân hệ pstore với tham số ramoops.mem_name= mới
Hệ thống tệp và block I/O
- System call statx() hiện cho phép đối số đường dẫn là con trỏ null khi cờ AT_EMPTY_PATH được thiết lập
- Với system call open_by_handle_at(), trong 6.11 việc kiểm tra quyền đối với lệnh gọi này đã được nới lỏng phần nào trong các tình huống kernel có thể xác minh rằng bên gọi có quyền truy cập phù hợp vào tệp
- Kernel Linux theo truyền thống luôn chặn việc ghi vào các tệp thực thi đang được một tiến trình nào đó trên hệ thống sử dụng. Mục đích là để tránh những bất ngờ khó chịu với chương trình đang chạy. Các nhà phát triển kernel đã dần loại bỏ hạn chế này trong nhiều năm. Kể từ 6.11, kernel không còn ngăn việc ghi vào các tệp thực thi đang được sử dụng nữa
- Hệ thống tệp Btrfs hiện nhận diện một số giá trị mới cho tùy chọn mount rescue= (ignoremetacsums và ignoresuperflags). Chúng nhằm hỗ trợ khôi phục các hệ thống tệp đã được chuyển đổi một phần bởi công cụ không gian người dùng, đặc biệt là các hệ thống tệp đang thực hiện chuyển đổi checksum
- Cách Btrfs thực hiện thu hồi block group đã được cải thiện. Mục đích là để tránh các tình huống không thể sử dụng dung lượng trống dù hệ thống tệp chưa đầy. Xem giải thích về cơ chế ngưỡng thu hồi động mới trong commit này
Hỗ trợ phần cứng
- Bộ điều khiển xung nhịp camera Qualcomm SM8650
- Giám sát phần cứng như cảm biến nhiệt độ tuân thủ SPD5118, bộ điều khiển kỹ thuật số đa pha hai vòng MP2993 của Monolithic Power Systems, v.v.
- Các hạng mục khác như cảm biến bộ điều khiển nhúng ChromeOS, bộ điều khiển sạc dựa trên ChromeOS EC, v.v.
- Mạng như bộ điều hợp mạng không dây USB Realtek RTL8192DU, giao diện Renesas Ethernet-TSN, giao diện Vining 800 CAN, v.v.
- Các thành phần liên quan đến clock như bộ điều khiển PLL clock Amlogic C3, bộ điều khiển clock hiển thị/camera/video Qualcomm SM7150, v.v.
- GPIO và điều khiển chân như khối điều khiển chân NXP IMX91, bộ điều khiển chân và GPIO Nuvoton MA35, v.v.
- Đồ họa như panel Lincoln Technologies lcd197, panel dựa trên Ilitek ILI9806E, v.v.
- Đã bổ sung hỗ trợ phần cứng mới trong nhiều lĩnh vực như industrial I/O, thiết bị nhập, media, miscellany, PHY, âm thanh, USB, v.v.
Khác
- Một phân hệ power sequencing mới đã xuất hiện để đưa các thiết bị của hệ thống lên hoạt động theo đúng thứ tự
- Mô-đun "sloppy logic analyzer" có thể biến một tập hợp đường GPIO thành bộ phân tích logic giá rẻ
- Công cụ perf đã được bổ sung nhiều tính năng mới
- Một tập hợp trừu tượng Rust nhỏ cho việc nạp firmware đã được hợp nhất. Vẫn còn nhiều phần cần thiết để có thể viết các driver quan trọng bằng Rust, nhưng danh sách đó đang dần ngắn lại
Mạng
- Có thể điều chỉnh thời gian chờ truyền lại tối thiểu của socket TCP bằng núm sysctl
net.tcp_rto_min_us mới
- Tiện ích ethtool nay có thể tinh chỉnh cấu hình ngắt cho các giao diện sử dụng Net DIM
Liên quan đến bảo mật
Ảo hóa và container
- Đã bổ sung hỗ trợ ban đầu trong KVM cho cơ chế ảo hóa mã hóa bảo mật SEV-SNP của AMD
- Có một lệnh gọi ioctl() mới của KVM để điền trước bộ nhớ guest trước khi guest được chạy
Thay đổi nội bộ của kernel
- Thay đổi đầu tiên được hợp nhất vào 6.11 là cơ chế "runtime constants" mới do Linus Torvalds bổ sung
- Một phần tài liệu hóa cho phân hệ iomap cuối cùng cũng đã được thực hiện
- Phiên bản tối thiểu của GNU Make cần để build kernel đã được nâng lên 4.0
- Trong 6.11, 118 exported symbol đã bị loại bỏ và 464 symbol được thêm vào, tức tăng ròng 346. Ngoài ra còn có 6 kfunc mới
Ý kiến của GN⁺
- Bản phát hành kernel 6.11 gây ấn tượng với nhiều cải tiến theo từng kiến trúc và việc mở rộng hỗ trợ phần cứng. Đặc biệt, CPU hotplug trên ARM 64-bit và hỗ trợ AMD SEV-SNP trên x86 có ý nghĩa lớn về mặt bảo mật và ảo hóa
- Khi các tính năng mới được bổ sung vào io_uring và BPF, xu hướng tăng cường hỗ trợ ở cấp kernel cho I/O hiệu năng cao và lập trình eBPF ngày càng rõ hơn. Điều này sẽ rất hữu ích cho tối ưu hiệu năng hệ thống, giám sát và mạng
- Sự xuất hiện của các phân hệ và mô-đun mới như power sequencing hay sloppy logic analyzer được kỳ vọng sẽ nâng cao khả năng ứng dụng của kernel Linux trong môi trường nhúng hoặc IoT
- Các tối ưu mã nội bộ kernel như runtime constants hay cải thiện tài liệu hóa cũng đang được thực hiện đều đặn để nâng cao sự thuận tiện cho phát triển. Tuy vậy, vẫn còn nhiều phần thiếu tài liệu, nên có vẻ vẫn cần thêm sự hợp tác từ cộng đồng
- Ở nửa sau của merge window 6.11, trọng tâm là cải thiện hiệu năng cho nhiều kiến trúc và hỗ trợ phần cứng mới. Đặc biệt, tối ưu hóa mã hóa AES-GCM trên x86-64 và hỗ trợ memory hotplugging trên RISC-V là những thay đổi đáng chú ý
- Cũng đã có tiến bộ ở khía cạnh bảo mật ảo hóa, chẳng hạn việc bổ sung hỗ trợ ban đầu cho AMD SEV-SNP trong KVM. Điều này cho thấy vai trò của kernel Linux sẽ còn được mở rộng hơn nữa trong môi trường cloud và edge computing
- Việc đưa vào các lớp trừu tượng Rust cho nạp firmware và phòng chống heap spraying cho thấy tiềm năng của Rust như một ngôn ngữ lập trình hệ thống. Dự kiến tỷ trọng mã Rust trong kernel sẽ dần tăng lên trong thời gian tới
- Việc trì hoãn hợp nhất lớp scheduler có thể mở rộng là điều đáng tiếc, nhưng có vẻ là lựa chọn không thể tránh khỏi để bảo đảm xem xét đầy đủ và ổn định hóa. Vì scheduler ảnh hưởng trực tiếp đến hiệu năng hệ thống nên cần tiếp cận thận trọng
3 bình luận
"Sau khi cập nhật lên 6.10.10 vẫn thỉnh thoảng không thể thức dậy từ chế độ ngủ"
Hóa ra không chỉ mình tôi bị vậy...
Chắc anh Torvalds phải sống thêm tầm 200 năm nữa mất.
Ý kiến trên Hacker News