perjantaina 27. marraskuuta 2009

Insinööripornoa

Työstän parhaillaan matemaattista mallia erään palvelinklusterin liikenteen, skaalautuvuuden ja kasvun analysointiin. Luonnollinen jatkumo on näiden attribuuttien tulevaisuuden ennustamiseen. Tämän työn puitteissa tulee käsiteltyä monenlaisia mittareita. Tutkittua erilaisia graafeja ja oletettua monia asioita näiden mittareiden tuloksista.

Suurella todennäköisyydellä ensimmäinen käsitys useimmista kuvaajista on väärä. Näitä tulkitessa todellisuus on aina jotain muuta mitä graafi nopealla vilkaisulla kertoo. Harvassa on ne hetket jolloin mittareista näkee jonkin absoluuttisen totuuden: mittarin lukeman jota ei voi tulkita väärin. Graafi joka näyttää täsmälleen oikeaa ja jonka muoto on kaunis kuin "sika pienenä". Tällaisia mittareita ja graafeja pysähtyy ihastelemaan... Miettimään... Arvioimaan...

"Onko tuo nyt muka oikein... Voiko se olla väärin...!?
-Jos se on oikein niin paljonko siinä on virhettä?"



Parhaillaan työstän ongelmaa jossa koitan syöttää palvelinklusterin mittaustuloksia analysoitavaksi tietokantaan. Tästä datasta on tarkoitus tuottaa edelleen uusia (johdettuja) mittaustuloksia. Näistä edelleen iterpoloidaan estimaatteja tulevaisuuteen ja estimaattien rinnalle generoidaan skenaarioita muunlaisista mahdollisista tulevaisuuksista jne jne...

Tätä mittausdataa on vaan niin pahuksen paljon, että sen käsitteleminen normaalilla työasemalla reaaliajassa on ... haaste. -Ensimmäinen SQLite:lla tekemäni versio latasi dataa varttia vajaan kaksi tuntia. Tuo oli liian paljon ja uskoin että 1.0 versiossa on optimoinnin varaa.

Optimiointi on siitä hauskaa mutta petollista hommaa, että sitä voisi tehdä maailman ääriin asti. Otin kuitenkin helpon(?) tavoitteen. -Koitan dynaamisesti kuristaa datanprosessoinnin resurssivarauksia riippuen järjestelmän käyttäytymisestä. Jos tuollaisen säätimen saisi tehtyä niin pitäisi päästä jossain määrin lähelle koneen optimi suorituskykyä. Niillä rauta- ja ohjelmistokomponenteilla mitä nyt satuin valitsemaan. Rauta on jotain mikä määrittää throughputit ja resurssienkulutukset. Koodi Python:a ja kantana PostgreSQL.



Ylläolevia graafeja olen tämän optimointityön yhteydessä ihmetellyt.

Ovat hyvin matalan tason graafeja, joten siksi vaikeasti väärin tulkittavissa. Eli erittäin kauniita.

Silmä lepää. :)

tiistaina 3. marraskuuta 2009

Muistidumppi suoritettavasta prosessista

Toisinaan koodia kehittäessä tai softaa testatessa voi prosessin ajonaikaisesta muisti-imagesta olla apua mahdollisten ongelmien selvittämiseen. Windows-alustalle on saatavissa hyviä valmiita työkaluja. Niin muistidumppien generoitiin kuin myös moneen muuhunkin debuggaus ongelmaan. Voisinkin vaiheessa kirjoittaa Windows työkaluista ja niiden käytöstä enemmänkin. Mutta keskitytään nyt tähän.

Ensinnä; Tarvitset mitä todennäköisimmin ylläpitäjän oikeudet. Ainakin ne auttaa. :)

Windowseissa on työkalu nimeltään drwtsn32.exe jonka tehtävänä on tuottaa muisti-image proseseista jotka kaatuvat. Tätä työkalua voi myös käyttää ajossa olevan prosessin imagen luomiseen seuraavasti:
  1. Käynnistä drwtsn32.exe komentoriviltä
  2. Konfiguroi täydet muistidumpit ja aseta kirjoituspolut miten haluat
  3. Etsi prosessinumero (PID) prosessille jonka imagen haluat
  4. Suorita komentoriviltä drwtsn32.exe -p 123456 (korvaa 123456 oikealla PID:llä)
Tämä kirjoittaa muistista dumpin ja logitiedoston Dr. Watsonissa konfiguroituun polkuun. -Ikävä sivuoire on että tämä tappaa prosessin mutta ainakin saat materiaalia sen tutkimiseen mitä oli tekeillä ja mitä oli prosessin muistissa hetkellä jolloin dumppi generoitiin.