LINUX.ORG.RU

Уменьшить вариацию времени выполнения программы

 ,


0

2

На работе есть один комп с перфоманс тэстингом нашего продукта. На входе 4к тестов, на каждом из которых надо отслеживать замедления/ускорения на каком-то множестве коммитов. Всё это запускается раз в сутки, компьютер для этого дела отдельный и никто туда не может залогиниться и создавать лишнюю нагрузку. Софтина для каждого теста запускается в 1 процесс и 8 потоков (у проца 8 потоков с гипертредингом), с высшим приоритетом, I/O с диска не учитывается. Производится 3 таких запуска и выбирается минимальное из 3-х запусков CPU time. Оно считается «правильным» для ревизии, и далее производится бисекция по коммитам для автоматического поиска виновных. Тесты занимают от пары секунд до пары минут.

Собственно я понимаю что невозможно в многозадачной ОС надёжно измерять время, но может есть какие-то способы уменьшить вариацию времени выполнения? Хочется вариацию не более 5 процентов. На данный момент ОС на компе - Win 10, но я думаю есть ли смысл попробовать какой-нибудь Debian с rt ядром? Я с realtime системой не имел дела, может ли она дать то что мне нужно?



Последнее исправление: olologin (всего исправлений: 3)

взгляд с дивана:

  • отключить нафиг гипертрединг, пусть работает на честных физических ядрах
  • вместо высшего приоритета наоборот запускать с обычным, и поставить жёсткие лимиты на ресурсы так, чтобы их хватало с запасом
  • вместо минимального времени можно попробовать исключить первый запуск ( сборка / загрузка в память с диска и т.д .), а от остальных брать медиану
  • во время работы собирать метрики производительности, чтобы потом была возможность раскурить бамбук и подумать, дело в коммите или в чём-то ещё
router ★★★★★
()
Ответ на: комментарий от router

так, чтобы их хватало с запасом

в смысле, чтобы часть ресурсов cpu/памяти/io/сети была свободна и не было конкуренции за ресурсы

router ★★★★★
()
Ответ на: комментарий от router

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

olologin
() автор топика

держи кеши холодными, иначе будет пшик, а не замеры

anonymous
()

В линупсах можно освободить ядра ЦП от других задач и назначить их выполнять только одну твою. Приоритет тоже, да, можно рилтаймовый настроить. Сейчас это везде есть, даже не надо специально патчить ядро. Алсо сами екзечники и данные можно разместить в tmpfs, чтобы исключить влияние задержек харда. Ещё тебе обязательно надо зафиксировать частоту ядер ЦП на какой-то средней приемлемой величине, так как её максимальное значение может зависеть от температуры окружающей среды даже. Это тоже можно сделать в линуксе.

Это если кратко и только про проц. Как что там сделать — поищи на форуме. Дистр лучше брать нормальный, а не дебиан.

anonymous
()
Ответ на: комментарий от anonymous

Насчёт диска и tmpfs можно не париться, добавил в оп пост инфу о том что I/O с диска не учитывается в рантайме программы, потому что на самом деле мы профайлим не время работы процесса, а время работы определённой функции в процессе после того как загрузим данные с диска.

olologin
() автор топика

Не уверен, что правильно брать именно минимальное значение.

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

Deleted
()

На данный момент ОС на компе - Win 10, но я думаю есть ли смысл попробовать какой-нибудь Debian с rt ядром?

  1. советы по w10 ты врятли тут получишь;
  2. ставь ubuntu, отключай cron (или удаляй его задачи), удали проверку обновлений, удали вообще всё лишнее к твоей задачи;
  3. и если опять разные времена и это не есть бага программы, то только тогда и мониторить работу процессов;
  4. а для теста запускай кодирование видео например, это независимая нагрузка и каждый сможет повторить
x905 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.