2012. december 18., kedd

elszállt ötletek: ami a tömörítésből még hiányzik

Van egy mondás, miszerint egy rendszerben egy adott pillanatban csak egy komponens a bottleneck. Ezt megfigyelheted akkor is, amikor egyik gépről nagyobb mennyiségű adatot pumpálsz át etherneten: vagy a merevlemez, vagy a hálózat lesz teljesen leterhelve, a processzor meg közben vakarja a tökeit.
Arra gondoltam, hogy ezen kicsit megpróbálok segíteni, de ha egyszerűen csak bedobok egy tetszőleges tömörítő algoritmust a sorba, akkor könnyen lehet, hogy a CPU-t rúgom agyon és ezzel azt nevezem ki új bottleneck-nek, míg innentől a hálózat forgalom lesz alacsony. Minden vason külön ki kellene találnom hogy mennyire jó ötlet egy tömörítést közbedobni, és nem akarom, mert már a másodiknál is nagyon unnám.

Egy olyan InputStream/OutputStream párosra gondoltam, ami egy kellően nagy bufferrel rendelkezik. Az output része az írásra itélt adatokat csomagokra bontaná és egy szálon figyelné hogy melyik mennyi idő tellik el a beérkezés és a bufferből távozás között. Ha úgy becsülné meg, indítana egy szálat, ami a buffer egy részét egy tömörítő algoritmussal betömörítené és hozzátenne egy nagyon rövid headert (pl 1 byte) ami jelezné hogy tömörítve van-e és ha igen milyen algoritmussal. Az input része csak csekkolná ezt a headert és szükség esetén kitömörítené a csomagot. Nyilván ez egy kicsi overhead.

Így a viszonylag gyenge hálózati kapcsolatot kicsit felgyógyíthatnám egy processzorral, de annélkül, hogy esetleg bizonyos esetekben nagyon durván kiszúrjak magammal.

Egy másik kapcsolódó ötlet az az lenne, hogy egy olyan tömörítő input/output streameket próbálnék ki, amelyek ellenőrzik (lehetőleg csak egyszer) hogy az adott rendszeren létezik-e az adott tömörítő algoritmusnak natív változata. Ha van akkor azon átpipe-olva tömörítené az adatokat, ha pedig nincs, akkor egy java implementációra terhelné. A natív implementációk általában véve gyorsabbak, még azzal együtt is, hogy context-switch ésatöbbi.

Szóval ez csak szimpla tuning. Nincs autóm, úgyhogy azt nem tudom brümmögtetni :-) Ja és nem is szeretnék, mert nem szeretem a brümmögést :-D

Hát ennyi lenne az ötlet, jöhetnek a kövek.