Cat ja grep-komennot hidastelee

nörddi

Käytössä on palvelin, jossa on vanha CentOS 4.6. Palvelimella käsitellään suuria ascii-tiedostoja, jotka ovat kooltaan noin 20-100Mb. Tiedostoja käsitellään skriptillä, joka avaa tiedoston cat-komennolla ja komentoon on putkitettu grep, jolla poimitaan tiedoston dataa. Poimittu data otetaan talteen jatkokäsittelyyn, mutta se ei nyt liity tähän. Komento menee esim. seuraavasti:

cat tiedosto | grep -i -E -o 'poimittava data'

Ongelmana on nyt se, että tuo komennon suoritus ts. tiedoston avaus ja greppaus kestää tiedoston koosta riippuen kauan. Epäilen, että tuokomento nyt hidastaa lukua, joten miten sitä voisi tehostaa, jotta tiedoston käsittely nopeutuisi?

14

108

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • einopeudu

      tiedostojen koko on niin suuri että vaatii aikaa.

    • "Käytössä on palvelin, jossa on vanha CentOS 4.6."

      Toivottavasti ei ole verkossa kun tämän turvapäivitykset loppuivat 4,5v sitten. CentOS 5:n päivitykset loppuu myös maaliskuussa 2017.

      Epäilen että kone on niin vanha, että siinä siksi kestää.

    • nörddi

      Tiedostot ovat tosiaankin suuria, ja niiden koko yllätti itsenikin. Mikäli komentoa ei saa nopeammaksi tai tehokkaammaksi, niin sitten ei voi mitään.

      Niin ja kone on tosiaankin verkossa, ainakin vielä hetken aikaa :)

      • Se kone voi olla vaikka korkattu ja häärätä ihan muita asioita taustalla lisäksi.

        Helpointa hävittää se kone heti. Kympin kuussa hinnalla saa vaikka SSD:llä sen koneen.


    • fgrep

      Kone siis hidas, ja vanha kone hidas kiintolevy :( Ikävä yhdistelmä.
      Lisäksi voit jättää tuon cat -komennon kokonaan. grep/fgrep/egrep on monipuolinen ohjelma. man grep on mielenkiintoista luettavaa.

      • fgrep

        Lisäksi voisi harkita ram-levyä, jolla tuo käsiteltävä tiedosto on. Voisi kummasti nopeuttaa tiedoston käsittelyä, jos koneessa riittää RAM-muistia.


    • A-pu-va-ja

      Toinen (uusi) kone auttaa. Ja uusi käyttis ja ssd-levy vaikka m.2-liitännällä.

    • jotain_parannuksia

      Tarkista hdparm-ohjelmalla että levyn lukeminen tapahtuu dma:lla, niin ainakin yksi kohta grep-ongelmasta on selätetty. Onko koneen bios-asetukset tarkistettu koska viimeksi? Joskus sain lähes 20% lisää tehoa vain tekemällä asetukset oikein. Myös tulostiedostojen kirjoittaminen vie aikaa, joten jos mahdollista, kirjoita eri osiolle.

    • nörddi

      Kiitos vastauksista ja neuvoista!

      Tosiaan tuo serveri on jo ainakin 8-vuotta vanha rauta, joten sille ei enää tehdä mitään suurempia huoltotoimenpiteitä, koska se ollaan ajamassa alas piakoin. Se on tiedostettu, että siinä on hidas levyjärjestelmä ja levyt, jotka ovat pullonkaulana lukuisia pieniä tiedostoja käsiteltäessä. Uusi virtuaaliympäristö komeilee uutuuttaan vieressä, mutta tällä on siis vielä pärjättävä tovi. Syy miksi kyselin tuon komennon tehostamisesta on se, että nämä suuret filut tulivat vastikään käsiteltäviksi ja tuo hitaus vähän yllätti.

      • Täytyy olla vanhempi. CentOS 4 on vuodelta 2005 ja CentOS 5 joka vanhenee myös keväällä, tuli korvaamaan sitä vuonna 2007.

        Koneen ikä on arviolta 9.5 - 11.5 vuotta. 12v on sellainen aikajänne, että saa samaan hintaan 100x nopeamman pelkästään raudan osalta. Softakin toki nopeutuu ja nythän mennään CentOS 7:ssa jo.



      • ongelmien_tuottaminen
        M-Kar kirjoitti:

        Täytyy olla vanhempi. CentOS 4 on vuodelta 2005 ja CentOS 5 joka vanhenee myös keväällä, tuli korvaamaan sitä vuonna 2007.

        Koneen ikä on arviolta 9.5 - 11.5 vuotta. 12v on sellainen aikajänne, että saa samaan hintaan 100x nopeamman pelkästään raudan osalta. Softakin toki nopeutuu ja nythän mennään CentOS 7:ssa jo.

        Ei ole ihan näin yksioikoista: Olen jo pidempään seurannut ilmiötä siitä miten uudet koneet pakottavat vanhojen koneiden tehoja alaspäin. Tämä käy siten, että se vanha cpu on optimoitu käyttämään tiettyä määrää säikeitä ja tietylle cache:n määrälle. Uusi käyttöjärjestelmä usein kuitenkin lisää molempien käyttöastetta ja määrää: Prosesseja pitää vaihtaa useammin ja esim. yhdellä corella se tarkoittaa hidastumista. Cache kuormittuu enemmän eli käytännössä aiemmin cachessa pyörinyt softa alkaa pyöriä ram-muistin nopeudella. Samaan aikaan uusi arkkitehtuuri luo painetta muuntaa ohjelmia sen mukaiseksi, jotta ohjelmat saataisiin vieläkin nopeammiksi. Seurauksena on se, että ennen hyvin pyörineen ohjelman suorituskyky romahtaa vanhemmassa ympäristössä. Ne on ne yhteisvaikutukset, mitkä aiheuttavat ongelman.
        Eli varmemmin todistellen: Kanattaa kokeilla cat/grep suoritusaikoja eri kernelin versioilla 2.2, 2.4, 2.6 jne. Lisäksi kannattaa valita kerneli joka on käännetty omalle arkkitehtuurille optimoiden. Geneerinen koodi kun ei oikein toimi jos vaaditaan optimoitua toimintaa.


      • ongelmien_tuottaminen kirjoitti:

        Ei ole ihan näin yksioikoista: Olen jo pidempään seurannut ilmiötä siitä miten uudet koneet pakottavat vanhojen koneiden tehoja alaspäin. Tämä käy siten, että se vanha cpu on optimoitu käyttämään tiettyä määrää säikeitä ja tietylle cache:n määrälle. Uusi käyttöjärjestelmä usein kuitenkin lisää molempien käyttöastetta ja määrää: Prosesseja pitää vaihtaa useammin ja esim. yhdellä corella se tarkoittaa hidastumista. Cache kuormittuu enemmän eli käytännössä aiemmin cachessa pyörinyt softa alkaa pyöriä ram-muistin nopeudella. Samaan aikaan uusi arkkitehtuuri luo painetta muuntaa ohjelmia sen mukaiseksi, jotta ohjelmat saataisiin vieläkin nopeammiksi. Seurauksena on se, että ennen hyvin pyörineen ohjelman suorituskyky romahtaa vanhemmassa ympäristössä. Ne on ne yhteisvaikutukset, mitkä aiheuttavat ongelman.
        Eli varmemmin todistellen: Kanattaa kokeilla cat/grep suoritusaikoja eri kernelin versioilla 2.2, 2.4, 2.6 jne. Lisäksi kannattaa valita kerneli joka on käännetty omalle arkkitehtuurille optimoiden. Geneerinen koodi kun ei oikein toimi jos vaaditaan optimoitua toimintaa.

        Juu onhan niissä optimointeja uudemmalle raudalle. Käyttöjärjestelmävalmistajat ovat menneet sen mukaan, että rautaa uusitaan n. 6v välein kun silloin saa sen 10x parannuksen. Eli käytännössä jos on vanha kone niin voi olla järkevää ajella vanhemmalla käyttöjärjestelmäversiolla.

        Käytännössä valitaan uusin käyttöjärjestelmä mikä sopii kyseisen laitteen muistiavaruudelle ja CPU ytimille ja arkkitehtuurille.

        Esimerkiksi,

        CentOS 7 on tarkoitettu tuplaydin 64-bit koneille, muistia 2Gt tai enemmän.
        CentOS 6 on tarkoitettu koneille joissa on 1Gt tai enemmän muistia.
        CentOS 5 on tarkoitettu koneille joissa 512Mt tai enemmän muistia.

        Tuon mukaan kun valikoi niin saa aika optimaalisen. jos on alle 512Mt muistia niin varmaan kannattaa käyttää jotain siihen sopivampaa käyttöjärjestelmämerkkiä.


    • Pitääkö putkittaa? Miksei grep "jotain" tiedosto.txt. Jos noita on paljon Python tai joku muu kieli voi olla tehokkaampi.

    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Silmienvääntelijä-persut pääsivät Japanissa sarjakuvaan

      Torille! https://www.hs.fi/kulttuuri/art-2000011943173.html
      Maailman menoa
      183
      5047
    2. Nato kaatamassa Petterin haaveileman Tunnin junan?

      Nato edellyttää pohjoisessa Jäämereltä Rovaniemelle saakka kapearaitesta suoraa rautatieväylää, joka maksaa paperirahaa,
      Maailman menoa
      21
      4440
    3. Donald Trump pääsi samalle listalle Sanna Marinin kanssa

      Eli vasemmistolaisen Time-median top 100 jännäihmisten listalle. https://time.com/collections/time100-next-2021/5937699
      Maailman menoa
      9
      3127
    4. Älkää vaan sairastuko syöpään Suomessa

      Tilaston mukaan Suomi, Slovakia ja Latvia lääkitsee aivan pohjamudissa syöpää. Sairastunutta hoidetaan edelleen vanhana
      Maailman menoa
      256
      3007
    5. Kyllä, maata ei halua puolustaa nimenomaan punavihreän puolen edustajat

      "Esimerkiksi maanpuolustushenki on keskimääräistä alempana naisten, arvoliberaalien, heikossa taloustilanteessa olevien
      Maailman menoa
      143
      2912
    6. Sä veit mun sydämen ihan totaalisesti

      Aivan totaalisesti..
      Ikävä
      52
      2521
    7. Oot se sinä

      Ihan varmasti oot, tuo olemus ei valehtele 😘💓🪅 🏡 ihana 😍🙏
      Ikävä
      27
      1929
    8. Vieläkö olet

      Rakastunut minuun? Minä sinuun
      Ikävä
      42
      1812
    9. Toivotko vielä kohtaamista

      Kaivattusi kanssa?
      Ikävä
      70
      1780
    10. Ei siinä kauan

      Menisi jos olisimme kahden
      Ikävä
      22
      1777
    Aihe