Сценарій для відключення гіперточення при запуску машини ...
Для відключення гіперточення я включаю скрипт на machine /etc/rc.local. Він не є чітким, але простий в установці, незалежно від архітектури процесора і повинен працювати над будь-яким сучасним дистрибутивом Linux.
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;
Як це працює?
До інформації та керуючих ядер Linux можна отримати доступ до файлів у каталозі / sys на сучасних дистрибутивах Linux. Наприклад:
/ sys / devices / system / cpu / cpu3
містить інформацію про ядро та елементи керування для логічного cpu 3.
cat / sys / devices / system / cpu / cpu3 / topology / core_id
покаже основний номер, до якого належить логічний процесор
echo "0"> / sys / devices / system / cpu / cpu3 / online
дозволяє відключити логічний cpu 3.
Чому це працює?
Я точно не знаю, чому ... але система стає більш чутливою до відключення гіперточення (на моєму i5-ноутбуці та масивних серверах Xeon з 60+ ядрами). Я думаю, що це стосується кеш-пам’ят per-cpu, розподілу пам’яті per-cpu, розподілу планувальників cpu та складних ітерацій пріоритетів процесу. Я думаю, що переваги гіпертрейдингу переважають через складність створення планувальників процесорів, які вміють ним користуватися.
Для мене проблема з гіпертодією полягає в тому, що: якщо я запускаю стільки процесорів, що інтенсивно працюють настільки, наскільки у мене є логічні ядра, у мене будуть швидкі контекстні комутатори для завдань, що інтенсивно працюють на процесорі, але дорогі для фонових завдань, оскільки гипертрейдинг повністю споживається CPU інтенсивні завдання. З іншого боку, якщо я запускаю стільки процесорно-інтенсивних потоків, скільки у мене є фізичні ядра, у мене не буде контекстних переключень на ці завдання та швидких контекстних комутаторів для фонових завдань. Здається, добре, але фонові завдання знайдуть безкоштовні логічні процесори і працюватимуть майже негайно. Це так, як вони в режимі реального часу (добре -20).
У першому сценарії гіперточення - це uselles, фонові завдання використовуватимуть дорогі контекстні комутатори, тому що я викреслював гіперпереборку при звичайній обробці. Другий неприйнятний, оскільки до 50% моєї процесорної потужності надає пріоритет фоновим завданням.
Завдання, про які я говорю, - це сервер інтелектуального інтелекту та сервери авторизації (моя робота). Візуалізація блендерів у дешевих комп’ютерах та кластерах (для замальовки мого майбутнього будинку).
Також це здогадки.
У мене таке враження, що краще, але може і не так.
sysbench --num-threads=1 --test=cpu run
різних num-потоків і включення та вимкнення HT говорить про те, що вимкнення HT знижує ефективність, коли багато потоків, і навіть якщо є лише один потік, від вимкнення HT немає користі. Тому я пропоную залишити його таким, яким він є: це оптимально.