чтобы наблюдать за фактической работой "хорошей" утилиты в Linux, я написал скрипт python для непрерывного вычисления SHA512.
] - Подготовка -
Двухъядерная Linux-машина, Одноядерная Linux-машина (фактически, они оба являются облачными экземплярами)
скрипт Python для непрерывного вычисления SHA512, потребляет 100% ЦП время при работе в одиночку.
- Эксперимент -
на одноядерной машине
запустить этот скрипт нормально, затем nice -n 15 python load_generator.py
, дать второй процесс python имеет низкий приоритет.
на двухъядерной машине
поскольку только запуск двух процессов не может подтвердить точку зрения, я обычно запускаю 2 процесса, затем nice -n 15 python load_generator.py
a новый процесс.
- Ожидаемый результат -
обычно запускаемый процесс python требует гораздо больше процессорного времени / процента использования, чем nice
start pr на обеих машинах.
- Фактический результат -
На одноядерной машине это проверено на истинность: один использует 97%, а другой - 3%. но на двухъядерном компьютере утилита nice
не работает. не было уменьшено использование ЦП для процесса, который был создан с помощью nice
. каждый из них использует одинаковое количество процессорного времени.
- Приложение: используемый сценарий -
# load_generator.py
import hashlib, binascii
import random
while True:
dk = hashlib.pbkdf2_hmac('sha512',
str(random.random())+str(random.random()), b'salt', 2000000)
print(binascii.hexlify(dk))
Следуя предложению Марко, я переделал свой комментарий как ответ и расширил его (нет идея, если есть лучший способ сделать это)
Вы неправильно поняли, как работает команда nice
. Он работает в многопоточной среде, чтобы сообщить планировщику процессов ядра, что определенный процесс должен иметь более низкий приоритет, чем другие (или более высокий - в зависимости от параметров). Когда все, что у вас есть, - это один процесс, который занимает весь процессор, и пока нет других процессов, которым он нужен, приятная настройка не будет иметь реального результата.
Когда вы помещаете два процесса, интенсивно использующих ЦП, на одно ядро ЦП, они будут бороться за него, и поэтому один с положительным хорошим
уровнем будет в проигрыше, потому что планировщик предоставит ему процессорное время более низкая ставка, чем другие.
Ситуация меняется, когда у вас достаточно ядер для всех процессов, тогда каждый из них имеет одинаковый шанс получить время процессора, помня, что есть еще много фоновых приложений, запускающих операционную систему и другие задачи. В этом случае хороший уровень не будет иметь большого влияния на процессы - он будет играть роль только тогда, когда какой-либо другой процесс будет запрашивать процессорное время для выполнения работы, но если он не загружает процессор и / или завершается в ближайшее время, вы не увидите его в системных показателях так, как вы ожидали.
Вы можете сравнить предоставление nice
приоритета определенному процессу беременной женщине в магазине. Если у нее приоритет перед другими клиентами при оформлении заказа, это не заставит ее двигаться быстрее, это просто означает, что всем остальным придется подождать, пока она закончит.