Pitkät ajot

Wikipedia-projektissa tuli jo vastaan tilanteita, missä tehtiin laskenta-ajoja, jotka kestivät jo melko pitkiä aikoja. Tässä luvussa on koottuna muutama käytännön vinkki, joka liittyy näihin tilanteisiin.

Ajoajan mittaaminen

On usein hyvin hyödyllistä mitata komentojen ajoaikoja. Näin pystyt arvioimaan esimerkiksi sitä, kuinka pitkään tulevissa laskenta-ajoissa vielä kestää. Ajoaikaa on helppo mitata näin:

time komento

Tämä suorittaa komennon normaalisti, mutta lisäksi tulostaa komennon ajamisessa kuluneen ajan. Tulosteen kohta "real" on se kiinnostavin kohta, tämä mittaa todellista meidän ymmärtämää reaaliaikaa (kuinka kauan kesti komennon aloittamisesta komennon valmistumiseen).

Virransäästö

Etenkin kannettavan tietokoneen kohdalla on hyvä huolehtia, ettei tietokoneen virransäästö tuota yllätyksiä. On ikävä palata kahvitauolta vain huomatakseen, että kone onkin mennyt unitilaan ja ajo ei ole edennyt sillä välin minnekään. Voit joutua säätämään tilapäisesti virransäästöasetuksia. MacOS:ssa on tarjolla näppärä komento caffeinate, jota voi käyttää tähän tapaan:

caffeinate komento

Tämä ajaa komennon muuten normaalisti, mutta estää unitilaan vajoamisen siksi aikaa kun komento on käynnissä. Tyypillisessä nykyaikaisessa Linuxissa vastaavan voi tehdä tähän tapaan:

systemd-inhibit komento

Etäkäyttö ja screen

Jos teet ajoja ssh-yhteyden yli toisella koneella, on hyvä huolehtia, ettei mikään mene pieleen, vaikka ssh-yhteys katkeaisi kesken kaiken.

Helppo tapa varmistaa tämä on käyttää screen-työkalua. Kun avaat yhteyden etäkoneelle, aja ensin komento screen. Nyt saat uuden istunnon, joka pyörii turvassa screen-työkalun sisällä.

Painamalla ctrl+a, d (siis ensin A-näppäintä control-näppäimen kanssa, sitten D-näppäintä ilman controlia) pääset takaisin sinne, mistä lähditkin, mutta screen jää taustalle pyörimään. Komennolla screen -r pääset sinne takaisin.

Jos esimerkiksi ssh-yhteys katkeaa, ei huolta. Avaa vain ssh-yhteys uudestaan ja aja komento screen -r, jolloin pääset takaisin jatkamaan kesken jääneitä töitä. Erityisesti jos sinulla on pitkä laskenta-ajo pyörimässä screenin sisällä, se on turvassa (kun taas normaalisti ssh-yhteyden katketessa kaikki kesken jääneet komennot lopetetaan).

Rinnakkaisuus

Nykyaikaisessa tietokoneessa on monta suoritinydintä (yleensä vähintään 4) ja ne voivat suorittaa samaan aikaan montaa eri ohjelmaa tehokkaasti.

Hyödynsit itse asiassa tätä jo edellä! Kun esimerkiksi ajoit komennon

./siivoa.sh < fiwiki.txt | ./sanat.sh > fiwiki-sanat-siivottu.txt

skriptin siivoa.sh sisällä meillä oli pitkä putki, jossa usea sed-komento, ja näiden tuloste taas ohjattiin skriptin sanat.sh sisällä olevalle pitkälle putkelle, jossa on grep, awk, sort ym. Iso osa tästä rinnakkaistuu: kun ensimmäinen sed-komento alkaa tuottaa tulostetta, seuraava sed-komento voi jo alkaa käsitellä sitä jne. Putki voi siis olla huomattavasti tehokkaampi kuin jokaisen vaiheen suorittaminen peräjälkeen. Kokeile: käynnistä komento ja seuraa tietokoneesi prosessilistaa (esimerkiksi Linuxissa top-komennolla), ja näet, että etenkin aluksi ylläolevaa komentoa suoritettaessa meillä on useita prosesseja samaan aikaan käynnissä.

Mutta paljon enemmänkin voi tehdä: voit esimerkiksi yksinkertaisesti käynnistää useita komentoja samaan aikaan eri terminaali-ikkunoissa. Kahden komennon suorittaminen rinnakkain on usein paljon nopeampaa kuin niiden ajaminen peräjälkeen (kunhan vain tietokoneessa riittää muistia molempien suorittamiseen).

Palautusta lähetetään...