Upload
open-academy
View
859
Download
1
Embed Size (px)
DESCRIPTION
Az idő pénz, vagyis a sebesség érték. A gyorsabb szoftver tehát értékesebb, és ami értékesebb azt drágábban lehet eladni.
Citation preview
Optimalizáljunk C/C++ Optimalizáljunk C/C++ kódokat!kódokat!
Illés Márton, BalaBitIllés Márton, BalaBit
O(1)
Miről lesz szó?Miről lesz szó?
• Optimalizálásról általábanOptimalizálásról általában
• Hasznos segédeszközökHasznos segédeszközök
• Teljesítmény tesztelésTeljesítmény tesztelés
• Gyakorlati példákGyakorlati példák
• syslog-ng tapasztalatoksyslog-ng tapasztalatok
Optimalizáció 1x1Optimalizáció 1x1• Optimalizálási célok:Optimalizálási célok:
• CPU használatCPU használat
• Memória használatMemória használat
• Disk használatDisk használat
• ““sebesség” - futási idősebesség” - futási idő
• SkálázódásSkálázódás
• Energia hatékonyságEnergia hatékonyság
• Költségek!Költségek!
MódszerekMódszerek
• Adatszerkezetek és algoritmusok kiválasztásaAdatszerkezetek és algoritmusok kiválasztása
• Cél az O(1) :)Cél az O(1) :)
• Komplex rendszerek esetén különösen fontos a Komplex rendszerek esetén különösen fontos a megfelelő architektúra kiválasztásamegfelelő architektúra kiválasztása
• Optimalizáció vs. Hordozhatóság vs. OlvashatóságOptimalizáció vs. Hordozhatóság vs. Olvashatóság
• Mikro-optimalizálások sokat tudnak számítaniMikro-optimalizálások sokat tudnak számítani
• Tudomány vagy művészet?Tudomány vagy művészet?
Slow- és fast-pathSlow- és fast-path
• Nem kell mindig mindent optimalizálniNem kell mindig mindent optimalizálni
• Átlagos és maximális eset nem mindig esik Átlagos és maximális eset nem mindig esik egybe!egybe!
• Érdemes lehet a kivételeket külön, slow-path-Érdemes lehet a kivételeket külön, slow-path-on kezelni!on kezelni!
• Egy gyors fast-path és egy elég jó slow-path Egy gyors fast-path és egy elég jó slow-path lehet optimális megoldáslehet optimális megoldás
Pár szó a hardverrőlPár szó a hardverről
CPU feldolgozási sebesség jelentősen növekedettCPU feldolgozási sebesség jelentősen növekedett
Memória méret, használható address space is megnőttMemória méret, használható address space is megnőtt
Jellemzően több processzoros, több magos rendszerekJellemzően több processzoros, több magos rendszerek
Processzor jóval gyorsabb, mint a memória, disk elérésProcesszor jóval gyorsabb, mint a memória, disk elérés
Virtualizált, cloud megoldásoknál nem a “miénk” a teljes gépVirtualizált, cloud megoldásoknál nem a “miénk” a teljes gép
Beágyazott és mobil eszközök továbbra is különlegesekBeágyazott és mobil eszközök továbbra is különlegesek
Teljesítmény tesztelésTeljesítmény tesztelés• StressztesztStresszteszt
• Hogyan viselkedik a rendszer nagy terhelés esetén?Hogyan viselkedik a rendszer nagy terhelés esetén?
• Teljesítmény mérés - eredményekTeljesítmény mérés - eredmények
• Mérőszámok meghatározásaMérőszámok meghatározása
• Különböző bemeneti minták és beállítások teszteléseKülönböző bemeneti minták és beállítások tesztelése
• Micro-benchmarkMicro-benchmark
• A program egy-egy kritikus részének folyamatos A program egy-egy kritikus részének folyamatos tesztelésetesztelése
• Regresziók felderítésére nagyon hasznos!Regresziók felderítésére nagyon hasznos!
EszközökEszközök
• Találgatás helyett érdemes mérni!Találgatás helyett érdemes mérni!
• Legjobb barátunk a profiler!Legjobb barátunk a profiler!
• Rendszer-szintű mérőszámok is sokat segíthetnekRendszer-szintű mérőszámok is sokat segíthetnek
• Pár hasznos segédprogramPár hasznos segédprogram
• Oprofile, perf, valgrind, pahole, gprof/gcov, timeOprofile, perf, valgrind, pahole, gprof/gcov, time
Optimalizáljunk!Optimalizáljunk!• Feladat:Feladat:
– Szöveges fájl felolvasásaSzöveges fájl felolvasása
– Soronként szöveg tokenizálása és tokenek Soronként szöveg tokenizálása és tokenek számlálása, beépített naplózássalszámlálása, beépített naplózással
• Cél:Cél:
– Lehető legyorsabb futásLehető legyorsabb futás
• Nincs többszálúsítás!Nincs többszálúsítás!
• Mit tegyünk?Mit tegyünk?
Memória használatMemória használat
• Van, hogy a programunk túl sok memóriát Van, hogy a programunk túl sok memóriát eszik...eszik...
• Valami sokat foglal?Valami sokat foglal?
• Valamilyen objektumból túl sok van?Valamilyen objektumból túl sok van?
• Valamit elfelejtünk felszabadítani?Valamit elfelejtünk felszabadítani?
• Hogyan fogjunk neki?Hogyan fogjunk neki?
syslog-ng queue-ksyslog-ng queue-k
• Cél: szálak között üzenetek átadása, sorrend Cél: szálak között üzenetek átadása, sorrend helyesen, nagy mennyiségbenhelyesen, nagy mennyiségben
• Triviális megoldás:Triviális megoldás:
– Queue használata lockolássalQueue használata lockolással
• Probléma:Probléma:
– Nagy lock overheadNagy lock overhead
– Sok várakozás üres, vagy teli queue eseténSok várakozás üres, vagy teli queue esetén
syslog-ng queue-ksyslog-ng queue-k
• Több queue használata, batch szerűenTöbb queue használata, batch szerűen
• Lock nélküli fast-path és lock-olt slow-pathLock nélküli fast-path és lock-olt slow-path
Producer queue Consumer queue
Wait queueLock Lock
syslog-ng patterndbsyslog-ng patterndb
• Cél:Cél:
– Bejövő különböző szöveges üzenetek real-Bejövő különböző szöveges üzenetek real-time feldolgozása, klasszifikációjatime feldolgozása, klasszifikációja
Legelterjedtebb megoldás a regexp-ek Legelterjedtebb megoldás a regexp-ek használata.használata.
– Sok minta esetén lassú és nehezen Sok minta esetén lassú és nehezen karbantarthatókarbantartható
Accepted publickey for marci from 127.0.0.1 port 37126 ssh2
syslog-ng patterndbsyslog-ng patterndb
• Célok:Célok:
– Mintaillesztés ne függjön nagyban a Mintaillesztés ne függjön nagyban a minták számátólminták számától
– Egyszerű minta szintakszisEgyszerű minta szintakszis
• Megoldás:Megoldás:
– Kereső fa építése a minták alapjánKereső fa építése a minták alapján
– Változó részekhez “parserek” használataVáltozó részekhez “parserek” használataAccepted publickey for @STRING:username@ from @IPv4:source@ port @NUMBER:port@ ssh2
syslog-ng patterndbsyslog-ng patterndb
• Radix fa “literal” és “parser” elemekkelRadix fa “literal” és “parser” elemekkel
• Közel független a minták számátólKözel független a minták számától
Accepted publickey for
STRING: username
from
port
IPv4: source
KonkluzióKonkluzió
• Segédeszközök használata sokat könnyíthetSegédeszközök használata sokat könnyíthet
• Folyamatos ellenőrzés, regressziók felderítéseFolyamatos ellenőrzés, regressziók felderítése
• Nem érdemes mindent sebességre Nem érdemes mindent sebességre optimalizálnioptimalizálni
• Folyamatos tanulás, tervezés fontosságaFolyamatos tanulás, tervezés fontossága
• Környezet sajátosságaira érdemes figyelniKörnyezet sajátosságaira érdemes figyelni
• Használjuk az eszünket! :)Használjuk az eszünket! :)