| 1 2 3 |
| Re[24]: Как заставить settimer квантировать менее 15 мс? | |
| От: | ononim | ||
| Дата: | 14.02.10 10:53 |
| GN>Почему синхронизации с обратным ходом луча + Sleep(1) будет давать пропуск кадров на NT системах, а с — timeBeginPeriod(1) — не будет. А WaitForVerticalBlank крутит в ядре спинлок, отнимая кучу процесорного времени в таскменеджере и Sleep(1) ее заметно снижает. Только без timeBeginPeriod(1) в 2 раза медленнее. 100 Герц возьмем, или 10мс период, как туда впишутся 1 или 15 мс Sleep? GN>Почему в разном софте вот уже 10 лет это используют, сначала как недокументироованное know-how (я это первый раз раскопал в каком-то плагине к миранде), а теперь даже официально подтверждённое. Наверное MSDN писали по моим старым постам Это все конечно познавательно, но к вопросу размера кванта шедулера имеет такое же отношение как проблемы берберов в пустыне к проблемам похудания американцев. просто после timeBeginPeriod(1) потоки ждущие Sleep'а переключаются _чаще_ чем квантируется шедулер. Квант шедудера — определяет насколько часто будут переключатся потоки которые не ждут ничего — ни таймера ни event'а. Квант шедудера — определяет сколько поток который сам не переходит в ожидание будет работать пока контекст не будет насильно переключен на другого (если другой который ничего не ждет — имеется). Потоки которые чегото ждут могут получать (и получают) управление с "разрешением" меньшим чем квант шедулера, в том случае когда это чтото, чео они ждуи переходит в сигнальное состояние. см http://rsdn.ru/forum/winapi/3704176.1.aspx Автор: ononim Дата: 14.02.10 Как много веселых ребят, и все делают велосипед... |
| Re[24]: Как заставить settimer квантировать менее 15 мс? | |
| От: | ononim | ||
| Дата: | 14.02.10 19:36 |
| GN>Угу, это timebeginPeriod(1) на 2х ядрах. Прараметр ZwSetTimerResolution виден здесь Автор: gear nuke .Дата: 14.02.10 Вот на 2х ядрах после timebeginPeriod(1): http://rsdn.ru/forum/winapi/3704034.1.aspx Автор: ononim Дата: 14.02.10 У тебя же там ровно то что я вижу если нету никакого timebeginPeriod. кто нибудь кто умеет кернелдебагить, пожалуйста, сделайте следующее: 0) обеспечьте максимум ресурсов для виртуалки/windbg (закройте все винампы, винрары качалки etc) 1) запустите на многопроцессорную систему/виртуалку под windbg/kd 2) запустите внутри прогу которая делает timeBeginPeriod(1) и _не_выходит_после_этого_ а тупо остается висеть (так как если она выйдет — система отменит timeBeginPeriod автоматом) 3) поставьте такие бряки: bp hal!HalpClockInterruptPn ".echo HalpClockInterruptPn; g" bp hal!HalpClockInterrupt ".echo HalpClockInterrupt; g" bp nt!KeUpdateRunTime ".echo KeUpdateRunTime; g" bp nt!KeUpdateSystemTime ".echo KeUpdateSystemTime; g" 4) нажмите F5 и запостите в форум что увидите Как много веселых ребят, и все делают велосипед... |
| Re[25]: Как заставить settimer квантировать менее 15 мс? | |
| От: | gear nuke | ||
| Дата: | 15.02.10 07:51 |
| Здравствуйте, ononim, Вы писали: O>У тебя же там ровно то что я вижу если нету никакого timebeginPeriod.
O>[b]кто нибудь кто умеет кернелдебагить, пожалуйста, сделайте следующее: O>0) обеспечьте максимум ресурсов для виртуалки/windbg (закройте все винампы, винрары качалки etc) А есть смысл это делать? В ISR таймера упоминался отладчик, но, поскоольку тема сменилась со "сомотри сорцы" на "дабы вы не трудились копая в иде хал", я поленюсь . People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth |
| Re[25]: Как заставить settimer квантировать менее 15 мс? | |
| От: | gear nuke | ||
| Дата: | 15.02.10 07:51 |
| Здравствуйте, ononim, Вы писали: O>Это все конечно познавательно, но к вопросу размера кванта шедулера имеет такое же отношение как проблемы берберов в пустыне к проблемам похудания американцев. O>просто после timeBeginPeriod(1) потоки ждущие Sleep'а переключаются _чаще_ чем квантируется шедулер. O>Квант шедудера — определяет насколько часто будут переключатся потоки которые не ждут ничего — ни таймера ни event'а. Я ведь писал на эту тему здесь Автор: gear nuke . Дата: 12.02.10 Нет функции шедюлер. Не описана она нигде в документации. Поэтому легко утверждать, что якобы к ней относится только 15 мс. Однако обратим внимание к чему относится слово переключение в цитате (которая "врет"
O> Квант шедудера Квант — минимальная неделимая величина — во первых. А во вторых уже — шедюлера O>- определяет насколько часто будут переключатся потоки которые не ждут ничего — ни таймера ни event'а. Квант шедудера — определяет сколько поток который сам не переходит в ожидание будет работать пока контекст не будет насильно переключен на другого (если другой который ничего не ждет — имеется). O>Потоки которые чегото ждут могут получать (и получают) управление с "разрешением" меньшим чем квант шедулера, в том случае когда это чтото, чео они ждуи переходит в сигнальное состояние. O>см http://rsdn.ru/forum/winapi/3704176.1.aspx Автор: ononim Дата: 14.02.10 В двух словах можно сказать "когда происходит ручное управление шедюлером" . People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth |
| 1 2 3 |