Partilhar via


Windows 7 kernel endringer

Kanskje ikke det som blir viktigst for deg i daglig arbeid med plattformen vår, men tenkte å vise at vi gjør mye i Windows 7 også, endrer grunnleggende ting for å få et enda kjappere system, men samtidig tenker nøye gjennom kompatibilitetsutfordringene rundt dette.

  • I windows vista inn førte vi noe som het Delayed autostart for servicer, fordi ikke alle trenger å starte på akkurat samme tidspunkt, dvs i det du logger på. I Windows 7 tas dette et hakk videre med Trigger Started Services. Det er tjenester som skal starte automatisk forsåvidt, men ikke egentlig trenger å kjøre hele tiden. Det kan f.eks være en tjeneste som da blir startet når en IP Adresse endres eller mistes osv. Deretter gjør den jobben sin og avslutter.
  • Usermode scheduling. Eget rammeverk og API for applikasjoner som ønsker å sørge for schedulering av ulike egne tasks, uten å opprette disse som egne tråder (da tar OS Scheduleren og kjernen seg av skeduleringa). SQL Server i Fiber mode gjør egentlig det samme fra før, men dette kan ikke tas i bruk i alle scenarior pga et par utfordringer. Usermode scheduling løser disse problemene på OS nivå og lar andre applikasjoner benytte seg av det samme.
    • Problemet består i all enkelhet i at kernel ikke har noe anelse om hva en fiber er og en fiber trenger ikke nødvendigvis havne i samme tråd hver gang. Hvis denne SQL fiberen da gjør f.eks Win32 kall og disse returnerer siden, så kan fiberen plutselig være i en annen tråd.
  • Skjermdrivere. Vista skjermdrivere vil fungere de, men for å få DX11 må det være en DX11 driver/kort med også. Og du vil få veldig god ytelse med Vista standard drivere også, de er fullt ut støtta.

 

  • Dispatcher lock. Når en tråd gjør en transition mellom ulike states, f.eks fra run til wait, så tar den også en global lås som kalles “dispatcher lock”. På systemer med mange cores/cpu’er og mange prosess tråder blir denne låsen en flaskehals (hot lock). Spesielt viktig var dette mtp enkeltes spådommer om ordinære maskiner med opptil 128 cores i nærmeste framtid, på dagens prosessorer med 4 og 2 cores var ikke problemet så merkbart.
    • Dette ble gjort ved å innføre to nye “states” for tråder og låser for enkelt objekter istedetfor en global.
    • Resultatet er at trådene vil bruke mindre
  • OS’et grupperer nå CPU’er og støtter opptil 256 prosessorer. Grunnene til at man valgte å gruppere CPU’ene istedetfor for å utvide støtte for flere enkeltvis var mange, men en av de viktigste var kanskje å sørge for at en del gamle API kall skulle fungere fortsatt og gjennom dette sikre god applikasjon kompatibilitet.
  • Etter at "Dispatcher Lock’en” var løst fant man fort den “hot locke’en”. Dette var den såkalte “PFN Database” låsen. PFN inneholder en liste over alle fysiske minne pager og når memory manageren skal tildele en ny fysisk page til en prosess låser den hele lista så lenge. Nå låses kun mindre deler av gangen.
  • Core Parking. Dette handler i stor grad om strømsparing. Dersom en eller flere av kjernene dine idler, eller alle 4 kjører på 10% utilization, så kan win7 flytte alt over på en core og sette de andre sleep enn så lenge. Man sparer litt ved å sette en core på en fysisk prosessor i sleep, men enda mer kan spares på systemer med flere fysiske CPU’er, der man kan sette en hel socket i sleep.
  • Plug and play parallellisering. Dette betyr at flere pnp prosesser kan gå parallellt under boot når ulike bus’er blir bedt om å oppgi hva de har tilkoblet og de nødvendige driverne blir lasta basert på svarene.