Một tập lệnh để vô hiệu hóa siêu phân luồng khi khởi động máy ...
Để vô hiệu hóa siêu phân luồng, tôi bao gồm một tập lệnh trên máy /etc/rc.local. Nó không phải là exaclty sạch, nhưng dễ cài đặt, độc lập với kiến trúc cpu và nên hoạt động trên bất kỳ bản phân phối linux hiện đại nào.
nano /etc/rc.local
# place this near the end before the "exit 0"
for CPU in /sys/devices/system/cpu/cpu[0-9]*; do
CPUID=$(basename $CPU)
echo "CPU: $CPUID";
if test -e $CPU/online; then
echo "1" > $CPU/online;
fi;
COREID="$(cat $CPU/topology/core_id)";
eval "COREENABLE=\"\${core${COREID}enable}\"";
if ${COREENABLE:-true}; then
echo "${CPU} core=${CORE} -> enable"
eval "core${COREID}enable='false'";
else
echo "$CPU core=${CORE} -> disable";
echo "0" > "$CPU/online";
fi;
done;
Làm thế nào điều này hoạt động?
Thông tin và điều khiển nhân Linux có thể được truy cập dưới dạng tệp trong thư mục / sys trên các bản phân phối linux hiện đại. Ví dụ:
/ sys / thiết bị / system / cpu / cpu3
chứa thông tin kernel và các điều khiển cho logic cpu 3.
cat / sys / thiết bị / system / cpu / cpu3 / topology / core_id
sẽ hiển thị số lõi mà cpu logic này thuộc về.
echo "0"> / sys / thiết bị / hệ thống / cpu / cpu3 / trực tuyến
cho phép vô hiệu hóa cpu 3 logic.
Tại sao nó hoạt động?
Tôi không biết chính xác lý do tại sao ... nhưng hệ thống trở nên nhạy hơn với việc siêu phân luồng (trên máy tính xách tay i5 của tôi và các máy chủ Xeon lớn với hơn 60 lõi). Tôi đoán điều đó có liên quan đến bộ nhớ per-cpu, cấp phát bộ nhớ per-cpu, phân bổ bộ lập lịch cpu và xử lý các ưu tiên phức tạp lặp lại. Tôi nghĩ rằng những lợi ích của siêu phân luồng là vượt trội bởi sự phức tạp của việc tạo các bộ lập lịch cpu biết cách sử dụng nó.
Đối với tôi, vấn đề với siêu phân luồng là: Nếu tôi bắt đầu nhiều luồng xử lý cpu như tôi có lõi logic, tôi sẽ có các chuyển đổi ngữ cảnh nhanh cho các tác vụ chuyên sâu cpu, nhưng đắt tiền cho các tác vụ nền vì siêu phân luồng hoàn toàn bị tiêu thụ bởi nhiệm vụ chuyên sâu cpu. Mặt khác, nếu tôi bắt đầu nhiều luồng xử lý cpu như tôi có lõi vật lý, tôi sẽ không có chuyển đổi ngữ cảnh cho các tác vụ đó và chuyển đổi ngữ cảnh nhanh cho các tác vụ nền. Có vẻ tốt, nhưng các tác vụ nền sẽ tìm thấy bộ xử lý logic miễn phí và sẽ chạy gần như hoàn toàn. Nó giống như họ là hiệu suất thời gian thực (đẹp -20).
Trong kịch bản đầu tiên, siêu phân luồng là uselles, các tác vụ nền sẽ sử dụng các chuyển đổi ngữ cảnh đắt tiền vì tôi đã tối đa hóa siêu phân luồng với xử lý thông thường. Thứ hai là không thể chấp nhận được vì có tới 50% năng lượng cpu của tôi được ưu tiên cho các tác vụ nền.
Các nhiệm vụ "chuyên sâu về cpu" mà tôi đang nói đến là các máy chủ ủy quyền và khai thác dữ liệu trí tuệ nhân tạo (công việc của tôi). Kết xuất máy xay trong các máy tính và cụm giá rẻ (để phác họa ngôi nhà tương lai của tôi).
Ngoài ra, đây là phỏng đoán.
Tôi có ấn tượng là tốt hơn, nhưng nó có thể không.
sysbench --num-threads=1 --test=cpu run
với các chủ đề num và HT khác nhau được bật và tắt nói rằng việc vô hiệu hóa HT sẽ làm giảm mùi thơm khi có nhiều luồng và ngay cả khi chỉ có một luồng thì không có lợi ích gì khi tắt HT. Vì vậy, tôi đề nghị để nguyên như vậy: nó là tối ưu.