Jos lataat ohjelman, Windowsin on kopioitava suoritettava tiedosto muistiin, jotta se voidaan suorittaa. Jos suljet ohjelman, ohjelma on edelleen RAM-muistissa. Jos suoritat ohjelman uudelleen, Windowsin ei tarvitse ladata mitään levyltä – kaikki on RAM-muistissa.
Kaikki käytetty RAM-muisti muuttuu kiintolevyn välimuistiksi. Koska levy on kuusi kertaluokkaa hitaampi kuin RAM-muisti, haluat, että mahdollisimman suuri osa ohjelmistasi ja datatiedostoista on RAM-muistissa. Käyttämättömästä RAM-muististasi tulee välimuisti. Sitä on valmiusmuisti. Se on muistia, jota ei anneta välittömästi mille tahansa sitä tarvitsevalle sovellukselle, vaan se on valmiustilassa siltä varalta, että sen sisältöä tarvitaan:
- https://i.imgur.com/NQwFGoB.png
Tietokoneessani on siis tällä hetkellä 8 gigatavua muistia, joka ei tee mitään muuta kuin toimii kiintolevyn välimuistina.
Nyt, jos ohjelma tarvitsee RAM-muistia, Windows antaa sille muistia. Mutta ennen kuin se voi luovuttaa muistia ohjelmalle, sen on varmistettava, että muisti on ensin nollattu.
Lukijan tietovisa: Miksi Windowsin täytyy nollata RAM-muisti ennen kuin se voi antaa sen toiselle prosessille?
Windows säilyttää jonkin verran muistia, joka on laiskasti nollattu ja joka on valmiina luovuttamaan sen sovellukselle hetkenä minä hyvänsä. Resurssienhallinnassa tätä valmiiksi nollattua muistia kutsutaan nimellä *Vapaa muisti; näet sen yllä olevassa kuvakaappauksessa.
Se tunnetaan myös nimellä nollasivuluettelo, koska muisti on nollattu, eikä sillä ole mitään hyödyllistä tekemistä tietokoneessa:
- https://i.imgur.com/47xDkzT.png
Mikä on SuperFetch?
SuperFetch tekee yhteistyötä muistinhallinnan kanssa ladatakseen ennakoivasti ja laiskasti dataa vapaaseen muistiin niin, että se on jo välimuistissa, kun menet suorittamaan sitä. SuperFetch tietää mitä sovelluksia, pelejä, dev-työkaluja yleensä lataat, ja laiskasti valmiiksi noutaa ne RAM-muistiin siltä varalta, että niitä tarvitaan.
Silloin kun menen lataamaan WoWia 3 minuutin päästä, nuo 8 gigatavua pelitekstuureja on jo RAM-muistissa. Käytä RAMMapin kaltaista työkalua nähdäksesi, mitä tiedostoja tietokoneesi kaikki RAM-muisti tällä hetkellä välimuistiin tallentaa.
Kuka tahansa, joka käskee kytkemään SuperFetchin pois päältä, on idiootti, ei ymmärrä tietokoneita ja pakottaa Windowsin hitaammaksi, koska ei ymmärrä eroa seuraavien välillä:
- Standby vapaa muisti
- Zerod vapaa muisti
Ja kyseinen henkilö tarvitsee läimäyksen takaraivoon siitä, että hän on tehnyt tietokoneestaan tahallaan hitaan.
Sovellukset käyttävät muistia; eivät RAM-muistia
Toinen asia, jota useimmat ihmiset eivät ymmärrä, on sitoutuneen ja työjoukon välinen ero. Tämä oli helpompi ymmärtää silloin, kun Windows 95 toimi 4 MB:n muistilla.
- Hirviökoneessa, jossa on 16 MB RAM-muistia
- Minulla voi olla ohjelma, joka on sitonut 1,5 Gt muistia
- mutta käyttää vain 117 KB:ta RAM-muistia
Tämä johtuu siitä, että kaikki, mitä ohjelma tarvitsee toimiakseen, mahtuu kokonaan 117 KB:n muistiin. Loppuosa on joko kirjoitettu swap-tiedostoon, tai se oli jo kopio tiedostosta (esim. voin mapata 1,5 Gt:n datatiedoston osoiteavaruuteeni ja olen sitonut 1,5 Gt:n muistin, mutta en kuluta RAM-muistia)
Esimerkiksi eräässä Windows Vista/7:n sivupalkin vekottimessa oli muistivuoto … Tämä tarkoitti sitä, että Sidebar.exe-prosessi sitoi jatkuvasti muistia (32-bittisen prosessin 2 GB:n rajaan asti), kunnes prosessi kaatui, koska sen muisti loppui. Sidebar.exe käytti kuitenkin vain noin 700 kilotavua RAM-muistia, koska kaikki vuotanut muisti kirjoitettiin swap-tiedostoon (koska kukaan ei käyttänyt sitä mihinkään).
Tämä on syy, miksi swap-tiedostoa ei saa poistaa käytöstä. Window voi kopioida sivuja RAM-muistista kiintolevylle. Jos RAM-muistin sivuja ei varsinaisesti käytetä, ne voidaan käyttää uudelleen muihin tarkoituksiin (kuten levyn välimuistiin), koska varmuuskopio kyseisestä datasta on swap-tiedostossa. Jos sivupalkki joskus pyytäisi tuota muistia uudelleen (mitä se ei koskaan tekisi, koska se unohti sen), Windows voi vaihtaa nuo RAM-muistit takaisin kiintolevyltä.
tl;dr: minulla on 8.5 Gt muistia vapaana:
- 8 Gt tekee jotain hyödyllistä, joka tekee koneestani nopeamman
- 0.5 Gt menee hukkaan tekemättä mitään
Tahdot, että SuperFetch käyttää muistia – se tekee koneesta nopeamman. Älä kytke sitä pois päältä.
Nämä ihmiset ovat kuin isäni. Hän luulee tietävänsä juuri tarpeeksi ollakseen vaarallinen. Hän soitti minulle valittaen, että hänen Windows 7 -koneensa käynnistyminen kestää 3 minuuttia. Sanoin hänelle:
- Se johtuu kaikesta virustorjuntapaskasta, jota hän käyttää
- hanki SSD-levy, se käynnistyy 13 sekunnissa
Hän hankkii SSD-levyn, ja Windows käynnistyy silti 3 minuutissa. Sanon hänelle, että se johtuu hänen virustorjuntapaskastaan. Hylkää mielipiteeni suoralta kädeltä. Kuusi kuukautta myöhemmin hän asentaa Windowsin uudelleen tuoreeltaan, ja nyt se käynnistyy 13 sekunnissa.
SuperFetchin poistaminen käytöstä on sama kuin swap-tiedoston poistaminen käytöstä, RAM-tuplaajan asentaminen tai rekisterinpuhdistajan käyttäminen: se saa sinut näyttämään idiootilta. Itse hymyilen ja nyökyttelen. Selkäsi takana puhun paskaa sinusta redditissä.
Bonuslukemista
Enemmän aiheesta aiemmin:
- /r/ProgrammerHumor/kommentit/68ker6/ultimate_in_garbage_collection/dh071ep/
- /r/technology/kommentit/1xbofp/ramdrive_to_improve_suorituskyvyn_parantamiseksi_ja_pitkistämiseksi_ssd/cf9wbmf/cf9wbmf/
- /r/ohjelmointi/kommentit/4nvimz/john_carmack_on_memory_mapped_gpu_assets/d4818ep/
Update – Eikö SuperFetch kiintolevyn I/O voisi vahingoittaa pelaamistani?
Joku kysyi, vastasin, mutta kopioin tänne näkyvyyden ja tiedon levittämisen vuoksi.
Tosiasiassa, voisiko se vaikuttaa pelisuorituskykyyn?
Ei yksinkertaisesti vaikuta.
Suurimmaksi huolenaiheeksesi saattaisi muodostua se, että SuperFetch pyörittää kiintolevyäsi lukemalla sinne tavaraa, kun yrität pelata peliäsi. Ja kaikki tämä kiintolevyn I/O vahingoittaa ”oikeita” kiintolevyjä, joita tarvitset pelisi pelaamiseen.
Ei vahingoita.
Katso Resource Monitorin Levy-välilehteä. Windows 7 lisäsi ominaisuuden, jossa sovellukset voivat ilmoittaa, että ne haluavat suorittaa I/O-operaatioita ”taustaprioriteetilla”.
- SSD-levyn vasteaika on noin 1-2 ms
- pyörivän levyisen kiintolevyn vasteaika on noin 10-20 ms
Ja niinpä Resurssienvalvonnassa näet, kuinka kauan kiintolevyjen I/O-operaatioiden palveleminen kestää. Ja pyörivillä kiintolevyillä näet yleensä 10-30 ms:
- https://i.imgur.com/m4ogUc5.png
Mutta sillä aikaa, kun tämä tapahtuu, on muita kiintolevyn I/O-operaatioita, jotka suoritetaan Background-prioriteettiasemalla. Windows huolehtii siitä, että Background I/O -operaatiot eivät koskaan häiritse tavallista I/O:ta. Background I/O:ta voidaan rangaista niin paljon, että yhden taustalukutoiminnon palveleminen voi kestää 500-1000 ms:n ajan:
- https://i.imgur.com/3SATs9M.png
Siten meillä on:
ReadResponse timeSSD1 msHDD10 msBackground Priority I/O500 ms
On sääli, että useammat kehittäjät eivät tiedä Background I/O Prioritystä, i’m looking at you:
- Steam downloader
- uTorrent
- Battle.net updater
- Windows Update(!!)
Koska se todella auttaa.