Proste pytanie
W jaki sposób SQL Server Quantum (4 ms) jest synchronizowany z Server OS Quantum (normalnie: 187,5 ms)?
Proste pytanie wyjaśnione
Po użyciu 184 ms kwantu OS (co odpowiada 46 pełnym kwantom SQL) kwant OS ma 3,5 ms czasu, zanim będzie musiał przekazać harmonogram innemu procesowi. SQL OS rozpoczyna kwant (4 ms), a po 3,5 ms kwant OS zdecydował zatrzymać bieżący wątek SQL OS, który wciąż ma 0,5 ms, zanim wygeneruje harmonogram. Co się teraz stanie?
Deep Dive na OS Quantum
W następnych kilku rozdziałach napiszę, co do tej pory znalazłem na temat kwantu OS i jak można obliczyć czas trwania kwantu. Czas trwania „kwantu” systemu operacyjnego oparty jest na „tyknięciach”, a sam „tyknięcie” opiera się na „interwale zegarowym”, który zwykle wynosi 15.625000 ms. Ale pozwól mi rozwinąć trochę ...
Kleszcz
W artykule na blogu Know Thy Tick autor Jim wyjaśnia podstawy interwałów zegara (aka „tyknięcia”) i do czego służą.
Kiedy czytam coś w stylu „interwał zegara… dla większości procesorów x86 wynosi około 15 milisekund”, jestem zmuszony określić wartość mojego zegara lub „tik”, interwał. Na szczęście książka, w której przeczytałem ten cytat, Windows Internals Fourth Edition zawiera informacje pomocne w moim schorzeniu. ... Autor, Mark Russinovich, wspomnianej książki z wdzięcznością udostępnił narzędzie ClockRes na swojej stronie internetowej. Korzystając z tego narzędzia, udało mi się ustalić, że interwał zegara na moim komputerze wieloprocesorowym x86 wynosi 15.625000 ms. Ciekawe, ale mój ciekawy umysł chce wiedzieć więcej.
Kwant
Autor artykułu wyjaśnia dalej w swoim drugim artykule że...
Oczywiście prawdziwym powodem, dla którego interwał tykania jest ważny, jest to, że wpływa on na planowanie wątków . Harmonogram systemu Windows daje każdemu wątkowi „kwant” czasu do wykonania przed zezwoleniem na uruchomienie innego zadania na tym samym poziomie priorytetu. Kwant, który planista przypisuje do wątku, jest wielokrotnością interwału tykania . Konkretna wartość kwantowa wybrana dla konkretnego wątku jest nieco większa niż w tym artykule.
Ok, więc wiem, co to jest kwant, ale nie wiem, jak długo kwant będzie działał.
Na razie zbadajmy domyślną wartość kwantową dla wątku pierwszego planu w XPe. W takim przypadku program planujący systemu Windows przypisuje kwant 18 lub 6 odstępów tykania. (Tak, aby przekonwertować kwant na interwały tykania, należy podzielić przez 3. ..., ale powodem wielokrotności jest umożliwienie planistowi możliwości „obciążenia” wątku za wykonanie operacji, która powoduje jego zawieszenie.)
Wiemy teraz, że interwał zegara (tyknięcie) powinien wynosić około 15,625000 ms, a w systemie operacyjnym Windows Desktop, gdzie domyślnym kwantem jest 18, spowoduje to 6 tyknięć lub 93,750000 ms (18/3 * 15,625000 ms).
W systemie operacyjnym Windows Server domyślny kwant jest inny. Ustawienie „Planowanie procesora” jest ustawione na „Usługi w tle”
To ustawienie można znaleźć w „Ustawieniach systemu | Zaawansowane (zakładka) | Wydajność (sekcja) | Ustawienia ...”, które otworzą „Opcje Perofrmance | Zaawansowane (zakładka) | Planowanie procesora”
Domyślne ustawienia kwantowe to od 36 (Tło) do 36 (Pierwszy plan). Kwant jest większy, a zatem dłuższy. Jest to dwukrotność kwoty 93,750000 ms z 18 (6 tyknięć) kwantowych ustawień pierwszego planu w systemie operacyjnym Windows Desktop, który w systemie operacyjnym serwera skonfigurowanym dla usług w tle wynosi około 187,500000 ms.
Obserwacja / objaśnienie
Po zmianie ustawienia z „Usługi w tle” na „Applicaitons” na serwerze lub komputerze stacjonarnym klucz HKLM \ SYSTEM \ CurrentControlSet \ Control \ PriorityControl \ Win32PrioritySeparation w rejestrze zmienia się z 0x18 na 0x02. Jaka jest domyślna wartość kwantowa dla 0x02? Można to znaleźć w komentarzu:
Wartość 0x02 oznacza, że pola „Krótki kontra długi” i „Zmienny vs. stały” są domyślnymi ustawieniami dla systemu operacyjnego.
Domyślnie dla tych pól dla XPe i XP Pro są: Krótkie i zmienne, co jest tym samym, co ustawienie następujących bitów dodatkowych bitów: 0x24.
LUB użycie tej wartości w 0x02 daje 0x26, które znajdziesz w tabeli w artykule.
Odniesienie: Komentarz do „Opanuj swoje kwantowe” (blogi MSDN)
Tabela wyjaśniająca ustawienia kwantowe z tego samego artykułu:
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
Krótkie podsumowanie systemu operacyjnego Quantum
W oparciu o powyższe informacje i cytaty z artykułów wiemy, że kwant nie jest stałym rozmiarem, lecz pochodzi z ustawienia systemu operacyjnego we właściwościach systemu. Kwant różni się w zależności od Win32PrioritySeparation
ustawienia w rejestrze, które zwykle odpowiada jednemu z ustawień we „Właściwościach systemu” („Usługi w tle” lub „Aplikacje”).
Kwant na poziomie systemu operacyjnego to
- dla ustawienia „Aplikacje”
- 18 (czyli 6 znaczników) dla aplikacji pierwszego planu (93,75 ms)
- 6 (czyli 2 tiki) dla aplikacji działających w tle (31,25 ms)
- dla ustawienia „Usługi w tle”
- 36 (czyli 18 tyknięć) dla aplikacji na pierwszym planie (187,5 ms)
- 36 (czyli 18 tyknięć) dla aplikacji działających w tle (187,5 ms)
Teraz wiemy, że kwant systemu operacyjnego w konfiguracji systemu Windows Server, który ma być zoptymalizowany pod kątem usług w tle, jest ...
36 / 3 * 15.625000 ms = 187.5 ms
SQL OS Quantum
W tej sekcji wymieniono to, co znalazłem na kwantowym SQL OS ...
SOS_SCHEDULER_YIELD Typ oczekiwania
Z opisu Paula Randalla na SOS_SCHEDULER_YIELD typ oczekiwania:
Ten typ oczekiwania występuje, gdy wątek był w stanie wykonać pełny kwant wątku (4 milisekundy we wszystkich wersjach SQL Server, niezmienne ), a więc dobrowolnie dał harmonogram, przechodząc na dół kolejki Runnable w swoim harmonogramie.
Odniesienie: SOS_SCHEDULER_YIELD (typy oczekiwania SQLSkills.com)
Harmonogramy w DMV SQL Server
W objaśnieniu DMV dla SQL Server dla DMV sys.dm_os_schedulers.
[...] Windows korzysta z wyprzedzającego mechanizmu planowania i przypisuje kwant czasu procesora do każdego wątku, gdy wątek zużyje jego kwant, jest wysyłany do kolejki, a inne wątki mają zapewnione wykonanie.
Przeciwnie, SQL Server używa mechanizmu planowania współpracy, gdy wątki mogą dobrowolnie wydać swój czas (możesz zobaczyć to zachowanie, gdy masz typ oczekiwania SOS_SCHEDULER_YIELD). Pozwala to SQL Serverowi zoptymalizować wykorzystanie procesora, ponieważ gdy wątek jest sygnalizowany do wykonania, ale nie jest gotowy do uruchomienia, może poświęcić swój czas na korzyść innych wątków .
Odwołanie: Zrozumienie harmonogramów, pracowników i zadań programu SQL Server (MSSQLTips.com)
Wykryj ciśnienie procesora serwera SQL
To jest bardzo mała część artykułu na temat obciążenia procesora w SQL Server.
Występuje, gdy zadanie dobrowolnie daje harmonogramowi inne zadania do wykonania. Podczas tego oczekiwania zadanie czeka na odnowienie swojego kwantu .
Odwołanie: Wykryj ciśnienie procesora serwera SQL (MSSQLTips.com)
sys.dm_os_schedulers (Dokumenty Microsoft)
Myślę, że następujący cytat jest najważniejszym fragmentem informacji dotyczących kwantowej wersji SQL OS, którą mogłem znaleźć:
quantum_length_us bigint Identified for informational purposes only. Not supported. Future compatibility is not guaranteed. Exposes the scheduler quantum used by SQLOS.
Odwołanie: sys.dm_os_schedulers (Transact-SQL) (Microsoft | Docs)
Moja zagadka
System operacyjny serwera Quantum reguluje, ile czasu usługa SQL Server ma na wykonanie „zadań”. SQL Server OS Quantum jest zdefiniowany jako 4 ms. Jeśli podzielę 187,5 ms przez 4 ms, pozostanie mi 3,5 ms.
I nawet nie rozpoczęliśmy dyskusji, kiedy interwał zegara jest ustawiony na coś innego niż domyślny 15,625000 ms ....
Proste pytanie
W jaki sposób SQL Server Quantum (4 ms) jest synchronizowany z Server OS Quantum (normalnie: 187,5 ms)?
Proste pytanie wyjaśnione
Po użyciu 184 ms kwantu OS (co odpowiada 46 pełnym kwantom SQL) kwant OS ma 3,5 ms czasu, zanim będzie musiał przekazać harmonogram innemu procesowi. SQL OS rozpoczyna kwant (4 ms), a po 3,5 ms kwant OS zdecydował zatrzymać bieżący wątek SQL OS, który wciąż ma 0,5 ms, zanim wygeneruje harmonogram. Co się teraz stanie?