SlideShare una empresa de Scribd logo
1 de 18
Descargar para leer sin conexión
Optimalizáljunk C/C++
      kódokat!
     Illés Márton, BalaBit
O(1)
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
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!
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?
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
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
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!
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
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?
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?
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
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
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
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álata
Accepted publickey for @STRING:username@ from
@IPv4:source@ port @NUMBER:port@ ssh2
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
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! :)
Kérdések?


          Köszönöm a figyelmet!
                Illés Márton
         illes.marton@balabit.hu
     http://marci.blogs.balabit.com/

Más contenido relacionado

Destacado

Alternative CV 2
Alternative CV 2Alternative CV 2
Alternative CV 2
Gorkem Unel
 
Atlixcandalo Press Kit 2011
Atlixcandalo Press Kit 2011Atlixcandalo Press Kit 2011
Atlixcandalo Press Kit 2011
pixentro
 
町内会通信23年12月2日
町内会通信23年12月2日町内会通信23年12月2日
町内会通信23年12月2日
hongochonaikai
 
Media transmisi
Media transmisiMedia transmisi
Media transmisi
kus yono
 
Inventories with Google Spreadsheets
Inventories with Google SpreadsheetsInventories with Google Spreadsheets
Inventories with Google Spreadsheets
6go3
 
In Search of Positive Planning
In Search of Positive Planning In Search of Positive Planning
In Search of Positive Planning
ruralfringe
 
Powerpoint
PowerpointPowerpoint
Powerpoint
Double M
 
İhs telekom halkbank mdm
İhs telekom halkbank mdmİhs telekom halkbank mdm
İhs telekom halkbank mdm
Mustafa Kuğu
 

Destacado (20)

www.leader-milyarderunion.com | Preview Milyarer Union
www.leader-milyarderunion.com | Preview Milyarer Unionwww.leader-milyarderunion.com | Preview Milyarer Union
www.leader-milyarderunion.com | Preview Milyarer Union
 
Alternative CV 2
Alternative CV 2Alternative CV 2
Alternative CV 2
 
Military application
Military applicationMilitary application
Military application
 
Atlixcandalo Press Kit 2011
Atlixcandalo Press Kit 2011Atlixcandalo Press Kit 2011
Atlixcandalo Press Kit 2011
 
Paid Search James Fairweather Digital Bootcamp April 2012
Paid Search James Fairweather Digital Bootcamp April 2012Paid Search James Fairweather Digital Bootcamp April 2012
Paid Search James Fairweather Digital Bootcamp April 2012
 
שמאי מקרקעין - מיסוי מקרקעין שרון משיח
שמאי מקרקעין - מיסוי מקרקעין שרון משיח שמאי מקרקעין - מיסוי מקרקעין שרון משיח
שמאי מקרקעין - מיסוי מקרקעין שרון משיח
 
Influencing consumer behaviour jo daniels bitc
Influencing consumer behaviour   jo daniels bitcInfluencing consumer behaviour   jo daniels bitc
Influencing consumer behaviour jo daniels bitc
 
町内会通信23年12月2日
町内会通信23年12月2日町内会通信23年12月2日
町内会通信23年12月2日
 
Media transmisi
Media transmisiMedia transmisi
Media transmisi
 
Quant Trading
Quant TradingQuant Trading
Quant Trading
 
FATZO Summary
FATZO SummaryFATZO Summary
FATZO Summary
 
Git
GitGit
Git
 
Hot500 overview
Hot500 overviewHot500 overview
Hot500 overview
 
"The Game Has Changed, Have You?"
"The Game Has Changed, Have You?""The Game Has Changed, Have You?"
"The Game Has Changed, Have You?"
 
Designing for Real-Time Marketing
Designing for Real-Time MarketingDesigning for Real-Time Marketing
Designing for Real-Time Marketing
 
Inventories with Google Spreadsheets
Inventories with Google SpreadsheetsInventories with Google Spreadsheets
Inventories with Google Spreadsheets
 
In Search of Positive Planning
In Search of Positive Planning In Search of Positive Planning
In Search of Positive Planning
 
Concurrent manager faqs
Concurrent  manager faqsConcurrent  manager faqs
Concurrent manager faqs
 
Powerpoint
PowerpointPowerpoint
Powerpoint
 
İhs telekom halkbank mdm
İhs telekom halkbank mdmİhs telekom halkbank mdm
İhs telekom halkbank mdm
 

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

A Redis lehetőségei
A Redis lehetőségeiA Redis lehetőségei
A Redis lehetőségei
vvinston
 
Syslog-NG (nem csak) fejlesztőknek
Syslog-NG (nem csak) fejlesztőknekSyslog-NG (nem csak) fejlesztőknek
Syslog-NG (nem csak) fejlesztőknek
János Pásztor
 
Webalkalmazások teljesítményoptimalizálása
Webalkalmazások teljesítményoptimalizálásaWebalkalmazások teljesítményoptimalizálása
Webalkalmazások teljesítményoptimalizálása
Ferenc Kovács
 
PHP alkalmazások minőségbiztosítása
PHP alkalmazások minőségbiztosításaPHP alkalmazások minőségbiztosítása
PHP alkalmazások minőségbiztosítása
Ferenc Kovács
 
Mohácsi László: Gazdasági számítások párhuzamos számítógépeken
Mohácsi László: Gazdasági számítások párhuzamos számítógépekenMohácsi László: Gazdasági számítások párhuzamos számítógépeken
Mohácsi László: Gazdasági számítások párhuzamos számítógépeken
Informatikai Intézet
 
Devops meetup - Automatizált tesztek
Devops meetup - Automatizált tesztekDevops meetup - Automatizált tesztek
Devops meetup - Automatizált tesztek
Zsolt Takács
 
A ClusterGrid rendszer - avagy hogyan üzemeltessünk, több mint 1000 csomópont...
A ClusterGrid rendszer - avagy hogyan üzemeltessünk, több mint 1000 csomópont...A ClusterGrid rendszer - avagy hogyan üzemeltessünk, több mint 1000 csomópont...
A ClusterGrid rendszer - avagy hogyan üzemeltessünk, több mint 1000 csomópont...
Ferenc Szalai
 
Nagyszabású virtuális gyógyszerkísérletek az új generációs web szolgáltatás a...
Nagyszabású virtuális gyógyszerkísérletek az új generációs web szolgáltatás a...Nagyszabású virtuális gyógyszerkísérletek az új generációs web szolgáltatás a...
Nagyszabású virtuális gyógyszerkísérletek az új generációs web szolgáltatás a...
Ferenc Szalai
 
SUSE Linux Enterprise 11 admin 2
SUSE Linux Enterprise 11 admin 2SUSE Linux Enterprise 11 admin 2
SUSE Linux Enterprise 11 admin 2
Kálmán Kéménczy
 

Similar a Hogyan optimalizáljunk C/C++ kódokat! (20)

Objektum-orinetált mérések a gyakorlatban
Objektum-orinetált mérések a gyakorlatbanObjektum-orinetált mérések a gyakorlatban
Objektum-orinetált mérések a gyakorlatban
 
Budapest.rb 201010
Budapest.rb 201010Budapest.rb 201010
Budapest.rb 201010
 
A Redis lehetőségei
A Redis lehetőségeiA Redis lehetőségei
A Redis lehetőségei
 
Forráskódtárak gráfalapú statikus analízise
Forráskódtárak gráfalapú statikus analíziseForráskódtárak gráfalapú statikus analízise
Forráskódtárak gráfalapú statikus analízise
 
Syslog-NG (nem csak) fejlesztőknek
Syslog-NG (nem csak) fejlesztőknekSyslog-NG (nem csak) fejlesztőknek
Syslog-NG (nem csak) fejlesztőknek
 
Webalkalmazások teljesítményoptimalizálása
Webalkalmazások teljesítményoptimalizálásaWebalkalmazások teljesítményoptimalizálása
Webalkalmazások teljesítményoptimalizálása
 
Ci
CiCi
Ci
 
Deep reinforcement learning with DonkeyCar
Deep reinforcement learning with DonkeyCarDeep reinforcement learning with DonkeyCar
Deep reinforcement learning with DonkeyCar
 
PHP alkalmazások minőségbiztosítása
PHP alkalmazások minőségbiztosításaPHP alkalmazások minőségbiztosítása
PHP alkalmazások minőségbiztosítása
 
Webműves Kelemen tanácsai, avagy mi kell a PHP falába?
Webműves Kelemen tanácsai, avagy mi kell a PHP falába?Webműves Kelemen tanácsai, avagy mi kell a PHP falába?
Webműves Kelemen tanácsai, avagy mi kell a PHP falába?
 
Mohácsi László: Gazdasági számítások párhuzamos számítógépeken
Mohácsi László: Gazdasági számítások párhuzamos számítógépekenMohácsi László: Gazdasági számítások párhuzamos számítógépeken
Mohácsi László: Gazdasági számítások párhuzamos számítógépeken
 
Devops meetup - Automatizált tesztek
Devops meetup - Automatizált tesztekDevops meetup - Automatizált tesztek
Devops meetup - Automatizált tesztek
 
Információbiztonság: Napló
Információbiztonság: NaplóInformációbiztonság: Napló
Információbiztonság: Napló
 
A ClusterGrid rendszer - avagy hogyan üzemeltessünk, több mint 1000 csomópont...
A ClusterGrid rendszer - avagy hogyan üzemeltessünk, több mint 1000 csomópont...A ClusterGrid rendszer - avagy hogyan üzemeltessünk, több mint 1000 csomópont...
A ClusterGrid rendszer - avagy hogyan üzemeltessünk, több mint 1000 csomópont...
 
Szoftver tesztelés
Szoftver tesztelésSzoftver tesztelés
Szoftver tesztelés
 
Süllyedünk! Ütközés a tesztelési jégheggyel (Teszt & Tea Meeup Budapest, 2018...
Süllyedünk! Ütközés a tesztelési jégheggyel (Teszt & Tea Meeup Budapest, 2018...Süllyedünk! Ütközés a tesztelési jégheggyel (Teszt & Tea Meeup Budapest, 2018...
Süllyedünk! Ütközés a tesztelési jégheggyel (Teszt & Tea Meeup Budapest, 2018...
 
Balogh gyorgy modern_big_data_megoldasok_sec_world_2014
Balogh gyorgy modern_big_data_megoldasok_sec_world_2014Balogh gyorgy modern_big_data_megoldasok_sec_world_2014
Balogh gyorgy modern_big_data_megoldasok_sec_world_2014
 
Túlélés a Három Betűs Rövidítések világában
Túlélés a Három Betűs Rövidítések világábanTúlélés a Három Betűs Rövidítések világában
Túlélés a Három Betűs Rövidítések világában
 
Nagyszabású virtuális gyógyszerkísérletek az új generációs web szolgáltatás a...
Nagyszabású virtuális gyógyszerkísérletek az új generációs web szolgáltatás a...Nagyszabású virtuális gyógyszerkísérletek az új generációs web szolgáltatás a...
Nagyszabású virtuális gyógyszerkísérletek az új generációs web szolgáltatás a...
 
SUSE Linux Enterprise 11 admin 2
SUSE Linux Enterprise 11 admin 2SUSE Linux Enterprise 11 admin 2
SUSE Linux Enterprise 11 admin 2
 

Más de Open Academy

What SQL should actually be...
What SQL should actually be...What SQL should actually be...
What SQL should actually be...
Open Academy
 
Dev tools rendering & memory profiling
Dev tools rendering & memory profilingDev tools rendering & memory profiling
Dev tools rendering & memory profiling
Open Academy
 
BlackBerry10 alapú natív alkalmazásfejlesztés
BlackBerry10 alapú natív alkalmazásfejlesztésBlackBerry10 alapú natív alkalmazásfejlesztés
BlackBerry10 alapú natív alkalmazásfejlesztés
Open Academy
 
Okostelefonok és táblagépek menedzsmentje
Okostelefonok és táblagépek menedzsmentjeOkostelefonok és táblagépek menedzsmentje
Okostelefonok és táblagépek menedzsmentje
Open Academy
 

Más de Open Academy (17)

BDD demisztifikálva
BDD demisztifikálvaBDD demisztifikálva
BDD demisztifikálva
 
What SQL should actually be...
What SQL should actually be...What SQL should actually be...
What SQL should actually be...
 
Dev tools rendering & memory profiling
Dev tools rendering & memory profilingDev tools rendering & memory profiling
Dev tools rendering & memory profiling
 
Firefox OS: hackelni könnyű
Firefox OS:  hackelni könnyűFirefox OS:  hackelni könnyű
Firefox OS: hackelni könnyű
 
Coding dojo
Coding dojoCoding dojo
Coding dojo
 
BlackBerry10 alapú natív alkalmazásfejlesztés
BlackBerry10 alapú natív alkalmazásfejlesztésBlackBerry10 alapú natív alkalmazásfejlesztés
BlackBerry10 alapú natív alkalmazásfejlesztés
 
Android fejlesztés
Android fejlesztésAndroid fejlesztés
Android fejlesztés
 
A Windows Phone világa
A Windows Phone világaA Windows Phone világa
A Windows Phone világa
 
Okostelefonok és táblagépek menedzsmentje
Okostelefonok és táblagépek menedzsmentjeOkostelefonok és táblagépek menedzsmentje
Okostelefonok és táblagépek menedzsmentje
 
Windows 8
Windows 8Windows 8
Windows 8
 
Ipari felhő infrastruktúrák a gyakorlatban
Ipari felhő infrastruktúrák a gyakorlatbanIpari felhő infrastruktúrák a gyakorlatban
Ipari felhő infrastruktúrák a gyakorlatban
 
Adminisztratív protokollok ellenőrzési lehetőségei
Adminisztratív protokollok ellenőrzési lehetőségeiAdminisztratív protokollok ellenőrzési lehetőségei
Adminisztratív protokollok ellenőrzési lehetőségei
 
Naplózás a gyakorlatban
Naplózás a gyakorlatbanNaplózás a gyakorlatban
Naplózás a gyakorlatban
 
Hogy kerül a csizma az asztalra?
Hogy kerül a csizma az asztalra?Hogy kerül a csizma az asztalra?
Hogy kerül a csizma az asztalra?
 
AGILIS / SCRUM fejlesztés
AGILIS / SCRUM fejlesztésAGILIS / SCRUM fejlesztés
AGILIS / SCRUM fejlesztés
 
Multiplatform mobil fejlesztések
Multiplatform mobil fejlesztésekMultiplatform mobil fejlesztések
Multiplatform mobil fejlesztések
 
Verziókövető rendszerek alkalmazása fejlesztési projektekben
Verziókövető rendszerek alkalmazása fejlesztési projektekbenVerziókövető rendszerek alkalmazása fejlesztési projektekben
Verziókövető rendszerek alkalmazása fejlesztési projektekben
 

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

  • 1. Optimalizáljunk C/C++ kódokat! Illés Márton, BalaBit
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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álata Accepted publickey for @STRING:username@ from @IPv4:source@ port @NUMBER:port@ ssh2
  • 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. 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. Kérdések? Köszönöm a figyelmet! Illés Márton illes.marton@balabit.hu http://marci.blogs.balabit.com/