Ook de programmeurs van Postgresql hebben het afgelopen jaar niet stil gezeten. Waar we in eerdere artikelen met ontwikkelbuilds van versie 8.2 aan de slag moesten, konden we voor dit artikel de officiële 8.3.1-release gebruiken. We compileerden de software zelf met de Studio-compiler van Sun, waarbij dezelfde optimalisatie-opties werden gebruikt als voor Mysql. Er werden hier echter geen aanpassingen aan de code gedaan. In dit geval was er nauwelijks een prestatieverschil meetbaar tussen de 32bits- en 64bits-versies, ook niet met de grotere buffers die laatstgenoemde mogelijk maakt.
In de eerste grafiek zien we een opmerkelijk resultaat: de prestaties van de Ultrasparc T1 en T2 zijn vrijwel identiek bij een gelijk aantal threads. Dit is minder vanzelfsprekend dan het wellicht lijkt, omdat de gelijke score bij de T2 steeds de helft van het aantal cores gehaald wordt. Dit geeft aan dat Sun de balans tussen de kracht van de cores en het aantal threads dat er op draait in stand heeft weten te houden, wat zeker geen vanzelfsprekendheid is. Andere implementaties van multithreading leveren hoogstens enkele tientallen procenten winst op bij een verhouding tussen fysieke en logische cores van 1:2, terwijl Sun met een verhouding van 1:8 nog de volle mep pakt.

Om te illustreren dat de ene thread de andere niet is zetten we in de volgende grafiek verschillende manieren om hetzelfde aantal threads te bereiken naast elkaar. Zo zien we dat 16 threads verdeeld over acht cores draaien ruim de helft betere prestaties oplevert dan 16 threads op twee cores gooien. Met 32 threads zien we ongeveer een derde betere prestaties op acht cores ten opzichte van hetzelfde aantal op vier cores.

De beste prestaties per thread worden logischerwijs bereikt door twee threads per core te laten lopen. Beide subcores worden dan bezig gehouden zonder dat threads op elkaar moeten wachten - tenzij ze bijvoorbeeld de fpu willen gebruiken, maar dat is hier niet van toepassing. Het is duidelijk te te zien dat het opvoeren van het aantal threads per core tot mindere prestaties per thread lijdt, maar zoals eerder opgemerkt is de Ultrasparc T2 een chip die goed in balans is: wat op de individuele prestaties moet worden ingeboet kan dubbel en dwars worden terugverdiend op het vlak van doorvoer.
Maximum requests per seconde per thread | |
---|---|
8 cores, 16 threads | ![]() ![]() ![]() |
8 cores, 32 threads | ![]() ![]() ![]() |
2 cores, 16 threads | ![]() ![]() ![]() |
4 cores, 32 threads | ![]() ![]() ![]() |
8 cores, 64 threads | ![]() ![]() ![]() |
De laatste grafiek van deze pagina is enigszins ontnuchterend. We hebben net bijna voorbeeldig schaalgedrag en keurig verdubbelde prestaties ten opzichte van de vorige generatie geconstateerd, maar nu blijkt dat de T2 in zijn absolute prestaties zwaar tekortschiet. Een ondertussen redelijk verouderde Clovertown piekt ruim dertig procent hoger dan de Sun-processor. De Xeon presteert bovendien al optimaal bij ongeveer 20 gebruikers, terwijl de Ultrasparc er 80 nodig heeft voor hij volledig benut wordt.
