без снижения загрузки ЦП с помощью «хорошей» утилиты в Dual Core Machine [закрыто]

чтобы наблюдать за фактической работой "хорошей" утилиты в 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))
-1
задан 19 September 2017 в 15:45
1 ответ

Следуя предложению Марко, я переделал свой комментарий как ответ и расширил его (нет идея, если есть лучший способ сделать это)

Вы неправильно поняли, как работает команда nice . Он работает в многопоточной среде, чтобы сообщить планировщику процессов ядра, что определенный процесс должен иметь более низкий приоритет, чем другие (или более высокий - в зависимости от параметров). Когда все, что у вас есть, - это один процесс, который занимает весь процессор, и пока нет других процессов, которым он нужен, приятная настройка не будет иметь реального результата. Когда вы помещаете два процесса, интенсивно использующих ЦП, на одно ядро ​​ЦП, они будут бороться за него, и поэтому один с положительным хорошим уровнем будет в проигрыше, потому что планировщик предоставит ему процессорное время более низкая ставка, чем другие.

Ситуация меняется, когда у вас достаточно ядер для всех процессов, тогда каждый из них имеет одинаковый шанс получить время процессора, помня, что есть еще много фоновых приложений, запускающих операционную систему и другие задачи. В этом случае хороший уровень не будет иметь большого влияния на процессы - он будет играть роль только тогда, когда какой-либо другой процесс будет запрашивать процессорное время для выполнения работы, но если он не загружает процессор и / или завершается в ближайшее время, вы не увидите его в системных показателях так, как вы ожидали.

Вы можете сравнить предоставление nice приоритета определенному процессу беременной женщине в магазине. Если у нее приоритет перед другими клиентами при оформлении заказа, это не заставит ее двигаться быстрее, это просто означает, что всем остальным придется подождать, пока она закончит.

Вы можете прочитать больше о nice в вики
Вам нужна команда cpulimit , которая вставляет засыпание в запущенный процесс и, следовательно, таким образом снижает его производительность. Когда процесс находится в спящем режиме, другой процесс может получить свое процессорное время, и таким образом вы можете существенно ограничить процесс. Так как эта команда предназначена для подавления запущенного процесса, вы можете использовать ее только для замедления задач.

1
ответ дан 5 December 2019 в 19:42

Теги

Похожие вопросы