Upload
payton
View
37
Download
0
Embed Size (px)
DESCRIPTION
Au cœur de Windows Seven et de Windows Server 2008 R2. RDA401 – Microsoft Techdays 9 février 2011 – 13h-14h. Présentation des speakers. Herv é Chapalain Escalation Engineer Microsoft France [email protected] Julien Crozon Tech lead - PowerPoint PPT Presentation
Citation preview
2
Au cœur de WINDOWS SEVEN et de WINDOWS SERVER 2008 R2
RDA401 – Microsoft Techdays9 février 2011 – 13h-14h
3
Présentation des speakers
Hervé ChapalainEscalation EngineerMicrosoft [email protected]
Julien CrozonTech leadSociété Générale Corporate Investment Bankinghttp://[email protected]
4
Agenda
Changements architecturaux du noyauTroubleshootingScalabilitéDiminution de la consommation électriqueVirtual Hard Drive (VHD)
5
Le Kernel
• Windows 7 et Server 2008 R2 utilisent le même kernel• Comme prévu, 2008 R2 Serveur n’existe qu’en 64-bit– Wow64 est une option sur la version Core Serveur
• Le numéro de version est 6.1 pour des raisons de compatibilité– Ne reflète pas le fait que c’est une nouvelle version majeure– Ne reflète pas la quantité de nouveautés– Anticipe le fait que de nombreuses applications ne sont
compatibles que pour Vista au moment de la sortie de win7
6
Agenda
Changements architecturaux du noyauTroubleshootingScalabilitéDiminution de la consommation électriqueVirtual Hard Drive (VHD)
7
MinWin
• MinWin est la première étape d’un Windows modulaire• Peut être buildé, booté et testé de manière autonome• Les couches plus hautes peuvent évoluer de manière
indépendante• MinWin est un ensemble de composants requis
pour booter et accéder au réseau• “le NT de Cutler”: Kernel, file system, TCP/IP stack,
device drivers, services• Pas de WMI, graphiques, audio ou shell
• MinWin: 160 binaires, 22MB sur disque, 40MB en mémoire
8
MinWin
Shell,Graphics,Multimedia,Layered Services,Applets, Etc.
Kernel, HAL,TCP/IP,File Systems,Drivers,Core System Services
MinWin
9
DLL Refactoring• Pour retirer des dépendances sur les couches
hautes, il a fallu réarchitecturer des DLLs• Les applications en dehors de MinWin utilisent les
anciennes DLLs• Ces DLLs transfèrent les appels vers les APIs
MinWin via des DLLs MinWin• Exemple:
• Kernel32.dll -> Kernelbase.dll• Advapi32.dll -> Kernelbase.dll
10
API Sets
• Problème : les DLLs contiennent plusieurs ensembles d’APIs différentes• Un ensemble d’APIs est lié à une implémentation
• Les API Sets sont des DLLs virtuelles• L’architecture interne d’une API est séparée de son
implémentation• Elles peuvent être réunies dans un même binaire pour
une meilleure efficacité• Les APIS de MinWin sont les premières à être
implementées selon ce modèle :• Ex. API-MS-WIN-CORE-ERRORHANDLING-L1-1-0.DLL
11
DLLs Virtuelles vers DLLs logiques• Le “mapping” est stocké dans un schéma qui est embarqué
dans Apisetschema.dll• Le Kernel lit le schéma au boot et le “map” dans tous les
processus pour une meilleure performance• Le loader utilise le schéma pour charger les DLLs qui n’ont pas
de path spécifié• Des images de ces DLLs virtuelles existent sur le système
pour des raisons de compatibilité avec des outils type Depends• Elles ne sont toutefois pas utilsées par le loader
Virtual DLL 1
Virtual DLL 2
ApiSetSchema.dll Logical DLL
Loader
12
Agenda
Changements architecturaux du noyauTroubleshootingScalabilitéDiminution de la consommation électriqueVirtual Hard Drive (VHD)
13
Troubleshooting
3 grandes améliorations pour aider au déplombage d’applications
Fault Tolerance Heap (FTH)
Process Reflection
Radar
14
Troubleshooting Le Fault Tolerance Heap (FTH)
Rappel : qu’est ce qu’un sous-système de ‘heap’ (‘tas’ en français) ?
Le système d’exploitation n’offre qu’une API d’allocation mémoire : VirtualAlloc. La granularité de son allocation est une page mémoire (généralement 4k pour les small pages, 2Mo pour les large page).Pour éviter de perdre de l’espace, le système offre un sous-système de ‘heap’ qui permet d’allouer de plus petits blocsDifférentes fonctionnalités sont proposées depuis XP : la sérialisation des appels en cas de multithreading, le LFH (Low Fragmentation Heap) pour éviter la fragmentation
15
Troubleshooting Le Fault Tolerance Heap
Idée principale : les corruptions de heap représentent 15% des crash en mode user, 30% des crash lorsque les applications se terminent. Un heap résistant à ce type de problème améliorerait l’expérience utilisateur
Réalisation :Un nouveau sous-système de heap appliqué dynamiquement par le système d’exploitation permet de réduire les chances d’avoir une faute en cas de dépassement de buffer, de double libération de la mémoire, etc.
16
Troubleshooting Le Fault Tolerance Heap : designLe système d’exploitation surveille les crash des applications
Si le logiciel crash dans ntuser.dll quatre fois dans l’heure qui suit, le système applique une politique de tolérance de faute
Un système de poids est utilisé afin de choisir la meilleure technique d’évitement de faute
Si le processus crash quand même, le poids est diminuéSi le processus survit, le poids est augmentéSi le poids tombe en dessous de zéro, la politique de tolérance de faute est supprimée
Les axes sur lesquels le FTH peut agirValide toutes les opérations de tasGarde les 4 derniers Mo libérés en mémoire afin de supporter les doubles libérationsGarde des espaces entre les petites allocations pour éviter les problèmes de débordement
Le FTH ne justifie pas de ne plus corriger les bugs !C’est une ‘mitigation’ : un moyen pour que l’expérience utilisateur ne soit pas désagréableLes bugs remontés doivent être traités
17
DémoLe Fault Tolerance Heap
Troubleshooting
18
Troubleshooting Process Reflection
Idée principale : en environnement de production, quand un processus a des problèmes de mémoire ou qu’il réagit très lentement, la meilleure solution est souvent de prendre un dump pour l’analyser. Malheureusement, c’est une opération lente qui suspend le processus et qui n’est donc pas praticable sur des services à haute disponibilité (serveur Web, base de données, etc.)
Solution :Créer une copie du processus de la même façon qu’un fork() sous Unix, et créer un dump de cette copie
19
TroubleshootingProcess Reflection : design
Le système d’exploitation expose une nouvelle fonction via ntdll : RtlCreateProcessReflection
L’API est pour l’instant interne
La mémoire est copiée en mode Copy-On-Write : les deux processus partagent les même pages mémoire jusqu’à ce que le processus originel fasse des modifications
L’outil ‘ProcDump’ de SysInternals permet d’utiliser la fonctionnalité
20
DémoProcess Reflection
Troubleshooting
21
Troubleshooting Radar
Radar est un système de détection automatique de fuites mémoire temps réel
Spécialement conçu pour avoir un très faible impact sur les processusRécolte suffisamment d’informations pour pouvoir pointer la source de la fuite mémoireUtilise l’API de Process ReflectionImplémente une heuristique permettant de choisir quels processus sont suspectés de fuites mémoire (dépassement d’un certain ‘working set’ par exemple)
Quand une fuite est détectée, un rapport est envoyé à Microsoft
Les ISV peuvent le demander et ainsi corriger leurs programmes
22
Agenda
Changements architecturaux du noyauTroubleshootingScalabilitéDiminution de la consommation électriqueVirtual Hard Drive (VHD)
23
Working Sets> Le Memory Manager a été optimisé pour réduire l’impact des
processus consommant beaucoup de VA> Réutilisation de leurs pages plus agressive> Utilise 3bits plutôt que 2bits pour gérer l'âge d'une page
> Le System cache, paged pool, et le code system utilisent leur propre working set> Chacun est optimisé pour son usage spécifique, ce qui améliore
l’utilisation globale de la mémoire> Réduit l’impact des copies de fichiers sur le code système
System Cache, Paged Pool, System Code P1 P2 …
System Cache P1 P2 …Paged Pool System Code
Vista, Server 2008
Windows 7, Server 2008 R2
24
Suppression du “PFN Lock”
> Windows trace l’état des pages en mémoire physique> En cours d’utilisation (dans un working set)> Pas assignées à un working set (dans une des listes
suivantes: free, zero, modified, standby…)> Avant, les changements de ces états etaient
synchronisés par le “global PFN (Physical Frame Number) lock”
> Aujourd’hui, le PFN lock n’existe plus> Les pages sont synchronisées individuellement> Améliore la performance des applications nécessitant
beaucoup de mémoire
25
Suppression d’autres “Locks” importants
> Cache Manager Virtual Address Control Block (VACB) lock> Pas complètement supprimé, mais n’est plus utilisé pour de
nombreuses tâches courantes> Améliore la performance des applications utilisant le file
caching de manière intensive> Object Manager Type lock
> Améliore la performance des tâches nécessitant la modification d’objets kernel (synchronization, files, registry)
26
Suppression du Dispatcher Lock• Les locks serialisent l’accès aux structures de
données• Evitent que plusieurs threads modifient simultanément les
mêmes données• Introduit de la latence car les threads doivent attendre leur
tour pour continuer• Le Dispatcher lock est utilisé proportionnellement à
l’activité• Le lock protège tous les changements d’états des threads
(wait, unwait, etc.) • Ce lock n’existe plus sous Windows 7
• Chaque thread est protégé par son propre lock• De nombreuses opérations sont lock-free
39
Agenda
Changements architecturaux du noyauTroubleshootingScalabilitéDiminution de la consommation électriqueVirtual Hard Drive (VHD)
40
Comment réduire la consommation ?
4 améliorations pour diminuer la consommation électrique
Core Parking
Unified Background Process Manager (UBPM)
Timer coalescing
PerfConfig.exe
41
Comment réduire la consommation ?
MotivationsLa consommation électrique des serveurs devient de plus en plus problématiqueAutonomie de l’embarqué
0 10 20 30 40 50 60 70 80 90 100 -
5.00 10.00 15.00 20.00 25.00 30.00 35.00 40.00
System Power vs. CPU Utilization(Idle)
CPU Utilization (%)
Tota
l Sys
tem
Pow
er
(Wat
ts)
42
Comment réduire la consommation ?
Comment consommer peu ?
Maximiser le temps d’idle / d’extinction des CPUEteindre les processeurs non nécessairesEviter le plus possible de les réveiller
Minimiser le nombre de processus démarrésMutualiser les servicesDéfinir des événements qui démarrent des services, plutôt que démarrer des services qui attendent des événements
43
Comment réduire la consommation ? Le Core Parking
Idée principale : éteindre les core non utilisés
Réalisation :Le système d’exploitation peut maintenant décider d’endormir indépendamment chaque core (to ‘park’ a core)Changement de principe du scheduler : celui-ci essaye de garder suffisamment de core éveillés pour absorber la charge demandée, et éteint les autresLe système connait la topographie physique (sockets et CPU) et logique (hyperthreading, SMT) et adapte son comportementLe comportement est différent entre Windows Seven et Windows Server 2008 R2
44
Comment réduire la consommation ? Core Parking : design
Un évènement est levé toutes les 50 msIl contrôle la charge des CPU et décide de l’état de chaque core physique pour les prochaines 50 ms
Quel est l’algorithme de décision ?Cycle en hystérésis : augmente le nombre de CPU éveillés au delà d’un certain seuil d’utilisation, le diminue en deçà d’un autre seuilIl y a un minimum de core qui ne peuvent être endormisSur les systèmes NUMA, au moins un core par nœud doit rester éveillé (pour recevoir les notifications NUMA)
Le scheduler est notifié de la nouvelle politique de parking
Les threads ne sont pas envoyés sur les core endormis (à moins qu’il existe une affinité)
45
DémoCore Parking
Comment réduire la consommation ?
46
Comment réduire la consommation ? Unifier la gestion des tâches de fond (UBPM)
Idée principale : beaucoup de services ne sont utiles que dans un contexte bien précis, et ne devraient être démarrés que quand c’est nécessaire
Réalisation :Création de l’infrastructure UBPM (Unified Background Process Manager) servant à démarrer des services selon leurs abonnements à des événements
47
Comment réduire la consommation ? UBPM : design
Le processus de gestion des services (‘services.exe’) gère les réactions des services aux événements
Les événements sont implémentés en ETW (Event Tracing for Windows)
Chaque service peut s’abonner à un ou plusieurs événements pour déclencher son démarrage ou son arrêt
Exemple : le service de gestion de NetBios (‘lmhosts’) démarre avec la première IP disponible, et s’arrête quand la dernière IP devient indisponibleExemple : le service de gestion des périphériques BlueTooth (‘bthserv’) démarre au premier périphérique BlueTooth connecté
48
DémoService asservi à un événement custom
Comment réduire la consommation ?
49
Comment réduire la consommation ? Rassembler les événements des timer (Timer Coalescing)
Idée principale : beaucoup d’applicatifs utilisent des timer pour être appellés régulièrement, mais n’ont pas de contrainte forte sur le temps écoulé entre chaque appelRéalisation :
Nouvelle API de ‘Timer Coalescing’ : on peut créer un timer en précisant la tolérance du logiciel vis-à-vis de l’exactitude de la période
Timer tick15.6 ms
Periodic Timer Events
50
Comment réduire la consommation ?Timer coalescing : design
Nouvelle fonction dans l’API Windows : ‘SetWaitableTimerEx’
Contient un argument en plus, ‘TolerableDelay’, permettant d’indiquer qu’un driver ou un logiciel tolère une incertitude sur la période du timer
Les principaux services systèmes de Windows 7 / Windows Server 2008 R2 utilisent ce type de timer
C’est le choix du développeur de l’utiliser ou nonL’ancienne API fonctionne exactement comme avant pour éviter les effets de bord
51
DémoObserver le regroupement des timer dans un Windows 7
Comment réduire la consommation ?
52
Comment réduire la consommation ? Utiliser l’outil Powercfg.exe
Démo
53
Comment réduire la consommation ? Analyse des résultats obtenus : distribution du temps passé en idle
Windows* Vista SP1Windows* 7 Build AWindows* 7 Build BMove right better
54
Agenda
Changements architecturaux du noyauTroubleshootingScalabilitéDiminution de la consommation électriqueVirtual Hard Drive (VHD)
55
Les disques durs virtuels (VHD)
Les VHD sont des composants à part entière du système d’exploitation
Support natif dans l’OS
Démonstration
Performances
56
Les disques durs virtuels (VHD) Un support natif dans le système d’exploitation
La gestion des VHD est disponible directement dans la console de management des disques
Ainsi que via une API Win32 public disponible dans VirtDisk.dll : CreateVirtualDisk, GetVirtualDiskInformation, etc.
Les fonctionnalités standards sont :Création, attachement d’un fichier à un volume, détachement, etc…Augmentation de la taille d’un disque, compactage, réunion de deux disques en un seul, etc.Gestion de VHD imbriqués (deux niveaux maximum)Boot sur un VHD (et donc ordonnancement des arrêts des disques)
57
DémoCréer un VHD
Les disques durs virtuels (VHD)
58
64K Sequential R
ead
64K Sequential W
rite
4K Random Read
4K Random Writ
e1.00
10.00
100.00
1000.00
Physical Drive vs. Fixed VHD vs. Dynamic VHD vs. Passthru (VM Mode)
Physical Drive in HostFixed VHD in Win7Dynamic VHD in Win7Passthru in Win7
Thro
ugpu
t(M
Bps)
(Log Scaled by 10)
Les disques durs virtuels (VHD) : Performances
59
MSDN et TechNet : l’essentiel des ressources techniques à portée de clic
http://technet.com http://msdn.com
Portail administration et infrastructure pour informaticiens
Portail de ressources technique pour développeurs