Windows OS Quantum vs. SQL OS Quantum


19

Просте запитання

Як синхронізується квант SQL Server (4 мс) з квантом серверної ОС (як правило: 187,5 мс)?

Просте пояснення питання

Після 184 мс використовуваного кванту ОС (що відповідає 46 повним квантам SQL) у кванта ОС є 3,5 мс часу, перш ніж йому доведеться здати графік на інший процес. SQL OS запускає квантовий (4 мс) і через 3,5 мс квант ОС вирішив зупинити поточний потік SQL OS, який все ще має 0,5 мс, перш ніж він отримає графік. Що відбувається зараз?


Глибоке занурення в ОС Quantum

У наступних кількох розділах я напишу, що я виявив досі щодо кванту ОС і як можна обчислити тривалість кванту. Тривалість "кванту" ОС базується на "кліщах", а сама тривалість "галочки" базується на "тактовому інтервалі", який зазвичай становить 15,625000 мс. Але дозвольте мені трохи детальніше ...

Поставте галочку

У статті блогу Know Thy Tick автор Джима пояснює основи тактових інтервалів (відомих також як «кліщі») та для чого вони призначені.

Коли я читаю щось на кшталт «тактовий інтервал… для більшості процесорів x86 - це близько 15 мілісекунд», я змушений визначити значення мого тактового або «галочки» інтервалу. На щастя, книга, в якій я читав цю цитату, Windows Internals четверте видання дає посилання на допомогу мені в моїх стражданнях. ... Автор згаданої книги Марк Русинович милостиво зробив утиліту ClockRes доступною на своєму веб-сайті. Запустивши цю утиліту, я зміг визначити, що інтервал тактової частоти на моєму багатопроцесорному ПК x86 становить 15,625000 мс. Цікаво, але мій цікавий розум хоче знати більше.

Квантовий

Автор статті продовжує пояснювати у своїй другій статті що ...

Звичайно, справжньою причиною важливості інтервалу галочок є те, що він впливає на планування ниток . Планувальник Windows надає кожному потоку «кванту» часу для виконання, перш ніж дозволяти виконувати інше завдання, на тому самому рівні пріоритету. Квантом, який планувальник присвоює потоку, є кратним інтервалу галочки . Конкретне квантове значення, вибране для конкретної нитки, трохи перевищує те, де я хочу звернутися до цієї статті.

Гаразд, тому я знаю, що таке квант, але не те, наскільки довго буде працювати квант.

Поки що, давайте просто вивчимо квантове значення за замовчуванням для потоку переднього плану в XPe. У цьому випадку планувальник Windows призначає квант 18 або 6 проміжок часу. (Так, для перетворення кванту в інтервали галочки потрібно розділити на 3. ..., але причина кратного полягає в тому, щоб дозволити планувальнику можливість "зарядити" потік для виконання операції, яка змушує його призупинити.)

Тепер ми знаємо, що тактовий інтервал (галочка) повинен становити близько 15.625000 мс, а на ОС Windows Desktop, де квантом за замовчуванням є 18, це призведе до 6 кліщів або 93,750000 мс (18/3 * 15,625000 мс).

В ОС Windows Server квантом за замовчуванням інший. Налаштування "Планування процесора" встановлено на "Фонові послуги"

Цей параметр можна знайти через "Налаштування системи | Додатково (вкладка) | Продуктивність (розділ) | Налаштування ..."), що відкриє "Параметри Perofrmance | Додаткові (вкладка) | Планування процесора"

За замовчуванням квантові параметри становлять від 36 (фон) до 36 (передній план). Квант більший і, отже, довший. Це вдвічі більше 93,750000 мс квантового переднього плану 18 (6 галочок) на операційній системі Windows Desktop, що на ОС сервера, встановленої для фонових служб, становить приблизно 187 500000 мс.

Спостереження / пояснення

Коли ви змінюєте налаштування з "Фонових служб" на "Додаток" на сервері або на робочому столі, тоді ключ HKLM \ SYSTEM \ CurrentControlSet \ Control \ PriorityControl \ Win32PrioritySeparation змінюється з 0x18 на 0x02. Яке квантове значення за замовчуванням для 0x02? Про це можна дізнатись у коментарі:

Значення 0x02 означає, що поля "Короткі проти довгих" та "Змінні проти виправлені" є типовими для ОС.

Типовими умовами для цих полів для XPe & XP Pro є: Short & Variable, що є тим же, що має такі біти набору додаткових бітів: 0x24.

АБО якщо це значення у 0x02, ви отримаєте 0x26, яке ви знайдете в таблиці в статті.

Довідка: коментар до "Освоїти свій квантовий" (Блоги MSDN)

Таблиця, що пояснює квантові параметри з тієї ж статті:

Win32PrioritySeparation   Foreground   Background
0x28, 0x29, 0x2A                  18           18
0x18, 0x19, 0x1A                  36           36
0x24                               6            6
0x25, 0x14                        12            6
0x26                              18            6
0x15                              24            6
0x16                              36            6

Короткий підсумок OS Quantum

Виходячи з вищенаведеної інформації та цитат статей, ми знаємо, що квант не є фіксованим розміром, а скоріше є похідним із налаштування ОС у Властивості системи. Квант змінюється залежно від Win32PrioritySeparationналаштування в реєстрі, яке зазвичай відповідає одному з параметрів у "Властивості системи" (або "Фонові послуги" або "Програми").

Квантом на рівні ОС є

  • для налаштування "Програми"
    • 18 (що становить 6 кліщів) для додатків переднього плану (93,75 мс)
    • 6 (що становить 2 галочки) для фонових програм (31,25 мс)
  • для налаштування "Фонові послуги"
    • 36 (що становить 18 кліщів) для додатків переднього плану (187,5 мс)
    • 36 (що становить 18 кліщів) для фонових програм (187,5 мс)

Тож тепер ми знаємо, що квантовий ОС на налаштуваннях сервера Windows, оптимізований для фонових служб, це ...

36 / 3 * 15.625000 ms = 187.5 ms

SQL OS Quantum

У цьому розділі перераховано те, що я знайшов у квантовій системі SQL OS ...

SOS_SCHEDULER_YIELD Тип очікування

З опису Пола Рендалла про тип очікування SOS_SCHEDULER_YIELD:

Цей тип очікування - це те, коли потоці вдалося виконати свій повний квантовий потік (4 мілісекунди у всіх версіях SQL Server, незмінний ), і таким чином добровільно видав планувальник, рухаючись до нижньої черги Runnable у своєму планувальнику.

Довідка: SOS_SCHEDULER_YIELD (типи очікування SQLSkills.com)

Планувальники в DMV SQL Server

У поясненні щодо DMV на SQL Server для DMV sys.dm_os_schedulers.

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

На противагу SQL Server використовує механізм спільного планування, коли потоки можуть добровільно віддавати свій квантовий час (ви можете бачити таку поведінку, коли у вас є тип очікування SOS_SCHEDULER_YIELD). Це дозволяє SQL Server оптимізувати використання процесора, оскільки коли потік сигналізується про виконання, але він не готовий до запуску, він може дати свій квантовий час на користь інших потоків .

Довідка: Розуміння планувальників, робітників та завдань SQL Server (MSSQLTips.com)

Виявити тиск у процесорі SQL Server

Це дуже невеликий розділ статті щодо тиску процесора в SQL Server.

Виникає, коли завдання добровільно дає програмісту для виконання інших завдань. Під час цього очікування завдання чекає оновлення його кванту .

Довідка: Виявлення тиску в процесорі SQL Server (MSSQLTips.com)

sys.dm_os_schedulers (Microsoft Docs)

Я думаю, що наступна цитата є найважливішим фрагментом інформації щодо кванту SQL OS, яку я міг знайти:

quantum_length_us bigint  Identified for informational purposes only. 
                          Not supported. Future compatibility is not guaranteed. 
                          Exposes the scheduler quantum used by SQLOS.

Довідка: sys.dm_os_schedulers (Transact-SQL) (Microsoft | Документи)


Моя головоломка

Сервер ОС Quantum регулює, скільки часу надається Сервісу SQL Server для виконання "завдань". Квант ОС OS SQL Server визначається як 4 мс. Якщо я поділяю 187,5 мс на 4 мс, то мені залишається 3,5 мс.

І ми навіть не починали обговорення того, коли інтервал годин встановлений на щось інше, ніж за замовчуванням 15,625000 мс ....

Просте запитання

Як синхронізується квант SQL Server (4 мс) з квантом серверної ОС (як правило: 187,5 мс)?

Просте пояснення питання

Після 184 мс використовуваного кванту ОС (що відповідає 46 повним квантам SQL) у кванта ОС є 3,5 мс часу, перш ніж йому доведеться здати графік на інший процес. SQL OS запускає квантовий (4 мс) і через 3,5 мс квант ОС вирішив зупинити поточний потік SQL OS, який все ще має 0,5 мс, перш ніж він отримає графік. Що відбувається зараз?

Відповіді:


13

Навіть незважаючи на те, що планувальник не дає переваги, планувальник SQL Server все ще дотримується концепції кванту. Завдання Rahter ніж SQL Server змушені відмовлятися від центрального процесора операційною системою, вони можуть вимагати періодично ставити в чергу очікування, і якщо вони перевищили внутрішньо визначений 4-мілісекундний квант і не знаходяться в середині операції що не може бути зупинено, вони добровільно відмовляються від процесора.

- " Внутрішні системи Microsoft SQL Server 2012 ", Kalen Delaney et. ін. pp38

-Розділ 2 "SQLOS" Джонатана Кехаяса

Отже, поняття "кванту" всередині SQL Server є скоріше "орієнтиром" для завдань програмування. IE, коли ви пишете завдання, як, скажімо, завдання, яке виконує сканування таблиці, якщо ви не потрапляєте на жодну засувку сторінки, засувку IO або блокування, ви чекаєте деякий час, ви повинні зупинити те, що ви робите, і попросити бути Поставте назад у чергу для виконання, якщо чекають інші завдання.

Але програміст завдань вирішує це, і це може бути не так 4 мс для кожного виду завдання. Наприклад, завдання сканування таблиці може використовувати просту евристику, засновану на кількості сканованих сторінок для реалізації точок виходу.

Так

SQL OS запускає квантовий (4 мс) і через 3,5 мс квант ОС вирішив зупинити поточний потік SQL OS, який все ще має 0,5 мс, перш ніж він отримає графік. Що відбувається зараз?

Якщо під час виконання завдання Windows потоком SQL Server попередньо спорожняється, він буде призупинено, і коли наступний потік буде заплановано в центральному процесорі, він продовжиться там, де він зупинився. Імовірно, він буде продовжувати споживати баланс свого кванта 4ms, оскільки він не знатиме різниці. Але знову ж таки, поведінка прибутковості - це деталізація виконання завдання, а не поведінка SQLOS, тому різні завдання можуть поводитися по-різному.


4

Персональні відповіді спочатку залишилися як коментарі

Як синхронізується квант SQL Server (4 мс) з квантом серверної ОС (як правило: 187,5 мс)?

Це не так, і SQL Server не використовує випереджальне планування. Очікується, що робочі елементи потраплять у точки врожайності, а якщо їх немає, ви отримуєте такі речі, як NONYIELDINGпланувальник. Паритету немає. SQL Server не розподіляє час. Це робить певні теми привабливими для Windows для планування, а Windows планує їх. Квант - це просто номенклатура за частину часу. Це воно. SQL Server не є превентивним, він несе відповідальність за те, що працює, щоб отримати повний код у коді. - Шон Галларді

Після закінчення терміну дії кванту нитка насильно відкладається. Це прозоро для SQL Server. SQLOS не має можливості виявити, коли це відбувається. Для цього немає API Win32. Планування прозоре для потоків режиму користувача. Планувальник Windows не знає і не цікавить, якими є потоки користувальницького режиму. Windows бачить лише потоки, які можна виконати, і дозволяє їм працювати до кінця кванту ОС або до тих пір, поки вони не блокуються. - usr

У роботі з надмірними значеннями типу очікування SOS_SCHEDULER_YIELD у SQL Server Ніколая Димитрієвича термін "квант" позначається по суті "час, який фактично витрачається завдання, призначене працівнику", але це не той самий сенс, як квант Windows, який період часу, через який ОС видалить потік з процесора. Вони просто різні поняття. Якщо ОС примушує потік завершити виконання, оскільки досягнуто кванту ОС, відбувається контекстний перемикач. Потік SQL Server призупинено, як і будь-яка інша програма. - Девід Браун - Microsoft та Джордж Палачіос .


Виписки з документації: Всередині планувальника режиму користування SQL Server 2000 (написано для SQL Server 2000, але все ще актуально):

Завдання передумови та співпраця

UMS, навпаки, покладається на потоки, щоб вийти добровільно. UMS використовує такий підхід, щоб не залучати ядро ​​Windows більше, ніж абсолютно необхідно. У системі, де робочі потоки можуть розраховувати на вихід, коли вони повинні, спільний планувальник може насправді бути більш ефективним, ніж попереджувальний, оскільки процес планування може бути пристосований до конкретних потреб програми. Як я вже говорив раніше, UMS знає потреби в плануванні SQL Server краще, ніж можна очікувати від операційної системи.

Як UMS бере участь у плануванні

Якщо UMS має вирішувати потреби планування SQL Server, а не дозволяти Windows робити це, UMS повинен якось перешкоджати операційній системі робити те, що вона робить з будь-яким іншим процесом: планувати потоки вмикання та вимикання процесора (систем), як вважає за потрібне. Як це зробити в превентивній ОС? UMS витягує це за допомогою хитромудрих хитрощів із об’єктами події Windows. Кожен потік під UMS має пов'язаний об’єкт події. Для цілей планування Windows ігнорує потоки, які вона не вважає життєздатними - потоки, які не можуть працювати, оскільки вони знаходяться у нескінченному стані очікування. Знаючи це, UMS укладає потоки в режим сну, які не хочуть планувати, викликаючи їх викликом WaitForSingleObject на відповідний об'єкт події та передаючи INFINITE для значення часу очікування.

Щоб запобігти плануванню Windows декількома потоками на одному процесорі і тим самим понести накладні витрати та витрати контекстних комутаторів, UMS намагається зберегти життєздатність лише одного потоку - тобто не в нескінченному стані очікування - на один процесор.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.