2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Нестабильное времени выполнения кода
Сообщение07.09.2024, 13:03 


15/12/22
180
В начале программы есть небольшой участок кода, время выполнения которого весьма нестабильно. Чаще всего он выполняется за 1,5 мс, но иногда бывает что за 0,3 мс. Если повторить этот начальный фрагмент в цикле несколько тыс. раз, то среднее время выполнения получается около 0,3 мс. Время выполнения определяется с помощью clock_gettime(CLOCK_MONOTONIC_RAW), и оно примерно совпадает с результатами измерения другими функциями, например clock().
Есть ещё одна особенность, если запустить программы в режиме сбора статистики Oracle Development Studio, то интересующий фрагмент всегда выполняется за 0,3мс. Хотя, сборщик статистики должен замедлять, а не ускорять выполнение кода.
Такое впечатление, что в начале выполнения программы, в течение 1мс, что то происходит, и это не связано с самой программой.
Что это может быть?

 Профиль  
                  
 
 Re: Нестабильное времени выполнения кода
Сообщение07.09.2024, 15:26 


14/01/11
3010
Если речь не об ОС реального времени, это может быть всё что угодно.

 Профиль  
                  
 
 Re: Нестабильное времени выполнения кода
Сообщение07.09.2024, 16:03 


15/12/22
180
Sender
можно это как то стабилизировать? например установить приоритет выполнения?

 Профиль  
                  
 
 Re: Нестабильное времени выполнения кода
Сообщение07.09.2024, 16:16 
Заслуженный участник


20/08/14
11646
Россия, Москва
Missir
А зачем? Почему Вас волнует однократная (не в цикле) задержка на 1мс?

 Профиль  
                  
 
 Re: Нестабильное времени выполнения кода
Сообщение07.09.2024, 16:25 


15/12/22
180
Dmitriy40 я оптимизирую этот участок кода и нужно знать что тормозит, код или система
в общем сделал $ sudo nice -n -20 ./example
время выполнения стало 0,25 мс. Причём, после этого оно остаётся таким и при запуске в обычном режиме, но потом снова становится 1,5мс. Надо полагать всё дело в приоритете выполнения

-- 07.09.2024, 16:28 --

да, точно, похоже всё из-за этого

 Профиль  
                  
 
 Re: Нестабильное времени выполнения кода
Сообщение07.09.2024, 16:51 
Заслуженный участник


20/08/14
11646
Россия, Москва
Ну, я могу придумать ситуацию (правда под винду, не уверен что прокатит и под линуксом) когда никакой приоритет не спасёт от тормозов. Тезисно: инициализация стека (локальных переменных) из свопа. Запуск в ОС без свопа и с рам диска спасёт, но могу придумать когда и это не поможет.

Так что если оптимизируете по скорости, то допустимо брать меньшее время из серии идентичных запусков. Остальное будет на совести ОС.

 Профиль  
                  
 
 Re: Нестабильное времени выполнения кода
Сообщение07.09.2024, 16:58 


15/12/22
180
Dmitriy40 в сообщении #1653663 писал(а):
допустимо брать меньшее время из серии идентичных запусков

по идее да, но были определённые сомнения, хотелось разобраться

 Профиль  
                  
 
 Re: Нестабильное времени выполнения кода
Сообщение12.10.2024, 20:48 
Аватара пользователя


07/02/12
1426
Питер
Dmitriy40 в сообщении #1653663 писал(а):
правда под винду, не уверен что прокатит и под линуксом

Там все то же самое. Но на самом деле своп тут даже не причем - недетерминированные задержки порядка одной-нескольких мс постоянно возникают благодаря наличию вытесняющей многозадачности и прерываний. Приоритет никак на это не влияет, запретить системе прерывать поток невозможно.

 Профиль  
                  
 
 Re: Нестабильное времени выполнения кода
Сообщение15.10.2024, 10:33 


15/12/22
180
bondkim137 в сообщении #1658386 писал(а):
Приоритет никак на это не влияет, запретить системе прерывать поток невозможно

и тем не менее, при запуске с высоким приоритетом, программа работает стабильно

 Профиль  
                  
 
 Re: Нестабильное времени выполнения кода
Сообщение18.10.2024, 02:59 
Аватара пользователя


07/02/12
1426
Питер
Missir в сообщении #1658603 писал(а):
и тем не менее, при запуске с высоким приоритетом, программа работает стабильно

При запуске с высоким приоритетом просто реже происходит перехват кванта времени, если конкурентные потоки/процессы работают с более низким приоритетом. Потому искажаются результаты ваших опытов. Приоритет влияет на вероятность, но принципиально никак не исключает возможность получить спонтанную задержку.

Причем, небольшую спонтанную задержку вы все равно всегда будете получать - даже если конкурентов вообще нет: шедулер, прервав вас, потратит какое-то время, осознавая это, и вернет вам управление. Тут будет меньше миллисекунд, но с десяток-другой микросекунд будет.

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

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



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

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


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

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group