Есть ли способ запустить программу на C ++ медленнее, изменив какие-либо параметры ОС в Linux? Таким образом, я хотел бы смоделировать, что произойдет, если эта конкретная программа будет работать на действительно более медленной машине.
Другими словами, более быстрая машина должна вести себя как более медленная машина для этой конкретной программы.
nice
- это команда, понижающая приоритет планирования. Различные древние, относительно грубые. Вы можете посмотреть на приоритеты планирования, но если машина не занята другими делами, ваша программа все равно будет работать быстро. Так что, вероятно, это не поможет.Ответы:
nice
(и / илиrenice
). Вы также можете сделать это программно, используяnice()
системный вызов. Это не замедлит скорость выполнения как таковую, но заставит планировщик Linux выделять меньше (и, возможно, короче) временных рамок выполнения, чаще выполнять вытеснение и т. Д. См. Планирование процессов (Глава 10) в Понимании ядра Linux для получения более подробной информации о планировании. .cpufreq-set
команды.sched_yield()
, который даст квант другим процессам, в критических для производительности частях вашей программы (требуется изменение кода).malloc()
,free()
иclock_gettime()
т.д., используя LD_PRELOAD , и делать некоторые глупые вещи, такие как сжигание нескольких миллионов циклов процессораrep; hop;
, вставка барьеров памяти и т.д. Это наверняка замедлит работу программы. (См. Этот ответ в качестве примера того, как это сделать).-O0
и включением утверждений (т.е.-DDEBUG
).Надеюсь, поможет.
источник
-ggdb3
) не замедляет выполнение двоичного файла. Это просто увеличивает его.QEMU - это эмулятор ЦП для Linux. У Debian есть пакеты для этого (я полагаю, что большинство дистрибутивов будут). Вы можете запустить программу в эмуляторе, и большинство из них должны поддерживать замедление. Например, у Мирослава Новака есть патчи для замедления QEMU.
В качестве альтернативы вы можете выполнить кросс-компиляцию с другим CPU-linux (arm-none-gnueabi-linux и т. Д.), А затем попросить QEMU перевести этот код для запуска.
Хороший совет предельно прост и может работать , если объединить его с другим процессом , который будет потреблять процессор.
Вы не сказали, нужен ли вам графический, файловый и / или сетевой ввод-вывод? Вы знаете что-нибудь о классе ошибок, который ищете? Это состояние гонки или код просто плохо работает на сайте клиента?
Изменить: вы также можете использовать такие сигналы, как STOP и CONT, для запуска и остановки вашей программы. Отладчик также может это сделать. Проблема в том, что код работает на полной скорости, а затем останавливается. Эта проблема возникает в большинстве решений с планировщиком Linux.
Был какой-то анализатор потоков от Intel. Я вижу примечания к выпуску Vtune . Это Vtune, но я был уверен, что есть еще один инструмент для анализа расхождения потоков.См .: Intel Thread Checker , который может проверять некоторые условия гонки потоков. Но мы не знаем, является ли приложение многопоточным?источник
Использование
cpulimit
:Это в репозиториях Ubuntu. Просто
Вот несколько примеров того, как использовать его в уже запущенной программе:
источник
источник
Если вы просто хотите смоделировать свою программу, чтобы проанализировать ее поведение на действительно медленной машине, вы можете попробовать заставить всю свою программу работать как какую
thread
-нибудь другую главную программу .Таким образом вы можете назначить приоритеты одному и тому же коду с разными приоритетами сразу в нескольких потоках и собрать данные вашего анализа. Я использовал это при разработке игр для анализа обработки кадров.
источник
Используйте спящий режим или ждите внутри своего кода. Это не самый лучший способ, но приемлемый для всех типов компьютеров с разной скоростью.
источник
Самый простой способ сделать это - обернуть ваш основной исполняемый код в цикл while с засыпанием в конце.
Например:
Как люди заметят, это не самый точный способ, поскольку ваш логический код по-прежнему будет работать с нормальной скоростью, но с задержками между запусками. Кроме того, предполагается, что ваш логический код работает в цикле.
Но это одновременно просто и настраивается.
источник