tomld #7

Végeztem tomld Python-ban írt kódom funkcióinak átkódolásával C-be (majdnem egy nagyságrend lett a sebesség különbség egy nem mérvadó méréssel úgy, hogy valamelyest többet dolgozik a C megvalósítás). A jelenlegi v0.35-ös verzió már használható manuálisan szabályok egyszerű létrehozására, de még biztos sok hibát tartalmaz.

Amit meg szeretnék most valósítani, az az, hogy automatikusan megmondjam, hogy egy adott process-hez mikor jött el az idő, mikor a tanuló módból átkapcsolom kikényszerítő módba (lehet hogy még beiktatok egy engedő módot, ez a 2-es szint a 0-3 tartományban, ahol naplózza a hozzáférés megtagadást, de megengedi, tehát csak log-ot gyűjteni jó). Ugye így néznek ki a szintek:

0 - kikapcsolva (se szabály nem gyűlik, se naplózás nem készül)
1 - tanuló mód (csak szabály gyűlik)
2 - engedő mód (szabály már nem gyűlik, csak naplózás, de engedve a műveletet)
3 - kikényszerítő vagy tiltó mód (szabály nem gyűlik, naplózás készül, szabályon kívüli művelet tiltott)

Ezt úgy szeretném megvalósítani, hogy a tomld folyamatom ne tároljon semmi aktuális vagy régi infót a műveletről. Ez lenne a tökéletes megvalósítás számomra. Se sqlite, se text fájl, semmi a domain-ekről és az azok eltöltött idejéről stb. Így az egyetlen apró binárisom (melynek csak libc a függősége) csak elindulna boot-kor, és mindig mindent kitalálna az aktuális infóból.

Ekkor viszont csak a begyűlt szabályaim állnak rendelkezésemre, mint döntéshez információ. Arra gondoltam, hogy így oldom meg:

Ha az adott process által eltöltött idő / processhez tartozó program vagy bináris bonyolultsága nagyobb, mint > konstans, akkor átkapcsolom. A konstans értékét teszteléssel szeretném meghatározni, és CPU időt nem sec-ben mérném, hanem tick-ben, hogy lehetőleg ne függjön annyira a processzor sebességtől, de ezt még jobban végig kell gondolnom. Illetve nyilván lassabb gépen tovább tarthat a szabályok megfelelő mennyiségének begyűlése, tehát ez a két érték valamelyest összetart.

Szóval tömörebben:

if (process cpu tick / complexity > value) enforcing_mode();

A konstans értékéhez szeretnék keresni még tulajdonságokat, amelyek alapján hozzáigazítanám az adott process-hez. CPU tick-et kikapnám a /proc/$PID/stat-ból (ha ott van, még utánanézek), a bonyolultságra meg:

ldd process_bináris | wc -l

Persze ez így előre baromságnak tűnhet, attól függetlenül lehet hogy élek vele :)

Ezt kb. fél óra alatt találtam ki, lehet hogy ezért dobom még az egészet..