Menee vähän (tai oikeastaan aika paljonkin) ohi otsikon aiheen, mutta kysyn silti:
Miksi? Mikä tekee isosta L3 välimuistista tärkeän palvelimissa, mutta työpöydällä ei niin merkityksellisen.
Softien (aktiivisten) datamäärien koot.
Palvelimet saattavat palvella satoja tai tuhansia käyttäjiä yhtä aikaa. Jokaisesta näistä saattaa olla talletettu suuri määrä dataa tietokantaan. Esim tällä forumilla on melkein 40000 jäsentä, yli 90000 viestiketjua, joissa yhteensä melkein kaksi miljoonaa viestiä, ja viestin keskimääräinen koko lienee kaikkien muotoilujensa ja metadatojensa kanssa useita kilotavuja => viestejä on siis monen gigatavun verran. Jokaisen käyttäjän avatar-kuva voi vielä viedä parikymmentä kilotavuja, niin 40000 käyttäjällä niistäkin saadaan n. gigatavu dataa lisää.
Koska tahansa voi tulla request lukea mikä tahansa viesti, mutta viimeiset viestit luetaan todennäköisemmin. Mitä suurempi osa viimeisiä viestejä (ja viimeksi näytettyjä avatarkuvia) mahtuu välimuistiin, sitä nopeammin palvelin toimii.
Pelikin saattaa kyllä kuluttaa useamman gigatavun muistia, mutta huomattava osa siitä muistista on esim. tekstuureita , joita CPUn ei tarvi koskaan käsitellä, ne saattaa olla keskusmuistissa vain, jotta ne voidaan siirtää sieltä GPUlle.
Myöskään tarkkaa geometriadataa CPUn ei tarvi kovin usein itse käsitellä, lähinnä se vaan lähettää sen näyttikselle piirretäväksi.
Se datamäärä, mitä oikeasti käsitellään siten että sitä luetaan ja kirjoitetaan suurinpiirtein joka framessa on usein peleissä todella paljon pienempI;
Monissa peleissä esim. aktiivisia hahmoja on tyypillisesti ehkä joitain kymmeniä, korkeintaan satoja, ehkä joskus tuhansia kappaleita. Ja vaikka meillä olisi massiivinen open world-peli jossa hahmoja on olevinaan vaikka tuhansia tai kymmeniä tuhansia, kauimmamiset hahmot usien feikataan ja ne idlaavat "perustilassa" kun ovat liian kaukana ja aktivoituvat vasta kun pelaaja tulee tarpeeksi lähelle. (Joissain peleissä on näitä glitchejä että joku NPC-hahmo teleporttaa oletuspaikkaan kun itse käväisee juuri jossain tietyssä pisteessä tarpeeksi kaukana siitä, mutta se paikka missä tämä "resetointi" tehdään onkin joskus niin lähellä, että pelaaja voi huomata sen)
Eikä siellä välttämättä tarvi olla kovin montaa kymmentä numeroa muuttuvaa /usein accessoitavaa dataa per hahmo:
Pelienginen tarvii ehkä laskea fysiikkaa ja tehdä törmäystarkasteluita kaikille (aktiivisille) hahmoille, mutta tämä voidaan usein tehdä karkealla tasolla koko hahmolle kerrallaan, tai vaan esim. määrittelemällä laatikot päälle, käsille, torsolle ja jaloille, ja simuloimalla näiden tarkkuudella, jolloin ei tarvi ladata sen yksityiskohtaista geometriadataa; vain jos huomataan, että nyt osutaan boksiin jonka sisällä hahmo on, ladataan tarkempi data hahmon muodoista tarkempaa törmäystarkastusta varten.
Se "paljon accessoitu" datamäärä voi oikeasti jossain pelissä olla esim megatavun luokkaa, vaikka peli kuluttaisikin gigatavuittain muistia.
Odottelen muuten sitä, että pelit alkavat harrastamaan "bullet tracingiä" säteenjäljitysraudalla, että ammusten ja sirpaleiden osumantarkastus tehdään CPUn sijasta säteenjäljitysraudalla. Ongelmana tässä toki on se, että säteenjäljitysrauta osaa jäljittää vain suoraan meneviä säteitä ja realistisessa pelimoottorissa luodit ja sirpaleet lentävät ballistisessa kaaressa, eivätkä osu kohteeseensa samalla hetkellä kun ne ammutaan vaan niiden lentomistä simuloidaan oikealla fysiikalla sen ajan mitä ne lentävät. Mutta joissain peleissä on myös laseraseita, joiden käytös mäppää suoraan säteenjäljitysrautaan, ja myös luodin lentorata voidaan pätkiä esim. joka framelle erikseen, laskea luodin lentoradasta aina yhden framen mittanen pätkä suorana säteenä ja sen jälkeen kääntää sitä alaspäin seuraavalle framelle.
Mutta oikeastaan pelkkien luotien kanssa tähän ei ehkä ole tarvetta, koska yhtäkaisten luotien määrä ei ihan helpolla ole niin suuri, että CPU tästä pahasti kyykkäisi. Mutta jos halutaan simuloida tarkasti suurta määrää sirpalekranaatin sirpaleita, tästä voisi olla iloa.
Tai jos meillä on joku todella järeä massiivinen multiplayer, ja sitä kuulaa on koko pelimaailmassa oikeasti ilmassa todella paljon kerralla.
Muut työpöytäsoftat kuin pelit..
Jälleen kerralla käsiteltävät datamäärät on usein melko pieniä. Tässä selaimessa tällä hetkellä aktiivisesti CPU tekee töitä siihen että käsitellään yhden tekstikentän dataa, ja rendataan sen tekstikentän sisältöä. Sivun HTML-koodin koossa puhutaan todennäköisesti kymmenistä tai sadoista kilotavuista, ei suuremmasta. Rendattu valmis sivu pikselimuodossa sitten vienee muutaman megan, mutta rendauksen loppupää tehdään GPUlla siten että koko kuva ei päädy keskusmuistiin ollenkaan ellei sitä eriksee näyttikseltä haeta takaisin.
Yksi sähköpostiviesti joka on pekkää tekstiä on headereineen usein pair kilotavua.
Se, että taustalla on auki vaikka mitä joka kuluttaa paljon muistia ei vaikuta välimuistiin niin kauan kun ne softat vaan idlaa eikä CPUn tarvi käsitellä niiden dataa.