Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Hogyan optimalizáljunk C/C++ kódokat!

1,180 views

Published on

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.

  • Be the first to comment

Hogyan optimalizáljunk C/C++ kódokat!

  1. 1. Optimalizáljunk C/C++ kódokat! Illés Márton, BalaBit
  2. 2. O(1)
  3. 3. Miről lesz szó?• Optimalizálásról általában• Hasznos segédeszközök• Teljesítmény tesztelés• Gyakorlati példák• syslog-ng tapasztalatok
  4. 4. Optimalizáció 1x1• Optimalizálási célok: • CPU használat • Memória használat • Disk használat • “sebesség” - futási idő • Skálázódás • Energia hatékonyság• Költségek!
  5. 5. Módszerek• Adatszerkezetek és algoritmusok kiválasztása • Cél az O(1) :)• Komplex rendszerek esetén különösen fontos a megfelelő architektúra kiválasztása• Optimalizáció vs. Hordozhatóság vs. Olvashatóság• Mikro-optimalizálások sokat tudnak számítani• Tudomány vagy művészet?
  6. 6. Slow- és fast-path• Nem kell mindig mindent optimalizálni• Átlagos és maximális eset nem mindig esik egybe!• Érdemes lehet a kivételeket külön, slow-path- on kezelni!• Egy gyors fast-path és egy elég jó slow-path lehet optimális megoldás
  7. 7. Pár szó a hardverről CPU feldolgozási sebesség jelentősen növekedett Memória méret, használható address space is megnőtt Jellemzően több processzoros, több magos rendszerek Processzor jóval gyorsabb, mint a memória, disk elérés Virtualizá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önlegesek
  8. 8. Teljesítmény tesztelés• Stresszteszt • Hogyan viselkedik a rendszer nagy terhelés esetén?• Teljesítmény mérés - eredmények • Mérőszámok meghatározása • Különböző bemeneti minták és beállítások tesztelése• Micro-benchmark • A program egy-egy kritikus részének folyamatos tesztelése • Regresziók felderítésére nagyon hasznos!
  9. 9. Eszközök• Találgatás helyett érdemes mérni!• Legjobb barátunk a profiler!• Rendszer-szintű mérőszámok is sokat segíthetnek• Pár hasznos segédprogram • Oprofile, perf, valgrind, pahole, gprof/gcov, time
  10. 10. Optimalizáljunk!• Feladat: – Szöveges fájl felolvasása – Soronként szöveg tokenizálása és tokenek számlálása, beépített naplózással• Cél: – Lehető legyorsabb futás• Nincs többszálúsítás!• Mit tegyünk?
  11. 11. Memória használat• Van, hogy a programunk túl sok memóriát eszik...• Valami sokat foglal?• Valamilyen objektumból túl sok van?• Valamit elfelejtünk felszabadítani?• Hogyan fogjunk neki?
  12. 12. syslog-ng queue-k• Cél: szálak között üzenetek átadása, sorrend helyesen, nagy mennyiségben• Triviális megoldás: – Queue használata lockolással• Probléma: – Nagy lock overhead – Sok várakozás üres, vagy teli queue esetén
  13. 13. syslog-ng queue-k• Több queue használata, batch szerűen• Lock nélküli fast-path és lock-olt slow-path Producer queue Consumer queue Wait queue Lock Lock
  14. 14. syslog-ng patterndb • Cél: – Bejövő különböző szöveges üzenetek real- time feldolgozása, klasszifikációja Legelterjedtebb megoldás a regexp-ek használata. – Sok minta esetén lassú és nehezen karbantarthatóAccepted publickey for marci from 127.0.0.1 port 37126 ssh2
  15. 15. syslog-ng patterndb• Célok: – Mintaillesztés ne függjön nagyban a minták számától – Egyszerű minta szintakszis• Megoldás: – Kereső fa építése a minták alapján – Változó részekhez “parserek” használataAccepted publickey for @STRING:username@ from@IPv4:source@ port @NUMBER:port@ ssh2
  16. 16. syslog-ng patterndb• Radix fa “literal” és “parser” elemekkel• Közel független a minták számától Accepted publickey for STRING: username from IPv4: source port
  17. 17. Konkluzió• Segédeszközök használata sokat könnyíthet• Folyamatos ellenőrzés, regressziók felderítése• Nem érdemes mindent sebességre optimalizálni• Folyamatos tanulás, tervezés fontossága• Környezet sajátosságaira érdemes figyelni• Használjuk az eszünket! :)
  18. 18. Kérdések? Köszönöm a figyelmet! Illés Márton illes.marton@balabit.hu http://marci.blogs.balabit.com/

×