Hoofdcategorieën

Ontwikkelaars: performance HyperThreading slecht

Door Martin Sturm, zaterdag 19 november 2005 14:19
Bron: ZDNet UK, views: 21.624

Hoewel Intel had beloofd dat de echte voordelen van de HyperThreading-techniek, die het bedrijf in een aantal van zijn processors heeft geïntegreerd, pas duidelijk zouden worden zodra software beter gebruik zou maken van threads, lijkt er echter op dat deze bewering niet opgaat wanneer het om serverapplicaties gaat, zo schrijft ZDNet.

Met name wanneer Citrix Terminal Server en Microsoft's SQL Server op één server worden gebruikt onder hoge load, blijkt dat de prestaties afnemen wanneer HyperThreading is ingeschakeld. Wanneer deze feature wordt uitgeschakeld zijn de prestaties weer op het gebruikelijke niveau, aldus de technische directeur van boekhoudsoftwareproducent Lakeview Computers. Ook een ontwikkelaar van Microsoft schrijft dat de prestatie van SQL Server achterblijft wanneer HyperThreading is ingeschakeld. De afname in prestaties zou veroorzaakt worden door het feit dat de threads die tegelijk kunnen worden uitgevoerd het L1- en L2-cachegeheugen moeten delen. Hierdoor zouden missers bij het cachen van data vaker voorkomen wat uiteraard een negatieve invloed heeft op de prestaties.

HyperThreading vergelijking

Volgende 14:24
Vorige 13:34

Reacties

«  1  2  »

had beloofd
Ontopic: hoe handig HyperTreading is hangt natuurlijk grotendeels ervan af of de software die er op draait ervoor geprogrammeerd (geoptimaliseerd) is. HyperTreading is nog altijd niet hetzelfde als het hebben van meerdere cores.

Dan moeten software ontwikkelaars dus nog meer ontwikkel tijd steken, omdat hyper-theading niet goed genoeg is om normale multi-threading applicaties uit te voeren... Vooral voor zoiets als hyper-threading kan ik niet geloven dat een software ontwikkelaar daar extra kosten voor wil maken.
Intel heeft gewoon gebakken-lucht verkocht...daar zijn ze namelijk goed in.

Het heeft er wel voor gezord dat de overstap naar dual-core sneller genomen kan worden, omdat meer applicaties threads ondersteunen. Daar waar het vroeger weinig zin had om threaded software te schrijven, heeft het dat nut nu wel.

Daar kun je dus niet zomaar voor optimaliseren. Bij hyperthreading is het vooral handig om je code te parallelliseren op basis van de eenheden die hij van de CPU gebruikt. Bijvoorbeeld een general purpose thread en één die veel FPU berekeningen doet. Dit is een nogal heel erg specifieke scheiding die je lang niet altijd kan maken in software; vaak heb je vooral één specifiek element nodig, en deel je op door middel van simpele taakverdeling (zo kan een raytracer bijvoorbeeld 2 helften van het scherm door 2 threads laten doen; maar dit is in beide gevallen veel FPU berekeningen en is voor hyperthreading dus niet zo optimaal als voor een dubbele core).

je hoort vaker dat HT wordt uitgeschakeld op servers, niet alleen in de combinatie Citrix/SQL. Wij hebben er nog geen testen mee gedaan.

Inderdaad, dit is zo ongeveer al bekend sinds de introductie van HyperThreading. Waarom ZDNet er nu ineens ophef over moet gaan maken is mij een raadsel.

Nou ik moet eerlijk zeggen dat het voor mij wel nieuws is. Ik dacht altijd dat het lag aan het gebrek aan multithreaded software en server software is vaak wel multithreaded.

Daarom ook de ondermaatse prestatie op desktop systemen. Omdat deze software bijna altijd single thread is.

Dat blijkt nu dus ook weer niet altijd het geval. Hypertreading is dus over hyped wat mij betreft. :z

Is er ook iets bekend over Xeon processoren met hun grotere cache?

heel simpel: ZDNet loopt ook altijd achter de grote meute aan wat reacties/opmerkingen/artikels.

Zij zouden denk ik wel baat hebben bij HT, mss dat ze dan een beetje rapper zijn en niet met een herkauwing van oud nieuws komen.

Ontopic: laten we de dingen niet bagetalliseren. HT is een CPU-techniek zoals alle andere. Deze techniek is ingevoerd op een moment da de hardwarematige beperkingen van een CPU bereikt waren, zijnde FSB, kloksnelheid, het ontwerp zelf...

Op dat moment was het een stap (of moet ik eerder zeggen een poging) om de prestaties van de toen courante CPU's een beetje verder op te drijven.

Het is ondertussen inderdaad wel al een beetje 'achterhaald'.
Pas op, HT heeft nog zo steeds zijn voordelen zenne, vooral bij desktopgebruik, maar voor servers is het inderdaad een heel klein beetje 'gebakken lucht'.

En dit ligt niet aan de HT an sich, maar eerder aan de soort software dat gedraaid wordt op servers.

We merken dat desktop-software wel zijn voordeel kan halen uit HT, maar het is ook zo dat deze software ook niet optimaal gaat draaien op een server, en visa-versa.

Maar alle ontwikkelingen in CPU-land, en het maakt niet uit of deze een succes zijn/waren of niet, dragen bij tot de verdere ontwikkeling ervan.

Iedereen begaat wel eens een flater, en laten we eerlijk zijn, het is niet alleen Intel die de bal soms misslaat...

Ik moet eerlijk zeggen dat ik het onder linux eigenlijk wel lekker vind werken...

Is dit nog wel een topic ?
Ik dacht dat met de huidige ontwikkelingen rond dual core processors dat sowieso niet meer nodig was en eigenlijk heeft AMD al met de Athlon64 bewezen geen HT nodig te hebben om beter te presteren.

Hyperthreading werkt niet op de Athlon64 omdat die een kortere pijplijn heeft dan een P4. Hyperthreading is juist bedoeld om deze pipeline effectiever te vullen. Heb je een kortere pijplijn, dan is Hyperthreading een stuk minder zinvol. Dat AMD dus niets aan hyperthreading heeft is dus een keuze qua design.
Maar zolang Intel cores maakt op basis van Netburst technieken blijft Hyperthreading nog relevant aangezien deze cores dus voordeel kunnen hebben van Hyperthreading.

Trouwens de claim dat "
De afname in prestaties zou veroorzaakt worden door het feit dat de threads die tegelijk kunnen worden uitgevoerd het L1- en L2-cachegeheugen moeten delen.
" gaat natuurlijk ook op voor multicore processors die cache moeten delen. De oplossing ligt dan ook voor de hand: Vergroot de caches. :)

En ra, ra wat heeft intel gedaan met de 6xx serie?

Volgens mij hebben de multicore chips toch echt voor elke core hun eigen cache.

[Vergeet Niet]AMD heeft die andere HT: HyperTransport ;)
[/Vergeet Niet]


Factor 8, zelfs. Klinkt niet erg waarschijnlijk inderdaad :)

In werkelijkheid haal je een factor tussen de 0,8 en 1,2. Je leest het goed, HT kan de performance drukken t.o.v geen HT.Bij hyperthreading heb je twee sets processor registers, maar slechts een processorcore. Als de ene virtuele processor een cache miss heeft dan is de andere aan de beurt.

De hoeveelheid winst die je hebt is er afhankelijk van hoe HT aware het geheel is. Om te beginnen helpt het enorm als het OS zich ervan bewust is dat er HT in het spel is. WXP en W2K3 zijn nog niet zo ver, dit kun je zien door dat de totale CPU load in bv taskmanager nooit boven de 60% komt op een HT processor(120%/2CPU's....). Als je software er vanuit gaat dat je twee (of vier, zes, acht) volledige processoren hebt dan lopen er ook allerlei optimalisaties mis.

HT is in potentie een goed idee omdat er nogal wat van de P4 core onbenut blijf, maar het werkt alleen als je software weet dat die tweede CPU een beetje nep is. Anders heb je er alleen maar last van.

Ik weet niet wat voor HT CPU's jij hebt geprobeerd, maar ik krijg hier echt wel 100% total CPU usage op mijn HT Pentium 4. Windows XP én 2003 zijn wel degelijk HT-aware, omdat er anders niet eens een dubbele processorgrafiek in de task manager zou komen.

HT-aware is iets anders dan het zien van 2 CPU's. Bij mij staan ook dubbele aantallen CPU's in task manager. Wat ik daarmee bedoel is dat het OS snapt dat de tweede (en eventueel vierde, zesde,...) processor geen volledige CPU zijn, maar slechts een extra set registers op hun maatje. Dat is iets dat ze bij WXP en W2K3 (en overigens bij vrijwel geen enkel OS) nog voor elkaar hebben.

Als je in je scheduling ervan uitgaat dat je 2 CPU's hebt en je hebt er inwerkelijkheid maar 1,2 dan kan je OS verkeerde scheduling beslissingen maken.

Maar je hebt gelijk, er is inmiddels een HT fix van MS, die zorgt er voor dat je in Task Manager 100% te zien krijgt als beide deel CPU's vol belast zijn. Helaas is dat een optische fix (of beter gezegd, een fix van HKEY_PERFORMANCE _DATA, die door taskman uitgelezen wordt) en heeft dit geen invloed op de scheduler.

Dat hebben ze bij XP en 2003 wel degelijk voor mekaar.
Maar dan met name in situaties waarbij je meerder HT cpu's hebt.

Bij een enkele cpu is er weinig aan te verbeteren. Het is voor het OS bijna onmogelijk om te bepalen in welke situaties er wel of niet een threads naar de tweede core moet gaan. Dat vereist zowel analyse van de threads dat je de voordelen van HT dan al weer kwijt bent.

Maar eh, kun je eens even onderbouwen dat het alleen om een optische fix zou gaan. (met name wanneer tests al lang hebben uitgewezen dat dat niet het geval is)

En kun je onderbouwen waarom HT maximaal een factor 1,2 zou bereiken wanneer tests op bv Exchange een prestatie winst van 30% laten zien?

Bij meer CPU's wordt het probleem niet kleiner dan bij 1 CPU. De scheduling beslissing om een thread op een 'mate' processor te zetten blijft een moeilijke. Het probleem wordt bij meer CPU's eerder groter omdat je twee threads beter op CPU 0 en CPU 2 kan zetten (twee verschillende fysieke CPU's) dan op CPU 0 en CPU 1 (twee mates op dezelfde fysieke CPU). Om maar niet te spreken van welke threads je het beste samen op 1 CPU kan laten lopen..... Neem van mij aan dat nog geen enkel OS dat kan, je moet namelijk in de toekomst kunnen kijken om de goede beslissingen te nemen.

Dat de scheduling voor de mate processor moeilijk is heb ik zelf al aangegeven. De enige echte HT scheduler die ik ken zit in Linux, en die geeft maar een zeer marginale verbetering t.o.v. de standaard SMP scheduler.

Aangezien HT ook bij Intel verdrongen wordt door echte multi core verwacht ik dat er nog maar erg weinig HT verbeteringen gaan komen in de toekomst.

Overigens heeft ook multicore zo zijn eigen code in de schedulers nodig, zo is het belangrijk om te weten of de cores op 1 die bijvoorbeeld een deel van de cache delen, en zo ja welk deel.

Het is een optische fix omdat het niets veranderd aan de aansturing van de CPU. Het geeft alleen een andere interpretatie van de getallen.

Een HT CPU kun je per definitie niet op 100% belasten op beide deel CPU's omdat ze de processorcore delen, en er kan maar 1 van beide deel CPU's echt bactief zijn. HT benut cycles die anders gemist zouden worden door cache misses e.d. waardoor de beide deel CPU's een deel van de tijd schijnbaar tegelijkertijd werken.

Ik ben trouwens wel benieuwd naar die tests, heb je een hyperlink?

Wat die factor 1,2 betreft, dat is eenvoudig aan te tonen door een programmaatje te schrijven dat twee CPU bound threads actief heeft. Dat bij individuele applicaties als exchange een factor bereikt wordt die iets hoger ligt kan er bijvoorbeeld aan liggen dat exchange op HT twee I/O threads actief kan hebben waardoor de I/O veel efficienter verloopt. m.a.w. die 30% hoeft niet geheel op het conto van de CPU te komen. Ook hier ben ik wel benieuwd naar de hyperlink.

Bij meerdere cpu's wordt het probleem inderdaad niet kleiner. Maar zoals je zelf al aangeeft moet je dan beseffen dat je beter twee threads op cpu 0 en 2 kan zetten dan op 0 en 1. En dat is dus precies wat ze in die versies verbeterd hebben. Dat is dan ook het enige wat je vrij makkelijk kunt verbeteren. Voor de rest blijft het verdelen uiteraard net zo moeilijk als bij 1 cpu.

Intel heeft nooit de illusie gehad dat HT te vergelijken zou zijn met multicore. Het is vanaf het begin af aan bedoelt geweest als een goedkope manier (heel weinig chip oppervlakte nodig) om de efficientie (en dus prestatie) van de cpu te verbeteren. Aangezien gemiddeld gezien de prestatie verhoging gunstig is tov de extra oppervlakte is erg weinig reden om aan te nemen dat HT verlaten zal worden in de toekomst. (tenzij ze uiteraard een totaal ander design gaan gebruiken)

Je herhaalt nu dat het alleen een optische fix is, maar ik zie nog steeds geen onderbouwing daarvoor.

Je kunt uiteraard een HT cpu wel 100% belasten op beide deel cpu's. 100% betekent dan gewoon dat de cpu op elke moment maximaal benut wordt en niet idle staat.
2x 100% is dan de juiste aanduiding voor de processor belasting.
Dat betekent echter niet dat 2x 100% benutting ook altijd dezelfde absolute prestatie betekent. Dat hangt immers af van de efficientie waarmee beide "delen" kunnen werken.

Maar processor usage gebruik je ook niet om prestatie te meten, maar om de belasting van de cpu te meten. En dat doet het dan juist uitstekend.

Overigens is het absoluut niet zo dat maar 1 van beide deel cpu's echt actief zijn. Ze kunnen wel degelijk allebei tegelijk actief zijn. Dat is nou juist het gegeven waar HT om draait.

Wat betreft die factor 1,2. Heb je een link naar zo'n programmatje? Ik ga er niet zelf één schrijven, en al helemaal niet als ettelijke tests al veel hogere absolute prestatie winsten hebben laten zien. (waarvan een aantal uiteraard best case scenario's die je niet vaak tegenkomt, maar die duidelijk maken dat die factor 1,2 niet klopt)

Wat betreft de link naar exchange tests: Hier is een goed voorbeeld van HP:
http://h71019.www7.hp.com..._ExchangeonHPProLiant.pdf

Eerder was de HyperThreading-technologie ook al in het nieuws omdat het mogelijk zou zijn om vanuit een thread toegang te krijgen tot data waar de andere thread die gelijktijdig wordt uitgevoerd over beschikt. Dit wordt ook veroorzaakt door het delen van het cachegeheugen tussen de twee threads. Normaalgesproken zorgt het besturingssysteem namelijk ervoor dat de data waar een thread aan werkt onbereikbaar is voor andere threads de tegelijk lopen.
Dus als ik het goed heb, creeert Intel hiermee een soort van beveiligings 'lek'?

Wat daar staat klopt simpelweg niet, en de schrijver van het artikel is daar ook op gewezen. Lees hier de echte uitleg over dit probleem, dat niet eens 'bug' genoemd kan worden.

Ik zie trouwens een aardige reclametruc op het plaatje: de rechter Media player is net een beetje lichter afgebeeld dan de linker... Wat een manier om de aandacht te trekken. Maar on-topic, het is al heel lang bekend dat HyperThreading soms winst oplevert bij het gebruik van meerdere treads, en soms niet. Ik vraag mij af waarom dat opnieuw is onderzocht.

"Met name wanneer Citrix Terminal Server en Microsoft's SQL Server op één server worden gebruikt"

Iemand die SQL op een Citrix-server installeert heeft het niet helemaal begrepen.
Onzinnig argument dus.

Volledig met je eens. Misschien moeten ze eens een terminal server proberen met een zware oracle database??

Een server configureer je niet om er alles zomaar op te draaien. Als je een database server gaat gebruiken om iets te doen zoals end user applicaties draaien dan heb je het inderdaad niet begrepen.

Neehoor. Het argument is tenslotte dat als je die beide op één server installeert, dat dan de performance mét hyperthreading enabled aanzienlijk slechter kan zijn dan zonder.

Dus zonder is de performance goed/acceptabel/whatever en met is het slecht.

Dat het beter is die twee taken op losse systemen te installeren is wel waar, maar niet relevant voor de argumentatie :)

Dat kan je wel zeggen.

maar het bedrijf dat dit zo implementeerd bij een klant
is niet goed snik

leuk dat het in theorie vertraging opleverd, maar in de praktijk zou je sowiezo niet mogen klagen als je dat in je kop haald.

beetje citrix met sql combineren :z

Tja, als ik Pinnacle op een Citrix server installeer dan is de performance ook zwaar kl*$%.

Het argument van SQL+Cirtix op één systeem is natuurlijk leuk voor een test, maar een ITér welke dit in de praktijk in een productieomgeving installeerd moeten ze aan de hoogste boom hangen.

Dit soort onderzoeken is natuurlijk leuk, maar het blijft de verantwoording voor de ontwerper van een automatiseringsoplossing om de juiste harware/software combinatie te maken inclusief de juiste hardware en software instellingen. De ene keer is dit met Hyperthreading, de andere keer zonder.

Ik heb een dual processor systeem met HT en heb in de taskmanager 4 cpu's. In feite is 1 "virtuele" processor dus half zo snel als 1 fysieke. De meeste programma's onder full-load maken dus alleen maar gebruik van 1 "virtuele" processor; dat kan je soms duidelijk zien in taskmanager. Alleen 3d programma's en enkele programma's van adobe maken gebruik van alle 4. Dus ik heb HT lekker uitgezet. Gewoon RAW processing power gaat veel beter in de meeste programma's die ik gebruik.

1) Is dat een gedacht of heb je cijfers/testresultaten die je kan geven?
2) 'RAW' is een formaat van digitale foto's op te slagen, 'rauwe' of 'brute' processorkracht klinkt nét iets correcter.

Als je zo graag iemand verbetert, maar daarbij zélf meerdere keren overduidelijk de fout in gaat dan is dat vrij triest.

1) Met "gedacht" bedoel je "gedachte" of "inbeelding"?
2) "Raw" is Engels voor "rauw" dus je spreekt jezelf tegen.
3) "Correcter" bestaat niet. Iets is correct of niet.

Klopt niet. Als je één thread draait op een processor met HyperThreading krijg je de volle performantie. Dat je taskmanager maar één van de vier balkjes op 100% ziet wil niet zeggen dat je maar op een vierde van de verwerkingscapaciteit zit.

HyperThreading zorgt namelijk voor het delen van uitvoeringseenheden over twee threads. Draai je twee threads dan krijg je overlap en dus een efficienter gebruik van uitvoeringseenheden. Draai je er maar één dan gedraagt dat zich als één processor zonder HyperThreading.

Enig prestatieverlies volgt dan ook louter uit het gedeelde cachegeheugen. Als beide threads geheugenintensief zijn dan gaat de data die de ene nodig heeft door de andere uit de cache 'weggeduwd' worden.

Om de beste resultaten te bekomen met HyperThreading heb je dus twee rekenintensieve threads nodig die niet geheugenintensief zijn, of maar één van de twee geheugenintensief.

Ben ik niet geheel met je eens. Het is niet zo zwart wit als beiden van jullie zeggen.

Praktijk is het beste bewijs.
Situatie: ACL aanpassen met Subinacl door playfile te draaien. Dual proc + HTT
Start Subinacle 1x en neem de tijd op.
Je ziet in TM 1 x 100% verdeeld over 2 HTT "eenheden" ipv 2 x 100%
Start Subinacl nog een keer en in TM is het 2 x 100% verdeeld over feitelijk 3 HTT "eenheden"
Het uitvoeren van 2de instance Subinacl gaat 2x zo snel
Start Subinacl nog een keer en in TM 3 x 100% over 4 HTT "eenheden". Het uitvoeren gaat 3 x zo snel
Start Subinacl 4x en er is geen performance winst meer.
Dus pas met 3x HTT eenheden performed de machine 100%.
Let wel: door 3x subinacl in 3 jobs uit te voeren gaat je migratie 3x zo snel. M.a.w. m'n ACL migratie werd in ipv 3 uur in 1 uur bijgewerkt! Per server! Tel uit je winst/verlies.

Idem met veel virusscanners. Bij de laatste kan het een truc zijn om te zorgen dat je virusscanner je server niet vol kan belasten ;)
Bovenstaande voorbeeld is uiteraard met een server die standaard services draait die de server ook wat belasten.

Met dual CPU en HTT is het met veel singlethreaded apps (waarvan er nog steeds bergen van zijn) zeker zinvol HTT uit te zetten. Per saldo zal de winst groter zijn. Onder W2K is HTT not done. Feit is dat het naast verlaagde performance instabiliteit oplevert. W2K3 lijkt iig stabiel. Vergeet ook niet de overhead van het switchen van threads. Gelijk aan APIC overhead bij dual CPU systemen. IIS is een mooi voorbeeld waar op (o.a.ook op Anandtech te lezen) dat een klassiek (Xeon) Dual CPU systeem zelfs veelal trager is dan een single non HTT CPU systeem. Kan je je zeker voorstellen dat een P4 HTT daar helemaal last van heeft.

Juist bij SBC(Citrix/TS) zou HTT een voordeel moeten hebben...


Liever Hypertransport dan Hyperthreading ;).

Ik zou toch een Pentium 4 met HyperThreading verkiezen boven een Athlon 64 single-core. Dat werkt gewoon vlotter door de hogere responsiviteit. Je hebt namelijk nooit één thread die alle andere activiteiten blockt.

Maar 'k heb nu een dual-core Athlon...

Dus wat is je punt dan? AMD dualcore is wel sneller dan een Intel single core met HTT?

Neen, dat een Pentium 4 met Hyper-Threading te verkiezen is boven elke andere single-core CPU zonder Hyper-Threading (ook die van AMD).

Dat ik momenteel een AMD dual-core heb was enkel om aan te duiden dat ik geen "Intel lover" ben. Toch ben ik van mening dat HyperThreading een zeer mooi stukje technologie is en ik hoop dat AMD het ook ooit toepast.

Sowieso kan onder een fatsoenlijk OS één thread niet de complete CPU blokkeren.

Toch wel. Een thread kan wachten op IO, z'n timeslice afstaan aan de volgende thread (of erger, wachten tot het einde van de timeslice), en wanneer de volgende thread net gestart is komt de IO binnen en wordt weer de eerste thread gestart. Als de data dan incorrect blijkt stuurt die weer een aanvraag, etc.

Dat kan zo rond blijven gaan en uiteindelijk gaat de tweede thread maar héél langzaam uitgevoerd worden en lijkt je systeem vast te zitten (is ook zo). Met HyperThreading wordt dit voorkomen want de tweede thread kan gegarandeerd z'n instructies uitvoeren.

De afname in prestaties zou veroorzaakt worden door het feit dat de threads die tegelijk kunnen worden uitgevoerd het L1- en L2-cachegeheugen moeten delen. Hierdoor zouden missers bij het cachen van data vaker voorkomen wat uiteraard een negatieve invloed heeft op de prestaties.
Inderdaad zo hat ik het ook nog niet gezien. Ik vraag me af in hoe verre de hit rate afneemt met HT aan. Video bewerking of een cd branden heeft daar niet zo last van maar services zo als sql.
dit valt naar mijn ogen in de afdeling woeps
«  1  2  »

Op dit item kan niet meer gereageerd worden.

Volgende 14:24
Vorige 13:34
VNU Media logo Powered by True

© 1998 - 2008 Tweakers.net - Alle rechten voorbehouden

Uitgever van: