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

Sau hai tháng phát triển, Linus Torvalds giới thiệu phát hành hạt nhân Linux 5.9. Trong số những thay đổi đáng chú ý nhất: hạn chế nhập ký hiệu từ mô-đun độc quyền sang mô-đun GPL, tăng tốc hoạt động chuyển đổi ngữ cảnh bằng lệnh bộ xử lý FSGSBASE, hỗ trợ nén hình ảnh hạt nhân bằng Zstd, xử lý lại mức độ ưu tiên của các luồng trong hạt nhân, hỗ trợ PRP (Giao thức dự phòng song song), lập lịch nhận biết băng thông trong bộ lập lịch thời hạn, đóng gói ưu tiên các trang bộ nhớ, cờ khả năng CAP_CHECKPOINT_RESTOR, lệnh gọi hệ thống close_range(), cải thiện hiệu suất dm-crypt, xóa mã cho khách Xen PV 32 bit, bộ nhớ phiến mới cơ chế quản lý, tùy chọn “cứu” trong Btrfs, hỗ trợ mã hóa nội tuyến trong ext4 và F2FS.

Phiên bản mới bao gồm 16074 bản sửa lỗi từ các nhà phát triển năm 2011,
kích thước bản vá - 62 MB (các thay đổi ảnh hưởng đến 14548 tệp, 782155 dòng mã đã được thêm vào, 314792 dòng đã bị xóa). Khoảng 45% tất cả được trình bày trong 5.9
những thay đổi liên quan đến trình điều khiển thiết bị, khoảng 15% thay đổi là
thái độ đối với việc cập nhật mã cụ thể cho kiến ​​trúc phần cứng, 13%
liên quan đến ngăn xếp mạng, 3% cho hệ thống tệp và 3% cho nội bộ
các hệ thống con hạt nhân.

Chính đổi mới:

  • Dịch vụ bộ nhớ và hệ thống
    • Siết chặt bảo vệ chống lại việc sử dụng các lớp GPL để liên kết các trình điều khiển độc quyền với các thành phần hạt nhân chỉ được xuất cho các mô-đun theo giấy phép GPL. Cờ TAINT_PROPRIETARY_MODULE hiện được kế thừa trong tất cả các mô-đun nhập ký hiệu từ các mô-đun có cờ này. Nếu mô-đun GPL cố gắng nhập các ký hiệu từ một mô-đun không phải GPL thì mô-đun GPL đó sẽ kế thừa nhãn TAINT_PROPRIETARY_MODULE và sẽ không thể truy cập các thành phần hạt nhân chỉ có sẵn cho các mô-đun được cấp phép GPL, ngay cả khi mô-đun đó trước đó đã nhập các ký hiệu từ danh mục "gplonly". Khóa ngược (chỉ xuất EXPORT_SYMBOL_GPL trong các mô-đun đã nhập EXPORT_SYMBOL_GPL), có thể phá vỡ công việc của trình điều khiển độc quyền, không được triển khai (chỉ có cờ mô-đun độc quyền được kế thừa chứ không phải các ràng buộc GPL).
    • Thêm hỗ trợ động cơ kcompactd cho trang bộ nhớ đóng gói sẵn ở chế độ nền để tăng số lượng trang bộ nhớ lớn có sẵn cho kernel. Theo ước tính sơ bộ, việc đóng gói nền, với chi phí tối thiểu, có thể giảm độ trễ khi phân bổ các trang bộ nhớ lớn (trang lớn) tới 70-80 lần so với cơ chế đóng gói đã sử dụng trước đó, được khởi chạy khi có nhu cầu (theo yêu cầu). ). Để đặt ranh giới của phân mảnh bên ngoài mà kcompactd sẽ cung cấp, sysctl vm.compaction_proactiveness đã được thêm vào.
    • Thêm hỗ trợ nén ảnh kernel bằng thuật toán Tiêu chuẩn (zstd).
    • Hỗ trợ hướng dẫn xử lý đã được triển khai cho hệ thống x86 FSGSBASE, cho phép bạn đọc và thay đổi nội dung của các thanh ghi FS/GS từ không gian người dùng. Trong kernel, FSGSBASE được sử dụng để tăng tốc các hoạt động chuyển đổi ngữ cảnh bằng cách loại bỏ các hoạt động ghi MSR không cần thiết cho GSBASE và trong không gian người dùng, nó tránh các lệnh gọi hệ thống không cần thiết để thay đổi FS/GS.
    • Thêm Tham số “allow_writes” cho phép bạn cấm các thay đổi đối với các thanh ghi MSR của bộ xử lý khỏi không gian người dùng và giới hạn quyền truy cập vào nội dung của các thanh ghi này để đọc các hoạt động, vì việc thay đổi MSR có thể dẫn đến sự cố. Theo mặc định, tính năng ghi vẫn chưa bị tắt và các thay đổi đối với MSR được phản ánh trong nhật ký, nhưng trong tương lai, người ta dự định chuyển quyền truy cập mặc định sang chế độ chỉ đọc.
    • Đến giao diện I/O không đồng bộ io_uring Đã thêm hỗ trợ đầy đủ cho các hoạt động đọc vào bộ đệm không đồng bộ không yêu cầu các luồng nhân. Hỗ trợ ghi âm được mong đợi trong một bản phát hành trong tương lai.
    • Trong thời hạn lập lịch I/O thực hiện lập kế hoạch dựa trên năng lực, cho phép đưa ra quyết định chính xác trên các hệ thống bất đối xứng như hệ thống dựa trên ARM DynamIQ và big.LITTLE, kết hợp các lõi CPU mạnh mẽ và tiết kiệm năng lượng kém hiệu quả hơn trong một chip. Đặc biệt, chế độ mới cho phép bạn tránh lập kế hoạch không khớp khi lõi CPU chậm không có đủ tài nguyên để hoàn thành nhiệm vụ đúng thời hạn.
    • Mô hình tiêu thụ năng lượng trong kernel (Khung mô hình năng lượng) hiện đã được mô tả không chỉ hành vi tiêu thụ điện năng của CPU mà còn bao gồm cả các thiết bị ngoại vi.
    • Lệnh gọi hệ thống close_range() đã được triển khai để cho phép một quy trình đóng toàn bộ phạm vi mô tả tệp đang mở cùng một lúc.
    • Từ việc triển khai bảng điều khiển văn bản và trình điều khiển fbcon đã xóa mã, cung cấp khả năng cuộn văn bản trở lại theo chương trình (CONFIG_VGACON_SOFT_SCROLLBACK) nhiều hơn dung lượng bộ nhớ video ở chế độ văn bản VGA.
    • Làm lại thuật toán gán mức độ ưu tiên cho các luồng trong kernel. Tùy chọn mới cung cấp tính nhất quán tốt hơn trên tất cả các hệ thống con kernel khi gán mức độ ưu tiên cho các tác vụ thời gian thực.
    • Đã thêm sysctl lịch_uclamp_util_min_rt_default để kiểm soát cài đặt tăng cường CPU cho các tác vụ trong thời gian thực (ví dụ: bạn có thể thay đổi nhanh hành vi của các tác vụ trong thời gian thực để tiết kiệm năng lượng sau khi chuyển sang sử dụng nguồn pin hoặc trên hệ thống di động).
    • Việc chuẩn bị đã được thực hiện để triển khai hỗ trợ cho công nghệ Trang lớn trong suốt trong bộ đệm trang.
    • Công cụ fanotify triển khai các cờ mới FAN_REPORT_NAME và FAN_REPORT_DIR_FID để báo cáo tên gốc và thông tin FID duy nhất khi xảy ra các sự kiện tạo, xóa hoặc di chuyển đối với các mục thư mục và đối tượng không phải thư mục.
    • Dành cho nhóm thực hiện một bộ điều khiển bộ nhớ phiến mới, đáng chú ý là di chuyển tính toán phiến từ cấp trang bộ nhớ sang cấp đối tượng kernel, giúp có thể chia sẻ các trang phiến trong các nhóm khác nhau, thay vì phân bổ bộ nhớ đệm phiến riêng biệt cho mỗi nhóm. Cách tiếp cận được đề xuất giúp tăng hiệu quả sử dụng phiến, giảm kích thước bộ nhớ được sử dụng cho phiến từ 30-45%, giảm đáng kể mức tiêu thụ bộ nhớ tổng thể của hạt nhân và giảm phân mảnh bộ nhớ.
    • Trong hệ thống con âm thanh ALSA и ngăn xếp USB, theo quy định mới được thông qua khuyến nghị về việc sử dụng thuật ngữ tổng hợp trong nhân Linux; các thuật ngữ không chính xác đã được loại bỏ. Mã đã bị xóa các từ "nô lệ", "chính chủ", "danh sách đen" và "danh sách trắng".
  • Ảo hóa và bảo mật
    • Khi xây dựng kernel bằng trình biên dịch Clang xuất hiện khả năng định cấu hình khởi tạo tự động (CONFIG_INIT_STACK_ALL_ZERO) về 0 của tất cả các biến được lưu trữ trên ngăn xếp (khi xây dựng, hãy chỉ định “-ftrivial-auto-var-init=zero”).
    • Trong hệ thống con seccomp, khi sử dụng chế độ điều khiển quy trình trong không gian người dùng, thêm cơ hội thay thế các bộ mô tả tệp vào quy trình được giám sát để mô phỏng đầy đủ các lệnh gọi hệ thống dẫn đến việc tạo các bộ mô tả tệp. Chức năng này đang được yêu cầu trong các hệ thống vùng chứa biệt lập và triển khai hộp cát cho Chrome.
    • Đối với kiến ​​trúc xtensa và csky, hỗ trợ đã được thêm vào để hạn chế các lệnh gọi hệ thống bằng hệ thống con seccomp. Đối với xtensa, hỗ trợ cơ chế kiểm toán được triển khai bổ sung.
    • Thêm cờ khả năng mới CAP_CHECKPOINT_RESTORE, cho phép bạn cung cấp quyền truy cập vào các khả năng liên quan đến việc đóng băng và khôi phục trạng thái của các quy trình mà không cần chuyển các đặc quyền bổ sung.
    • GCC 11 cung cấp tất cả các tính năng bạn cần
      công cụ gỡ lỗi KCSAN (Kernel Concurrency Sanitizer), được thiết kế để tự động phát hiện các điều kiện chạy đua trong kernel. Do đó, KCSAN hiện có thể được sử dụng với các hạt nhân được xây dựng trong GCC.

    • Dành cho AMD Zen và các mẫu CPU mới hơn thêm hỗ trợ công nghệ P2PDMA, cho phép bạn sử dụng DMA để truyền dữ liệu trực tiếp giữa bộ nhớ của hai thiết bị được kết nối với bus PCI.
    • Một chế độ đã được thêm vào dm-crypt cho phép bạn giảm độ trễ bằng cách thực hiện xử lý dữ liệu mật mã mà không cần sử dụng hàng đợi công việc. Chế độ này cũng cần thiết để vận hành chính xác với khoanh vùng block devices (các thiết bị có vùng phải ghi tuần tự, cập nhật toàn bộ nhóm khối). Công việc đã được thực hiện để tăng thông lượng và giảm độ trễ trong dm-crypt.
    • Đã xóa mã để hỗ trợ khách 32 bit chạy ở chế độ ảo hóa song song chạy trình ảo hóa Xen. Người dùng các hệ thống như vậy nên chuyển sang sử dụng hạt nhân 64 bit trong môi trường khách hoặc sử dụng các chế độ ảo hóa đầy đủ (HVM) hoặc kết hợp (PVH) thay vì ảo hóa song song (PV) để chạy các môi trường.
  • Hệ thống con đĩa, I/O và hệ thống tệp
    • Trên hệ thống tập tin Btrfs thực hiện tùy chọn gắn kết "cứu hộ" giúp thống nhất quyền truy cập vào tất cả các tùy chọn khôi phục khác. Hỗ trợ cho tùy chọn "alloc_start" và "subvolrootid" đã bị xóa và tùy chọn "inode_cache" không còn được dùng nữa. Tối ưu hóa hiệu suất đã được thực hiện, đặc biệt là tăng tốc đáng kể việc thực hiện các hoạt động fsync(). Thêm khả năng sử dụng các loại tổng kiểm tra khác ngoài CRC32c.
    • Thêm khả năng sử dụng mã hóa nội tuyến (Mã hóa nội tuyến) trong các hệ thống tệp ext4 và F2FS, để cho phép cung cấp tùy chọn gắn kết “inlinecrypt”. Chế độ mã hóa nội tuyến cho phép bạn sử dụng các cơ chế mã hóa được tích hợp trong bộ điều khiển ổ đĩa, giúp mã hóa và giải mã đầu vào/đầu ra một cách minh bạch.
    • Trong XFS bảo đảm thiết lập lại inode (tuôn ra) ở chế độ hoàn toàn không đồng bộ, không chặn các tiến trình khi thực hiện thao tác dọn dẹp bộ nhớ. Đã giải quyết vấn đề hạn ngạch tồn tại lâu dài khiến cảnh báo giới hạn mềm và giới hạn inode bị theo dõi không chính xác. Triển khai thống nhất hỗ trợ DAX cho ext4 và xfs.
    • Trong Ext4 thực hiện tải trước bitmap phân bổ khối. Kết hợp với việc hạn chế quét các nhóm chưa được khởi tạo, việc tối ưu hóa đã giảm thời gian cần thiết để gắn các phân vùng rất lớn.
    • Trong F2FS thêm ioctl F2FS_IOC_SEC_TRIM_FILE, cho phép bạn sử dụng lệnh TRIM/discard để đặt lại về mặt vật lý dữ liệu được chỉ định trong một tệp, chẳng hạn như để xóa các khóa truy cập mà không để lại dữ liệu còn sót lại trên ổ đĩa.
      Trong F2FS cũng thêm chế độ thu gom rác mới GC_URGENT_LOW, hoạt động mạnh mẽ hơn bằng cách loại bỏ một số kiểm tra về trạng thái không hoạt động trước khi khởi động trình thu gom rác.

    • Trong bcache, Buck_size cho các phạm vi đã được tăng từ 16 lên 32 bit để chuẩn bị kích hoạt bộ nhớ đệm của thiết bị được khoanh vùng.
    • Khả năng sử dụng mã hóa nội tuyến dựa trên mã hóa phần cứng tích hợp do bộ điều khiển UFS cung cấp đã được thêm vào hệ thống con SCSI (Lưu trữ Flash Toàn cầu).
    • Một tham số dòng lệnh kernel mới “debugfs” đã được thêm vào, cho phép bạn kiểm soát tính khả dụng của pseudo-FS cùng tên.
    • Máy khách NFSv4.2 cung cấp hỗ trợ cho các thuộc tính tệp mở rộng (xattr).
    • Trong bụi dm thêm giao diện hiển thị cùng lúc danh sách tất cả các khối xấu được xác định trên đĩa (“dmsetup message dust1 0 listbadblocks”).
    • Đối với md/raid5, tham số /sys/block/md1/md/stripe_size đã được thêm vào để định cấu hình kích thước khối STRIPE.
    • Dành cho thiết bị lưu trữ NVMe thêm hỗ trợ các lệnh phân vùng ổ đĩa (ZNS, NVM Express Zoned Namespace), cho phép bạn chia không gian lưu trữ thành các vùng tạo thành các nhóm khối để kiểm soát hoàn toàn hơn việc sắp xếp dữ liệu trên ổ đĩa.
  • Hệ thống con mạng
    • Trong Netfilter thêm khả năng từ chối các gói ở giai đoạn trước khi kiểm tra định tuyến (biểu thức REJECT giờ đây không chỉ có thể được sử dụng trong chuỗi INPUT, FORWARD và OUTPUT mà còn ở giai đoạn PREROUTING cho icmp và tcp).
    • Trong nftables thêm khả năng kiểm tra các sự kiện liên quan đến thay đổi cấu hình.
    • Trong nftables trong API netlink thêm hỗ trợ cho các chuỗi ẩn danh, tên của chuỗi này được kernel gán động. Khi bạn xóa quy tắc được liên kết với chuỗi ẩn danh, chuỗi đó sẽ tự động bị xóa.
    • BPF bổ sung hỗ trợ cho các trình vòng lặp để duyệt qua, lọc và sửa đổi các phần tử của mảng kết hợp (bản đồ) mà không cần sao chép dữ liệu vào không gian người dùng. Các trình vòng lặp có thể được sử dụng cho các ổ cắm TCP và UDP, cho phép các chương trình BPF lặp lại danh sách các ổ cắm đang mở và trích xuất thông tin chúng cần từ chúng.
    • Đã thêm một loại chương trình BPF mới BPF_PROG_TYPE_SK_LOOKUP, được khởi chạy khi kernel tìm kiếm ổ cắm nghe phù hợp cho kết nối đến. Bằng cách sử dụng chương trình BPF như thế này, bạn có thể tạo các trình xử lý đưa ra quyết định về việc nên liên kết với ổ cắm nào mà không bị ràng buộc bởi lệnh gọi hệ thống bind(). Ví dụ: bạn có thể liên kết một ổ cắm duy nhất với một loạt địa chỉ hoặc cổng. Ngoài ra, hỗ trợ cho cờ SO_KEEPALIVE đã được thêm vào bpf_setsockopt() và khả năng cài đặt trình xử lý BPF_CGROUP_INET_SOCK_RELEASE, được gọi khi ổ cắm được giải phóng, đã được triển khai.
    • Đã triển khai hỗ trợ giao thức PRP (Giao thức dự phòng song song), cho phép chuyển đổi dựa trên Ethernet sang kênh dự phòng, minh bạch cho các ứng dụng, trong trường hợp có bất kỳ thành phần mạng nào bị lỗi.
    • Ngăn xếp mac80211 thêm hỗ trợ đàm phán kênh WPA/WPA2-PSK bốn giai đoạn ở chế độ điểm truy cập.
    • Đã thêm khả năng chuyển đổi bộ lập lịch qdisc (kỷ luật xếp hàng) để sử dụng thuật toán quản lý hàng đợi mạng FQ-PIE (Flow Queue PIE) theo mặc định, nhằm mục đích giảm tác động tiêu cực của việc đệm gói trung gian trên thiết bị mạng biên (bufferbloat) trong các mạng có modem cáp.
    • Các tính năng mới đã được thêm vào MPTCP (MultiPath TCP), phần mở rộng của giao thức TCP để tổ chức hoạt động của kết nối TCP với việc phân phối các gói đồng thời dọc theo một số tuyến đường thông qua các giao diện mạng khác nhau được liên kết với các địa chỉ IP khác nhau. Đã thêm hỗ trợ cho cookie đồng bộ, DATA_FIN, tự động điều chỉnh bộ đệm, chẩn đoán ổ cắm và các cờ REUSEADDR, REUSEPORT và V6ONLY trong setsockopt.
    • Đối với bảng định tuyến ảo VRF (Virtual Routing and Forwarding), cho phép tổ chức hoạt động của nhiều miền định tuyến trên một hệ thống, chế độ “nghiêm ngặt” đã được triển khai. Ở chế độ này, một bảng ảo chỉ có thể được liên kết với một bảng định tuyến không được sử dụng trong các bảng ảo khác.
    • Trình điều khiển không dây là ath11k thêm hỗ trợ tần số 6GHz và quét quang phổ.
  • Оборудование
    • Loại bỏ mã để hỗ trợ kiến ​​trúc UniCore, được phát triển tại Trung tâm vi xử lý của Đại học Bắc Kinh và được đưa vào nhân Linux vào năm 2011. Kiến trúc này không được bảo trì kể từ năm 2014 và không được hỗ trợ trong GCC.
    • Hỗ trợ cho kiến ​​trúc RISC-V đã được triển khai kcov (giao diện debugfs để phân tích phạm vi bao phủ mã hạt nhân), kmemleak (hệ thống phát hiện rò rỉ bộ nhớ), bảo vệ ngăn xếp, dấu nhảy và các thao tác không cần tích tắc (đa nhiệm độc lập với tín hiệu hẹn giờ).
    • Đối với kiến ​​trúc PowerPC, việc hỗ trợ hàng đợi spinlock đã được triển khai, giúp cải thiện đáng kể hiệu suất trong các tình huống xung đột khóa.
    • Đối với kiến ​​trúc ARM và ARM64, cơ chế điều chỉnh tần số bộ xử lý được bật theo mặc định lịch trình (cpufreq Governor), sử dụng trực tiếp thông tin từ bộ lập lịch tác vụ để đưa ra quyết định thay đổi tần số và có thể truy cập ngay vào trình điều khiển cpufreq để thay đổi nhanh tần số, điều chỉnh ngay các thông số vận hành CPU theo tải hiện tại.
    • Trình điều khiển i915 DRM cho card đồ họa Intel bao gồm hỗ trợ cho chip dựa trên vi kiến ​​trúc Hồ tên lửa và thêm hỗ trợ ban đầu cho thẻ rời Intel Xe DG1.
    • Trình điều khiển Amdgpu đã thêm hỗ trợ ban đầu cho GPU AMD Navi 21 (Cá bơn hải quân) và Navi 22 (Sienna Cichlid). Đã thêm hỗ trợ cho các công cụ tăng tốc mã hóa và giải mã video UVD/VCE cho GPU Quần đảo phía Nam (Radeon HD 7000).
      Đã thêm thuộc tính để xoay màn hình 90, 180 hoặc 270 độ.

      Điều thú vị là driver cho GPU AMD trình điều khiển lớn nhất trong kernel - nó có khoảng 2.71 triệu dòng mã, chiếm khoảng 10% tổng kích thước kernel (27.81 triệu dòng). Đồng thời, 1.79 triệu dòng được chiếm bởi các tệp tiêu đề được tạo tự động với dữ liệu cho các thanh ghi GPU và mã C là 366 nghìn dòng (để so sánh, trình điều khiển Intel i915 bao gồm 209 nghìn dòng và Nouveau - 149 nghìn).

    • Trong trình điều khiển Nouveau thêm hỗ trợ kiểm tra tính toàn vẹn từng khung hình bằng cách sử dụng CRC (Kiểm tra dự phòng theo chu kỳ) trong công cụ hiển thị GPU NVIDIA. Việc triển khai dựa trên tài liệu do NVIDIA cung cấp.
    • Đã thêm trình điều khiển cho màn hình LCD: Frida FRD350H54004, KOE TX26D202VM0BWA, CDTech S070PWS19HP-FC21, CDTech S070SWV29HG-DC44, Tianma TM070JVHG33 và Xingbangda XBD599.
    • Hệ thống con âm thanh ALSA hỗ trợ Dòng im lặng của Intel (chế độ cấp nguồn liên tục cho các thiết bị HDMI bên ngoài để loại bỏ độ trễ khi bắt đầu phát lại) và Thiết bị mới để kiểm soát độ sáng của nút kích hoạt và tắt tiếng micrô, đồng thời hỗ trợ thêm cho thiết bị mới, bao gồm cả bộ điều khiển Longson 7A1000.
    • Đã thêm hỗ trợ cho bo mạch, thiết bị và nền tảng ARM: Pine64 PinePhone v1.2, Lenovo IdeaPad Duet 10.1, ASUS Google Nexus 7, Acer Iconia Tab A500, Qualcomm Snapdragon SDM630 (được sử dụng trong Sony Xperia 10, 10 Plus, XA2, XA2 Plus và XA2 Ultra), Jetson Xavier NX, Amlogic WeTek Core2, Aspeed EthanolX, năm bo mạch mới dựa trên NXP i.MX6, MikroTik RouterBoard 3011, Xiaomi Libra, Microsoft Lumia 950, Sony Xperia Z5, MStar, Microchip Sparx5, Intel Keem Bay, Amazon Alpine v3, Renesas RZ/G2H.

Đồng thời, Tổ chức Phần mềm Tự do Mỹ Latinh hình thành
tùy chọn hạt nhân hoàn toàn miễn phí 5.9 - Linux-libre 5.9-gnu, đã xóa các thành phần chương trình cơ sở và trình điều khiển có 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. Bản phát hành mới vô hiệu hóa tính năng tải blob trong trình điều khiển cho WiFi rtw8821c và SoC MediaTek mt8183. Đã cập nhật mã dọn dẹp blob trong Habanalabs, Wilc1000, amdgpu, mt7615, i915 CSR, Mellanox mlxsw (Spectrum3), r8169 (rtl8125b-2) và trình điều khiển màn hình cảm ứng và hệ thống con x86.

Nguồn: opennet.ru

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