Сейчас на форуме: (+4 невидимых) |
eXeL@B —› Программирование —› SetTimerResolution. |
. 1 . 2 . >> |
Посл.ответ | Сообщение |
|
Создано: 10 января 2020 01:49 · Личное сообщение · #1 Решил замеры провести. Что то странное получается. VOLKOFF > Когда окно выходит на первый план в клиентской системе, все потоки в процессе, содержащем тот поток, который владеет окном первого плана,получают утроенные кванты. Смысл замеров следующий. Поток крутится 1сек в цикле считая чис прерываний за это время, через их возврат сбросом RPL. По окончании времени выводит число прерываний и сново считает их за 1 сек. Если потоков несколько, то они одновременно и синхронно считают за 1 сек, атомарно инкрементируя счётчик. Таким образом увеличивается точность подсчёта, так как пока один тред спит, другой считает. Использовано два способа NtSetTimerResolution и NtSetIntervalProfile. Первый сервис на стороне hal.HalSetTimeIncrement не перестраивает железо, изменяя лишь переменные, связанные с обработкой прерывания. Второй сервис на стороне hal.HalSetProfileInterval устанавливает значение счётчика APIC, который после обнуления счётчика вызывает прерывание. При этом он выключен и что бы его завести нужно вызвать NtStartProfile. 1th/16th число измеряющих потоков. resol - вызван NtSetTimerResolution с минимальной точностью. apic - запущен таймер с текущим разрешением или минимальным. Красным подчёркнуто начало событий перетаскивания чужого окна мышью(другого процесса). e607_10.01.2020_EXELAB.rU.tgz - ints.7z ----- vx |
|
Создано: 10 января 2020 13:36 · Поправил: VOLKOFF · Личное сообщение · #2 Если использование переменных квантов разрешено, индекс кванта процесса зависит от окна, если первый план, должен накинуть кванты Индексы см в таблице PspForegroundQuantum\PspVariableQuantums Какой процесс отнести к процессам первого плана, решает система управления окнами, в переменной PsPrioritySeparation отражается индекс таблицы квантов, используемый для выбора квантов потоков первого плана. Владельцы окон также получают при пробуждении дополнительное повышение приоритета из-за активности при работе с окнами, смысл аналогичен - ап интерактива. В "Windows Internals" есть примеры простых тестов этого дела, см: EXPERIMENT: Watching foreground priority boosts and decays EXPERIMENT: Watching priority boosts on GUI threads |
|
Создано: 10 января 2020 14:03 · Поправил: difexacaw · Личное сообщение · #3 VOLKOFF Почему тогда число прерываний растёт в моём апп при активности гуя в другом апп ?? По идеи наоборот из за укорачивания кванта число прерываний должно быть меньше С таймером апик поведение потоков ожидаемо - число прерываний в единицу времени сильно возрастает. На последник трёх логах активность гуя не заметна. А есчо почему сабж должен влиять на потребление энергии, если это софт. механизм ? Можно попробовать получить число квантов в единицу времени SYSTEM_THREAD_INFORMATION.ContextSwitches; на запрос этого слепка уходит ~2кванта. > EXPERIMENT Нет способа определить число прерываний для потока, кроме прямого измерения. Ядро такую статиктику на младших версиях не ведёт, только для каждого процессора. При высоком числе прерываний квантование не влияет на измерение. При малом числе прерываний происходит странное повышение I/s. ----- vx |
|
Создано: 11 января 2020 18:55 · Личное сообщение · #4 |
|
Создано: 11 января 2020 19:27 · Личное сообщение · #5 difexacaw пишет: Вы очень долго не отвечаете Разве подобные риторические вопросы требуют ответов? Был приведен тезис, который в книге на которую я сослался подтверждался простым пошаговым примером стандартными средствами ОС. Вы в свою очередь провели некий загадочный эксперимент используя самописный софт, который дал вам некий рандомный результат и хотите чтобы я написал причину почему так случилось. Хмм... могу предложить погуглить Список универсальных ответов на любое "почему" | Сообщение посчитали полезным: sefkrd |
|
Создано: 11 января 2020 20:15 · Поправил: difexacaw · Личное сообщение · #6 VOLKOFF Но я так и не вижу объяснения по росту числа прерываний. А тесты не загадочные, а вполне грамотно реализованы. Могу сурки показать если нужно. Но врядле это вам чем то поможет. Ты просто начитался какой то технической фигни а когда дело дошло до реальных измерений тупо слился. Если бы ты знал что ядро при обработки прерывания от часиков приводит к серии прерываний(софт реализация через настройку апик), то смог бы обьяснить. Но увы ты это не знаешь. Читай дальше умные книжки ----- vx |
|
Создано: 12 января 2020 00:55 · Личное сообщение · #7 difexacaw пишет: дро при обработки прерывания от часиков приводит к серии прерываний( А какой тогда смысл что-то мерить? По сути ты измеряешь производительность проца когда его дергают за ножку, а не частоту интераптов таймера или hpet Добавлено спустя 6 минут difexacaw пишет: Поток крутится 1сек в цикле считая чис прерываний за это время, через их возврат сбросом RPL. Так себе способ. Есть гарантия, что поток всегда крутится на одном ядре? |
|
Создано: 12 января 2020 01:19 · Поправил: difexacaw · Личное сообщение · #8 spinz > а не частоту интераптов таймера Именно частоту прерываний. Это работает так - устанавливается RPL при нулевом селекторе: mov r,3/mov es,r. После прерывания процик обнуляет селектор при iret. Для чистоты эксперимента используется XP, так как во первых по большей части есть сурки ядра, а во вторых на wow будет шум(ядро фиксит селекторы). Code:
- способ отличный, это прямое измерение. > поток всегда крутится на одном ядре? На двух процах. ----- vx |
|
Создано: 12 января 2020 01:34 · Личное сообщение · #9 |
|
Создано: 12 января 2020 01:40 · Поправил: difexacaw · Личное сообщение · #10 |
|
Создано: 12 января 2020 01:45 · Личное сообщение · #11 |
|
Создано: 12 января 2020 01:48 · Поправил: difexacaw · Личное сообщение · #12 |
|
Создано: 12 января 2020 01:51 · Личное сообщение · #13 |
|
Создано: 12 января 2020 01:53 · Поправил: difexacaw · Личное сообщение · #14 spinz Так я же не время измеряю, а число прерываний. Как точно измерить длительность кванта я не знаю. Только если сравнить расчётное время по тск. > Поэтому сравнение на одном ядре и многоя дернике некорректно Сказал ведь что наложение маски affinity не оказывает влияния на результат. Что есчо не ясно. ----- vx |
|
Создано: 12 января 2020 01:55 · Личное сообщение · #15 difexacaw пишет: Когда окно выходит на первый план в клиентской системе, все потоки в процессе, содержащем тот поток, который владеет окном первого плана,получают утроенные кванты Был у меня довеча такой случай, кинул я собаке кусок колбасы смотрю на неё ест нормально, как отведу взгляд так слышу быстрое чавканье с утроенной силой, так я повторял 3 раза, ничего не понял, накатил стакан водяры и до меня дошло....... продолжение в следующей серии ----- Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли. |
|
Создано: 12 января 2020 01:57 · Личное сообщение · #16 |
|
Создано: 12 января 2020 02:01 · Личное сообщение · #17 |
|
Создано: 12 января 2020 02:04 · Поправил: difexacaw · Личное сообщение · #18 |
|
Создано: 12 января 2020 02:05 · Личное сообщение · #19 |
|
Создано: 12 января 2020 02:08 · Личное сообщение · #20 |
|
Создано: 12 января 2020 02:09 · Личное сообщение · #21 ClockMan Так ведь если ресурс забирают, то потеря времени должна привести к понижению числа, а по факту наоборот происходит. Есть вероятность что при обработке прерывания часиков идёт серия софт прерываний. Но это лишь догадка. Добавлено спустя 1 минуту spinz > Ты тупое? Межпроцессорные прерывания = немало тиков шины + софтовое переключение контекста. Нет я не тупое", это походу ты тупишь. Каким боком тут IPI и процы, если я не измеряю время, а только число возвратов из ISR ? ----- vx |
|
Создано: 12 января 2020 02:15 · Личное сообщение · #22 |
|
Создано: 12 января 2020 02:19 · Личное сообщение · #23 spinz Так ядро устроено. При прерывании контекст выгружается, затем при возврате загружается в процик. Когда время кванта истекает может быть переключение на иной процик, но это не изменяет механизм возврата - контекст загружается в другой процик и опять же происходит возврат по iret. Да и вообще какая разница, если нет эффекта. Я же измеряю, а не гадаю ----- vx |
|
Создано: 12 января 2020 02:24 · Личное сообщение · #24 |
|
Создано: 12 января 2020 02:30 · Личное сообщение · #25 spinz Какие нюансы, цикл замера прост и прозрачен, это доказывает замер при перестройке апик. Смена аффинитета на один процик эффекта не оказывает. О чём вы говорите я хз. Если решил потролить в этой теме, то ты это зря делаешь. Про меня есть спец топик, вот там и пиши если ничего по делу нет. Если же есть мысли почему растёт число прерываний, то скажи. Для упрощения общения используем сокращения, interrupts per second(IPS) и quants per second(QPS). ----- vx |
|
Создано: 12 января 2020 02:43 · Личное сообщение · #26 |
|
Создано: 12 января 2020 02:50 · Поправил: difexacaw · Личное сообщение · #27 spinz > Ты привычно юзаешь виндовые механизмы, т.к. больше ничего не умеешь. Да, тема про нт. Заметь что замер не через системные механизмы, а прямой. Статистику из системы можно взять только в виде числа переключений контекста. IPS же ядро не считает(точнее считает для каждого проца в PCR, но не для потока). Есчо можно почитать дельту прерываний часиков, но тогда получится не снятие IPS, а замер времени про который ты говоришь. Либо число прерываний часиков, а толку от этого - никакого. ----- vx |
|
Создано: 12 января 2020 02:55 · Личное сообщение · #28 |
|
Создано: 12 января 2020 02:57 · Поправил: difexacaw · Личное сообщение · #29 |
|
Создано: 12 января 2020 03:02 · Личное сообщение · #30 |
. 1 . 2 . >> |
eXeL@B —› Программирование —› SetTimerResolution. |
Эта тема закрыта. Ответы больше не принимаются. |