Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044

Нагрузка процессора до заданного уровня

05.03.2015, 17:03. Показов 2547. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую, уважаемые форумчане!
Встала тут передо мной одна специфичная (хотя, возможно, не такая уж и специфичная) задачка. Необходимо нагрузить ЦП до определённого уровня. При этом система должна работать в штатном режиме, т.е. где-то в фоне крутятся какие-то демоны, работают пользовательские приложения, и при всём этом разрабатываемая утилита должна "добить" уже нагруженный процессор до определённого (скажем, в процентах) уровня.
Всё, что пока что пришло мне в голову: есть бесконечный цикл, внутри которого крутится ещё один цикл, в котором выполняется некая простая и бесполезная арифметика (сложения-умножения-деления целых и действительных чисел). После выполнения внутреннего цикла стоит задержка. Варьируя два параметра - количество итераций внутреннего цикла и величину задержки - я могу поддерживать нагрузку на нужном мне уровне. Главная задача, которая встаёт, если мы примем описанную реализацию - подбор указанных параметров на очередном кванте. Ведь в системе уже выполняются какие-то задачи, следовательно, какая-то нагрузка на процессор уже имеется, и надо вычислить такие значения параметров, чтобы суммарная нагрузка равнялась заданной.
Тут мне в голову приходят два варианта: либо побрутфорсить параметры и посмотреть, наблюдается ли какая-то простая зависимость (то, что зависимость нелинейная, я уже выяснил), либо собирать статистику и пытаться экстраполировать функцию двух переменных (от количества итераций и величины задержки). К сожалению, экстраполяция может быть дорогой операцией в данном случае и вносить дополнительные погрешности в статистику нагрузки (получается замкнутый круг).
Кто что думает по поводу описанного алгоритма? Возможно, кто-то сталкивался с подобной задачей и решил её иначе? Или кому-то на ум приходит эвристика для подбора указанных параметров? Или в алгоритме есть изъян и он не приведёт к желаемому результату?
Всем заранее спасибо.

P.S. Знаю, многабукав, но ничего с собой поделать не могу
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.03.2015, 17:03
Ответы с готовыми решениями:

Нагрузка процессора
Заранее извиняюсь если не туда написал. У меня ОС Windows Vista. У меня в диспетчере задач почему то находится около 12-15 процессов...

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

Скачит нагрузка процессора
Увидел как медленно грузит браузер ,посмотрел нагрузку ,а там ЭТО .Нагрузка скачит по приложениям и это как прихватки ,то этого нет,то есть

6
599 / 421 / 137
Регистрация: 02.10.2008
Сообщений: 1,798
Записей в блоге: 1
05.03.2015, 22:28
А просто время nanosleep() регулировать? Получится "кусками" времени жарим до 100%, потом отдыхаем.
Ну это как аналогия из ШИМ, правда как мониторить-то? Надо узнавать кол-во процев=>создавать соответствующее кол-во форков, текущую среднюю нагрузку по всем процессорам/по каждому в отдельности и т.д. Логика управления будет не из лёгких.
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
06.03.2015, 05:32  [ТС]
drfaust, собственно говоря, я ведь именно такую идею и описал:
Цитата Сообщение от silent_1991 Посмотреть сообщение
цикл, в котором выполняется некая простая и бесполезная арифметика
Это мы как раз жарим до 100%.
Цитата Сообщение от silent_1991 Посмотреть сообщение
После выполнения внутреннего цикла стоит задержка
Это отдых.
Цитата Сообщение от drfaust Посмотреть сообщение
Логика управления будет не из лёгких.
И, как я уже сказал, главная задача для меня сейчас - как раз проработать логику управления.

Цитата Сообщение от drfaust Посмотреть сообщение
Надо узнавать кол-во процев=>создавать соответствующее кол-во форков, текущую среднюю нагрузку по всем процессорам/по каждому в отдельности и т.д.
Тут я могу ограничиться одним многоядерным процессором. Узнать количество ядер, запустить соответствующее количество тредов, выставить им affinity проблем нет. Кроме того, достаточно уметь поддерживать нужный уровень нагрузки в одной треде. Тогда, если каждая треда будет уметь регулировать уровень нагрузки на своё ядро, то, например, 4 треды, каждая из которых грузит своё ядро на 60%, будут грузить на 60% четырёхядерный процессор. Если в системе несколько процессоров, достаточно запустить нужное количество копий утилиты и выставить им всем affinity (например, taskset'ом).
Короче говоря, задача прекрасно поддаётся декомпозиции. По сути, мне надо уметь в одной треде регулировать нагрузку на ядро, на котором она крутится. А дальше запустить нужное количество тред - дело техники. Все они будут работать независимо.
0
 Аватар для HighPredator
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
06.03.2015, 08:21
Не претендую на ответ, просто для информации. Я когда-то читал, что всякие утилиты для всяких тестов процессоров работают путем его нагрузки SSE-инструкциями умножая матрицы. Может вам в эту сторону посмотреть. Но там в моем понимании ассемблер, а не Си...
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
06.03.2015, 09:36  [ТС]
Цитата Сообщение от HighPredator Посмотреть сообщение
всякие утилиты для всяких тестов процессоров работают путем его нагрузки SSE-инструкциями умножая матрицы. Может вам в эту сторону посмотреть.
Проблема в том, что если бы мне нужна была такая нагрузка, которую предлагают эти утилиты, т.е. нагрузка ЦП на 100%, я бы просто собрал одну из них под нужную платформу и отправил задачу в резолв.

Я предварительно изучил вопрос и в целом понимаю, как нагрузить процессор. Но нигде не нашёл информации о том, как нагрузить процессор до нужного уровня. Именно в этом состоит задача и именно в этом ключевой вопрос, которому посвящена тема.
0
599 / 421 / 137
Регистрация: 02.10.2008
Сообщений: 1,798
Записей в блоге: 1
06.03.2015, 09:37
Цитата Сообщение от silent_1991 Посмотреть сообщение
Тут я могу ограничиться одним многоядерным процессором. Узнать количество ядер, запустить соответствующее количество тредов, выставить им affinity проблем нет. Кроме того, достаточно уметь поддерживать нужный уровень нагрузки в одной треде. Тогда, если каждая треда будет уметь регулировать уровень нагрузки на своё ядро, то, например, 4 треды, каждая из которых грузит своё ядро на 60%, будут грузить на 60% четырёхядерный процессор. Если в системе несколько процессоров, достаточно запустить нужное количество копий утилиты и выставить им всем affinity (например, taskset'ом).
Короче говоря, задача прекрасно поддаётся декомпозиции. По сути, мне надо уметь в одной треде регулировать нагрузку на ядро, на котором она крутится. А дальше запустить нужное количество тред - дело техники. Все они будут работать независимо.
Ну да, клепаем нужное кол-во потоков (кол-во процев*кол-во ядер в общем случае) с привязкой к конкретному процу/ядру, и отдельным потоком регулируем время sleep`а или другого засыпания на всех "нагрузочных потоках".

Только вот как вычислить соотношение нагрузка/время_сна, и как быть с энергосбережением=троттлинг/буст - по идее изменение частоты проца должно изменять это самое соотношение нагрузка/сон? Время сна опять же должно быть достаточно большим, а значит и цикл должен быть достаточно долгим, иначе начнёт сказываться работа планировщика ядра.

Матрицы в цикле можно применять, но только маленькие и использовать int/float. Цикл нагрузки(в случае больших матриц) не должен скидывать кэш - сильно скажется на производительности системы.
1
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
06.03.2015, 10:06  [ТС]
Цитата Сообщение от drfaust Посмотреть сообщение
Матрицы в цикле можно применять, но только маленькие и использовать int/float. Цикл нагрузки(в случае больших матриц) не должен скидывать кэш - сильно скажется на производительности системы.
Да, это полезный совет, кэш лучше задействовать как можно меньше.
Думаю, хватит и обычных умножений/сложений на каждой итерации, просто количество итераций должно быть больше, чем в случае с матрицами. Вообще, не принципиально, какая арифметика будет крутиться в цикле, главное, чтобы она некоторое время непрерывно загружала камень.

Цитата Сообщение от drfaust Посмотреть сообщение
Только вот как вычислить соотношение нагрузка/время_сна
Да, вот именно - как это делать? Либо нужна какая-то эмпирика, либо придётся экстраполяцию на основе статистики проводить, соответственно, будет некий бутстрап, пока система не выйдет в рабочий режим (пока не накопится достаточно статистики, чтобы результаты экстраполяции были приближены к реальности).
Цитата Сообщение от drfaust Посмотреть сообщение
и как быть с энергосбережением=троттлинг/буст - по идее изменение частоты проца должно изменять это самое соотношение нагрузка/сон?
Думаю, эта проблема отпадёт, как только я научусь динамически менять значение параметров. Загрузка процессора - величина объективная, и главное, какая она на данном кванте, а не какая у неё динамика с момента старта. Уменьшилась частота -> возросла нагрузка -> запустили алгоритм коррекции параметров -> загрузка пришла к требуемому уровню. И так каждый квант.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.03.2015, 10:06
Помогаю со студенческими работами здесь

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

WCF и нагрузка процессора
Имеется программа для удаленного просмотра рабочего стола. Но там имеется сильная нагрузка на процессор на стороне Клиента, который...

Сильная нагрузка процессора
Стал сильно грузиться процессор во всех приложениях, до ~70% при прокрутке страницы в браузере, фризы в игрушках.

100% нагрузка процессора
Проблема появилась сегодня. В безопасном режиме все работает нормально.

Нагрузка процессора под 100%
Здравствуйте. В общем, где то с полгода назад началась такая проблема. В не зависимости от того запущен ли сам игровой процесс или я просто...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru