Tôi đang chạy một số điểm chuẩn. Người chạy chuẩn của tôi theo dõi bộ đệm dmesg giữa các thử nghiệm, tìm kiếm bất cứ thứ gì có thể ảnh hưởng đến hiệu suất. Hôm nay nó đã ném nó lên:
[2015-08-17 10:20:14 CẢNH BÁO] dmesg dường như đã thay đổi! Khác biệt sau: --- 2015-08-17 09:55:00 +++ 2015-08-17 10:20:14 @@ -825,3 +825,4 @@ [3.802206] [drm] Kích hoạt trạng thái RC6: bật RC6, tắt RC6p, tắt RC6pp [7.900533] r8169 0000: 06: 00.0 eth0: liên kết [7.900541] IPv6: ADDRCONF (NETDEV_CHANGE): eth0: liên kết đã sẵn sàng + [236832.221937] ngắt hoàn hảo mất quá nhiều thời gian (2504> 2500), hạ kernel.perf_event_max_sample_rate xuống 50000
Sau một số tìm kiếm, bây giờ tôi biết điều này liên quan đến một hệ thống con định hình trong nhân linux có tên là "perf". Tôi không nghĩ rằng chúng ta cần điều này, vì vậy tôi muốn vô hiệu hóa nó hoàn toàn.
Tìm kiếm lại, tôi thấy rằng sysctl perf_cpu_time_max_percent
có thể giúp đỡ. Ở đây ai đó đề nghị vô hiệu hóa bằng cách đặt nó thành 0. Đọc thêm một số điều ở đây :
perf_cpu_time_max_percent:
Gợi ý cho nhân cần sử dụng bao nhiêu thời gian CPU để xử lý các sự kiện lấy mẫu hoàn hảo. Nếu hệ thống con hoàn hảo được thông báo rằng các mẫu của nó vượt quá giới hạn này, nó sẽ giảm tần suất lấy mẫu để cố gắng giảm mức sử dụng CPU.
Một số mẫu hoàn hảo xảy ra trong NMI. Nếu các mẫu này bất ngờ mất quá nhiều thời gian để thực thi, các NMI có thể bị xếp chồng lên nhau cạnh nhau đến mức không có gì khác được phép thực thi.
0: vô hiệu hóa cơ chế. Không theo dõi hoặc điều chỉnh tốc độ lấy mẫu của perf cho dù thời gian của CPU là bao lâu.
1-100: cố gắng điều chỉnh tỷ lệ mẫu hoàn hảo đến phần trăm CPU này. Lưu ý: hạt nhân tính toán độ dài "dự kiến" của mỗi sự kiện mẫu. 100 ở đây có nghĩa là 100% chiều dài dự kiến. Ngay cả khi giá trị này được đặt thành 100, bạn vẫn có thể thấy điều chỉnh mẫu nếu vượt quá độ dài này. Đặt thành 0 nếu bạn thực sự không quan tâm đến việc CPU được tiêu thụ bao nhiêu.
Điều này nghe có vẻ như 0 có nghĩa là tốc độ mẫu định hình không còn được kiểm tra, nhưng hệ thống con freq vẫn chạy (?).
Bất cứ ai cũng có thể làm sáng tỏ làm thế nào để vô hiệu hóa hoàn toàn hồ sơ kernel với freq?
EDIT: Ai đó đề nghị tôi thử xây dựng kernel mà không hoàn hảo, nhưng tôi không nghĩ điều này thậm chí có thể. Tùy chọn này dường như không thể chuyển đổi:
EDIT2: Sau khi đọc nhiều hơn, tôi quyết định tôi có thể đặt kernel.perf_event_max_sample_rate
thành không. Tức là không có mẫu mỗi giây. Tuy nhiên, bạn không thể làm điều này ( nguồn ):
cam kết 02f98e3e36da106338b7c732fed516420fb20e2a Tác giả: Knut Petersen Ngày: Thứ Tư ngày 25 tháng 9 14:29:37 2013 +0200 perf: Thi hành 1 dưới dạng giới hạn thấp hơn cho perf_event_max_sample_rate
EDIT 3: FWIW, perf_cpu_time_max_percent
được đặt thành 25, có nghĩa là hạt nhân đã dành hơn 25% thời gian lấy mẫu các thanh ghi phần cứng. Điều này là không thể chấp nhận được đối với một máy đo điểm chuẩn.
Bây giờ tôi chắc chắn rằng cài đặt perf_cpu_time_max_percent
về 0 sẽ chỉ làm tình hình tồi tệ hơn, vì kernel sẽ tiếp tục sử dụng hơn 25% thời gian đọc các thanh ghi phần cứng. Lỗi xảy ra để điều chỉnh tốc độ mẫu, do đó cố gắng đảm bảo rằng hạt nhân đáp ứng hạn ngạch sử dụng <25% thời gian hoàn hảo. 25% vẫn là IMHO quá cao.
Nếu tôi thực sự không thể vô hiệu hóa sự hoàn hảo, có lẽ sự thỏa hiệp tốt nhất sẽ là đặt perf_event_max_sample_rate
thành 1.
EDIT4: Một người bạn gợi ý rằng tôi có thể đã hiểu sai ý nghĩa của nó perf_cpu_time_max_percent
, vì vậy các tuyên bố trên có thể không chính xác. Giá trị 25 chỉ ra rằng hạt nhân đã sử dụng hơn 25% chiều dài tùy ý mà nó dành riêng để phục vụ các ngắt hoàn hảo.
EDIT5:
Như đã chỉ ra trong các bình luận, -*-
tùy chọn chống lại sự hoàn hảo cho thấy tính năng này bị ép buộc bởi một tính năng kích hoạt khác. Nếu tôi nhìn vào help
, nó nói những tính năng này là:
Tôi không nghĩ rằng tôi có thể giành chiến thắng ở đây. Công thức Boolean selected by
nói
Nếu bạn đang nhắm mục tiêu X86 hoặc ...
Tôi vừa mới kiểm tra rằng nhắm mục tiêu X86_64 thực sự cho phép CONFIG_X86
. Vì vậy, có vẻ như ngay khi bạn nhắm mục tiêu X86 hoặc X86_64, bạn sẽ có được sự hoàn hảo.
Vì vậy, tôi muốn thay đổi một chút câu hỏi của tôi thành:
Tôi có thể sử dụng cài đặt hoàn hảo nào để giảm thiểu thời gian dành cho kernel trong các thói quen hoàn hảo?
Hãy nhớ rằng mục tiêu tổng thể là kiểm soát các nguồn biến đổi ngẫu nhiên để đo điểm chuẩn. Nếu tôi không thể vô hiệu hóa sự hoàn hảo, làm thế nào tôi có thể giảm thiểu tác động của nó lên điểm chuẩn?
CONFIG_HAVE_PERF_EVENTS=y
và CONFIG_PERF_EVENTS=y
. Tôi không nghĩ rằng sự hoàn hảo bị vô hiệu hóa này.
-*-
không có nghĩa là một số hệ thống con phụ thuộc vào mô-đun perf. Help
hiển thị cây phụ thuộc mà bạn cần vô hiệu hóa để thay đổi tùy chọn thành [*]
hoặc [M]
.