Question simple
Comment le SQL Server Quantum (4 ms) est-il synchronisé avec le serveur OS Quantum (normalement: 187,5 ms)?
Explication d'une question simple
Après 184 ms de quantum OS utilisé (ce qui correspond à 46 quantums SQL complets), le quantum OS dispose de 3,5 ms de temps avant de devoir transférer le planning à un processus différent. Le système d'exploitation SQL démarre un quantum (4 ms) et après 3,5 ms, le quantum du système d'exploitation a décidé d'arrêter le thread SQL OS actuel qui a encore 0,5 ms avant de produire le calendrier. Que se passe-t-il maintenant?
Deep Dive sur OS Quantum
Dans les prochaines sections, j'écrirai ce que j'ai trouvé jusqu'à présent concernant le quantum du système d'exploitation et comment la durée d'un quantum peut être calculée. La durée d'un "quantum" OS est basée sur des "ticks" et la durée du "tick" lui-même est basée sur "l'intervalle d'horloge" qui est normalement de 15,625000 ms. Mais laissez-moi élaborer un peu ...
Cocher
Dans l'article du blog Know Thy Tick, l'auteur Jim explique les principes de base des intervalles d'horloge (aka "ticks") et à quoi ils servent.
Quand je lis quelque chose comme «l'intervalle d'horloge… pour la plupart des multiprocesseurs x86 est d'environ 15 millisecondes», je suis obligé de déterminer la valeur de mon horloge, ou «tick», intervalle. Heureusement, le livre dans lequel j'ai lu cette citation, Windows Internals Fourth Edition fournit une référence pour m'aider avec mon affliction. ... L'auteur, Mark Russinovich, du livre susmentionné a gracieusement mis l'utilitaire ClockRes à disposition sur son site Web. En exécutant cet utilitaire, j'ai pu déterminer que l'intervalle d'horloge sur mon PC multiprocesseur x86 est de 15,625000 ms. Intéressant, mais mon esprit curieux veut en savoir plus.
Quantum
L'auteur de l'article poursuit en expliquant dans son deuxième article cette...
Bien sûr, la vraie raison pour laquelle l'intervalle de tick est important est qu'il affecte la planification des threads . Le planificateur Windows donne à chaque thread un «quantum» de temps à exécuter avant d'autoriser l'exécution d'une autre tâche, au même niveau de priorité. Le quantum que le planificateur affecte à un thread est un multiple de l'intervalle de tick . La valeur quantique spécifique choisie pour un thread spécifique est un peu au-delà de l'endroit où je veux aller avec cet article.
Ok, donc je sais ce qu'est un quantum, mais pas combien de temps un quantum va fonctionner.
Pour l'instant, examinons simplement la valeur quantique par défaut pour un thread de premier plan dans XPe. Dans ce cas, le planificateur Windows attribue un quantum de 18 ou 6 intervalles de tick. (Oui, pour convertir le quantum en intervalles de tick, il faut diviser par 3. ..., mais la raison du multiple est de permettre au planificateur de "charger" un thread pour effectuer une opération qui le fait suspendre.)
Nous savons maintenant qu'un intervalle d'horloge (tick) devrait être d'environ 15,625000 ms et sur un OS de bureau Windows où le quantum par défaut est 18, cela se traduira par 6 ticks ou 93,750000 ms (18/3 * 15,625000 ms).
Sur un système d'exploitation Windows Server, le quantum par défaut est différent. Le paramètre "Planification du processeur" est défini sur "Services d'arrière-plan"
Ce paramètre peut être trouvé via "Paramètres système | Avancé (onglet) | Performance (section) | Paramètres ..." qui ouvrira "Options de performance | Avancé (onglet) | Planification du processeur"
Les paramètres quantiques par défaut sont alors de 36 (arrière-plan) à 36 (premier plan). Le quantum est plus grand et donc plus long. C'est le double du 93,750000 ms du paramètre de premier plan quantique 18 (6 tick) sur un OS de bureau Windows, qui sur un OS de serveur configuré pour les services d'arrière-plan est d'environ 187 500 000 ms.
Observation / explication
Lorsque vous modifiez le paramètre de «Services d'arrière-plan» à «Applicaitons» sur un serveur ou un bureau, la clé HKLM \ SYSTEM \ CurrentControlSet \ Control \ PriorityControl \ Win32PrioritySeparation dans le Registre est modifiée de 0x18 à 0x02. Quelle est la valeur quantique par défaut pour 0x02? Cela peut être trouvé dans un commentaire:
La valeur 0x02 implique que les champs "Court vs. Long" et "Variable vs. Fixe" sont les champs par défaut pour l'OS.
La valeur par défaut pour ces champs pour XPe et XP Pro est: Courte et variable, ce qui revient à avoir les bits supplémentaires définis: 0x24.
OU cette valeur avec 0x02 vous donne 0x26, que vous trouverez dans le tableau de l'article.
Référence: Commentaire à "Maîtrisez votre Quantum" (Blogs MSDN)
Le tableau expliquant les paramètres quantiques du même article:
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
Bref résumé d'OS Quantum
Sur la base des informations ci-dessus et des citations d'articles, nous savons qu'un quantum n'est pas une taille fixe, mais plutôt dérivé d'un paramètre de système d'exploitation dans les propriétés du système. Un quantum varie en fonction du Win32PrioritySeparation
paramètre du registre qui correspond normalement à l'un des paramètres des "Propriétés système" (soit "Services d'arrière-plan" ou "Applications").
Un quantum au niveau du système d'exploitation est
- pour le paramètre "Applications"
- 18 (soit 6 graduations) pour les applications de premier plan (93,75 ms)
- 6 (soit 2 graduations) pour les applications en arrière-plan (31,25 ms)
- pour le paramètre "Background Services"
- 36 (soit 18 graduations) pour les applications de premier plan (187,5 ms)
- 36 (soit 18 graduations) pour les applications en arrière-plan (187,5 ms)
Alors maintenant, nous savons qu'un quantum de système d'exploitation sur une configuration de Windows Server à optimiser pour les services d'arrière-plan est ...
36 / 3 * 15.625000 ms = 187.5 ms
SQL OS Quantum
Cette section répertorie ce que j'ai trouvé sur SQL OS quantum ...
Type d'attente SOS_SCHEDULER_YIELD
D'après la description de Paul Randall sur le type d'attente SOS_SCHEDULER_YIELD:
Ce type d'attente est lorsqu'un thread a pu s'exécuter pour son quantum de thread complet (4 millisecondes dans toutes les versions de SQL Server, immuable ), et a donc volontairement donné le planificateur, se déplaçant vers le bas de la file d'attente d'exécution dans son planificateur.
Référence: SOS_SCHEDULER_YIELD (types d'attente SQLSkills.com)
Planificateurs dans les DMV SQL Server
Dans une explication sur les DMV SQL Server pour le DMV sys.dm_os_schedulers.
[...] Windows utilise un mécanisme de planification préemptif et attribue un quantum de temps CPU à chaque thread, lorsqu'un thread consomme son quantum, il est envoyé dans une file d'attente et d'autres threads sont exécutés.
En opposition, SQL Server utilise un mécanisme de planification coopérative lorsque les threads peuvent volontairement produire son quantum de temps (vous pouvez voir ce comportement lorsque vous avez un type d'attente SOS_SCHEDULER_YIELD). Cela permet à SQL Server d'optimiser l'utilisation du processeur, car lorsqu'un thread est signalé pour exécution mais n'est pas prêt à s'exécuter, il peut céder son temps en faveur d'autres threads .
Référence: Comprendre les planificateurs, les travailleurs et les tâches SQL Server (MSSQLTips.com)
Détecter la pression du processeur SQL Server
Il s'agit d'une toute petite section d'un article concernant la pression du processeur dans SQL Server.
Se produit lorsqu'une tâche renvoie volontairement le planificateur pour l'exécution d'autres tâches. Pendant cette attente, la tâche attend que son quantum soit renouvelé .
Référence: Détecter la pression du processeur SQL Server (MSSQLTips.com)
sys.dm_os_schedulers (Microsoft Docs)
Je suppose que la citation suivante est l'extrait le plus important d'informations concernant le quantum SQL OS que j'ai pu trouver:
quantum_length_us bigint Identified for informational purposes only. Not supported. Future compatibility is not guaranteed. Exposes the scheduler quantum used by SQLOS.
Référence: sys.dm_os_schedulers (Transact-SQL) (Microsoft | Docs)
Mon énigme
Le serveur OS Quantum régule le temps accordé au service SQL Server pour exécuter des "tâches". SQL Server OS Quantum est défini sur 4 ms. Si je divise les 187,5 ms par 4 ms, il me reste 3,5 ms.
Et nous n'avons même pas commencé la discussion sur le moment où l'intervalle d'horloge est réglé sur autre chose que la valeur par défaut de 15,625000 ms ...
Question simple
Comment le SQL Server Quantum (4 ms) est-il synchronisé avec le serveur OS Quantum (normalement: 187,5 ms)?
Explication d'une question simple
Après 184 ms de quantum OS utilisé (ce qui correspond à 46 quantums SQL complets), le quantum OS dispose de 3,5 ms de temps avant de devoir transférer le planning à un processus différent. Le système d'exploitation SQL démarre un quantum (4 ms) et après 3,5 ms, le quantum du système d'exploitation a décidé d'arrêter le thread SQL OS actuel qui a encore 0,5 ms avant de produire le calendrier. Que se passe-t-il maintenant?
la source