Fint med din benchmark. Kan du nu köra en officiell benchmark typ linpack eller lapack eller SPEC2006? Som sagt, riktiga laster har andra problem än små kodsnuttar.
Skrivet av Yoshman:
Nu pratar du om saker du uppenbarligen har väldigt dålig koll på. Algoritmers tidskomplexitet och systems skalbarhet över CPU-kärnor är i teorin totalt ortogonala.
Öh.... Min specialisering på KTH var just algoritmer, du kanske hört talas om teoretisk datalogi? Din "åsikt" att algoritmers tidskomplexitet och systems skalbarhet över CPU kärnor i teorin är ortogonala var det... märkligaste jag hört på länge. Jag har läst en doktorandkurs i parallella algoritmer, och det var en av de svåraste matematikkurserna jag läst t.ex. skulle professorn bevisa Turans sats som han använde två st dubbeltimmar till. Vi var 30 studenter i början och på slutet var det jag och en till kvar, och fem stycken doktorander i matematik, resten hade hoppat av. Jag hittade en del svar till uppgifterna i hemtentorna, i forskningsartiklar utav en av världens bästa matematiker (ja, det är sant, han är antagligen bland de bästa i världen eftersom han har fått de tyngsta priserna, typ motsvarande Nobelpriset, fast i matematik). Jag lärde mig en hel del om parallell algoritmteori, som är mycket knepigare än vanlig algoritmteori men det finns mycket kvar att lära på forskarnivå. Det är kanske därför du säger att jag har väldigt dålig koll på just parallelll algoritmteori? Eller är det bara en del av din debatteknik att använda härskartekniker "det här kan du ingenting om lilla vän" i syfte att trycka ned den andre?
Det här påståendet får du gärna förklara mera. Hur skulle de vara ortogonala i teorin? På vilken teori baserar du den "åsikten"? Vilka satser? Var inte rädd för att vara för teoretisk, jag klarar av teori om just detta upp till forskarnivå.
Citat:
Linux använder självbalanserande träd för att hålla reda på "memory-pages", det d.v.s O(log(N)). Linux använder Patricia trees för FIB (forward information base, det folk felaktigt kallar "route tabel"), det är O(log(N)). Den vanligaste datastrukturen i Linux är nog hash-tabeller med "closed-addressing" där listorna i varje hink använder sig av RCU (read-copy-update, IBM äger patentet på detta men de har explicit givit sin tillåtelse att använda RCU i Linux-kärnan).
Finns idag ingen känd teknik som skalar bättre över CPU-kärnor än RCU (men kanske ändras inom kort, det här är ett område jag har rätt bra koll på ), du får gärna peka på vad Solaris skulle ha som kan matcha skalbarheten hos RCU.
Återigen, jag bryr mig inte direkt om vad alla säger har för häftiga tekniker i sin produkt. Problemet med det, är att ifall man lyssnar på dem och tror på dem, så glömmer man att de inte berättar vad som är dåligt med deras produkt. De kanske säger "ja, vår bilmotor går upp till 300km/h" men de berättar inte att bilens hjulupphängning klarar max 200km/h, så bilens maxhastighet blir 200km/h - oavsett vad motorn klarar av i teorin.
Om du skulle diskutera med IBM folk skulle de säkert komma med en lång teknisk förklaring till varför POWER8 är 50x snabbare än x86, ända upp till 1000x snabbare "ja, den har en inbyggd fluxkondensator som klarar av 1.21 gigawatt" etc etc etc.
På allt detta svarar jag som man bör: so what? Visa mig resultaten istället. AMD pratade om sitt HBM minne som är 9x snabbare än GDDR5 i Fiji XT R9 390X, men är grafikkortet 5x snabbare än Nvidias kort? Nej, Nvidia är snabbare. Men om du pratar med AMD folk skulle de säkert förklara hur mycket bättre HBM är och komma med långa tekniska förklaringar, men glömma berätta om alla dåliga saker i AMD kortet.
Det enda som är viktigt är praktiska resultat. I fallande ordning där 1) är mest trovärdigt.
1) Riktiga tester på IRL last
2) Benchmarks
3) Egen kod
4) Gissningar
När du pratar om hur bra teknik det finns i Linux, så bryr jag mig inte riktigt. Jag är van vid att prata med IBM folk om hur bra deras cpu är, när jag lyssnar på dem så är POWER8 det bästa sedan skivat bröd och 50x snabbare än x86. Men... är det sant? Nej. Du borde inte lita på marknadsföringssnack.
Så när du pratar om att Linux skalar bättre än Solaris därför att Linux har si eller så i sin kärna (detta har vi diskuterat många många gånger förr i många olika trådar), så får du gärna visa några som helst bevis för detta. Benchmarks eller länkar eller vad som helst. Det har du aldrig kunnat visa förrut, och jag väntar mig inte att du kan göra det nu heller.
Däremot finns det flera tecken som pekar på att Linux ligger långt efter Unix i skalbarhet i praktiken. Jag kan dra några av tecknen igen:
1) De största Linux servrarna som funnits fram till nu, har 8-sockets. Mao, Linux är omoget när det gäller skalbarhet, det är osannolikt att Linux skalar förbi 8-sockets. Det kräver mycket utveckling, kanske decennier precis som Unix. Linux utvecklarna idag sitter på sina 2 socket PC, hur ska de optimera Linux skalbarhet för 32 socket servrar när såna aldrig existerat, jag är inte säker på att SGI släppt såna än, jag vet inte om det finns såna ute på marknaden att testa mot.
2) SAP benchmarks på små 8-socket servrar visar att Linux är långsammare än Solaris på nästan exakt samma hårdvara. Linux hade 2.8 GHz cpuer, Solaris hade 2.6GHz cpuer - av exakt samma modell. Och Linux cpu utilization var ~88% medan Solaris låg på ~99%. Det finns andra benchmarks, som visar att Linux är långsammare på nästan identisk hårdvara.
3) När HP testade Linux på sin Big Tux 64-socket server så fick de en cpu utilization på ~40% under max load. Mao, mer än varannan cpu idlade, under full load. Det slutade med att HP inte sålde Big Tux Linux servern. Prestanda var för dåliga.
4) När HP nyligen byggde om sin 64-socket Superdome server till att innehålla x86 cpuer istället, så stannade HP vid 16-sockets. Skälet till att de inte gick upp till 64-sockets som med Unix, måste vara skalbarhetsproblem.
5) När man pratar med Unix sysadmins, så säger alla att Linux skalar långt sämre och har sämre stabilitet. Det finns _ingen_ som säger tvärtom, dvs att "linux skalar bättre på 32-socket system än gamla Unix os som gjort det i decennier". T.ex. denna sysadmin säger att Linux har skalningsproblem för filsystem. Det finns många såna här liknande länkar, det finns inga länkar som säger tvärtom, att Linux skalar bättre på stora servrar - hur skulle det gå till, stora Linux servrar har ju aldrig funnits.
http://www.enterprisestorageforum.com/technology/features/art...
6) Marknaden för stora servrar är uteslutande Unix och Mainframes, Linux existerar inte, det är 0% Linux och 0% Windows likaså. Hur går det ihop när Linux skalar bättre än alla andra OS, eftersom Linux har RCU?
etc etc etc
Mot alla dessa tecken, vilka tecken finns det att Linux skalar bättre än gamla Unix som i decennier skalat förbi 32-sockets? Inga alls, förutom att Linux har RCU. Då måste RCU betyda att Linux skalar bättre, eller hur? Det spelar liksom ingen roll om det finns andra begränsningar i Linux som sätter stopp för skalbarhet? Jag menar, Linux har gjort stora ökningar i skalbarhet nyligen "Det senaste områdena som fått rejäla lyft, har ibland varit 50-60 gånger högre prestanda på system med 8-sockets av Intels topp-modeller (vilket visar att det fanns en del att jobba med)" - hur kan Linux öka prestandan på små 8-socket servrar så mycket som 50x när Linux ändå använder RCU? Det borde inte gå?
Du låter som BTRFS användare som säger att BTRFS är bättre än ZFS, eftersom BTRFS använder B+ träd som är bättre rent teoretiskt än det ZFS använder, Merkle träd. Alltså måste BTRFS vara ett bättre filsystem, eller hur? Visst. Läs lite på forum så får du se hur mycket BTRFS kraschar och hur instabilt och långsamt det är i jämförelse med ZFS. Eftersom BTRFS använder B+ träd som är bättre, hur är det möjligt att BTRFS är sämre än ZFS? Mao, jag bryr mig inte om RCU eller vad nu fancy teknik POWER8 har för att göra det 50x snabbare än x86 - hur bra presterar det i verkligheten? Inte alls. Visa några länkar som stödjer ditt påstående att Linux skalar bättre än Solaris. Bloggartiklar, benchmarks, forumtrådar, etc - vad som helst. Du har aldrig kunnat posta såna förrut dock.
Citat:
Väldigt mycket av det arbete man gjort i Linux-kärnan de senaste 10 åren (RCU användes första gången 2002 i Linux) är att designa om delar så de i bästa fall kan använda RCU och om det inte är möjligt kör man en mer traditionell variant...
Så bara för att RCU används i vissa ställen, så betyder det inte att RCU automatiskt gjort att hela Linux skalar superbt över alla områden? Det kanske finns områden där RCU inte används, eller inte funkar bra ihop med befintlig Linux design?
Citat:
TCP/IP-stacken i Linux har under ganska lång tid kunnat skalas till väldigt många CPU-kärnor, en anledning till varför Linux i praktiken slagit ut alla andra OS från telecom (SPARC/Solaris var en gång i tiden stort här, idag existerar det inte längre).
Så TCP/IP stacken i Linux har under lång tid kunnat skalas till väldigt många cpu kärnor? Och det är därför Linux slagit andra OS? Det visste jag inte. Hur många kärnor har TCP/IP stacken kunnat skalats till i Linux? Tja, med tanke på att den största Linux servern har 8 sockets, så blir det väl inte så många cpu kärnor? Det låter som ganska lite, 8-sockets bevisar ingenting om Linux skalbarhet.
https://en.wikipedia.org/wiki/Scalability
"An...networking protocol...is said to scale if it is suitably efficient... when applied to large situations....If... fails when a quantity increases, it does not scale...."
Wikipedias kursivering. Linux TCP/IP stack skalar till 8-sockets. Sen tar det stopp. Det är inte vidare skalbart om du frågar wikipedia? Wikipedia skulle säga "Linux TCP/IP stack does not scale"? Jag har svårt att tro att Linux TCP/IP stack som funkar bra för 2 sockets, helt plötsligt skulle köra lika bra på 32 sockets. Jag tror det skulle kräva massiv omskrivning. Bara för att något funkar på 2-sockets, betyder inte att den funkar bra på 32-sockets.
Pratar vi TCP/IP stackar, så verkar FreeBSD vara ganska mycket bättre än Linux, trots att Linux har "RCU, fluxkondensatorer och dubbla överliggande kamaxlar med oljeinsprutning etc etc etc" och FreeBSD inte har just alla dessa saker. Men FreeBSD har annan teknik än de som nämns utav Linux folket, som gör FreeBSD bättre. Facebook vill förbättra Linux TCP/IP stack så den blir lika bra som FreeBSD:
http://www.theregister.co.uk/2014/08/07/facebook_wants_linux_...
“Our goal over the next few years is for the Linux kernel network stack to rival or exceed that of FreeBSD”
Solaris hade en kass TCP/IP stack förrut pre Solaris 10, det är därför det kallades Slowlaris, men stacken har skrivits om iom Solaris 11 och är nu bäst på throughput säger sysadmins, den skalar sjukt högt säger de. Det är samma människor som skapade ZFS, DTrace, SMF, Zones, Crossbow, etc - tekniker som alla har plagierats utav Linux. När de skapar en TCP/IP stack blir den antagligen bra, den skalar i alla fall upp till 32-sockets och vidare om man behöver det.
Bara för att Linux används inom vissa områden, betyder det inte att Linux är bättre. Windows har stor dominans, det måste betyda att Windows är bättre än Linux, eller hur?
Citat:
Det senaste områdena som fått rejäla lyft, har ibland varit 50-60 gånger högre prestanda på system med 8-sockets av Intels topp-modeller (vilket visar att det fanns en del att jobba med), är I/O-operationer mot filsystem. De riktigt stora förbättringarna är ett par år bort nu, med en någorlunda modern Linux-kärna på sin server har man idag en skalbarhet som inte alls går att jämföra med tidigare resultat.
Självklart förbättras Linux skalbarhet. Men det lustiga är att du hade exakt samma argument för flera år sen. Jag visade länkar som visade att Linux hade problem med skalning, som du invände emot, bl.a. genom att säga "jamen det är annorlunda nu, den dära problemlänken är ju ett år gammal så den räknas inte, idag ett år senare skalar Linux super eftersom de arbetat om Linux". Och exakt samma argument drar du idag, och kommer dra om 10 år. Jag är inte övertygad om att en kärna som används främst på 2-sockets, skalar bättre än Solaris och AIX som länge använts på 32-sockets. Varken idag, igår eller imorgon. När jag visar en skalningslänk kommer du avfärda den med massa invändningar och säga "jamen idag är det annorlunda, så din länk gäller inte längre". Så här kommer det vara år efter år. Och om jag mot förmodan postar en aktuell länk idag, kommer du hitta andra invändningar. Men å andra sidan har du aldrig visat en länk där Linux skalar bättre än Unix. Det är alltid jag som visat länkar som stödjer mig, som du alltid avfärdat.
Mönstret går igen år efter år, så här ser det ut: Jag nämner ett problem som Linux har. Genast säger du "jamen du har fel, eftersom Linux har finess XYZ och eftersom Unix saknar XYZ så är Linux mycket bättre än Unix". T.ex. har Linux RCU och därför skalar Linux bättre än Solaris som inte har RCU. Om vi pratar x86 vs SPARC, så har x86 finess ZYX, som inte SPARC har, därför är x86 snabbare. etc etc. Vad vi än pratar om, så drar du upp en finess som just Linux eller x86 har, som de andra inte har.
Mitt standardsvar på dina invändningar, är "jamen visa benchmarks då som bevisar din ståndpunkt!". Vilket du aldrig gör. Du visar aldrig några bevis för att Linux skalar bättre än Solaris, eller att x86 är snabbare än SPARC M7, eller något annat av dina påståenden. Du bara säger "jamen dina benchmarks stämmer inte, därför att..." och så kommer det en lång teknisk förklaring till varför x86/Linux faktiskt är bättre - men inga benchmarks eller bevis som stödjer dig. Bara en teknisk förklaring som taget direkt ifrån Intels hemsida.
Jag vet inte hur många gånger jag skrivit detta till dig genom åren: bara för att Linux/x86 har XYZ, och de andra inte har XYZ - så betyder det ingenting. Implementationen kanske suger, det kanske finns andra begränsningar, etc etc etc. SPARC och Unix har ju faktiskt funktion ABC som Linux inte har, och tack vare ABC så är SPARC/Unix bättre i praktiska benchmarks. Jag säger aldrig "jamen Linux saknar ABC - alltså måste Linux skala sämre", jag visar ofta länkar/benchmarks/etc.
Du måste lära dig tänka mer kritiskt, och inte bara köpa marknadsföringssnacket rakt av. Om IBM påstår något, och kommer med en lång teknisk förklaring - så ska du inte acceptera deras påståenden om hur prestandan förbättras 50x upp till 1.000x nej, kräv bevis. Säg "jaså, så POWER8 är 1000x snabbare, har du benchmarks?" om IBM inte kan presentera bevis så var det bara ordbajseri, eller FUD. Jag själv är allergisk mot ordbajseri.
Jag köper inget av Oracle, jag kräver bevis. Alltid alltid alltid. Om Oracle påstår att ZFS är säkrare, så vill jag se underlag för det. Om SPARC M7 är snabbare så vill jag se underlag för det. Jag skiter fullständigt i alla tekniska detaljer, därför att i verkligheten räknas inte teorin. Praktiska tester är det enda viktiga. Och har man inte praktiska tester, får man nöja sig med benchmarks. Egenskrivna små kodsnuttar bör undvikas, för de är inte representativa för riktigt arbete.
Jag har ett helhetsperspektiv - om man tar bort ordbajseriet - hur blev i slutändan? Resultatet? Du går ned på detaljnivå direkt, utan att titta på helhetsbilden, så du bryr dig inte om att saker kan vara motsägande när man tittar på hela bilden. "x86 når 800 gflops enligt Intels tekniksnack, men varför visar inga praktiska benchmarks den siffran?" det bryr du dig inte om, istället framhärdar du i inlägg efter inlägg att E5-2699v3 når 800 gflops, och jag måste tro dig på ditt ord, eftersom du läst det utav Intel. Och du postar aldrig bevis.
Nästan exakt det min kompis gör, han har Asperger - han går direkt ned på detaljnivå men ser inte hela bilden. Han kan säga emot sig själv ibland därför att när man går ned på detaljnivå så är varje påstående rätt, det är bara när man pusslar ihop allt man ser att det är fel, att något måste vara felaktigt.
Citat:
Vad min kodsnutt visar är att man i praktiken kan skriva ett program som når extremt nära den teoretiska kapacitet som Intels kretsar har.
Om du har invändningar mot mitt program är du extremt inkonsekvent alt. bara rent ignorant.
Återigen, små tillrättalagda kodsnuttar är inte representativa för riktigt arbete, där massa saker spelar in, man måste gå ut mot diskar, cpu cachen blir thrashad, etc etc etc. Om jag skriver en liten for loop med massa NOPar säger ju inget om hur en cpu presterar i riktigt arbete. Jag vill se riktiga benchmarks, det bästa vore ju att få se riktiga arbetslaster, men vi får nöja oss med stora benchmarks.
Citat:
Du pekar på resultatet i "STREAM" benchmarken. Vad du vad det benchmarket gör? Har du sett källkoden (hittar inte en länk nu, kanske var ett misstag men källkoden för STREAM copy/scale/add/triad gick ett tag att hitta via Google)?
...
Hur är detta benchmark relevant för något mer än att mäta ungefär samma sak som min benchmark mäter, d.v.s. någon form av praktisk maximal kapacitet av en väldigt specifik egenskap. I mitt fall är det flyttalskapacitet, här handlar det om bandbredd som CPUn kan nå?
Återigen, när du arbetar på riktiga data så blir det helt andra problem. cachen thrashas, etc. Det kryllar av numme benhcmarks, jag tycker de är mer representativa för beräkningsprestandan för en cpu än din kodsnutt. Om jag skriver en liten kodsnutt för SPARC M7 som visar fantastiska prestanda (vissa saker är 83x snabbare på SPARC M7 - men det är ju inte representativt för riktigt arbete så denna siffra på 83x snabbare har jag struntat i för det är ju bara ett drömscenario) så betyder det inget i verkligheten. Du säger att SPARC M7 är snabbare på vissa specialfall, och därför är den inte snabbare än x86. Din lilla kodsnutt är ju bara ett specialfall, så den säger inte så mycket.
Angående varför jag accepterar STREAM benchmarks, men inte din kodsnutt - det är pga STREAM är en benchmark som flera använder. Det den mäter, är hur snabbt man skyfflar data, dvs minnesbandbredd. Och det är exakt det som STREAM handlar om: minnesbandbredd. Det låter väl som en relevant benchmark när man pratar om bandbredd? Istället för att tjata om din kodsnutt, så tycker jag vi går över till mer representativa benchmarks, såsom SPEC2006 eller Linpack, lapack, etc.
Citat:
Ljuger då IBM om sin bandbredd?
Om IBM adderar all bandbredd i systemet så är det lögn. En av bandbredderna kommer att vara långsammast, så du kan inte få högre bandbredd än den flaskhalsen. Det är omöjligt att nå högre, det är en matematisk sanning. Bevis: det finns en sats som kallas för MAX FLOW = MIN CUT:
https://en.wikipedia.org/wiki/Max-flow_min-cut_theorem#Defini...
Citat:
Så att IBM får ett lägre resultat än Oracle bevisar absolut inte att SPARC M7 har högre bandbredd än POWER8, det visar bara att bandbredd mot CPU antagligen är högre men det säger inget om bandbredd när man också blandar in I/O (vilket torde vara rätt viktigt för servers).
Oracle påstår att SPARC M7 cpn har högst minnesbandbredd. Oracle har inte pratat om IO eller nåt annat. Benchmarken visar bara att M7 har högre cpu minnesbandbredd, exakt det som Oracle påstår. Inget annat.
Citat:
Fast varför litar du på benchmarks?
...
Det är tyvärr flera benchmarks som ger de två första orimligt höga resultat mot A8 jämfört med hur det ser ut i verkliga program.
Så håller med dig till 100%, det är att jämföra äpplen och päron där äpplen är benchmarks och päron är verkliga program.
Absolut, du har rätt att benchmarks är äpplen och verkliga program är päron. Men, eftersom vi inte har riktiga laster att jämföra, så får vi nöja oss med det näst bästa: benchmarks.
Benchmarks är hyfsat genomlysta, flera kör dem, och det bästa med benchmarks: de är inte tillrättalagda små kodsnuttar som är specialskrivna för att utnyttja en enda specifik funktion i en cpu för att nå höga värden. Nej, istället är benchmarks stora och relevant arbete utförs, som i vissa fall kommer ganska nära riktiga arbetslaster. Mao, eftersom det är så mycket kod, spelar det inte roll om den lilla specialfunktionen utnyttjas eller inte i steg nr 57, man mäter ju ändå hela resultatet steg 1-100. Och då spelar inte snabba små steg någon roll på det hela taget. Dvs, jag har helhetsperspektiv, och inte tittar nere på detaljnivå, igen. Om vi ska kolla hur snabb en cpu är, är det bättre att titta på hela cpun, och inte på hur bra en special funktion presteras. Bara för att SPARC M7 är 83x snabbare på en viss liten småsak, säger ju ingenting på det hela taget. En enda accelerad grej är inte intressant, det är ju hur hela cpun presterar på det hela som är intressant.
Eller vad säger du om benchmarks? Om x86 vore snabbare skulle du tycka att benchmarks var det viktigaste, precis som IBM? Du skulle inte gilla om jag avfärdade benchmarks där x86 är snabbare? Helt plötsligt skulle benchmarks vara jätteviktiga?
Citat:
Intels första "riktiga" x86-server CPU var Nehalem, jag tror man insåg rätt snabbt att ett område man inte kunde konkurrera med POWER/SPARC var bandbredd mot RAM. Däremot vet "alla" att Intel är bäst av alla på att designa cache-hierarkier (har bl.a. pratat med ingenjörer som jobbade på SPARC T4, även de "erkände" att Intel ligger rejält före andra på denna punkt). Vad Intel gjorde med Xeon E5/E7 i Sandy Bridge var att utnyttja sin styrka, IBM verkar dedikerad en del av den massiva bandbredd man har mot RAM (fungerar men ger inte så bra perf/W), Intel har i stället gjort det möjliga att köra DMA till/från LLC (last-level-cache, L3 i praktiken).
Vad man får med detta är två stora fördelar
trycket på RAM lättas, bandbredd mot L3-cache är massiv
tiden, latensen, det tar för att läsa/skriva data från/till I/O-enheter minskas radikalt. Detta öppnar upp för en del nya användningsområden!
Att köra DMA till/från LLC är inte ny, vissa linjekort för back-bone routers har möjlighet att markera minne som används för DMA att överhuvudtaget inte mappas i RAM. Ta IP-paket som ska routas, man vill komma åt det data så snabbt som möjligt men är extremt osannolikt att man någonsin behöver data i paketet igen när det hanterats -> packet payload mappas aldrig i RAM, det läggs i CPU-cache av DMA och slängs bort när utgående enhet är färdig med sin DMA.
Har du laster av den typen så kan Xeons hantera massiva mängder data, det handlar nog om samma datamängder som SPARC M7 och POWER8, men Xeons läser/skriver detta data med betydligt lägre latens vilket då kompenserar för att det bara finns två trådar per CPU, ALU-enheter kan hållas matade från två trådar tack vare låg latens mot "working-set".
Försöker du säga att ifall Xeons bara kan arbeta mot cachen och slipper gå ut mot RAM, så håller Xeon jämna steg med POWER/SPARC när det gäller genomströmning?
Om det är detta du menar, så vet jag inte om du har rätt. Det jag menar däremot, är att för serverlaster där du betjänar tusentals användare där working set aldrig får plats i cache, så är POWER/SPARC snabbare. Håller du med?
Sen att x86 har bättre cachedesign, vet jag inte. Det kan vara så, jag säger inte att det är omöjligt. Men x86 är ju en desktopdesign och i bästa fall kan du få plats med datalasten i cachen eftersom det är bara en användare, så det låter rimligt att just desktops har bra cache. Med servrar spelar det inte lika stor roll, t.ex. SPARC T1 hade en total cache på 3,1 MB och sket fullständigt i cachen, därför att working set för en server aldrig ändå får plats i cachen. Istället hade T1 en barrel cpu, så den dolde latency i varje tråd. Mao, T1 hade jättedålig cachedesign, men var ändå 50x snabbare än x86 på just den var designad för; betjäna många klienter. Cache är inte allt, annars skulle T1 inte kunnat vara så enormt mycket snabbare.
Citat:
Det finns lögn, förbannad lögn och sedan finns benchmarks Så nej, här är vi inte överens. AnandTech är långt ifrån ensam om att anse att de de benchmark resultat som SPECint2006 och TPC-X inte är speciellt relevant för verklig prestanda.
Absolut är det så att officiella benchmarks inte är representativt för verklig prestanda, men officiella benchmarks är det bästa vi har i brist på verkliga laster.
Jag finner det otroligt att x86 som är långt sämre på officiella beräkningsbenchmarks än SPARC M7, skulle helt plötsligt vara snabbare på beräkningar i verkligheten. Det jag tror är att ifall M7 är snabbare än x86 på benchmarks, så gäller samma förhållande även i verkliga laster. Men du verkar mena att det kan vara tvärtom? Att x86 är sämre i benchmarks, men i verkligheten är den snabbare?
Först hade du massor av invändningar mot benchmarksen, typ "vi ser att ett kluster med 32st x86 servrar med dubbla Xeons tar 1000 sekunder på Hadoop, mot SPARC M7-4 som tar 4000 sekunder, alltså är x86 snabbare" och jag vet inte vad du kom med. Jag vederlade alla dina invändningar, ett efter ett. Så sa du att, mäta Hadoop per socket, är något som Oracle hittade på och helt menlöst mått. Efter lite diskussion kring det, sade du slutligen att "Hadoop benchmarken är helt menlös och inte relevant alls". Och nu vill du få det till att alla SPARC M7 benchmarks är helt menlösa? Du backade steg för steg efter ditt försök att invalidera Hadoop benchmarken, och nu vill du i ett slag invalidera alla M7 benchmarks. På så sätt kan du hävda att x86 är ändå snabbare än M7 eftersom alla benchmarks är helt menlösa? Är detta korrekt?
När jag såg alla POWER7 benchmarks över hela internet, så accepterade jag dem och sade "grattis IBM, POWER7 är den bästa cpun just nu". Det var inte så att jag kom med massor av invändningar och i ett slag idiotförklarade alla benchmarks. Exakt samma benchmarks, som jag i nästa steg tyckte var jätterelevanta, när SPARC T5 kom. Vore inte detta en märklig debatteknik?
Citat:
Att AnandTech konstaterar att 2699v3 kan hålla 2,8 GHz när alla kärnor jobbar är väldigt relevant t.ex. när de kopplas till att denna CPU i praktiken kan nå 16 DP per cykel och kärna.
Ska vi titta på helhetsbilden igen? Om nu detta är sant, så kanske du kan posta länkar där den når 800 gflops? Inte det? Ok, då är det något påstående som är fel. Vilket då?
Citat:
Du tittar heller inte på SPECint2006 och SPECfp2006, du tittar på SPECint2006_rate och SPECfp2006_rate. De senare lider av precis samma problem som Geekbench, de ger designer med många svagare CPU-kärnor orimligt högt resultat jämfört med hur majoriteten av alla verkliga program är skapta.
Återigen (vet inte hur många gånger jag skrivit detta till dig) men när det gäller beräkningar, som t.ex. superdatorer gör så vill man ha många cores och trådar för att göra många beräkningar samtidigt. Därför är GPUer intressanta, de har klena trådar men kan köra många beräkningar samtidigt. T.ex. IBMs Blue Gene superdator som länge hade nr 5 i top500, hade en PowerPC på 750 MHz. Och hur klen cpu tror du den har? Vet inte hur många gånger jag måste skriva det, men när det gäller numme beräkningar som t.ex. MCMC vill man göra massivt parallella beräkningar. Därför är det viktigare med stor genomströmning för goda beräkningsprestanda, än låg latency. Det är precis detta som SPARC M7 har. Och därför har SPARC M7 bättre beräkningsprestanda än x86.
Citat:
Nej, nej, nej. Om du sak utföra en väldigt specifik sak så kan en specialdesignad krets, i de fall en sådan är vettig, utföra långt mer arbete per cykel än en CPU. Ta systemkretsar, skillnaden mellan en "bra" och en "dålig" systemkrets är enbart hur man designat sina specialkretsar då dessa har endera långt högre kapacitet (typiskt en tiopotens, så en ASIC på 1 GHz matchar då en CPU på 10 GHz) eller långt högre perf/W med ungefär samma kapacitet.
Jaså. Inom High Frequency Trading använder man typiskt FPGA, inte ASICs. FPGA kan man programmera om och uppdatera sin algoritm med jämna mellanrum. ASICs kan man inte ändra på, så det används inte så ofta inom HFT, om någon ens gör det?
En FPGA är typiskt låg klockad, kring 1GHz kanske. Om vi jämför detta mot en 4GHz cpu, så kan lite grovt, CPUn göra 4 operationer när FPGAn gjort en enda operation. Och det är därför inte helt trivialt att använda FPGA inom HFT världen när du vill ha så låg latency som möjligt. Antag att en HFT algoritm använder 20 steg innan den avgjort om den ska köpa aktien, då tar en 4GHz cpu kortare tid än en 1GHz FPGA.
Detta torde även gälla en ASIC som är klockad på 1GHz.
Citat:
Är ingen HPC-expert, men vad jag läst är deras störta flaskhals inte priset utan strömförbrukning.
Strömförbrukningen är en av flaskhalsarna. Den andra är att det är svårt att fördela arbetet effektivt på superdatorn, och administrera allt arbete. T.ex. Blue Gene hade ett specialskrivet OS som bara kunde göra beräkningar, inget annat. På varje nod kördes alltså detta OS. Så användes Linux för at distribuera ut arbetslasten till varje nod. Och ändå benämdes Blue Gene som en Linux dator. Jag håller inte med det.
Citat:
Hur skulle SPARC M7 kunna var mer lämpad för tekniska beräkningar? Om så är fallet, varför är SPARCs marknadsandel här 0% med väldigt många signifikanta siffror?
SPARC M7 är snabbare på tekniska beräkningar än x86, enligt min förklaring om SPEC2006 ovan: superdatorer behöver många cores och trådar. SPARC M7 har många cores, det har inte x86.
Sun hade problem med pengar och kunde inte satsa pengar på FoU, så SPARC halkade efter. Sen kom Oracle och öste pengar över SPARC teamet, och idag ser vi resultatet: SPARC M7. M7 finns inte i någon superdator. Och det kommer nog inte hända, efersom den drar så mycket ström. Något måste man ju få utav all strömförbrukning.
Oracle är absolut inte intresserade av HPC marknaden, man tjänar för lite pengar där. Det är typ, 2 st kunder för en superdator som tar åratal av FoU. Oracle har sagt att de fokuserar på high end Enterprise marknaden, där finns de stora pengarna att tjäna. Detsamma sade faktiskt Sun förrut, de drog sig ur HPC marknaden.
Fujitsu är däremot intresserade av HPC. De har ju sin "K" superdator på plats nr 4(?) med föregångaren till den strömsnåla SPARC XIfx cpun. Fujitsu kommer bygga en 100 pflops superdator med sin SPARC XIfx, just den som uppnår 1.100 gflops. Ska bli intressant att se vad den uppnår i praktiken också. Så nej, SPARC är inte ute ur superdator världen. Oracles SPARC är däremot det, de drar för mycket ström. HPC cpuer måste vara strömsnåla.
https://en.wikipedia.org/wiki/K_computer
Citat:
Du skriver "stor grid", det är i praktiken en stor matris. När storleken på matrisen går mot oändligheten så går effektiviteten på FMA-instruktioner mot 100% för matris-multiplikation. Vidare går effektiviteten för SIMD på alla matrisoperationer mot 100% när storleken växer.
Det här kan du få utveckla lite om du vill. Ja, jag har läst doktorandkurser i numme på KTH också, programmerat MPI på Cray superdator och sånt. Hur kan effektiviteten gå mot 100%? (Det är i praktiken oftast en gles matris).
Citat:
100% utan tvekan! Jag förväntar mig att många missförstår multitaskning, men du borde veta bättre. Amiga kunde multitaska väldigt väl trots en enda 68000 på 7,14 MHz. Windows har vissa problem med svarstider om man kör ett gäng trådar på varje CPU-tråd, Linux har sedan "wonder patch" inga problem att köra 100 trådar per CPU-tråd utan att GUI blir segt.
Just x86 har också väldigt låg kostnad för att byta OS-tråd på en CPU-tråd, är extremt snabbt / effektivt att spara / återställa OS-tråd tillstånd. Och det är alltid så att en CPU-kärna med prestanda P är alltid minst lika snabb som en CPU med två kärnor med prestanda med P/2.
Det händer att en tråd strular och låser/saktar ned kärnan. Om man har två kärnor, så kan den andra kärnan köra på utan avbrott. Om man bara hade en kärna skulle hela datorn strula. Jag själv föredrar flera kärnor utan tvekan, framför en enda stark kärna. Jag kommer ihåg när man hade en single core dator, och fick dual core - multitaskingen blev bättre. När man har 4 kärnor, kunde man spela spel samtidigt som man tankade filer och sånt. Det skulle inte gått i praktiken på en enda kärna även om den var lika snabb. (Amigan körde en 68000 på 7.1590 MHz om jag inte missminner mig). Men visst, jag förstår att du vill hellre ha en stark kärna med en enda tråd om du får välja. Jag väljer flera kärnor, så blir systemet mer responsivt när det strular.
Jag har dessutom läst folk som klagat på att Linux har urusel multitasking apropås wonder patch, typ att Linux laggar när de spelar MP3 och... scrollar websida(?). Därför har de kört Con Kolivas scheduler som fixade till det, därför blev den omtalad. Om Linux inte haft de problemen hade inte Con behövt skriva sin scheduler.
Citat:
Så vad du säger är att Google, Facebook, Microsoft (azure), Amazon m.fl, kör "små" servers i deras datacenter?
Vilka företag kör då dessa mytologiska "stora" servers och vad gör dessa (har lite hum vad mainframes gör och förstår poängen med dessa, men övriga)?
Öh? Seriöst, känner du inte till att Googles, Facebook, etc kör sina stora datacenters på små servrar? Nu blir jag förvånad. T.ex. Google har 1 miljon servrar i sina datacenters, och när en server kraschar kopplar de in en ny. FB gör egna standardiserade servrar, de specialdesignar egna modeller och beställer från... Dell? HP? Kommer inte ihåg.
Men ja, när du kör enorma kluster, så vill du ha billiga småservrar som du kan byta ut utan problem. Man vill undvika single-point-of-failure å det längsta. Kluster är alltid bättre, se bara hur sällan FB och Google har sina sajter nere. Och jämför mot stora Unix eller Mainframes, som sällan går ned. OpenVMS kluster verkar vara det stabilaste som finns med upptider på 17 år eller mer, där de uppgraderar OS, byter ut servrar, kör Alpha cpuer och Itanium cpuer på olika maskiner i samma kluster. Helt magiskt. OpenVMS och Unix skapades ungefär samtidigt, men OpenVMS har en annan design än Unix, och mycket stabilare säger OpenVMS admins jag talat med. De säger t.ex. att Solaris är lite instabilt. Jag frågade om Linux och Windows, och då fnissar de.
Vem som kör dessa mytologiska stora Unix/Mainframe servers? Det är t.ex. stora fortune 500 företag som banker, etc - som kör stora affärsystem som SAP, databaser, etc. När Oracle demonstrerade sin M5-32 server blev Morgan Stanley cheferna glada, därför att den kunde faktiskt slutföra vissa databasqueries som aldrig genomfördes tidigare. Det gick att få fram ett svar på en fullt bestyckad M5 med 32 sockets och 32TB RAM. Att köra det på en 8-socket server fanns inte på kartan.
Jag tycker det är lite lustigt att du har så starka åsikter om High End Enterprise marknaden när du inte känner till den jättebra? Höll inte du på att tjata i alla år tillsammans med de andra linux killarna om hur bra Linux skalar även på high end scale-up servrar? Jag har bestämt för mig det.
Citat:
Det finns inga för ingen (statistisk sett, eventuellt även i absolut tal just nu) har en M7. Oracle lär ju knappast presentera resultat på områden där SPARC M7 inte "vinner". Så kontentan är: vi har ingen aning hur M7 presterar på den stora massan av alla program som finns där ute.
Precis min poäng. Då är det lite vanskligt att påstå att "finns dock väldigt många serverlaster [SPARC M7] inte är snabbast på"? Jag håller med om att den antagligen inte är snabbast på alla serverlaster, så "världens snabbaste servercpu" kanske är fel titel. Men om nu M7 är typiskt 2-3x snabbare än de snabbaste massmarknad cpuerna som finns, så kanske den bara är 20% snabbare i värsta fallet. Det kanske t.om finns chans att den är snabbast på de flesta, om inte alla serverlaster? Om M7 var 50% snabbare så är inte marginalen god, den kan vara rejält långsammare i somliga fall. Men nu finns det god marginal, t.ex. 11x snabbare på några databasbenchmarks - då kanske den är snabbare på ALLA databaslaster? I sämsta databasfallet kanske den bara är 2x snabbare?
Citat:
I så fall missförstår du vad jag skriver, är övertygad om att SPARC M7 presterar bäst per socket på "rätt" typ av problem. Vill bara peka på att majoriteten av alla program som finns där ute är inte av "rätt" typ, d.v.s. enkelt parallelliserbar och med extremt låg data-lokalitet både i tid och rum. Skriver också att det mycket väl kan vara så att t.ex. stora databaser är av den typ SPARC M7 är designad för, är så fallet lär den prestera bäst per socket.
Jag tror inte att majoriteten av program handlar om att betjäna så många klienter som möjligt. Men för just den kategorin, så tror jag SPARC M7 är snabbast per socket.
Citat:
?
Det går att skala E5 till 8 sockets med extra "glue-logic" om det vore flaskhalsen, det är fortfarande billigare än att använda Xeon E7. Den stora skillnaden mellan E5 och E7 är RAS samt att E7 har mer kapacitet i det Intel kallar "un-core"
Jag har läst att den stora skillnaden mellan E5 och E7, är att E7 är byggd för att skala upp till 8-sockets, glueless. E5 är byggd för att skala upp till 4-sockets glueless. Detta innebär att E7 måste ha mera RAS och är mera enterprise, eftersom den går till större servrar. Därför laggar den efter E5 i utvecklingen, mindre buggar och stabilare. Jag tror att om man tittar på alla 8-sockets servrar, så är det uteslutande E7? E5 är mer för desktops, beräkningar etc.
Citat:
Tja, marknaden för stora UNIX-servers är krympande. Att den existerade tidigare är ju rätt enkelt att förklara: innan Nehalem fanns överhuvudtaget inga billiga system med "riktiga" server CPUer. Tidigare Xeon CPUer var desktop CPUer med lite större cache.
Unix krymper. Vanliga x86 cpuer börjar bli ganska bra nu faktiskt, jämfört med förrut. Förrut var ju x86 ett skämt, och dög inte till någonting. Men idag är det annorlunda, x86 kan ersätta små Unix servrar. Och den största marknaden är små servrar. Det är sällan man behöver 16- eller 32-socket servrar.
Personligen tror jag att Intel slog sig i slang med HP för att lära sig RAS och enterprise cpuer från HP iom Itanium, sen när Intel lärt sig allt som HP hade att lära ut, struntade Intel i att utveckla Itanium och satsade på att utveckla Xeon istället.
Dock säljer Oracle sina engineered systems, dvs en server specialiserad för t.ex. databaser. Då blir den snabbare än andra konkurrenter, därför att Oracle äger hela stacken: cpu, operativsystem, java, affärsystemet. Så hela stacken är optimerad för affärssystem. T.ex. kan då Oracle bygga in acceleratorer rätt in i cpun för att boosta affärsystemet. Detta är unikt säger analytiker, det normala är att det är separata server och mjukvarutillverkare som inte samspelar så tight. Detta leder till Oracle är motsvarigheten till Apple inom Enterprise: ett system som är tight, alla delar från Oracle. Och dessa system är mycket snabbare än andra konkurrenter eftersom hela stacken är optimerad. Så Engieneered systems växer mycket starkt hos Oracle. Men vanliga Unix servrar krymper.
Citat:
Mitt program beräknar
...
Det är alltså samma sak, mitt program är bara en benchmark som visar vilken flyttalskapacitet man kan få i praktiken och det vi diskuterade var huruvida en 2699v3 kan nå sin teoretiska kapacitet.
Du länkar som sagt till STREAM och det är en minst lika syntetiska benchmark för bandbredd!!!
Återigen, jag vill se laster som är mer representativa verkligheten, som utför riktiga beräkningar. Om jag skriver några rader kod som utnyttjar SPARC M7s funktion så det blir 83x snabbare än x86, så är det helt menlöst. Ett riktigt system gör många saker, och ifall ett enda steg går snabbt så påverkar det inte hela bilden. Det är väl hela bilden vi är intresserade av, eller bara en viss liten grej? Typ, hur snabbt ett graffe kan flippa en pixel av och på, eller hur många fps man får i ett helt spel? Vad är intressantast? Antag att en graffe är super på nån liten smågrej, det påverkar inte hela FPSen i stort. Och det är ju ändå FPSen vi är intresserade av, inte nån liten smågrej.
STREAM skyfflar data i minnet, och det är relevant för en bandbreddsbenchmark? Kör istället ett officiellt gflops benchmark istället för din kod. Ska jag köra en 83x snabbare benchmark på SPARC M7 tycker du? Nej.
Citat:
Den tekniska diskussion du läste måste ha involverat folk som inte riktigt kan sin numme. AVX och SSE sedan SSE4x är väldigt fullständig i att den hanterar operationer på "båda ledder", d.v.s. om man har YMM0=|A1|A2|A3|A4|, YMM1=|B1|B2|B3|B4| så finns instruktioner som gör t.ex. |A1+B1|A2+B2... samt även de som gör |A1+A2|A3+A4|B1+B2|B3+B4|. Med dessa primitiver är det möjligt att använda SIMD för de flesta större numeriska problem som jobbar med vektorer och/eller matriser.
Öh, de kunde uppenbarligen mycket mera än mig, som ändå läst forskarkurser i numme. Jag vet inte, du kanske är professor i numme, men nånting säger mig att du inte är det. Dessa snubbar sade att dessa specialinstruktioner inte var till så stor hjälp i praktiken, vilket var ett av skälen att man inte får ut 800 gflops ur en E5-2699v3. Men om du nu vet mycket mera än dem, så kan du få visa länkar där man faktiskt får ut 800 gflops? Det låter ju lite otroligt, med tanke på att en POWER8 på 250 watt, får ut 400 gflops.
Missuppfattar jag dig, men visar du en tendens att nedvärdera andras kunskaper, även om saker du inte har en aning om?
Citat:
Jag försöker vara väldigt noga med terminologin, så här har du i så fall missförstått mig.
Det finns väldigt stora system från SGI som är cc-NUMA, dessa är fortfarande inte "scale-up" då man i detta fall har "cc-" delen för att ge en väldigt snabb data-path mellan beräkningsnoder. Har pekat på dessa system någon gång för att visa att Linux-kärna kan skala sin hantering av RAM-pages och andra system som behövs här, men har aldrig hävdat att man kan göra effektiv disk-I/O på den här typen av system.
Har också pekat på att det är tekniskt inkorrekt att kalla något cc-NUMA system för kluster, det SGI designat med de system som har >1000 kärnor är fortfarande en väldigt stor server och inte ett kluster, möjligen kan man kalla det cc-NUMA då den är mer asymmetrisk i sin kostnad för att nå alla delar av RAM. Det är dock en server som inte är lämplig för I/O-intesiva laster.
Återigen, jag struntar vad som står i marknadsföringen, jag vill se resultaten. SGI kallar sitt stora 10.000 core SGI UV2000 server för SMP. Och SMP servrar är scale-up. Men ändå går det inte att köra scale-up laster på en UV2000 som SAP. Det enda som körs på dem, är HPC klustrade laster som numme.
Detsamma med ScaleMP som också har en server med 10.000 tals cores, det består av ett kluster av x86 servrar som kör en hypervisor som lurar Linux att tro att det är en scale-up SMP server. Men ScaleMP kör också bara numme klustrade HPC beräkningar.
Så i praktiken så används SGI UV2000 uteslutande som ett beräkningskluster. Och i marknadsföringsbladen står det att det är en SMP server. Vad ska man tro på, det som står i marknadsföringen, eller hur man använder den i praktiken? Mao, UV2000 är i praktikten ett kluster.
Så du hävdar att du inte tillsammans med de andra linux killarna under flera års tid, hävdat att SGI UV2000 är en scale-up server som kan ersätta stora Unix servrar för t.ex. SAP och stora databaslaster? Du skrev inte nåt i stil med meningen att "stora Unix servrar är snart utdöda, Linux kan göra allt som Unix kan" kommer inte exakt ihåg formuleringen? Ska jag googla lite och se om jag kan citera dig? Jag kan skicka PM med citatet?
Citat:
Ändå visar SGIs ekonomiska rapporter att rätt många väljer att köpa dessa system, varför köpa av SGI om man inte behöver skala förbi 8 sockets?
UV300RL verkar reda idag finnas upp till 32-sockets (och man kör Xeon E7, inte E5), den ska ju köra "Oracle 12c with the Oracle Database In-Memory option". Varför köper folk sådant om det inte tillför affärsnytta? Och det borde bara tillföra affärsnytta om dagens x86 och Linux (den kör Oracle unbreakable Linux) faktiskt kan skala till denna storlek. Om så är fallet, hur mycket större är de "stora UNIX-systemen"?
SGIs stora scale-up server UV300H, används just nu i första hand för SAP HANA och andra in-memory databaser. Såna in memory databaser, är read-only, och därför går bra att klustra, och används uteslutande för analyser. Som ett datawarehouse. T.ex. amerikanska posten använder ett SGI UV2000 med en Oracle in memory TimesTen database för att detektera bedrägeri i realtid. Men dessa databaser används inte som en traditionell databas, dvs inte som en transaktionsintensiv miljö där man lagrar saker på disk. In memory databaser; säger sig självt att man inte lagrar något viktigt på dem.
Absolut finns affärsnytta att köra större analyser i realtid på in memory databaser, och det kan man betala mycket för. SAP är en stor marknad, och har många viktiga kunder. En stor SAP installation kan kosta en halv miljard SEK. Om man kan köpa en stor SGI server för någon mille så är det småpengar. Jag har för mig att SGI UV300H är certifierat för SAP Hana?
Om man läser lite om SAP Hana, så finns det två olika databasservrar i systemet. En stor scale-up för att lagra alla data på disk, och en klustrad för att göra analyserna. Lagringsdatabasen måste göras på en scale-up server. Jag vet inte om UV300H är certifierad för båda lagringsdatabasen eller bara analysdelen? Det borde stå nånstans om man googlar lite. (Om UV300H bara används för analysdelen, så används den bara som ett kluster, inte som en scale-up server. Och då kan man fråga sig varför UV300H inte används som scale-up server - är det för att x86 har problem att skala till 16-sockets?)