Tôi đang cố chạy các điểm chuẩn đa luồng trên một bộ CPU bị cô lập. Để cắt ngắn một câu chuyện dài, ban đầu tôi đã thử isolcpus
và taskset
, nhưng gặp vấn đề . Bây giờ tôi đang chơi với cgroups / csets.
Tôi nghĩ cset shield
trường hợp sử dụng "đơn giản" sẽ hoạt động tốt. Tôi có 4 lõi, vì vậy tôi muốn sử dụng lõi 1-3 để đo điểm chuẩn (tôi cũng đã cấu hình các lõi này ở chế độ đánh dấu thích ứng), sau đó lõi 0 có thể được sử dụng cho mọi thứ khác.
Theo hướng dẫn ở đây , nó sẽ đơn giản như:
$ sudo cset shield -c 1-3
cset: --> shielding modified with:
cset: "system" cpuset of CPUSPEC(0) with 105 tasks running
cset: "user" cpuset of CPUSPEC(1-3) with 0 tasks running
Vì vậy, bây giờ chúng ta có một "lá chắn" được tách ra (bộ người dùng) và lõi 0 dành cho mọi thứ khác (bộ hệ thống).
Được rồi, có vẻ tốt cho đến nay. Bây giờ hãy nhìn vào htop
. Tất cả các quy trình nên đã được di chuyển vào CPU 0:
Huh? Một số quy trình được hiển thị là chạy trên lõi được che chắn. Để loại trừ trường hợp htop có lỗi, tôi cũng đã thử sử dụng taskset
để kiểm tra mặt nạ ái lực của một quá trình được hiển thị như đang ở trong tấm khiên.
Có lẽ những nhiệm vụ đó là không thể di chuyển? Chúng ta hãy thực hiện một quy trình tùy ý hiển thị như đang chạy trên CPU3 (cần nằm trong tấm chắn) htop
và xem liệu nó có xuất hiện trong nhóm hệ thống theo cset
:
$ cset shield -u -v | grep 864
root 864 1 Soth [gmain]
vext01 2412 2274 Soth grep 864
Đúng, đó là chạy trên nhóm hệ thống theo cset
. Vì vậy htop
và cset
không đồng ý.
Vậy chuyện gì đang xảy ra ở đây? Tôi tin tưởng ai: mối quan hệ cpu ( htop
/ taskset
) hay cset
?
Tôi nghi ngờ rằng bạn không nên sử dụng cset
và mối quan hệ với nhau. Có lẽ chiếc khiên đang hoạt động tốt, và tôi nên bỏ qua mặt nạ ái lực và htop
đầu ra. Dù bằng cách nào, tôi thấy điều này khó hiểu. Ai đó có thể làm sáng tỏ?
numactl
và cgconfig
và cgrules
/ cgred
để sắp xếp những gì bạn đang làm. Chúng có thể có sẵn cho Debian với một số công việc.