Gå til innhold

hvordan funker multiprosessor/core "deep down"


N_R

Anbefalte innlegg

..på et litt mer teknisk nivå. Vet forskjellen på prosess og thread! :)

 

Saken er at jeg har en boks på jobben, som vi vurderer å oppgradere til AMD x2 i løpet av sommeren, eller kanskje en dual, dual-core opteron 265 hvis jeg får overtalt sjefen.... :love:

 

Vi kjører en custom software på den (lang historie), men hovedsaken er at den kjører en ca 10 prosesser, som hver har fra 1-4 tråder som i all hovedsak er idle. Men noen av disse mottar innimellom arbeid som er veldig heavy, tenk deg dvd->divx-encoding. Da erspørsmålet, hvordan vil dette funke med tanke på hvordan trådene eksekveres?

 

Single-core er greit nok. En tråd eksekveres, kjører litt til den blir stoppet, og puttet i køen igjen. So far so good. Men, vil en tråd alltid kjøre på den coren den blir assignet til første gangen? Eller kan den "hoppe" mellom prosessorer? Høres tvilsomt ut for meg men.....

 

Problemet mitt er jo selvsagt at jeg "ved uflaks" kan få tildelt to jobbe-tråder på samme core, og at andre cores vil gå på tomgang. Hvis trådene hadde kjørt opp til full guffe med en gang hadde det ikke vært noe problem, da ville nye tråder startet opp på en "ledig" core. Men, jeg fyrer opp tråder uten egentlig å vite hvem av dem som får inn en jobb utenfra og kommer til å kreve masse prosessor-kraft.... :(

 

Jeg har altså to muligheter:

 

1) Tråder kan "hoppe vilt" mellom cores - jippi, jeg trenger ikke gjøre noen ting! Løp & kjøp!!

 

2) Tråder må kjøre på den coren den er startet på - fokk. Det betyr ekstra jobb. Har da to muligheter:

 

2a) - jeg må progge om "listener"-trådene mine til å starte ENDA en ny prosess for å ta seg av arbeidet når heavy-work kommer inn.... Da får scheduleren en litt enklere oppgave når den skal fordele trådene. Kjipt, en del jobb + maaaasse testing... :(

2b) Screw X2, gå for klokka FX i stedet!! :D

 

 

Så, hva tror dere? Er jeg helt på jordet? Eller har jeg faktisk et reelt problem? Håper på svar.... :)

Lenke til kommentar
Videoannonse
Annonse

hei, takker for svar! :) Men lurer på om jeg glemte å nevne et par ting. Dette er en service, og jeg kan ikke manuelt sette affinity på den. Vel, jeg kan, men det hjelper meg egentlig lite. Jeg vet nemlig ikke hvilken sak som vil kjøre hvor. Dessuten, virker på meg som affinity gjelder prosess, og ikke thread?? Jeg kjører jo fire tråder inne i hver prosess, å låse disse til en core er lite hensiktsmessig, da er det bedre å kjøre de på vanlig måte og la scheduleren styre hvilken tråd som går hvor....

 

La oss si jeg har et prog/prosess, som har fire tråder, A, B, C og D. Disse server hver sin klient over internett, og venter på å få tildelt jobb fra disse.

 

Setter jeg A og B på core 1 og C og D på 2 vil det til en viss grad funke, men det blir krøll hvis både C og D får inn en jobb samtidig. Da blir prosessor 2 kvalt, mens nummer 1 lunker avgårde på idle.

 

Jeg ønsker altså å "swappe" C over på core 1 hvis D allerede bruker all kapasitet på core 2.... var det en bedre forklaring? :)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...