Wat de performance betreft van 2 processoren:
Het klopt dat de performance van 2 processoren niet eenvoudigweg het dubbele is van 1 van die processoren apart.
Bekijk het zoals bij mensen: als je met 10 tegelijk aan een opstel werkt, dan zal dat opstel niet 10 keer zo snel af zijn als wanneer 1 persoon het opstel maakt. De kans is zelfs groot dat het trager gaat omdat je veel moet overleggen en anderen moet overtuigen. Als je echter met 10 tegelijk de vensters van een appartement wast, dan zal je veel dichter aanleunen tegen het 10 keer sneller afwerken ervan dan dat 1 persoon het zou kunnen... En dan nog is dat enkel indien de 10 elk een eigen emmer, spons en aftrekker hebben.
Hetzelfde geldt met SMP-systemen: de performance is afhankelijk van de toepassing. Sommige toepassingen voeren veel taken in parallel uit en die zijn van nature beter geschikt om voordeel te halen uit SMP-systemen dan anderen. Voorbeelden hiervan zijn DBMS'en ("DataBase Management Systems" zoals SQL Server, MySQL, ...) en HTTP-servers (web-servers zoals Microsoft IIS, Apache, ...). Algemeen voelen server-toepassingen zich gewoonlijk zeer op hun gemak op SMP-machines (eenvoudig gesteld: voor iedere user die de server gebruikt zou je een aparte processor kunnen gebruiken).
SMP wordt vooral toegepast bij asynchrone werking (zoals bij servers): wanneer het niet uitmaakt of de ene taak vóór of na de andere afgewerkt is. Hoe meer synchroon er gewerkt wordt, hoe minder voordeel je haalt uit SMP-werking. Als je bv. de uitkomst van een berekening nodig hebt om een 2de berekening te doen, dan heeft het weinig nut om die 2 berekeningen door aparte CPU's te laten uitvoeren.
En wat met HyperThreading dan? Wel, HT laat de software geloven dat er 2 processoren aanwezig zijn terwijl dat niet het geval is. Daardoor kan de software 2 programma's (beter: "threads") tegelijk naar de processor sturen voor uitvoering. De bedoeling is dat de processor zwaarder belast wordt zodat die minder tijd staat te "niksen". Om echt voordeel te halen uit HT moeten de verschillende threads die tegelijk uitgevoerd worden verschillende delen van de processor belasten: identieke threads kunnen dus niet tegelijk uitgevoerd worden! Hiermee kan je dus inzien dat de meeste server-toepassingen niet zo goed zullen werken op een HT-systeem... En dat blijkt in de werkelijkheid dan ook het geval te zijn.
Verder is het ook zo dat SMP-systemen een aantal componenten met elkaar moeten delen. Xeon-systemen moeten bv. hetzelfde RAM en dezelfde FSB delen (vergelijk 10 personen die de vensters van een appartement wassen maar er is maar 1 set gerief). Daardoor zullen Xeon-systemen ook niet zo goed opschalen (de laatst toegevoegde processor zal procentueel niet zoveel performance bijbrengen als de vorige). Opteron's delen minder componenten (RAM & FSB zijn niet gedeeld; of althans veel minder). Opteron's delen daarentegen nog steeds dezelfde IO-componenten (HD's, ...).
Hoe meer componenten gedeeld worden en hoe meer synchronisatie er nodig is, hoe meer tijd er verloren gaat aan het coördineren van de samenwerking. Daarom zie je op grote servers (met veel CPU's) vaak 1 (of meer) CPU's die niets anders doen dan het werk van de anderen coördineren; dat geldt ook voor HyperThreading!