Квант времени процесса windows

Квант времени процесса windows

Недавно узнал, что Windows делит время выполнения задач на кванты по 20мс.
В связи со спецификой рабочей задачи возник ряд вопросов.

Как часто выпадают кванты для данной задачи? 20мс через каждые 20мс? 1мс раз в 20мс? 20мс делится между всеми поровну или по приоритету, т.е. реальный квант данной задачи зависит от общего количества задач? Если мое приложение — единственное пользовательское, то, в среднем, сколько квантов в секунду будет получено? Переключение между задачами сколько времени занимает? Т.е. между 20мс выполнения одной задачи и 20мс выполнения другой есть потеря еще нескольких мс? Или это зависит от мощности системы, т.е. количество запущенных задач ухудшает работоспособность ТЕМ сильнее, чем слабее процессор?

Передо мной стоит ряд задач, требующих временнОго разрешения 0.01с. По условию программа теряет смысл, если есть запаздывание. Самое главное в этих задачах — мгновенная реакция окна на сообщение, и я тщательной макро- и микро- оптимизацией добился однозначного выполнения оконной процедуры за время от 0 до 3 мс в разных задачах (тестировал на PII — слабее не нашел, но программа все равно требует w98 по используемым WinAPI’шным функциям). Я рассчитывал, что это удовлетворит разрешающую способность, требуемую по задаче — 0.01с. Но квант составляет 20мс. Для полного выполнения процедуры этого кванта хватает, стало быть запаздывания все равно не будет, просто получается, что разрешение программы падает с 0.01с до 0.02с — так? Или хуже?
Если подумать, на практике мне в принципе достаточно будет 0,02-0,05с — фиговенько, но еще терпимо. Главное, чтобы временнОе разрешение программы превышало оное человека. Кроме того, можно надеятся и верить, что с учетом повышения мощности и многоядерности процессоров в ближайшем будущем ОС таки повысят временнОе разрешение — программа продолжит работать, прибавив в качестве.

И еще вопрос. Практически во всех этих задачах у меня помимо окна есть еще таймер, процедура которого тоже очень быстрая. Как они перекрываются? И перекрываются ли? Использую MMTimer — написано, что он запускается в отдельном процессе. Как одно влияет на другое и как связан вызов таймера с квантованием? Разрешение таймера требуется меньше (0.15-0.25с), но все же интересно, куда смещается точный момент вызова процедуры таймера, если заданный промежуток времени истекает на кванте времени, доставшегося другому процессу? Может, имеет смысл задавать определенные частоты для таймера, дескать ряд оптимальных чисел, гарантирующих вызов точно в срок с учетом квантования?

Квант времени процесса windows

Возможно ли в windows изменить значение кванта времени (по умолчанию 10 — 15 мс) на меньшее значение (например 5 мс)?
И если да, то как это сделать?

От: Алексей Петров
Дата: 29.04.05 20:51
Оценка:

Здравствуйте, Old Nick, Вы писали:

ON>Здравствуйте.

ON>Возможно ли в windows изменить значение кванта времени (по умолчанию 10 — 15 мс) на меньшее значение (например 5 мс)?
ON>И если да, то как это сделать?

Для GetTickCount — врядли. А вот функцией QueryPerfomanceCounter можно мерять время с очень высокой точностью. Сгодится?

От: axxie
Дата: 30.04.05 13:05
Оценка:

Здравствуйте, Old Nick, Вы писали:

ON>Здравствуйте.

ON>Возможно ли в windows изменить значение кванта времени (по умолчанию 10 — 15 мс) на меньшее значение (например 5 мс)?

Квант времени у винды не 10-15 мс. Вы, очевидно, имеете в виду разрешение таймера. Его поменять можно.

ON>И если да, то как это сделать?

С помощью timeBeginPeriod.
Не забудьте про timeEndPeriod.

От: Old Nick
Дата: 30.04.05 13:22
Оценка:

Здравствуйте, axxie, Вы писали:

A>Здравствуйте, Old Nick, Вы писали:

ON>>Здравствуйте.

ON>>Возможно ли в windows изменить значение кванта времени (по умолчанию 10 — 15 мс) на меньшее значение (например 5 мс)?

Читайте также:  Живой рабочий стол для windows 10 аквариум

A>Квант времени у винды не 10-15 мс. Вы, очевидно, имеете в виду разрешение таймера. Его поменять можно.

ON>>И если да, то как это сделать?

A>С помощью timeBeginPeriod.
A>Не забудьте про timeEndPeriod.

Я имею в виду именно квант времени у винды.
Мне нужно чтобы мое приложение получало процессорное время раз в N милисекунд (

5) (не гарантированно, а в среднем), а сейчас бывают большие пробелы.

От: Valery A. Boronin linkedin.com/in/boronin
Дата: 30.04.05 13:35
Оценка:

Здравствуйте, Old Nick, Вы писали:

ON>Возможно ли в windows изменить значение кванта времени (по умолчанию 10 — 15 мс) на меньшее значение (например 5 мс)?
ON>И если да, то как это сделать?

От: Аноним
Дата: 01.05.05 07:10
Оценка:

5) (не гарантированно, а в среднем), а сейчас бывают большие пробелы.

Продолжаю вытягивать из Вас информацию.
Во-первых, зачем это вашему приложению? Может проблему можно решить без ковыряния в квантах.
Во-вторых, какие у Вас возникли проблемы?
Как выглядит ваша программа?
Как вы организовали активацию программы?
Короче, нужно больше информации, чтобы помочь Вам.

P.S. Вообще говоря обычная винда не является Real-Time Operating System.

От: Slava Antonov http://deadbeef.narod.ru
Дата: 01.05.05 10:29
Оценка:

Hello , you wrote:

> P.S. Вообще говоря обычная винда не является Real-Time Operating System.

А есть «необычная»?


Всего хорошего, Слава

От: Old Nick
Дата: 01.05.05 13:16
Оценка:

5) (не гарантированно, а в среднем), а сейчас бывают большие пробелы.

А>Продолжаю вытягивать из Вас информацию.
А>Во-первых, зачем это вашему приложению? Может проблему можно решить без ковыряния в квантах.
А>Во-вторых, какие у Вас возникли проблемы?
А>Как выглядит ваша программа?
А>Как вы организовали активацию программы?
А>Короче, нужно больше информации, чтобы помочь Вам.

А>P.S. Вообще говоря обычная винда не является Real-Time Operating System.

Приложение по usb 2.0 запрашивает у внешнего устройства данные.
Буффер внешнего устройства заполняется (аппаратно) за 10 мс, следовательно, надо его считывать не реже чем раз в 5 — 10 мс.
Этим занимается отдельный поток, но в его работе возникают перерывы более чем на 10 мс (

15).
Программа под MFC.
ОС — Windows XP SP2.

Что такое активация программы не знаю.

От: Old Nick
Дата: 01.05.05 13:16
Оценка:

И как уменьшить значение кванта (для Windows XP)?

От: Аноним
Дата: 01.05.05 14:28
Оценка:

ON>Возможно ли в windows изменить значение кванта времени (по умолчанию 10 — 15 мс) на меньшее значение (например 5 мс)?
ON>И если да, то как это сделать?

Для начала — вы априори двигаетесь в неверном направлении. Вы никогда не получите гарантированного отклика от win32, даже если будете программировать на уровне драйверов. По этим граблям ходил я, по этим граблям ходили многие. Надеясь на win32 вы тем самым закладываете крайне низкую надежность вашей системы. А это нехорошо.

И ответ. да, возможно. В простейшем варианте:
«System properties» -> Tab «Advanced» -> button «Performance options».
настройка «Background services» соответсвует меньшему кванту времени,
и эта настройка именно этим и занимается.
Смотрите книгу «Inside Win2K» Mark Russinovich. Ее можно взять на anatolix.naumen.ru
там описано как можно настроить квант времени более тонко.

От: Valery A. Boronin linkedin.com/in/boronin
Дата: 01.05.05 15:09
Оценка: +1

Суть такая что все равно realtime (хотя сначала нужно с этим термином разобраться, что он для Вас значит) под Windows и даже на большинстве PC весьма ненадежная штука.

Ну запрограммируете Вы эту матрицу квантов как я описал (сверьтесь с Руссиновичем), разберетесь как Windows изменяет это дело в ответ на изменения пользователя в системном диалоге с настройками приоритетов (под кэш ли под приложения и т.п. см про кванты сообщ), возможно, немного применив reverse engineering. ну будет 1 мс тикать, это все равно не будет гарантированные 1 мс, скорее наоборот вся система начнет себя вести неадекватно и провалы начнутся по 2-3-5 мс регулярнее чем в стандартном режиме, МС не зря все эти параметры подбирал таким образом, чтобы общую производительность ОС и отклик на хорошем уровне иметь.

Читайте также:  Не запускаются компоненты windows

, надо примерно 5 мс и негарантированно, то можно даже с мультимедийным таймером timeXxxx поиграться, он как раз на специально оттюнингованной ОС (т.е. без лишнего софта и с минимумом необх для работы драйверов) эти 5 мс даст и довольно стабильно. просто если Вас негарантированно устраивает, то можно и WM_TIMER пользовать, зачем тогда вопрос задан был. уточнять надо постановку задачи

повторюсь:
опять же в силу архитектуры ядра Windows нет гарантий что суммарное время проведенное в какие-то периоды при обработке прерываний и соотв. в Dpc обработчиках не превысит те же 5-10 мс которые Вам очень нужны, соотв и сбоя не избежать (ибо перепланировка задач просто не может в это время произойти и соотв при всем желании Ваш PASSIVE_LEVEL поток не получит управление дабы хотя бы начать забирать данные с уcтройства) вопрос только в том насколько часто он будет происходить.

PS Вообще указанный вопрос не для этого форума а для низкоуровневого программирования по идее.

Квант времени процесса windows

Возможно ли в windows изменить значение кванта времени (по умолчанию 10 — 15 мс) на меньшее значение (например 5 мс)?
И если да, то как это сделать?

От: Алексей Петров
Дата: 29.04.05 20:51
Оценка:

Здравствуйте, Old Nick, Вы писали:

ON>Здравствуйте.

ON>Возможно ли в windows изменить значение кванта времени (по умолчанию 10 — 15 мс) на меньшее значение (например 5 мс)?
ON>И если да, то как это сделать?

Для GetTickCount — врядли. А вот функцией QueryPerfomanceCounter можно мерять время с очень высокой точностью. Сгодится?

От: axxie
Дата: 30.04.05 13:05
Оценка:

Здравствуйте, Old Nick, Вы писали:

ON>Здравствуйте.

ON>Возможно ли в windows изменить значение кванта времени (по умолчанию 10 — 15 мс) на меньшее значение (например 5 мс)?

Квант времени у винды не 10-15 мс. Вы, очевидно, имеете в виду разрешение таймера. Его поменять можно.

ON>И если да, то как это сделать?

С помощью timeBeginPeriod.
Не забудьте про timeEndPeriod.

От: Old Nick
Дата: 30.04.05 13:22
Оценка:

Здравствуйте, axxie, Вы писали:

A>Здравствуйте, Old Nick, Вы писали:

ON>>Здравствуйте.

ON>>Возможно ли в windows изменить значение кванта времени (по умолчанию 10 — 15 мс) на меньшее значение (например 5 мс)?

A>Квант времени у винды не 10-15 мс. Вы, очевидно, имеете в виду разрешение таймера. Его поменять можно.

ON>>И если да, то как это сделать?

A>С помощью timeBeginPeriod.
A>Не забудьте про timeEndPeriod.

Я имею в виду именно квант времени у винды.
Мне нужно чтобы мое приложение получало процессорное время раз в N милисекунд (

5) (не гарантированно, а в среднем), а сейчас бывают большие пробелы.

От: Valery A. Boronin linkedin.com/in/boronin
Дата: 30.04.05 13:35
Оценка:

Здравствуйте, Old Nick, Вы писали:

ON>Возможно ли в windows изменить значение кванта времени (по умолчанию 10 — 15 мс) на меньшее значение (например 5 мс)?
ON>И если да, то как это сделать?

От: Аноним
Дата: 01.05.05 07:10
Оценка:

5) (не гарантированно, а в среднем), а сейчас бывают большие пробелы.

Продолжаю вытягивать из Вас информацию.
Во-первых, зачем это вашему приложению? Может проблему можно решить без ковыряния в квантах.
Во-вторых, какие у Вас возникли проблемы?
Как выглядит ваша программа?
Как вы организовали активацию программы?
Короче, нужно больше информации, чтобы помочь Вам.

P.S. Вообще говоря обычная винда не является Real-Time Operating System.

От: Slava Antonov http://deadbeef.narod.ru
Дата: 01.05.05 10:29
Оценка:

Hello , you wrote:

> P.S. Вообще говоря обычная винда не является Real-Time Operating System.

Читайте также:  Фоторобот для windows 10

А есть «необычная»?


Всего хорошего, Слава

От: Old Nick
Дата: 01.05.05 13:16
Оценка:

5) (не гарантированно, а в среднем), а сейчас бывают большие пробелы.

А>Продолжаю вытягивать из Вас информацию.
А>Во-первых, зачем это вашему приложению? Может проблему можно решить без ковыряния в квантах.
А>Во-вторых, какие у Вас возникли проблемы?
А>Как выглядит ваша программа?
А>Как вы организовали активацию программы?
А>Короче, нужно больше информации, чтобы помочь Вам.

А>P.S. Вообще говоря обычная винда не является Real-Time Operating System.

Приложение по usb 2.0 запрашивает у внешнего устройства данные.
Буффер внешнего устройства заполняется (аппаратно) за 10 мс, следовательно, надо его считывать не реже чем раз в 5 — 10 мс.
Этим занимается отдельный поток, но в его работе возникают перерывы более чем на 10 мс (

15).
Программа под MFC.
ОС — Windows XP SP2.

Что такое активация программы не знаю.

От: Old Nick
Дата: 01.05.05 13:16
Оценка:

И как уменьшить значение кванта (для Windows XP)?

От: Аноним
Дата: 01.05.05 14:28
Оценка:

ON>Возможно ли в windows изменить значение кванта времени (по умолчанию 10 — 15 мс) на меньшее значение (например 5 мс)?
ON>И если да, то как это сделать?

Для начала — вы априори двигаетесь в неверном направлении. Вы никогда не получите гарантированного отклика от win32, даже если будете программировать на уровне драйверов. По этим граблям ходил я, по этим граблям ходили многие. Надеясь на win32 вы тем самым закладываете крайне низкую надежность вашей системы. А это нехорошо.

И ответ. да, возможно. В простейшем варианте:
«System properties» -> Tab «Advanced» -> button «Performance options».
настройка «Background services» соответсвует меньшему кванту времени,
и эта настройка именно этим и занимается.
Смотрите книгу «Inside Win2K» Mark Russinovich. Ее можно взять на anatolix.naumen.ru
там описано как можно настроить квант времени более тонко.

От: Valery A. Boronin linkedin.com/in/boronin
Дата: 01.05.05 15:09
Оценка: +1

Суть такая что все равно realtime (хотя сначала нужно с этим термином разобраться, что он для Вас значит) под Windows и даже на большинстве PC весьма ненадежная штука.

Ну запрограммируете Вы эту матрицу квантов как я описал (сверьтесь с Руссиновичем), разберетесь как Windows изменяет это дело в ответ на изменения пользователя в системном диалоге с настройками приоритетов (под кэш ли под приложения и т.п. см про кванты сообщ), возможно, немного применив reverse engineering. ну будет 1 мс тикать, это все равно не будет гарантированные 1 мс, скорее наоборот вся система начнет себя вести неадекватно и провалы начнутся по 2-3-5 мс регулярнее чем в стандартном режиме, МС не зря все эти параметры подбирал таким образом, чтобы общую производительность ОС и отклик на хорошем уровне иметь.

, надо примерно 5 мс и негарантированно, то можно даже с мультимедийным таймером timeXxxx поиграться, он как раз на специально оттюнингованной ОС (т.е. без лишнего софта и с минимумом необх для работы драйверов) эти 5 мс даст и довольно стабильно. просто если Вас негарантированно устраивает, то можно и WM_TIMER пользовать, зачем тогда вопрос задан был. уточнять надо постановку задачи

повторюсь:
опять же в силу архитектуры ядра Windows нет гарантий что суммарное время проведенное в какие-то периоды при обработке прерываний и соотв. в Dpc обработчиках не превысит те же 5-10 мс которые Вам очень нужны, соотв и сбоя не избежать (ибо перепланировка задач просто не может в это время произойти и соотв при всем желании Ваш PASSIVE_LEVEL поток не получит управление дабы хотя бы начать забирать данные с уcтройства) вопрос только в том насколько часто он будет происходить.

PS Вообще указанный вопрос не для этого форума а для низкоуровневого программирования по идее.

Оцените статью