Установка выполняющий привязку процесса со сбоями taskset

Я вижу, что Вы работали apache с 1G ram, у меня был a vps в прошлом году и имел Вашу проблему. apache потребность о поршне K 300-400 и это очень плохо для a VPS, я удалил apache и установленный lighthttpd. Вы делаете это.

7
02.07.2014, 21:58
4 ответа

Я написал скрипт на Python, который просто раскручивает некоторые потоки и сжигает циклы процессора. Идея заключается в том, чтобы протестировать набор задач против него, так как он достаточно прост.

#!/usr/bin/env python

import threading

def cycle_burner():
    while True:
        meh = 84908230489 % 323422

for i in range(3):
    thread = threading.Thread(target=cycle_burner)
    print "Starting a thread"
    thread.start()

Просто запуск скрипта на Python съедает около 150% использования процессора.

[~/cbench]$ ./burn_cycles.py
Starting a thread
Starting a thread
Starting a thread

Запуск скрипта на Python с набором задач работает, как и ожидалось. Смотрите вверху показывает, что процесс на Python привязан к 100% использованию.

[~/cbench]$ taskset -c 0 ./burn_cycles.py
Starting a thread
Starting a thread
Starting a thread

Интересно, что запуск скрипта на Python и последующее немедленное использование набора задач для установки только что запущенного процесса на 100%. Обратите внимание, что планировщик Linux закончил выполнение команд Bash до порождения потоков Python. Итак, процесс на Python был запущен, затем он был настроен на выполнение на процессоре 0, затем он породил свои потоки, которые унаследовали соответствующее сродство.

[~/cbench]$ ./burn_cycles.py &; taskset -pc 0 `pgrep python`
[1] 8561
pid 8561's current affinity list: 0-3
pid 8561's new affinity list: 0
Starting a thread
[~/cbench]$ Starting a thread
Starting a thread

Этот результат контрастирует с этим методом, который является точно таким же, но позволяет питоновским нитям нереститься до установки сродства процесса Python. Это повторяет результаты "taskset ничего не делает", описанные мною выше.

[~/cbench]$ ./burn_cycles.py &
[1] 8996
[~/cbench]$ Starting a thread
Starting a thread
Starting a thread
[~/cbench]$ taskset -pc 0 `pgrep python`
pid 8996's current affinity list: 0-3
pid 8996's new affinity list: 0

Что здесь происходит?

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

5
27.01.2020, 20:15

Я думаю, вам понадобится позвонить на задачу один раз за нить, т. Е. Использовать PS -el вместо PGREP и труба, которая в CaseSet -CP 0

ps -eLo cmd,tid | grep python | perl -pe 's/.* (\d+)$/\1/' | xargs -n 1 taskset -cp 0

Это задача задач для всех идентификаторов потоков.

4
27.01.2020, 20:15

попробуйте вместо него numactl с - Physcpubind (или -C ). На странице руководства сказано:

... Политика установлена ​​для команды и наследуется всеми ее дочерними элементами.

(в последних версиях набора задач есть также параметр -a , который ] Устанавливает или извлекает соответствие ЦП всех задач (потоков) для данного PID. , но неясно, работает ли это также для дочерних процессов задачи, запущенной с набором задач , в отличие от изменения уже запущенного процесса)

3
27.01.2020, 20:15

Я успешно использую опцию taskset-a. У меня есть сервер с именем videoconverterd, который потребляет много ресурсов ЦП; topпоказывает

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 8991 root      20   0 1299472 346724  47380 S 385.7  4.3  42:41.37 videoconverterd

После запуска taskset -apc 0 8991загрузка ЦП падает до

.
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 8991 root      20   0 1221832 293344  47380 S  99.7  3.7  49:13.28 videoconverterd

Я использую CentOS 7 с tasksetверсией 2.23.2.

3
27.01.2020, 20:15

Теги

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