Форум по операционной системе GNU/Linux и свободному программному обеспечению
Текущее время: 19 мар 2019, 04:36

Часовой пояс: UTC + 3 часа


Правила форума


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



Начать новую тему Ответить на тему  [ Сообщений: 17 ]  На страницу 1, 2  След.
Автор Сообщение
Непрочитанное сообщениеДобавлено: 13 мар 2019, 13:51 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 11633
Откуда: Харьков
Вчера:
Как ограничить загрузку процессора в Ubuntu Linux с помощью CPULimit.

Очень нужная публикация.


Вернуться к началу
 Профиль Отправить личное сообщение Отправить email  
 
Непрочитанное сообщениеДобавлено: 17 мар 2019, 15:56 
Не в сети
Интересующийся

Зарегистрирован: 14 мар 2019, 11:27
Сообщения: 9
Пишут:
Цитата:
Все дочерние процессы и потоки указанного процесса будут использовать один и тот же процент загрузки ЦП

похоже это не так, к сожалению.
Действует только на тот процесс(поток ?) PID которого указан опцией p


Вернуться к началу
 Профиль Отправить личное сообщение  
 
Непрочитанное сообщениеДобавлено: 17 мар 2019, 20:02 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 11633
Откуда: Харьков
roms писал(а):
Пишут:
Цитата:
Все дочерние процессы и потоки указанного процесса будут использовать один и тот же процент загрузки ЦП

похоже это не так, к сожалению.
Действует только на тот процесс(поток ?) PID которого указан опцией p

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


Вернуться к началу
 Профиль Отправить личное сообщение Отправить email  
 
Непрочитанное сообщениеДобавлено: 17 мар 2019, 21:50 
Не в сети
Интересующийся

Зарегистрирован: 14 мар 2019, 11:27
Сообщения: 9
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(и хост и гостевая)
Либо мой тест не корректен, либо ..


Вернуться к началу
 Профиль Отправить личное сообщение  
 
Непрочитанное сообщениеДобавлено: 17 мар 2019, 22:08 
Не в сети
Интересующийся

Зарегистрирован: 14 мар 2019, 11:27
Сообщения: 9
скрин приложу
странно, в этот раз видно что и у потомка процент загрузки снижается немного
Вложение:
cpulimit_1.PNG
cpulimit_1.PNG [ 28.09 КБ | Просмотров: 11 ]


Вернуться к началу
 Профиль Отправить личное сообщение  
 
Непрочитанное сообщениеДобавлено: 17 мар 2019, 22:35 
Не в сети
Интересующийся

Зарегистрирован: 14 мар 2019, 11:27
Сообщения: 9
проделываю то же на хосте, ограничиваю родительский процесс виртуалбокса, внутри которого работает предыдущий примерчик
cpulimit -l 50 -p 5457 &
тут нормально!
и у родителя и у потомока процент загрузки снижается практически до заявленных ( -l 50 )
Вложение:
cpulimit_2.PNG
cpulimit_2.PNG [ 136.57 КБ | Просмотров: 11 ]


Последний раз редактировалось roms 18 мар 2019, 00:12, всего редактировалось 1 раз.

Вернуться к началу
 Профиль Отправить личное сообщение  
 
Непрочитанное сообщениеДобавлено: 17 мар 2019, 22:55 
Не в сети
Интересующийся

Зарегистрирован: 14 мар 2019, 11:27
Сообщения: 9
В первом случае( тестовый примерчик на гостевой машине) видно что родитель сигнал SIGSTOP получает, потомок нет(?).
Во втором случае SIGSTOP'ы видны как у родительского, так и у всех дочерних


Вернуться к началу
 Профиль Отправить личное сообщение  
 
Непрочитанное сообщениеДобавлено: 18 мар 2019, 00:11 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 11633
Откуда: Харьков
roms писал(а):
Скомпилил для теста:
(взято из примера работы fork(), printf'ы оттуда :-) )
...
Два потока всего, "натравливаю" cpulimit на родительский, он его и ограничивает, дочерний как был 100% загрузка, так и остается.

Уточнение 1-е: fork() создаёт вам не поток, а совершенно автономный дочерний процесс в системе.

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


Вернуться к началу
 Профиль Отправить личное сообщение Отправить email  
 
Непрочитанное сообщениеДобавлено: 18 мар 2019, 00:20 
Не в сети
Интересующийся

Зарегистрирован: 14 мар 2019, 11:27
Сообщения: 9
Olej писал(а):
Уточнение 1-е: fork() создаёт вам не поток, а совершенно автономный дочерний процесс в системе.

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

в гостевой системе у меня 1 процессор (виртуальный)


Вернуться к началу
 Профиль Отправить личное сообщение  
 
Непрочитанное сообщениеДобавлено: 18 мар 2019, 00:36 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 11633
Откуда: Харьков
roms писал(а):
в гостевой системе у меня 1 процессор (виртуальный)

В виртуальной машине могут быть побочные эффекты, временами весьма странные...
Покажите вывод там:
Код:
olej@ACER:~/2019_WORK/own.WORK/AplitSoft/FaceDL/cloud/HISTORY$ nproc
2

Вообще то, на 1 процессоре вот такой цикл должен бы вообще отбивать у вас всякую активность:
Код:
while(1){};


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

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


Вернуться к началу
 Профиль Отправить личное сообщение Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 17 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


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

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB
[ Time : 0.134s | 19 Queries | GZIP : On ]