Страница 1 из 2
Как ограничить загрузку процессора в Ubuntu Linux
Добавлено: 13 мар 2019, 13:51
Olej
Re: Как ограничить загрузку процессора в Ubuntu Linux
Добавлено: 17 мар 2019, 15:56
roms
Пишут:
Все дочерние процессы и потоки указанного процесса будут использовать один и тот же процент загрузки ЦП
похоже это не так, к сожалению.
Действует только на тот процесс(поток ?) PID которого указан опцией
p
Re: Как ограничить загрузку процессора в Ubuntu Linux
Добавлено: 17 мар 2019, 20:02
Olej
roms писал(а):Пишут:
Все дочерние процессы и потоки указанного процесса будут использовать один и тот же процент загрузки ЦП
похоже это не так, к сожалению.
Действует только на тот процесс(поток ?) PID которого указан опцией
p
Давайте разбираться...
По моему, так именно и должно быть:
- большинство приложений/процессов Linux на сегодня используют только 1 процессор, и не умеют использовать больше 1-го...
- я вот здесь проверял работу cpulimit в условиях, несколько отличающихся от описанного в статье:
редкие полезные команды
- по идее, именно то, что хотелось бы: загрузка используемого задачей процессора ограничивалась на уровне 20%
Re: Как ограничить загрузку процессора в Ubuntu Linux
Добавлено: 17 мар 2019, 21:50
roms
Olej писал(а):
- я вот здесь проверял работу cpulimit в условиях, несколько отличающихся от описанного в статье:
редкие полезные команды
- по идее, именно то, что хотелось бы: загрузка используемого задачей процессора ограничивалась на уровне 20%
Как раз с этих Ваших заметок я начал знакомство с этой утилиткой(cpulimit).
Повторил, результаты те же что и у Вас ( естественно )
Скомпилил для теста:
(взято из примера работы fork(), printf'ы оттуда :-) )
Код: Выделить всё
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
int main(int argc, char **argv)
{
pid_t pid;
char *host = "main";
char *forkhost = "fork";
printf("print from %s\n", host);//(1)
if((pid = fork()) == 0) { // потомок
printf("print from %s , pid = %i\n", forkhost, pid);
printf("print from %s , host = %s\n", forkhost, host);
while(1){ }; // загрузим проц
exit (555);
} else { // родитель:
printf("print from %s , pid = %i\n ", host, pid);
while(1){};
}
return 0;
}
Два потока всего, "натравливаю" cpulimit на родительский, он его и ограничивает, дочерний как был 100% загрузка, так и остается.
Тест под виртуалбоксом на Ubuntu16.04(и хост и гостевая)
Либо мой тест не корректен, либо ..
Re: Как ограничить загрузку процессора в Ubuntu Linux
Добавлено: 17 мар 2019, 22:08
roms
скрин приложу
странно, в этот раз видно что и у потомка процент загрузки снижается немного
Re: Как ограничить загрузку процессора в Ubuntu Linux
Добавлено: 17 мар 2019, 22:35
roms
проделываю то же на хосте, ограничиваю родительский процесс виртуалбокса, внутри которого работает предыдущий примерчик
cpulimit -l 50 -p 5457 &
тут нормально!
и у родителя и у потомока процент загрузки снижается практически до заявленных ( -l 50 )
Re: Как ограничить загрузку процессора в Ubuntu Linux
Добавлено: 17 мар 2019, 22:55
roms
В первом случае( тестовый примерчик на гостевой машине) видно что родитель сигнал SIGSTOP получает, потомок нет(?).
Во втором случае SIGSTOP'ы видны как у родительского, так и у всех дочерних
Re: Как ограничить загрузку процессора в Ubuntu Linux
Добавлено: 18 мар 2019, 00:11
Olej
roms писал(а):
Скомпилил для теста:
(взято из примера работы fork(), printf'ы оттуда
)
...
Два потока всего, "натравливаю" cpulimit на родительский, он его и ограничивает, дочерний как был 100% загрузка, так и остается.
Уточнение 1-е: fork() создаёт вам не
поток, а совершенно автономный дочерний
процесс в системе.
А 2-е ... соображение: независимый
процесс может распределяться и выполняться, вообще то говоря, на любом процессоре, в том числе и на том, где выполняется родитель - тут всё зависит от распределения загрузки процессоров... Но с большой вероятностью в системе ничем не загруженной (а при тестировании это зачастую так) новый процесс распределиться на
свободный процессор, не тот на котором выполняется родитель, и этот новый процессор не находится под контролем cpulimit.
Re: Как ограничить загрузку процессора в Ubuntu Linux
Добавлено: 18 мар 2019, 00:20
roms
Olej писал(а):
Уточнение 1-е: fork() создаёт вам не поток, а совершенно автономный дочерний процесс в системе.
ясно, благодарю за замечание
но
Olej писал(а):
... с большой вероятностью в системе ничем не загруженной (а при тестировании это зачастую так) новый процесс распределиться на свободный процессор, не тот на котором выполняется родитель, и этот новый процессор не находится под контролем cpulimit.
в гостевой системе у меня 1 процессор (виртуальный)
Re: Как ограничить загрузку процессора в Ubuntu Linux
Добавлено: 18 мар 2019, 00:36
Olej
roms писал(а):в гостевой системе у меня 1 процессор (виртуальный)
В виртуальной машине могут быть побочные эффекты, временами весьма странные...
Покажите вывод там:
Код: Выделить всё
olej@ACER:~/2019_WORK/own.WORK/AplitSoft/FaceDL/cloud/HISTORY$ nproc
2
Вообще то, на 1 процессоре вот такой цикл должен бы вообще отбивать у вас всякую активность:
В параллельных ветвях (процессах, потоках) вообще выявляются разительные бывает эффекты, которые очень не просто интерпретируются на 1-й взгляд ... да и на 2-й взгляд тоже...
Посмотрите вот это:
Параллелизм, конкурентность, многопроцессорность в Linux
И ещё вот это:
параллельность + синхронизации (примеры) - там есть совершенно удивительные примеры.