Volledig correct.
Wat ik me enorm afvraag is hoe SUSE ooit 128 cpu's werkend gaat krijgen.
Bij 64 cpu's praten we over dat je maximaal 1 router + 1 Shub passeert bij het ophalen van een element ergens in 'someone elses' memory.
Op het moment dat er 1 kernel draait op 128 processors dan praten we over 2 bakken die via de geniale NUMAFLEX met elkaar zijn verbonden.
Deze geniale router is geniaal omdat er voor 416 processor bakken weinig betere oplossingen zijn gevonden anders als het op zo'n soort manier te proberen (zelfs earth machine gebruikt 1 enorme centrale router).
Edoch de latency die knalt omhoog.
Met name random latency (tijd om 1 cache line zelfs maar op te halen van 128 bytes, laat staan meer) is direct in de orde grootte van 6-7 us.
Ter vergelijking. Een IBM cluster van 2080 processors haalt daar ongeveer 10 us (5 us voor de one way pingpong)
Dat is op de altix3000 met 64 processors enorm beter.
A v/d Steen (stoel: high performance computing) kwam tot 2-3 us voor one way pingpong. Echter dat betreft vrij lange berichten.
meeste software gebruikt echter elementaire berichtgroottes.
Latency op Altix 3000 bij 8 cpu's en 250MB ram per cpu is voor 8 byte berichten (64 bits variabelen) :
547.6 ns
Dat is geniaal luitjes. Een dual Xeon of dual K7 heeft 400 ns daar.
Dit gaat ook niet echt vreselijk omhoog tot een processor of 32. Dan knalt het omhoog (1 router erbij).
Maar de grote klap komt dus als zo'n bericht door de NUMAFLEX eerst heen moet. Dan is het slechts factor 2 sneller als een cluster ineens.
Aan bovenstaande test valt wel af te lezen hoe superieur SGI is op kleine processor aantallen. De latency is enorm goed dan.
Echter boven de 64 cpu's is het bijltjes dag. Ook voor SGI.
Ik vraag me af hoe ze *dat* gaan regelen voor de kernel. Een kernel die zich split in 2en en op elke partitie nestelt op een cpu of 2?
Zij dat liever maken als ik in elk geval. Heb al problemen genoeg met die NUMAFLEX.
MVG
Oh nagekomen:
bash-2.05$ uptime
7:53am up 18 days, 18:37, 27 users, load average: 35.06, 34.49, 34.27
bash-2.05$ bqueues
QUEUE_NAME PRIO STATUS MAX JL/U JL/P JL/H NJOBS PEND RUN SUSP
test 3 Open:Active 4 4 1 4 0 0 0 0
serial 1 Open:Active 4 2 1 4 1 0 1 0
tiny 1 Open:Active 6 4 1 6 4 0 4 0
small 1 Open:Active 24 8 1 24 0 0 0 0
medium 1 Open:Active 32 16 1 32 44 16 28 0
bash-2.05$ ./latc 250000000 8
Welcome to RASM Latency!
RASML measures the RANDOM AVERAGE SHARED MEMORY LATENCY!
Stored in rasmexename = ./latc
Trying to allocate 31250000 entries. In total 250000000 bytes
Benchmarking Pseudo Random Number Generator speed, RanRot type 'B'!
Speed depends upon CPU and compile options from RASML,
therefore we benchmark the RNG
Please wait a few seconds.. ..took 3797 milliseconds to generate 409600000 numbers
Speed of RNG = 107874637 numbers a second
So 1 RNG call takes 9.270020 nanoseconds
Benchmarking random RNG test. Please wait..
timetaken=5259
Machine needs 105.180008 ns for RND loop
Trying to Allocate Buffer
Took 0.001 seconds to allocate Hash
Clearing hashtable for processor 0
Took 0.348 seconds to clear Hash
Starting Other processes
Took 36 milliseconds to start 7 additional processes
Clearing hashtable for processor 1
Clearing hashtable for processor 2
Clearing hashtable for processor 3
Clearing hashtable for processor 6
Clearing hashtable for processor 5
Clearing hashtable for processor 4
Clearing hashtable for processor 7
Took 1581 milliseconds to synchronize 7 additional processes
Took 508 milliseconds to ATTACH. 2000000000 total RAM
Read latency measurement STARTS NOW using steps of 2 * 300.000 seconds :
the raw output
1448566 1604678 1514794 1448546 1602856 1603569 1433635 1599165
Raw Average measured read read time at 8 processes = 652.751770 ns
Now for the final calculation it gets compensated:
Average measured read read time at 8 processes = 547.571777 ns
bash-2.05$ uname -a
Linux a1.teras.sara.nl 2.4.20-sgi220r3 #1 SMP Wed Jun 4 16:43:37 PDT 2003 ia64 unknown
bash-2.05$