Nếu tác vụ của bạn là quá trình duy nhất yêu cầu thời gian trên một CPU cụ thể, sẽ không có chuyển đổi ngữ cảnh giữa các tác vụ :-). Nhưng CPU vẫn có thể bị gián đoạn, gây ra chuyển đổi ngữ cảnh vào kernel và quay lại. Và một nguyên nhân có thể là bộ đếm thời gian trước khi thử nghiệm, kiểm tra xem có nhiệm vụ nào khác để chạy trên CPU này không ...
Linux có thể tránh việc tạo ra bất kỳ ngắt hẹn giờ trước khi thực hiện trên cpu khi không có lý do gì để làm như vậy. Xem CONFIG_NO_HZ_FULL
. Để sử dụng tính năng này, nó phải được kích hoạt khi kernel được xây dựng và nó phải được kích hoạt bằng tùy chọn khởi động.
Theo mặc định, không có CPU nào là CPU thích ứng. Tham số khởi động "nohz_full =" chỉ định CPU thích ứng. Ví dụ: "nohz_full = 1,6-8" nói rằng CPU 1, 6, 7 và 8 phải là CPU thích ứng. Lưu ý rằng bạn bị cấm đánh dấu tất cả các CPU là CPU đánh dấu thích ứng [...]
LWN.net cho biết "theo Ingo Molnar, sẽ tiết kiệm được 1% thời gian của CPU" cho các CPU thích ứng. Tài liệu kernel nói rằng điều này có sáu chi phí khác nhau, và cũng có một danh sách "VẤN ĐỀ KIẾM".
Mức tăng này tương đối nhỏ, đặc biệt so với mức tăng thông lượng tiềm năng của việc giảm tần suất chuyển đổi ngữ cảnh giữa nhiều tác vụ, như được tham chiếu trong câu trả lời này: Làm cách nào để thay đổi độ dài của các lát cắt thời gian được sử dụng bởi bộ lập lịch CPU Linux?
In nhỏ: các phép đo này hỗ trợ trước Spectre, Meltdown, KPTI và x86 ASID :-(. Và tôi đoán chúng cũng áp dụng cho phần cứng cũ hơn. Hãy hỏi chuyên gia hạt nhân hoặc chạy các phép đo của riêng bạn về cách chi phí chuyển đổi ngữ cảnh đã thay đổi trên phiên bản kernel và phần cứng cụ thể của bạn ... PTI phần lớn được cho là được giảm nhẹ bởi ASID, ngoại trừ phần mềm gọi vào kernel rất thường xuyên, ví dụ chính là cơ sở dữ liệu. Nhưng tôi không nắm bắt được các con số .
Hy vọng của Molnar trong bản vá RFC ban đầu là theo thời gian, nó "có thể sẽ được kích hoạt bởi hầu hết các bản phân phối Linux". Tôi nhận thấy Fedora 28 cung cấp một kernel mặc định được xây dựng với NO_HZ_FULL
sự hỗ trợ. Debian 9 thì không.
Gần đây, Linux v4.17 loại bỏ dấu tích thời gian 1 Hz còn lại khỏi nohz_full
CPU . Tôi tưởng tượng ảnh hưởng đến thông lượng khá nhỏ :-), nhưng tôi đã cố gắng theo dõi trạng thái NO_HZ_FULL
lợi ích khi có nhiều quy trình có thể chạy trên CPU -
một khi chúng ta đạt đến 0 Hz, chúng ta có thể [sau đó] loại bỏ giả định đánh dấu định kỳ khỏi nr_rucky> = 2, bằng cách làm gián đoạn các nhiệm vụ bận rộn thường xuyên như các ràng buộc về lịch trình yêu cầu chúng ta thực hiện - cứ sau 4 - 40 ms, tùy thuộc vào nr_rucky .
Điều này hơi khó hiểu vì tiền chế định đã bắt đầu sử dụng một dấu kiểm riêng biệt, chính xác hơn trong v2.6.25-rc1, cam kết 8f4d37ec073c, "lịch trình: đánh dấu ưu tiên độ phân giải cao" . Tìm thấy thông qua nhận xét này trên cùng một bài viết của LWN.net: https://lwn.net/Articles/549754/ ).