Nhân Linux 5.14

Nhân Linux 5.14

Sau hai tháng phát triển, Linus Torvalds giới thiệu phát hành hạt nhân Linux 5.14. Trong số những thay đổi đáng chú ý nhất: lệnh gọi hệ thống quotectl_fd() và memfd_secret() mới, loại bỏ trình điều khiển ide và raw, bộ điều khiển ưu tiên I/O mới cho cgroup, chế độ lập lịch tác vụ SCHED_CORE, cơ sở hạ tầng để tạo trình tải chương trình BPF đã được xác minh.

Phiên bản mới bao gồm 15883 bản sửa lỗi từ 2002 nhà phát triển, kích thước bản vá là 69 MB (các thay đổi ảnh hưởng đến 12580 tệp, 861501 dòng mã đã được thêm vào, 321654 dòng đã bị xóa). Khoảng 47% tất cả các thay đổi được giới thiệu trong 5.14 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, 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.

Chính đổi mới:

  • hệ thống con đĩa, hệ thống đầu vào/đầu ra và tập tin:
    • cho cgroup thực hiện Bộ điều khiển ưu tiên I/O mới - rq-qos, có thể kiểm soát mức độ ưu tiên xử lý các yêu cầu để chặn các thiết bị do các thành viên của mỗi nhóm tạo ra. Hỗ trợ bộ điều khiển ưu tiên mới đã được thêm vào bộ lập lịch I/O thời hạn mq;
    • trên hệ thống tập tin ext4 thực hiện lệnh ioctl mới EXT4_IOC_CHECKPOINT, buộc tất cả các giao dịch đang chờ xử lý từ nhật ký và bộ đệm liên quan vào đĩa, đồng thời ghi đè lên khu vực được sử dụng bởi bộ lưu trữ nhật ký. Thay đổi này được chuẩn bị như một phần của sáng kiến ​​nhằm ngăn chặn rò rỉ thông tin từ hệ thống tệp;
    • trong Btrfs giới thiệu Tối ưu hóa hiệu suất: Bằng cách loại bỏ việc ghi nhật ký các thuộc tính mở rộng không cần thiết trong quá trình thực thi fsync, hiệu suất của các hoạt động chuyên sâu với các thuộc tính mở rộng đã tăng lên tới 17%. Ngoài ra, khi thực hiện các thao tác cắt không ảnh hưởng đến phạm vi, đồng bộ hóa hoàn toàn sẽ bị tắt, giúp giảm 12% thời gian thao tác. Một cài đặt đã được thêm vào sysfs để giới hạn băng thông I/O khi kiểm tra FS. Đã thêm lệnh gọi ioctl để hủy thay đổi kích thước và xóa hoạt động của thiết bị;
    • trong XFS làm lại triển khai bộ đệm đệm, được chuyển sang phân bổ các trang bộ nhớ ở chế độ hàng loạt. Cải thiện hiệu quả bộ đệm;
    • F2FS đã thêm tùy chọn để hoạt động ở chế độ chỉ đọc và triển khai chế độ bộ nhớ đệm khối nén (compress_cache) để cải thiện hiệu suất đọc ngẫu nhiên. Hỗ trợ đã được triển khai để nén các tệp được ánh xạ vào bộ nhớ bằng thao tác mmap(). Để vô hiệu hóa có chọn lọc tính năng nén tệp bằng mặt nạ, một tùy chọn gắn kết mới nocompress đã được đề xuất;
    • công việc đã được thực hiện trong trình điều khiển exFAT để cải thiện khả năng tương thích với bộ lưu trữ của một số máy ảnh kỹ thuật số;
    • đã thêm cuộc gọi hệ thống quotel_fd(), cho phép bạn quản lý hạn ngạch không phải thông qua một tệp thiết bị đặc biệt mà bằng cách chỉ định bộ mô tả tệp được liên kết với hệ thống tệp áp dụng hạn ngạch;
    • Trình điều khiển cũ dành cho các thiết bị khối có giao diện IDE đã bị xóa khỏi kernel và từ lâu chúng đã được thay thế bằng hệ thống con libata. Hỗ trợ cho các thiết bị cũ vẫn được giữ lại đầy đủ, những thay đổi chỉ liên quan đến khả năng sử dụng trình điều khiển cũ, khi sử dụng, các ổ đĩa được gọi là /dev/hd* chứ không phải /dev/sd*;
    • Trình điều khiển “thô” đã bị xóa khỏi kernel, cung cấp quyền truy cập không có bộ đệm vào các thiết bị chặn thông qua giao diện /dev/raw. Chức năng này từ lâu đã được triển khai trong các ứng dụng sử dụng cờ O_DIRECT;
  • Dịch vụ bộ nhớ và hệ thống:
    • một chế độ lập lịch mới đã được triển khai trong bộ lập lịch tác vụ SCHED_CORE, cho phép bạn kiểm soát những tiến trình nào có thể chạy cùng nhau trên cùng một lõi CPU. Mỗi quy trình có thể được chỉ định một mã định danh cookie xác định phạm vi tin cậy giữa các quy trình (ví dụ: thuộc về cùng một người dùng hoặc vùng chứa). Khi tổ chức thực thi mã, bộ lập lịch có thể đảm bảo rằng một lõi CPU chỉ được chia sẻ giữa các quy trình được liên kết với cùng một chủ sở hữu, lõi này có thể được sử dụng để chặn một số cuộc tấn công của Spectre bằng cách ngăn chặn các tác vụ đáng tin cậy và không đáng tin cậy chạy trên cùng một luồng SMT (Hyper Threading) ;
    • đối với cơ chế cgroup, hỗ trợ cho thao tác tiêu diệt đã được triển khai, cho phép bạn tiêu diệt tất cả các tiến trình được liên kết với nhóm cùng một lúc (gửi SIGKILL) bằng cách ghi “1” vào tệp ảo cgroup.kill;
    • các khả năng mở rộng liên quan đến việc phản hồi việc phát hiện các khóa phân chia (“khóa phân chia”) xảy ra khi truy cập dữ liệu chưa được căn chỉnh trong bộ nhớ do thực tế là khi thực hiện một lệnh nguyên tử, dữ liệu sẽ đi qua hai dòng bộ nhớ đệm CPU. Việc chặn như vậy dẫn đến hiệu suất giảm đáng kể, vì vậy trước đây có thể buộc chấm dứt ứng dụng gây ra tình trạng chặn. Bản phát hành mới bổ sung tham số dòng lệnh kernel “split_lock_Detect=ratelimit:N”, cho phép bạn xác định giới hạn trên toàn hệ thống về tốc độ hoạt động khóa mỗi giây, sau khi vượt quá giới hạn đó thì bất kỳ quy trình nào trở thành nguồn của khóa phân chia sẽ buộc phải dừng lại trong 20 ms thay vì chấm dứt;
    • Bộ điều khiển băng thông cgroup CFS (bộ điều khiển băng thông CFS), xác định lượng thời gian xử lý có thể được phân bổ cho mỗi nhóm, có khả năng xác định các giới hạn được giới hạn bởi một khoảng thời gian hành động nhất định, cho phép điều chỉnh tốt hơn các tải nhạy cảm với độ trễ. Ví dụ: đặt cpu.cfs_quota_us thành 50000 và cpu.cfs_ Period_us thành 100000 sẽ cho phép một nhóm quy trình lãng phí 100 mili giây thời gian CPU cứ sau 50 mili giây;
    • thêm cơ sở hạ tầng ban đầu để tạo trình tải chương trình BPF, điều này sẽ tiếp tục cho phép tải xuống chỉ các chương trình BPF được ký bằng khóa kỹ thuật số đáng tin cậy;
    • đã thêm một thao tác futex mới FUTEX_LOCK_PI2, sử dụng bộ hẹn giờ đơn điệu để tính toán thời gian chờ, có tính đến thời gian mà hệ thống sử dụng ở chế độ ngủ;
    • đối với kiến ​​trúc RISC-V, hỗ trợ các trang bộ nhớ lớn (Trang lớn trong suốt) và khả năng sử dụng KFENCE xác định lỗi khi làm việc với bộ nhớ;
    • vào lệnh gọi hệ thống madvise(), cung cấp phương tiện để tối ưu hóa việc quản lý bộ nhớ quy trình, thêm Cờ MADV_POPULATE_READ và MADV_POPULATE_WRITE để tạo ra "lỗi trang" trên tất cả các trang bộ nhớ được ánh xạ cho các hoạt động đọc hoặc ghi mà không thực hiện đọc hoặc ghi thực tế (mặc định). Việc sử dụng cờ có thể hữu ích để giảm sự chậm trễ trong việc thực thi chương trình, nhờ vào việc chủ động thực thi trình xử lý “lỗi trang” cho tất cả các trang chưa được phân bổ cùng một lúc mà không cần chờ truy cập thực sự vào chúng;
    • trong một hệ thống thử nghiệm đơn vị đơn vị quân sự thêm hỗ trợ chạy thử nghiệm trong môi trường QEMU;
    • công cụ theo dõi mới được thêm vào: "tiếng ồn ào" để theo dõi độ trễ của ứng dụng do xử lý gián đoạn và " timelat " để hiển thị thông tin chi tiết về độ trễ khi thức dậy từ tín hiệu hẹn giờ;
  • ảo hóa và bảo mật:
    • thêm cuộc gọi hệ thống memfd_secret(), cho phép bạn tạo một vùng bộ nhớ riêng trong một không gian địa chỉ biệt lập, chỉ hiển thị với tiến trình chủ sở hữu, không được phản ánh trong các tiến trình khác và không thể truy cập trực tiếp vào kernel;
    • trong hệ thống lọc cuộc gọi hệ thống seccomp, khi di chuyển trình xử lý khóa vào không gian người dùng, có thể sử dụng một thao tác nguyên tử để tạo bộ mô tả tệp cho một tác vụ riêng biệt và trả về nó khi xử lý cuộc gọi hệ thống. Hoạt động được đề xuất giải quyết vấn đề với sự gián đoạn của trình xử lý trong không gian người dùng khi có tín hiệu đến;
    • thêm cơ chế mới để quản lý giới hạn tài nguyên trong không gian tên ID người dùng, liên kết các bộ đếm rlimit riêng lẻ với người dùng trong "không gian tên người dùng". Thay đổi này giải quyết vấn đề sử dụng bộ đếm tài nguyên chung khi một người dùng chạy các quy trình trong các vùng chứa khác nhau;
    • Trình ảo hóa KVM dành cho hệ thống ARM64 đã bổ sung khả năng sử dụng tiện ích mở rộng MTE (MemTag, Memory Tagging Extension) trong hệ thống khách, cho phép bạn liên kết các thẻ với từng hoạt động cấp phát bộ nhớ và tổ chức kiểm tra việc sử dụng đúng con trỏ để chặn việc khai thác các lỗ hổng gây ra do truy cập vào các khối bộ nhớ đã được giải phóng, tràn bộ đệm, truy cập trước khi khởi tạo và sử dụng bên ngoài bối cảnh hiện tại;
    • Xác thực con trỏ do nền tảng ARM64 cung cấp hiện có thể được cấu hình riêng cho không gian người dùng và kernel. Công nghệ này cho phép bạn sử dụng các lệnh ARM64 chuyên dụng để xác minh địa chỉ trả về bằng chữ ký số được lưu trữ ở các bit phía trên chưa được sử dụng của chính con trỏ;
    • trong Linux ở chế độ người dùng thêm hỗ trợ sử dụng trình điều khiển cho các thiết bị PCI có bus PCI ảo, được triển khai bởi trình điều khiển PCI-over-virtio;
    • đối với hệ thống x86, đã thêm hỗ trợ cho thiết bị ảo hóa virtio-iommu, cho phép bạn gửi các yêu cầu IOMMU, chẳng hạn như ATTACH, DETACH, MAP và UNMAP, qua truyền tải virtio mà không mô phỏng bảng trang bộ nhớ;
    • Đối với các CPU Intel, từ dòng Skylake đến Coffee Lake, việc sử dụng Intel TSX (Tiện ích mở rộng đồng bộ hóa giao dịch), cung cấp các công cụ để cải thiện hiệu suất của các ứng dụng đa luồng bằng cách tự động loại bỏ các hoạt động đồng bộ hóa không cần thiết, bị tắt theo mặc định. Tiện ích mở rộng bị vô hiệu hóa do có khả năng bị tấn công tải zombie, thao túng việc rò rỉ thông tin qua các kênh của bên thứ ba xảy ra trong quá trình vận hành cơ chế gián đoạn hoạt động không đồng bộ (TAA, TSX Asynchronous Abort);
  • hệ thống con mạng:
    • tiếp tục tích hợp vào lõi của MPTCP (MultiPath TCP), một 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. Trong số mới thêm một cơ chế để thiết lập các chính sách băm lưu lượng truy cập của riêng bạn cho IPv4 và IPv6 (chính sách băm đa đường), giúp không gian người dùng có thể xác định trường nào trong các gói, bao gồm cả các gói được đóng gói, sẽ được sử dụng khi tính toán hàm băm xác định lựa chọn đường dẫn cho gói;
    • hỗ trợ ổ cắm đã được thêm vào virtio vận chuyển ảo SOCK_SEQPACKET (truyền dữ liệu có trật tự và đáng tin cậy);
    • Các khả năng của cơ chế ổ cắm SO_REUSEPORT đã được mở rộng, cho phép một số ổ cắm nghe kết nối với một cổng cùng một lúc để nhận kết nối với việc phân phối các yêu cầu đến đồng thời trên tất cả các ổ cắm được kết nối qua SO_REUSEPORT, giúp đơn giản hóa việc tạo các ứng dụng máy chủ đa luồng . Trong phiên bản mới thêm phương tiện để chuyển điều khiển sang ổ cắm khác trong trường hợp không thành công khi xử lý yêu cầu của ổ cắm được chọn ban đầu (giải quyết vấn đề mất kết nối riêng lẻ khi khởi động lại dịch vụ);
  • thiết bị:
    • trong trình điều khiển amdgpu thực hiện hỗ trợ cho dòng GPU AMD Radeon RX 6000 mới, có tên mã là “Beige Goby” (Navi 24) và “Yellow Carp”, cũng như cải thiện hỗ trợ cho GPU Aldebaran (gfx90a) và Van Gogh APU. Đã thêm khả năng hoạt động đồng thời với một số bảng eDP. Đối với APU Renoir, hỗ trợ làm việc với bộ đệm được mã hóa trong bộ nhớ video (TMZ, Vùng bộ nhớ đáng tin cậy) đã được triển khai. Đã thêm hỗ trợ cho card đồ họa rút phích cắm nóng. Đối với GPU Radeon RX 6000 (Navi 2x) và GPU AMD cũ hơn, cơ chế tiết kiệm năng lượng ASPM (Quản lý năng lượng trạng thái hoạt động) được bật theo mặc định, cơ chế này trước đây chỉ được bật cho GPU Navi 1x, Vega và Polaris;
    • đối với chip AMD, hỗ trợ bộ nhớ ảo dùng chung (SVM, bộ nhớ ảo dùng chung) đã được thêm vào dựa trên hệ thống con HMM (Quản lý bộ nhớ không đồng nhất), cho phép sử dụng các thiết bị có đơn vị quản lý bộ nhớ riêng (MMU, đơn vị quản lý bộ nhớ), có thể truy cập bộ nhớ chính. Bao gồm cả việc sử dụng HMM, bạn có thể tổ chức một không gian địa chỉ dùng chung giữa GPU và CPU, trong đó GPU có thể truy cập vào bộ nhớ chính của tiến trình;
    • thêm hỗ trợ công nghệ ban đầu Dịch chuyển thông minh AMD, tính năng này tự động thay đổi các thông số tiêu thụ điện năng của CPU và GPU trên máy tính xách tay có chipset và card đồ họa AMD để tăng hiệu suất khi chơi game, chỉnh sửa video và kết xuất 3D;
    • trong trình điều khiển i915 cho card màn hình Intel bao gồm hỗ trợ chip Intel Alderlake P;
    • đã thêm trình điều khiển drm/hyperv cho bộ điều hợp đồ họa ảo Hyper-V;
    • thêm trình điều khiển đồ họa simpledrm sử dụng bộ đệm khung EFI-GOP hoặc VESA do phần sụn UEFI hoặc BIOS cung cấp cho đầu ra. Mục đích chính của trình điều khiển là cung cấp khả năng xuất đồ họa trong giai đoạn khởi động ban đầu, trước khi có thể sử dụng trình điều khiển DRM đầy đủ. Trình điều khiển cũng có thể được sử dụng như một giải pháp tạm thời cho thiết bị chưa có trình điều khiển DRM gốc;
    • thêm hỗ trợ máy tính tất cả trong một Mâm xôi Pi 400;
    • Đã thêm trình điều khiển dell-wmi-privacy để hỗ trợ các công tắc phần cứng máy ảnh và micrô có trong máy tính xách tay Dell;
    • cho máy tính xách tay Lenovo thêm Giao diện WMI để thay đổi thông số BIOS thông qua sysfs /sys/class/firmware-attributes/;
    • mở rộng hỗ trợ các thiết bị có giao diện USB4;
    • thêm hỗ trợ card âm thanh và codec AmLogic SM1 TOACODEC, Intel AlderLake-M, NXP i.MX8, NXP TFA1, TDF9897, Rockchip RK817, Qualcomm Quinary MI2 và Texas Instruments TAS2505. Cải thiện hỗ trợ âm thanh trên máy tính xách tay HP và ASUS. Thêm các bản vá lỗi để giảm độ trễ trước khi âm thanh bắt đầu phát trên các thiết bị có giao diện USB.

Nguồn – opennet.ru.

Nguồn: linux.org.ru