Hvordan optimalisere VM-minne og prosessorytelse

De svært skalerbare serverarkitekturene som er tilgjengelige for moderne datasentre, har oppnådd enestående minne- og CPU-tetthet. Som et resultat har også VM-tettheten økt. Noen av teknikkene som brukes for å bygge høyst skalerbare servere, kan skape et utilsiktet ytelsesproblem for VM-er. Et vanlig problem er NUMA node-balansering. I dette innlegget skal jeg prøve å gi et høyt nivå oversikt over problemet og noen av måtene å løse det på. Ikke alle hypervisorer behandler problemer med NUMA-noden på samme måte, så jeg har holdt denne post-hypervisoren nøytral. Spesifikasjoner for det virtuelle miljøet adresseres best med leverandøren.

Hva er NUMA-minne?

NUMA (Non Uniform Memory Access) maskinvarearkitekturer bruker flere minnebusser for å lindre stridsproblemet i systemer med flere prosesser. Dette gir en stor skalerbarhetsfordel i forhold til den tradisjonelle SMP-modellen (Symmetric Multi-Processing) når det er behov for store antall prosessorer. Arkitekturen kartlegger spesifikke prosessorer til spesifikke høyhastighetsbusser koblet til spesifikke bassenger av minne. Disse danner en NUMA-nod. Minne i den samme NUMA-noden som prosessoren regnes som lokalt minne og kan nås relativt raskt. Minne utenfor NUMA-noden regnes som fremmed minne og tar lenger tid å få tilgang til.

I diagrammet over vil VM0 være bra ettersom hver kjerne har tilstrekkelig lokalt minne tilgjengelig. VM1 skal aldri få tilordnede kjerner i forskjellige NUMA-noder fordi en NUMA-bevisst hypervisor bare skal tilordne en VM til en enkelt NUMA-node. VM2 vil ha NUMA-minnefragmentering som kan påvirke ytelsen fordi det ikke er tilstrekkelig lokalt minne til å tilfredsstille kravet på 12 GB.

I noen tilfeller vil VM-ere prestere bedre på servere med mindre fysiske prosessorer og samme mengde minne, siden hver NUMA-node vil ha mer lokalt minne. Sammenlign et 4 prosessors 32 GB-system der hver NUMA-node har 8 GB lokalt minne til 2 prosessorer 24 GB-system hvor hver NUMA-node har 12 GB lokalt minne.

Hvordan påvirker dette VM-er?

Hvis en VM bruker minne som ikke er en del av den samme NUMA-noden, kan det ha ytelsesproblemer når utenlandsk minne er nødvendig. Hvis du har forskjellige mengder minne i forskjellige NUMA-noder, kan dette være et problem hvis VM-er er tilfeldig fordelt over noder. Heldigvis er moderne hypervisorer NUMA-bevisste og prøver å tilordne VM-er med høye minneavtrykk til noder med mer lokalt minne. Det er også muligheten til å tilordne en NUMA node-tilknytning til en VM. Dette overstyrer hypervisorenes dynamiske tildeling av VM-er til NUMA-noder.

Noen problematiske scenarier

Vurder en serie sovende VM-er som har NUMA-tilknytningsoppdrag. Når de spinner opp, blir de tilordnet NUMA-noden som er angitt i tilknytningsinnstillingen. Hvis for mange VM-er er tilordnet den samme NUMA-noden, er det potensialet for prosessorressursstridighet i en enkelt node mens andre noder er underutnyttet. I tillegg kan muligheten til å overoppfylle minnet forverre problemet i noen situasjoner. Hva hvis minneavtaket til en VM er større enn minnet i NUMA-noden?

Løsningen

Det er en kunst å balansere NUMA-nodeminnet og prosessorkravene slik at VM-ytelsen blir optimalisert. En stor del av dette er å ha god forståelse for arbeidsmengden som VM-ene dine kjører og hva konsekvensene av dårlig ytelse kan ha.

I mitt forrige innlegg indikerte jeg at VM og hypervisor bevisst overvåking er viktig for å få et riktig bilde av VM og vertsytelse. Det er situasjoner som NUMA-tilhørighet at tradisjonelle verktøy for ytelsesovervåkning har problemer med å adressere. Dette er de typene scenarier som en ny rase av resultatmålinger hjelper til med å administrere. Det er ikke tilstrekkelig å overvåke vertene og VM-ene uavhengig. Du må sørge for at du forstår problemene, at du har instrumentering på plass for å gi tilstrekkelig telemetri, har definert terskler og triggerpunkter, og viktigst av alt evnen til å reagere når de er nådd.

© Copyright 2020 | mobilegn.com