Как ограничить загрузку процессора в Ubuntu Linux

Здесь будут размещаться ссылки и отзывы на интересные публикации по Linux

Модераторы: Olej, vikos

Правила форума
Запрещается помещать сообщения, не имеющие отношения к обсуждаемой статье. Все такие сообщения будут удаляться непосредствено после обнаружения.

roms
Активист
Сообщения: 11
Зарегистрирован: 14 мар 2019, 11:27
Контактная информация:

Re: Как ограничить загрузку процессора в Ubuntu Linux

Непрочитанное сообщение roms » 17 мар 2019, 15:56

Пишут:
Все дочерние процессы и потоки указанного процесса будут использовать один и тот же процент загрузки ЦП
похоже это не так, к сожалению.
Действует только на тот процесс(поток ?) PID которого указан опцией p

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Как ограничить загрузку процессора в Ubuntu Linux

Непрочитанное сообщение Olej » 17 мар 2019, 20:02

roms писал(а):Пишут:
Все дочерние процессы и потоки указанного процесса будут использовать один и тот же процент загрузки ЦП
похоже это не так, к сожалению.
Действует только на тот процесс(поток ?) PID которого указан опцией p
Давайте разбираться...
По моему, так именно и должно быть:
- большинство приложений/процессов Linux на сегодня используют только 1 процессор, и не умеют использовать больше 1-го...
- я вот здесь проверял работу cpulimit в условиях, несколько отличающихся от описанного в статье: редкие полезные команды
- по идее, именно то, что хотелось бы: загрузка используемого задачей процессора ограничивалась на уровне 20%

roms
Активист
Сообщения: 11
Зарегистрирован: 14 мар 2019, 11:27
Контактная информация:

Re: Как ограничить загрузку процессора в Ubuntu Linux

Непрочитанное сообщение roms » 17 мар 2019, 21:50

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(и хост и гостевая)
Либо мой тест не корректен, либо ..

roms
Активист
Сообщения: 11
Зарегистрирован: 14 мар 2019, 11:27
Контактная информация:

Re: Как ограничить загрузку процессора в Ubuntu Linux

Непрочитанное сообщение roms » 17 мар 2019, 22:08

скрин приложу
странно, в этот раз видно что и у потомка процент загрузки снижается немного
cpulimit_1.PNG

roms
Активист
Сообщения: 11
Зарегистрирован: 14 мар 2019, 11:27
Контактная информация:

Re: Как ограничить загрузку процессора в Ubuntu Linux

Непрочитанное сообщение roms » 17 мар 2019, 22:35

проделываю то же на хосте, ограничиваю родительский процесс виртуалбокса, внутри которого работает предыдущий примерчик
cpulimit -l 50 -p 5457 &
тут нормально!
и у родителя и у потомока процент загрузки снижается практически до заявленных ( -l 50 )
cpulimit_2.PNG
Последний раз редактировалось roms 18 мар 2019, 00:12, всего редактировалось 1 раз.

roms
Активист
Сообщения: 11
Зарегистрирован: 14 мар 2019, 11:27
Контактная информация:

Re: Как ограничить загрузку процессора в Ubuntu Linux

Непрочитанное сообщение roms » 17 мар 2019, 22:55

В первом случае( тестовый примерчик на гостевой машине) видно что родитель сигнал SIGSTOP получает, потомок нет(?).
Во втором случае SIGSTOP'ы видны как у родительского, так и у всех дочерних

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Как ограничить загрузку процессора в Ubuntu Linux

Непрочитанное сообщение Olej » 18 мар 2019, 00:11

roms писал(а): Скомпилил для теста:
(взято из примера работы fork(), printf'ы оттуда :-) )
...
Два потока всего, "натравливаю" cpulimit на родительский, он его и ограничивает, дочерний как был 100% загрузка, так и остается.
Уточнение 1-е: fork() создаёт вам не поток, а совершенно автономный дочерний процесс в системе.

А 2-е ... соображение: независимый процесс может распределяться и выполняться, вообще то говоря, на любом процессоре, в том числе и на том, где выполняется родитель - тут всё зависит от распределения загрузки процессоров... Но с большой вероятностью в системе ничем не загруженной (а при тестировании это зачастую так) новый процесс распределиться на свободный процессор, не тот на котором выполняется родитель, и этот новый процессор не находится под контролем cpulimit.

roms
Активист
Сообщения: 11
Зарегистрирован: 14 мар 2019, 11:27
Контактная информация:

Re: Как ограничить загрузку процессора в Ubuntu Linux

Непрочитанное сообщение roms » 18 мар 2019, 00:20

Olej писал(а): Уточнение 1-е: fork() создаёт вам не поток, а совершенно автономный дочерний процесс в системе.
ясно, благодарю за замечание
но
Olej писал(а): ... с большой вероятностью в системе ничем не загруженной (а при тестировании это зачастую так) новый процесс распределиться на свободный процессор, не тот на котором выполняется родитель, и этот новый процессор не находится под контролем cpulimit.
в гостевой системе у меня 1 процессор (виртуальный)

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Как ограничить загрузку процессора в Ubuntu Linux

Непрочитанное сообщение Olej » 18 мар 2019, 00:36

roms писал(а):в гостевой системе у меня 1 процессор (виртуальный)
В виртуальной машине могут быть побочные эффекты, временами весьма странные...
Покажите вывод там:

Код: Выделить всё

olej@ACER:~/2019_WORK/own.WORK/AplitSoft/FaceDL/cloud/HISTORY$ nproc
2
Вообще то, на 1 процессоре вот такой цикл должен бы вообще отбивать у вас всякую активность:

Код: Выделить всё

while(1){};
В параллельных ветвях (процессах, потоках) вообще выявляются разительные бывает эффекты, которые очень не просто интерпретируются на 1-й взгляд ... да и на 2-й взгляд тоже...
Посмотрите вот это: Параллелизм, конкурентность, многопроцессорность в Linux

И ещё вот это: параллельность + синхронизации (примеры) - там есть совершенно удивительные примеры.

Ответить

Вернуться в «Публикации, книги и обсуждения»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 9 гостей