Просте запитання
Як синхронізується квант 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 мс, перш ніж він отримає графік. Що відбувається зараз?