SlideShare a Scribd company logo
Scheidler Balázs

    “Magvas gondolatok”
Tartalom

•Párhuzamos programozás & SMP
•Memória & Cache
•Valós tapasztalatok
•Tipikus problém & trade-off
•Konkrét adatszerkezet gyorsítása
Párhuzamos programozás
•Több szálú futás
•Közös memória
•Közös állapottér
  (nyitott fájlok, hálózati
  kapcsolatok, stb)

•Szálak közötti ütemezés az
  OS feladata

•Több CPU/core transzparens
  használata
SMP

•SMP = Symmetric Multiprocessing
•Több CPU, közös memória, I/O tér
•Minden CPU/core azonos típusú, órajelűű
•Desktop gépekben, szervereken tipikus
•Lehetnek specializált CPU-k, más
  rendszert futtatva
Memória

•Jelenlegi CPU-k órajele a GHz tartományban
•Egy utasítás végrehajtásához szükséges időő
  nanoszekundum nagyságrend

•DRAM memória hozzáféréshez szükséges időő
  mikroszekundum nagyságrend (1:1000)

•Ez megegyezik a memória/vinyó közti aránnyal!
Cache

DRAM lassú, az SRAM drága

Megoldás:

 •    kisebb, gyors cache memória

 •    nagy, lassú központi memória

 •    1:1000 arány (méret és sebesség)

 •    L1, L2, L3 szintek
Cache II.


•A cache a CPU és a memória közti gyorsítótár
•CPU által automatikusan menedzselt, program
  számára transzparens

•Asszociatív tárolás, 32 byte-os egységekben
  („cacheline”)
Cache Hatásai


Egy algoritmus lehet utasítás számban minimális

  
 
 
 
 
 
 
 
 
 ÉS


Lassabb, mint a több utasításból álló, de a cache-t
  hatékonyabban kihasználó változat.
Cache & SMP

•Egy SMP rendszerben minden CPU/core
  külön cache-sel rendelkezik

•Memória mindegyik CPU/core számára
  közös

•Ugyanazon memória cím eléréséhez a
  CPU-k között kommunikációra van
  szükség
CPU-k közti szinkronizáció

MESI protokoll         M             E
 •    Modified

 •    Exclusive

 •    Shared           S             I
 •    Invalid


                    local read local write
                  remote read remote write
Kommunikáció Hatásai

Egy látszólag egyszerűű műűvelethez
  mögött komplex lépések történnek

A komplexitás időőbe kerül

Egy memória műűvelet:

 •     lehet 3 nagyságrenddel lassabb

 •     függhet a CPU-k számától!
Tipikus cache probléma
•2 processzor végez ugyanazon a
  cacheline-on felváltva atomikus write
  műűveletet (pl. egy lock)
                                          sch




•A write műűvelet miatt mindkét CPU
  memóriából húzza be a cacheline-t,
  miközben a másik cache tartalmat
  invalidálja.

•Aka. cache ping-pong
Valós tapasztalatok: syslog-ng
syslog-ng

•Naplózó szerver, üzeneteket
  fogad TCP és UDP
  csatornákon

•Egy üzenet egy sor
•Minden sor kb 3-500 byte
•~ ezer kapcsolat,
•~ néhány száz ezer msg/sec
Mérés, reprodukció

„Premature optimization is the root of
   all evil.” - Donald Knuth

Mérés és a reprodukálható testcase
  fontos!

 •     ne kezdjünk bele nélküle

 •     ismerjük meg az eszközeinket

 •     perf, cachegrind, gprof
syslog-ng műűködése

Bejövőő üzenetek feldolgozása:

      •     beolvasás, parse-olás, szűűrés/módosítás,
            kiküldés egy outputra

Kimenőő üzenetek feldolgozása:

      •     üzenet megformázása, kiírás egy fájlba/
            hálózati kapcsolatra
syslog-ng korábban


   •   1 szál, poll() ciklus

   •   minden esemény kezelése aszinkron
       callbackekkel

   •   kb 100k msg/sec
syslog-ng ma

•főő szál + worker threadek            •Nonblocking I/O
•a főő szál figyeli az összes nyitott   •Worker threadek száma
 kapcsolatot (epoll), I/O esemény       megegyezik a CPU-k
 esetén annak teljes feldolgozását      számával
 átadja a worker threadnek
                                       •Egy taszk 1-4 msec időő
•I/O események:                         alatt végez (1-4000
                                        üzenet feldolgozása)
 •input adat érkezett (fetch,
   process, enqueue loop)

 •output írhatóvá vált (dequeue,
   format, write loop)
Szűűk keresztmetszetek, problémák
Thread váltás
Drága, mert:

 •    kihűűl a cache,

 •    scheduler,

 •    context switch: regiszterek, TLB

Elkerülés módja:

 •    kevés thread (=CPU-k száma),
      nonblocking I/O

 •    egy feladat kb. egy időőszeletig
      fut, se hosszabban, se
      rövidebben
Késleltetés
A latency önmagában nem okoz CPU használatot, de

 •    egy feldolgozásba beépülve okozhatja annak
      jelentőős lassulását

 •    1 msec késleltetés önmagában nem sok, de 1000
      tranzakció esetén már 1 mp-cel nyújtja az időőt!

Latency források:

 •    lockok és szinkronizációs primitívek

 •    OS események (epoll)
Dinamikus memória
malloc/free jelentős időrablás 500k/sec tranzakciónál
 • threadek közti szinkronizáció
 • láncolt listák
 • tipikus: egyik szál lefoglal, másik felszabadít
Elkerülés módja:
 • alloca() ill. fixen méretezett változók
 • per-thread allokációk, hosszú távon megőőrizve, igény
    esetén növelve
 • LogMessage adatszerkezet „tömörítése”, ideális esetben
    1 malloc/msg
Lock contention
Tipikus cache ping-pong:
 • N szál ugyanazt a mutexet lockolja, egymást váltva
 • a reader-writer locknál és az atomikus referencia számlálónál is
       előőfordul!
Cél:
 • egy egység hasznos munkára esőő szinkronizációs időő csökkentése
Elkerülés módja:
 • per-thread változók
 • adatszerkezet módosítása, nagyobb felbontású mutexek használata
 • több munkát végzünk egy lock védelme alatt,
       ld. skálázható queue-k
A nem triviális költségek miatt egy szekvenciális
program párhuzamos változata gyakran lassabb
              lesz elsőő alkalommal.
Tipikus trade-off-ok

Konzisztencia, sorrendiség vs. sebesség

 • az abszolút sorrend sok szinkronizációt követel meg,
    ezek közül nem mind fontos

Használt memória mennyiség vs. sebesség

 • pl. per-thread változók, párhuzamos objektum
    példányok
Skálázható queue


Az input és az output közti összekötést biztosítja:

 • input taszkok (N): beteszik az eseményeket
 • output taszk (1): kiveszi az eseményeket,
    majd kiküldi
Triviális megoldás
Mutex

           ...




Üzenetenként 4 szinkronizációt igénylőő
 műűvelet (input/output x lock-unlock)
Hogyan lehetne javítani?
per-thread
 input queue
   ...
                               Mutex
   ...
                             ...
   ...

   ...

Konzisztencia/memória vs. performance
Atomikus műűveletek száma kb felezőődik.
per-thread
input queue
  .                                 Lockolatlan
  .
  .                 Mutex          output queue
  .
  .                ...
  .
  .
  .
  .
  .
  .
  .
       Atomikus műűveletek másik fele is
         nagyságrendekkel csökken.
Lockless?
Lockless veszélyek
Compiler reordering
CPU reordering (cache és memória miatt)
Stale adatok jelenléte miatt:
 • nehezen debuggolható, ritkán előőforduló hibák
Mielőtt ilyenbe kezdesz:
 • memory ordering
 • memory barriers
 • compiler reordering barriers
Összefoglalás

       •Párhuzamos programozás okozhat



Ʃ
         meglepetéseket

       •Egy algoritmus párhuzamosítása
         gyakran lassulást eredményez elsőőre!

       •Mérés & megértés
VÉGE

                 lwn.net/Articles/250967/
rdrop.com/users/paulmck/perfbook/perfbook.2011.08.28a.pdf

More Related Content

Viewers also liked

Ensuring Integrity for Medical Tissues and Devices
Ensuring Integrity for Medical Tissues and DevicesEnsuring Integrity for Medical Tissues and Devices
Ensuring Integrity for Medical Tissues and Devices
Terso Solutions
 
Tengo ganas det i
Tengo ganas det iTengo ganas det i
Tengo ganas det imiriam_98
 
8 core beliefs of extraordinary bosses
8 core beliefs of extraordinary bosses8 core beliefs of extraordinary bosses
8 core beliefs of extraordinary bosses
Marcelo Marinangeli
 
Festival ifi kids ru
Festival ifi kids ruFestival ifi kids ru
Festival ifi kids ruZauralochka
 
Australia
AustraliaAustralia
Australiay3ehps
 
Kailyn at recess book
Kailyn at recess bookKailyn at recess book
Kailyn at recess bookbowenslide
 
SugarCon 2012 Wrap Up
SugarCon 2012 Wrap UpSugarCon 2012 Wrap Up
SugarCon 2012 Wrap Up
BrainSell Technologies
 
Emigrare972003
Emigrare972003Emigrare972003
Taco flash Profile
Taco flash ProfileTaco flash Profile
Taco flash ProfileErdian Tomy
 
презентация1
презентация1презентация1
презентация1Slava Bogdan
 
Wittewoningmakelaars
WittewoningmakelaarsWittewoningmakelaars
Wittewoningmakelaars
WitteWoningMakelaars
 
Netooo
NetoooNetooo
Netoooamil10
 
Transgenic fish for rapid monitoring of estrogenic endocrine disruptors
Transgenic fish for rapid monitoring of estrogenic endocrine disruptorsTransgenic fish for rapid monitoring of estrogenic endocrine disruptors
Transgenic fish for rapid monitoring of estrogenic endocrine disruptors
lawrenceliuxiao
 

Viewers also liked (20)

Ensuring Integrity for Medical Tissues and Devices
Ensuring Integrity for Medical Tissues and DevicesEnsuring Integrity for Medical Tissues and Devices
Ensuring Integrity for Medical Tissues and Devices
 
Writing a Review
Writing a ReviewWriting a Review
Writing a Review
 
Tomasz miotk
Tomasz miotkTomasz miotk
Tomasz miotk
 
Study2
Study2Study2
Study2
 
лаб1
лаб1лаб1
лаб1
 
Tengo ganas det i
Tengo ganas det iTengo ganas det i
Tengo ganas det i
 
8 core beliefs of extraordinary bosses
8 core beliefs of extraordinary bosses8 core beliefs of extraordinary bosses
8 core beliefs of extraordinary bosses
 
Festival ifi kids ru
Festival ifi kids ruFestival ifi kids ru
Festival ifi kids ru
 
Australia
AustraliaAustralia
Australia
 
Kailyn at recess book
Kailyn at recess bookKailyn at recess book
Kailyn at recess book
 
SugarCon 2012 Wrap Up
SugarCon 2012 Wrap UpSugarCon 2012 Wrap Up
SugarCon 2012 Wrap Up
 
Emigrare972003
Emigrare972003Emigrare972003
Emigrare972003
 
Taco flash Profile
Taco flash ProfileTaco flash Profile
Taco flash Profile
 
Pildimang
PildimangPildimang
Pildimang
 
презентация1
презентация1презентация1
презентация1
 
Names of alah
Names of alahNames of alah
Names of alah
 
Wittewoningmakelaars
WittewoningmakelaarsWittewoningmakelaars
Wittewoningmakelaars
 
Netooo
NetoooNetooo
Netooo
 
Transgenic fish for rapid monitoring of estrogenic endocrine disruptors
Transgenic fish for rapid monitoring of estrogenic endocrine disruptorsTransgenic fish for rapid monitoring of estrogenic endocrine disruptors
Transgenic fish for rapid monitoring of estrogenic endocrine disruptors
 
La naturaleza
La naturalezaLa naturaleza
La naturaleza
 

Similar to Magvas gondolatok

Szerver oldali fejlesztés korszerű módszerekkel C# nyelven
Szerver oldali fejlesztés korszerű módszerekkel C# nyelvenSzerver oldali fejlesztés korszerű módszerekkel C# nyelven
Szerver oldali fejlesztés korszerű módszerekkel C# nyelven
Krisztián Gyula Tóth
 
Syslog-NG (nem csak) fejlesztőknek
Syslog-NG (nem csak) fejlesztőknekSyslog-NG (nem csak) fejlesztőknek
Syslog-NG (nem csak) fejlesztőknekJános Pásztor
 
A Redis lehetőségei
A Redis lehetőségeiA Redis lehetőségei
A Redis lehetőségeivvinston
 
Valos ideju megoldasok realtime ods és database in memory tapasztalatok
Valos ideju megoldasok realtime ods és database in memory tapasztalatokValos ideju megoldasok realtime ods és database in memory tapasztalatok
Valos ideju megoldasok realtime ods és database in memory tapasztalatok
Daniel Sef
 
Netfilter elméleti alapok
Netfilter elméleti alapokNetfilter elméleti alapok
Netfilter elméleti alapok
Benedek Rakovics
 
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épekenInformatikai Intézet
 
Deep reinforcement learning with DonkeyCar
Deep reinforcement learning with DonkeyCarDeep reinforcement learning with DonkeyCar
Deep reinforcement learning with DonkeyCar
LeventeDmsa1
 
Advanced PL/SQL (HUN)
Advanced PL/SQL (HUN)Advanced PL/SQL (HUN)
Advanced PL/SQL (HUN)
Attila Budacsik
 
Programozás és Digitális Tecnikák I. - Timotei István Erdei & Zsolt Molnár
Programozás és Digitális Tecnikák I. - Timotei István Erdei & Zsolt MolnárProgramozás és Digitális Tecnikák I. - Timotei István Erdei & Zsolt Molnár
Programozás és Digitális Tecnikák I. - Timotei István Erdei & Zsolt Molnár
unidebvmt
 
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?
Open Academy
 
ISO-OSI modell_kapus_csaba_IRG11e
ISO-OSI modell_kapus_csaba_IRG11eISO-OSI modell_kapus_csaba_IRG11e
ISO-OSI modell_kapus_csaba_IRG11eCsaba Kapus
 
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
 
Grid és adattárolás
Grid és adattárolásGrid és adattárolás
Grid és adattárolás
Ferenc Szalai
 
Nyílt forráskód a Fővárosi Bíróságon
Nyílt forráskód a Fővárosi BíróságonNyílt forráskód a Fővárosi Bíróságon
Nyílt forráskód a Fővárosi BíróságonNorbert Laky
 
Grid és adattárolás
Grid és adattárolásGrid és adattárolás
Grid és adattárolás
Ferenc Szalai
 
Continous Integration and Deployment
Continous Integration and DeploymentContinous Integration and Deployment
Continous Integration and DeploymentKároly Nagy
 
Drupal gyorstárazási stratégiák
Drupal gyorstárazási stratégiákDrupal gyorstárazási stratégiák
Drupal gyorstárazási stratégiákJános Fehér
 
Operációs rendszerek belső architektúrája
Operációs rendszerek belső architektúrájaOperációs rendszerek belső architektúrája
Operációs rendszerek belső architektúrájarma96
 

Similar to Magvas gondolatok (20)

Szerver oldali fejlesztés korszerű módszerekkel C# nyelven
Szerver oldali fejlesztés korszerű módszerekkel C# nyelvenSzerver oldali fejlesztés korszerű módszerekkel C# nyelven
Szerver oldali fejlesztés korszerű módszerekkel C# nyelven
 
Syslog-NG (nem csak) fejlesztőknek
Syslog-NG (nem csak) fejlesztőknekSyslog-NG (nem csak) fejlesztőknek
Syslog-NG (nem csak) fejlesztőknek
 
A Redis lehetőségei
A Redis lehetőségeiA Redis lehetőségei
A Redis lehetőségei
 
Valos ideju megoldasok realtime ods és database in memory tapasztalatok
Valos ideju megoldasok realtime ods és database in memory tapasztalatokValos ideju megoldasok realtime ods és database in memory tapasztalatok
Valos ideju megoldasok realtime ods és database in memory tapasztalatok
 
Netfilter elméleti alapok
Netfilter elméleti alapokNetfilter elméleti alapok
Netfilter elméleti alapok
 
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
 
Linux alapok
Linux alapokLinux alapok
Linux alapok
 
Deep reinforcement learning with DonkeyCar
Deep reinforcement learning with DonkeyCarDeep reinforcement learning with DonkeyCar
Deep reinforcement learning with DonkeyCar
 
Advanced PL/SQL (HUN)
Advanced PL/SQL (HUN)Advanced PL/SQL (HUN)
Advanced PL/SQL (HUN)
 
Programozás és Digitális Tecnikák I. - Timotei István Erdei & Zsolt Molnár
Programozás és Digitális Tecnikák I. - Timotei István Erdei & Zsolt MolnárProgramozás és Digitális Tecnikák I. - Timotei István Erdei & Zsolt Molnár
Programozás és Digitális Tecnikák I. - Timotei István Erdei & Zsolt Molnár
 
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?
 
ISO-OSI modell_kapus_csaba_IRG11e
ISO-OSI modell_kapus_csaba_IRG11eISO-OSI modell_kapus_csaba_IRG11e
ISO-OSI modell_kapus_csaba_IRG11e
 
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...
 
Grid és adattárolás
Grid és adattárolásGrid és adattárolás
Grid és adattárolás
 
Nyílt forráskód a Fővárosi Bíróságon
Nyílt forráskód a Fővárosi BíróságonNyílt forráskód a Fővárosi Bíróságon
Nyílt forráskód a Fővárosi Bíróságon
 
Grid és adattárolás
Grid és adattárolásGrid és adattárolás
Grid és adattárolás
 
Continous Integration and Deployment
Continous Integration and DeploymentContinous Integration and Deployment
Continous Integration and Deployment
 
Computer Networks
Computer NetworksComputer Networks
Computer Networks
 
Drupal gyorstárazási stratégiák
Drupal gyorstárazási stratégiákDrupal gyorstárazási stratégiák
Drupal gyorstárazási stratégiák
 
Operációs rendszerek belső architektúrája
Operációs rendszerek belső architektúrájaOperációs rendszerek belső architektúrája
Operációs rendszerek belső architektúrája
 

More from Open Academy

BDD demisztifikálva
BDD demisztifikálvaBDD demisztifikálva
BDD demisztifikálva
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 profilingOpen Academy
 
Firefox OS: hackelni könnyű
Firefox OS:  hackelni könnyűFirefox OS:  hackelni könnyű
Firefox OS: hackelni könnyű
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ésOpen Academy
 
Android fejlesztés
Android fejlesztésAndroid fejlesztés
Android fejlesztés
Open Academy
 
A Windows Phone világa
A Windows Phone világaA Windows Phone világa
A Windows Phone világa
Open Academy
 
Okostelefonok és táblagépek menedzsmentje
Okostelefonok és táblagépek menedzsmentjeOkostelefonok és táblagépek menedzsmentje
Okostelefonok és táblagépek menedzsmentjeOpen Academy
 
Windows 8
Windows 8Windows 8
Windows 8
Open Academy
 
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
Open Academy
 
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
Open Academy
 
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
Open Academy
 
Naplózás a gyakorlatban
Naplózás a gyakorlatbanNaplózás a gyakorlatban
Naplózás a gyakorlatban
Open Academy
 
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?
Open Academy
 
AGILIS / SCRUM fejlesztés
AGILIS / SCRUM fejlesztésAGILIS / SCRUM fejlesztés
AGILIS / SCRUM fejlesztés
Open Academy
 
Multiplatform mobil fejlesztések
Multiplatform mobil fejlesztésekMultiplatform mobil fejlesztések
Multiplatform mobil fejlesztések
Open Academy
 
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
Open Academy
 

More from Open Academy (18)

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
 
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
 
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
 

Magvas gondolatok

  • 1. Scheidler Balázs “Magvas gondolatok”
  • 2. Tartalom •Párhuzamos programozás & SMP •Memória & Cache •Valós tapasztalatok •Tipikus problém & trade-off •Konkrét adatszerkezet gyorsítása
  • 3. Párhuzamos programozás •Több szálú futás •Közös memória •Közös állapottér (nyitott fájlok, hálózati kapcsolatok, stb) •Szálak közötti ütemezés az OS feladata •Több CPU/core transzparens használata
  • 4. SMP •SMP = Symmetric Multiprocessing •Több CPU, közös memória, I/O tér •Minden CPU/core azonos típusú, órajelűű •Desktop gépekben, szervereken tipikus •Lehetnek specializált CPU-k, más rendszert futtatva
  • 5. Memória •Jelenlegi CPU-k órajele a GHz tartományban •Egy utasítás végrehajtásához szükséges időő nanoszekundum nagyságrend •DRAM memória hozzáféréshez szükséges időő mikroszekundum nagyságrend (1:1000) •Ez megegyezik a memória/vinyó közti aránnyal!
  • 6. Cache DRAM lassú, az SRAM drága Megoldás: • kisebb, gyors cache memória • nagy, lassú központi memória • 1:1000 arány (méret és sebesség) • L1, L2, L3 szintek
  • 7. Cache II. •A cache a CPU és a memória közti gyorsítótár •CPU által automatikusan menedzselt, program számára transzparens •Asszociatív tárolás, 32 byte-os egységekben („cacheline”)
  • 8. Cache Hatásai Egy algoritmus lehet utasítás számban minimális ÉS Lassabb, mint a több utasításból álló, de a cache-t hatékonyabban kihasználó változat.
  • 9. Cache & SMP •Egy SMP rendszerben minden CPU/core külön cache-sel rendelkezik •Memória mindegyik CPU/core számára közös •Ugyanazon memória cím eléréséhez a CPU-k között kommunikációra van szükség
  • 10. CPU-k közti szinkronizáció MESI protokoll M E • Modified • Exclusive • Shared S I • Invalid local read local write remote read remote write
  • 11. Kommunikáció Hatásai Egy látszólag egyszerűű műűvelethez mögött komplex lépések történnek A komplexitás időőbe kerül Egy memória műűvelet: • lehet 3 nagyságrenddel lassabb • függhet a CPU-k számától!
  • 12. Tipikus cache probléma •2 processzor végez ugyanazon a cacheline-on felváltva atomikus write műűveletet (pl. egy lock) sch •A write műűvelet miatt mindkét CPU memóriából húzza be a cacheline-t, miközben a másik cache tartalmat invalidálja. •Aka. cache ping-pong
  • 14. syslog-ng •Naplózó szerver, üzeneteket fogad TCP és UDP csatornákon •Egy üzenet egy sor •Minden sor kb 3-500 byte •~ ezer kapcsolat, •~ néhány száz ezer msg/sec
  • 15. Mérés, reprodukció „Premature optimization is the root of all evil.” - Donald Knuth Mérés és a reprodukálható testcase fontos! • ne kezdjünk bele nélküle • ismerjük meg az eszközeinket • perf, cachegrind, gprof
  • 16. syslog-ng műűködése Bejövőő üzenetek feldolgozása: • beolvasás, parse-olás, szűűrés/módosítás, kiküldés egy outputra Kimenőő üzenetek feldolgozása: • üzenet megformázása, kiírás egy fájlba/ hálózati kapcsolatra
  • 17. syslog-ng korábban • 1 szál, poll() ciklus • minden esemény kezelése aszinkron callbackekkel • kb 100k msg/sec
  • 18. syslog-ng ma •főő szál + worker threadek •Nonblocking I/O •a főő szál figyeli az összes nyitott •Worker threadek száma kapcsolatot (epoll), I/O esemény megegyezik a CPU-k esetén annak teljes feldolgozását számával átadja a worker threadnek •Egy taszk 1-4 msec időő •I/O események: alatt végez (1-4000 üzenet feldolgozása) •input adat érkezett (fetch, process, enqueue loop) •output írhatóvá vált (dequeue, format, write loop)
  • 20. Thread váltás Drága, mert: • kihűűl a cache, • scheduler, • context switch: regiszterek, TLB Elkerülés módja: • kevés thread (=CPU-k száma), nonblocking I/O • egy feladat kb. egy időőszeletig fut, se hosszabban, se rövidebben
  • 21. Késleltetés A latency önmagában nem okoz CPU használatot, de • egy feldolgozásba beépülve okozhatja annak jelentőős lassulását • 1 msec késleltetés önmagában nem sok, de 1000 tranzakció esetén már 1 mp-cel nyújtja az időőt! Latency források: • lockok és szinkronizációs primitívek • OS események (epoll)
  • 22. Dinamikus memória malloc/free jelentős időrablás 500k/sec tranzakciónál • threadek közti szinkronizáció • láncolt listák • tipikus: egyik szál lefoglal, másik felszabadít Elkerülés módja: • alloca() ill. fixen méretezett változók • per-thread allokációk, hosszú távon megőőrizve, igény esetén növelve • LogMessage adatszerkezet „tömörítése”, ideális esetben 1 malloc/msg
  • 23. Lock contention Tipikus cache ping-pong: • N szál ugyanazt a mutexet lockolja, egymást váltva • a reader-writer locknál és az atomikus referencia számlálónál is előőfordul! Cél: • egy egység hasznos munkára esőő szinkronizációs időő csökkentése Elkerülés módja: • per-thread változók • adatszerkezet módosítása, nagyobb felbontású mutexek használata • több munkát végzünk egy lock védelme alatt, ld. skálázható queue-k
  • 24. A nem triviális költségek miatt egy szekvenciális program párhuzamos változata gyakran lassabb lesz elsőő alkalommal.
  • 25. Tipikus trade-off-ok Konzisztencia, sorrendiség vs. sebesség • az abszolút sorrend sok szinkronizációt követel meg, ezek közül nem mind fontos Használt memória mennyiség vs. sebesség • pl. per-thread változók, párhuzamos objektum példányok
  • 26. Skálázható queue Az input és az output közti összekötést biztosítja: • input taszkok (N): beteszik az eseményeket • output taszk (1): kiveszi az eseményeket, majd kiküldi
  • 28. Mutex ... Üzenetenként 4 szinkronizációt igénylőő műűvelet (input/output x lock-unlock)
  • 30. per-thread input queue ... Mutex ... ... ... ... Konzisztencia/memória vs. performance Atomikus műűveletek száma kb felezőődik.
  • 31. per-thread input queue . Lockolatlan . . Mutex output queue . . ... . . . . . . . Atomikus műűveletek másik fele is nagyságrendekkel csökken.
  • 33. Lockless veszélyek Compiler reordering CPU reordering (cache és memória miatt) Stale adatok jelenléte miatt: • nehezen debuggolható, ritkán előőforduló hibák Mielőtt ilyenbe kezdesz: • memory ordering • memory barriers • compiler reordering barriers
  • 34. Összefoglalás •Párhuzamos programozás okozhat Ʃ meglepetéseket •Egy algoritmus párhuzamosítása gyakran lassulást eredményez elsőőre! •Mérés & megértés
  • 35. VÉGE lwn.net/Articles/250967/ rdrop.com/users/paulmck/perfbook/perfbook.2011.08.28a.pdf