uawikipc.ru

Вибір процесора

Відео: Який процесор купити? Аналіз ринку, вересень 2016

При вставці таймера потрібно прийняти одне важливе рішення, що стосується вибору відповідної таблиці, - іншими словами, потрібно вибрати найбільш оптимальний процесор.

Якщо у таймера немає пов`язаного з ним DPC-виклику, ядро сканує все не запарковані процесори в поточній групі процесорів. Якщо поточний процесор запаркований, вибирається наступний процесор групи, в іншому випадку використовується поточний процесор. З іншого боку, якщо з таймером пов`язаний якийсь DPC-виклик, код вставки просто зупиняє вибір на цільовому процесорі, який пов`язаний з DPC, і вибирає таблицю таймера цього процесора.

У тому випадку, якщо розробник драйвера не вказав цільової процесор для DPC, ядро має зробити свій вибір. Оскільки розробники драйверів зазвичай очікують, що DPC-виклик буде виконаний на тому ж самому процесорі, на якому в момент вставки був запущений код драйвера, ядро зазвичай вибирає центральний процесор 0. Саме він є процесором, що стежить за часом, який завжди буде активний для обробки переривань від годин. Але на серверних системах ядро вибирає процесор так, як ніби DPC-виклику не існує, використовуючи тільки що розглянуті принципи вибору.

Відео: Як вибрати процесор | Що потрібно знати при виборі процесора і збірці PC

Така поведінка націлене на те, щоб підвищити продуктивність і масштабованість серверних систем, що використовують Hyper-V, хоча вона може підвищити продуктивність на будь-який сильно завантаженої системі.

У міру накопичення системних таймерів, через те, що більшість драйверів не створюють родинних зв`язків між своїми DPC-викликами, центральний процесор 0 стає все більш і більш завантаженим виконанням коду закінчення часу таймера.

Це підвищує час відгуку і може навіть стати причиною тривалих затримок виконання DPC-викликів або їх втрати. Крім того, закінчення часу таймера може почати конкурувати з DPC-таймером, зазвичай пов`язаних з обробкою переривання, ініційованого драйвером, наприклад кодом мережевого пакету, що призводить до уповільнення роботи всієї системи. Цей процес посилюється в сценарії Hyper-V, де центральний процесор 0 повинен обробляти таймери і DPC-виклики, пов`язані з потенційним безліччю віртуальних машин, у кожній з яких є свої таймери і пов`язані з ними пристрої.

Шляхом розподілу таймерів між процесорами, як показано на малюнку, завантаження кожного процесора, пов`язана із закінченням часу таймера, повністю розподіляється між незапаркованнимі логічними процесорами.

На 32-розрядних системах об`єкт таймера зберігає номер пов`язаного з ним процесора в заголовку диспетчера, а на 64-разряднийх системах цей номер зберігається в самому об`єкті.

ПРИМІТКА. Це поведінка управляється змінної ядра KiDistributeTimers, яка ініціалізується на основі параметра реєстру, має різне значення для установки сервера і клієнта. Це поведінка може бути налаштоване по-різному шляхом зміни або створення значення DistributeTimers, відмінного від його вихідного, заснованого на SKU значення в параметрі HKLM SYSTEM CurrentControlSet Control SessionManager kernel.

поведінка-таймерів

Виведення списку системних таймерів

Щоб вивести дамп всіх, на даний момент зареєстрованих в системі таймерів, і отримати інформацію про DPC-викликах, пов`язаних з кожним таймером (якщо такі є), можна скористатися отладчиком ядра.

Відео: Який процесор купити? Аналіз ринку, жовтень 2016

Як приклад подивіться на наступний висновок.

[Lkd>! Timer

Dump system timers

Interrupt time: 61876995 000003df [4 / 5/2010 18: 58: 09.189]

List Timer Interrupt Low / High Fire Time DPC / thread

PROCESSOR 0 (nt! _KTIMER_TABLE fffff80001bfd080)

5 fffffa8003099810 627684ac 000003df [4 / 5/2010 18: 58: 10.756]

NDIS! NdisMTimerObjectDpc (DPC @ fffffa8003099850)

13 fffffa8003027278 272dde78 000004cf [4 / 6/2010 23: 34: 30.510] NDIS! NdisMWakeUpDpcX

(DPC @ fffffa80030272b8)

fffffa8003029278 272e0588 000004cf [4 / 6/2010 23: 34: 30.511] NDIS! ndisMWakeUpDpcX

(DPC @ fffffa80030292b8)

fffffa8003025278 272e0588 000004cf [4 / 6/2010 23: 34: 30.511] NDIS! ndisMWakeUpDpcX

(DPC @ fffffa80030252b8)

fffffa8003023278 272e2c99 000004cf [4 / 6/2010 23: 34: 30.512] NDIS! ndisMWakeUpDpcX

(DPC @ fffffa80030232b8)

16 fffffa8006096c20 6c1613a6 000003df [4 / 5/2010 18: 58: 26.901] thread

fffffa8006096b60

19 fffff80001c85c40 64f9aeb5 000003df [4 / 5/2010 18: 58: 14.971]



nt! CmpLazyFlushDpcRoutine (DPC @ fffff80001c85c00)

31 fffffa8002c43660 P dc527b9b 000003e8 [4 / 5/2010 20: 06: 00.673]

intelppm! LongCapTraceDpc (DPC @ fffffa8002c436a0)

40 fffff80001c86f60 62ca1080 000003df [4 / 5/2010 18: 58: 11.304] nt! CcScanDpc (DPC

@ Fffff80001c86f20)

fffff88004039710 62ca1080 000003df [4 / 5/2010 18: 58: 11.304]

luafv! ScavengerTimerRoutine (DPC @ fffff88004039750)

...

252 fffffa800458ed50 62619a91 000003df [4 / 5/2010 18: 58: 10.619] netbt! TimerExpiry

(DPC @ fffffa800458ed10)

fffffa8004599b60 fe2fc6ce 000003e0 [4 / 5/2010 19: 09: 41.514] netbt! TimerExpiry

(DPC @ fffffa8004599b20)

PROCESSOR 1 (nt! _KTIMER_TABLE fffff880009ba380)

0 fffffa8004ec9700 626be121 000003df [4 / 5/2010 18: 58: 10.686] thread

fffffa80027f3060

fffff80001c84dd0 P 70b3f446 000003df [4 / 5/2010 18: 58: 34.647]

nt! IopIrpStackProfilerTimer (DPC @ fffff80001c84e10)

11 fffffa8005c26cd0 62859842 000003df [4 / 5/2010 18: 58: 10.855] afd! AfdTimeoutPoll

(DPC @ fffffa8005c26c90)

fffffa8002ce8160 6e6c45f4 000003df [4 / 5/2010 18: 58: 30.822] thread

fffffa80053c2b60

fffffa8004fdb3d0 77f0c2cb 000003df [4 / 5/2010 18: 58: 46.789] thread

fffffa8004f4bb60

13 fffffa8005051c20 60713a93 800003df [NEVER] thread

fffffa8005051b60

15 fffffa8005ede120 77f9fb8c 000003df [4 / 5/2010 18: 58: 46.850] thread

fffffa8005ede060

20 fffffa8004f40ef0 629a3748 000003df [4 / 5/2010 18: 58: 10.990] thread

fffffa8004f4bb60

22 fffffa8005195120 6500ec7a 000003df [4 / 5/2010 18: 58: 15.019] thread

fffffa8005195060

28 fffffa8004760e20 62ad4e07 000003df [4 / 5/2010 18: 58: 11.115] btaudio (DPC

@ Fffffa8004760e60) + 12d10

31 fffffa8002c40660 P dc527b9b 000003e8 [4 / 5/2010 20: 06: 00.673]

intelppm! LongCapTraceDpc (DPC @ fffffa8002c406a0)

...

232 fffff80001c85040 P 62317a00 000003df [4 / 5/2010 18: 58: 10.304] nt! IopTimerDispatch

(DPC @ fffff80001c85080)

fffff80001c26fc0 P 6493d400 000003df [4 / 5/2010 18: 58: 14.304]

nt! EtwpAdjustBuffersDpcRoutine (DPC @ fffff80001c26f80)

235 fffffa80047471a8 6238ba5c 000003df [4 / 5/2010 18: 58: 10.351] stwrt64 (DPC

@ Fffffa80047471e8) + 67d4

242 fffff880023ae480 11228580 000003e1 [4 / 5/2010 19: 10: 13.304]

dfsc! DfscTimerDispatch

(DPC @ fffff880023ae4c0)

245 fffff800020156b8 P 72fb2569 000003df [4 / 5/2010 18: 58: 38.469]

hal! HalpCmcDeferredRoutine (DPC @ fffff800020156f8)

248 fffffa80029ee460 P 62578455 000003df [4 / 5/2010 18: 58: 10.553]

ataport! IdePortTickHandler (DPC @ fffffa80029ee4a0)

fffffa8002776460 P 62578455 000003df [4 / 5/2010 18: 58: 10.553]

ataport! IdePortTickHandler (DPC @ fffffa80027764a0)

fffff88001678500 fe2f836f 000003e0 [4 / 5/2010 19: 09: 41.512]

cng! seedFileDpcRoutine

(DPC @ fffff880016784c0)

fffff80001c25b80 885e52b3 0064a048 [12/31/2099 23: 00: 00.008]

nt! ExpCenturyDpcRoutine (DPC @ fffff80001c25bc0)

Total Timers: 254, Maximum List: 8

В даному прикладі є кілька драйверних таймерів з коротким терміном закінчення часу, які пов`язані з драйверами Ndis.sys і Afd.sys (обидва цих драйвера мають відношення до мережі), а також з драйверами аудіосистеми, Bluetooth, і ATA / IDE. Є також фонові, допоміжні таймери з закінченням часу, наприклад, пов`язані з управлінням електроживленням, ETW, скиданням на диск системного реєстру і з виртуализацией управління обліковими записами користувачів (Users Account Control, UAC).

Крім цього існує близько десятка таймерів, які не мають пов`язаних з ними DPC-викликів - найчастіше це свідчить про те, що ці таймери призначеного для користувача режиму або режиму ядра використовуються для диспетчеризації очікувань. Щоб перевірити це, можна скористатися командою! Thread щодо покажчиків потоків.

Відео: ТОП 5 кращих процесорів для ігор

І нарешті, є три цікавих таймера, які завжди присутні на системі Windows, це таймер, який перевіряє зміна часового поясу при переході на літній час, таймер, який перевіряє наступ нового року, і таймер, який перевіряє входження в наступне століття. Їх можна легко розпізнати по досить тривалого терміну закінчення часу, якщо тільки не виконувати цей експеримент напередодні одного з цих подій.

Поділитися в соц мережах:
Схожі
» » Вибір процесора