Upload
open-academy
View
410
Download
0
Embed Size (px)
DESCRIPTION
Mire használjuk a magokat, ha már úgy is vannak? A több szálú adatfeldolgozás architekturális problémái.
Citation preview
ldquoMagvas gondolatokrdquoScheidler Balaacutezs
Tartalom
bullPaacuterhuzamos programozaacutes amp SMP
bullMemoacuteria amp Cache
bullValoacutes tapasztalatok
bullTipikus probleacutem amp trade-off
bullKonkreacutet adatszerkezet gyorsiacutetaacutesa
Paacuterhuzamos programozaacutesbullToumlbb szaacuteluacute futaacutes
bullKoumlzoumls memoacuteria
bullKoumlzoumls aacutellapotteacuter (nyitott faacutejlok haacuteloacutezati kapcsolatok stb)
bullSzaacutelak koumlzoumltti uumltemezeacutes az OS feladata
bullToumlbb CPUcore transzparens hasznaacutelata
SMP
bullSMP = Symmetric Multiprocessing
bullToumlbb CPU koumlzoumls memoacuteria IO teacuter
bullMinden CPUcore azonos tiacutepusuacute oacuterajelűű
bullDesktop geacutepekben szervereken tipikus
bullLehetnek specializaacutelt CPU-k maacutes rendszert futtatva
Memoacuteria
bullJelenlegi CPU-k oacuterajele a GHz tartomaacutenyban
bullEgy utasiacutetaacutes veacutegrehajtaacutesaacutehoz szuumlkseacuteges időő nanoszekundum nagysaacutegrend
bullDRAM memoacuteria hozzaacutefeacutereacuteshez szuumlkseacuteges időő mikroszekundum nagysaacutegrend (11000)
bullEz megegyezik a memoacuteriavinyoacute koumlzti araacutennyal
Cache
DRAM lassuacute az SRAM draacutega
Megoldaacutes
bull kisebb gyors cache memoacuteria
bull nagy lassuacute koumlzponti memoacuteria
bull 11000 araacuteny (meacuteret eacutes sebesseacuteg)
bull L1 L2 L3 szintek
Cache II
bullA cache a CPU eacutes a memoacuteria koumlzti gyorsiacutetoacutetaacuter
bullCPU aacuteltal automatikusan menedzselt program szaacutemaacutera transzparens
bullAsszociatiacutev taacuterolaacutes 32 byte-os egyseacutegekben (bdquocachelinerdquo)
Cache Hataacutesai
Egy algoritmus lehet utasiacutetaacutes szaacutemban minimaacutelis
13 13 13 13 13 13 13 13 13 EacuteS
Lassabb mint a toumlbb utasiacutetaacutesboacutel aacutelloacute de a cache-t hateacutekonyabban kihasznaacuteloacute vaacuteltozat
Cache amp SMP
bullEgy SMP rendszerben minden CPUcore kuumlloumln cache-sel rendelkezik
bullMemoacuteria mindegyik CPUcore szaacutemaacutera koumlzoumls
bullUgyanazon memoacuteria ciacutem eleacutereacuteseacutehez a CPU-k koumlzoumltt kommunikaacutecioacutera van szuumlkseacuteg
CPU-k koumlzti szinkronizaacutecioacute
MESI protokoll
bull Modified
bull Exclusive
bull Shared
bull Invalid
M E
S I
local read local writeremote read remote write
Kommunikaacutecioacute Hataacutesai
Egy laacutetszoacutelag egyszerűű műűvelethez moumlgoumltt komplex leacutepeacutesek toumlrteacutennek
A komplexitaacutes időőbe keruumll
Egy memoacuteria műűvelet
bull lehet 3 nagysaacutegrenddel lassabb
bull fuumlgghet a CPU-k szaacutemaacutetoacutel
Tipikus cache probleacutema
bull2 processzor veacutegez ugyanazon a cacheline-on felvaacuteltva atomikus write műűveletet (pl egy lock)
bullA write műűvelet miatt mindkeacutet CPU memoacuteriaacuteboacutel huacutezza be a cacheline-t mikoumlzben a maacutesik cache tartalmat invalidaacutelja
bullAka cache ping-pong
sch
Valoacutes tapasztalatok syslog-ng
syslog-ng
bullNaploacutezoacute szerver uumlzeneteket fogad TCP eacutes UDP csatornaacutekon
bullEgy uumlzenet egy sor
bullMinden sor kb 3-500 byte
bull~ ezer kapcsolat
bull~ neacutehaacuteny szaacutez ezer msgsec
Meacutereacutes reprodukcioacute
bdquoPremature optimization is the root of all evilrdquo - Donald Knuth
Meacutereacutes eacutes a reprodukaacutelhatoacute testcase fontos
bull ne kezdjuumlnk bele neacutelkuumlle
bull ismerjuumlk meg az eszkoumlzeinket
bull perf cachegrind gprof
syslog-ng műűkoumldeacutese
Bejoumlvőő uumlzenetek feldolgozaacutesa
bull beolvasaacutes parse-olaacutes szűűreacutesmoacutedosiacutetaacutes kikuumlldeacutes egy outputra
Kimenőő uumlzenetek feldolgozaacutesa
bull uumlzenet megformaacutezaacutesa kiiacuteraacutes egy faacutejlbahaacuteloacutezati kapcsolatra
syslog-ng koraacutebban
bull 1 szaacutel poll() ciklus
bull minden esemeacuteny kezeleacutese aszinkron callbackekkel
bull kb 100k msgsec
syslog-ng ma
bullfőő szaacutel + worker threadek
bulla főő szaacutel figyeli az oumlsszes nyitott kapcsolatot (epoll) IO esemeacuteny eseteacuten annak teljes feldolgozaacutesaacutet aacutetadja a worker threadnek
bullIO esemeacutenyek
bullinput adat eacuterkezett (fetch process enqueue loop)
bulloutput iacuterhatoacutevaacute vaacutelt (dequeue format write loop)
bullNonblocking IO
bullWorker threadek szaacutema megegyezik a CPU-k szaacutemaacuteval
bullEgy taszk 1-4 msec időő alatt veacutegez (1-4000 uumlzenet feldolgozaacutesa)
Szűűk keresztmetszetek probleacutemaacutek
Thread vaacuteltaacutesDraacutega mert
bull kihűűl a cache
bull scheduler
bull context switch regiszterek TLB
Elkeruumlleacutes moacutedja
bull keveacutes thread (=CPU-k szaacutema) nonblocking IO
bull egy feladat kb egy időőszeletig fut se hosszabban se roumlvidebben
KeacuteslelteteacutesA latency oumlnmagaacuteban nem okoz CPU hasznaacutelatot de
bull egy feldolgozaacutesba beeacutepuumllve okozhatja annak jelentőős lassulaacutesaacutet
bull 1 msec keacuteslelteteacutes oumlnmagaacuteban nem sok de 1000 tranzakcioacute eseteacuten maacuter 1 mp-cel nyuacutejtja az időőt
Latency forraacutesok
bull lockok eacutes szinkronizaacutecioacutes primitiacutevek
bull OS esemeacutenyek (epoll)
Dinamikus memoacuteriamallocfree jelentős időrablaacutes 500ksec tranzakcioacutenaacutel
bull threadek koumlzti szinkronizaacutecioacute
bull laacutencolt listaacutek
bull tipikus egyik szaacutel lefoglal maacutesik felszabadiacutet
Elkeruumlleacutes moacutedja
bull alloca() ill fixen meacuteretezett vaacuteltozoacutek
bull per-thread allokaacutecioacutek hosszuacute taacutevon megőőrizve igeacuteny eseteacuten noumlvelve
bull LogMessage adatszerkezet bdquotoumlmoumlriacuteteacuteserdquo ideaacutelis esetben 1 mallocmsg
Lock contentionTipikus cache ping-pong
bull N szaacutel ugyanazt a mutexet lockolja egymaacutest vaacuteltva
bull a reader-writer locknaacutel eacutes az atomikus referencia szaacutemlaacuteloacutenaacutel is előőfordul
Ceacutel
bull egy egyseacuteg hasznos munkaacutera esőő szinkronizaacutecioacutes időő csoumlkkenteacutese
Elkeruumlleacutes moacutedja
bull per-thread vaacuteltozoacutek
bull adatszerkezet moacutedosiacutetaacutesa nagyobb felbontaacutesuacute mutexek hasznaacutelata
bull toumlbb munkaacutet veacutegzuumlnk egy lock veacutedelme alatt ld skaacutelaacutezhatoacute queue-k
A nem triviaacutelis koumlltseacutegek miatt egy szekvenciaacutelis program paacuterhuzamos vaacuteltozata gyakran lassabb
lesz elsőő alkalommal
Tipikus trade-off-ok
Konzisztencia sorrendiseacuteg vs sebesseacuteg
bull az abszoluacutet sorrend sok szinkronizaacutecioacutet koumlvetel meg ezek koumlzuumll nem mind fontos
Hasznaacutelt memoacuteria mennyiseacuteg vs sebesseacuteg
bull pl per-thread vaacuteltozoacutek paacuterhuzamos objektum peacuteldaacutenyok
Skaacutelaacutezhatoacute queue
Az input eacutes az output koumlzti oumlsszekoumlteacutest biztosiacutetja
bull input taszkok (N) beteszik az esemeacutenyeket
bull output taszk (1) kiveszi az esemeacutenyeket majd kikuumlldi
Triviaacutelis megoldaacutes
Mutex
Uumlzenetenkeacutent 4 szinkronizaacutecioacutet igeacutenylőő műűvelet (inputoutput x lock-unlock)
Hogyan lehetne javiacutetani
Mutex
per-thread input queue
Konzisztenciamemoacuteria vs performanceAtomikus műűveletek szaacutema kb felezőődik
Mutex
per-thread input queue
Atomikus műűveletek maacutesik fele is nagysaacutegrendekkel csoumlkken
Lockolatlan output queue
Lockless
Lockless veszeacutelyekCompiler reordering
CPU reordering (cache eacutes memoacuteria miatt)
Stale adatok jelenleacutete miatt
bull nehezen debuggolhatoacute ritkaacuten előőforduloacute hibaacutek
Mielőtt ilyenbe kezdesz
bull memory ordering
bull memory barriers
bull compiler reordering barriers
Oumlsszefoglalaacutes
bullPaacuterhuzamos programozaacutes okozhat meglepeteacuteseket
bullEgy algoritmus paacuterhuzamosiacutetaacutesa gyakran lassulaacutest eredmeacutenyez elsőőre
bullMeacutereacutes amp megeacuterteacutesƩ
VEacuteGE
lwnnetArticles250967
rdropcomuserspaulmckperfbookperfbook20110828apdf
Tartalom
bullPaacuterhuzamos programozaacutes amp SMP
bullMemoacuteria amp Cache
bullValoacutes tapasztalatok
bullTipikus probleacutem amp trade-off
bullKonkreacutet adatszerkezet gyorsiacutetaacutesa
Paacuterhuzamos programozaacutesbullToumlbb szaacuteluacute futaacutes
bullKoumlzoumls memoacuteria
bullKoumlzoumls aacutellapotteacuter (nyitott faacutejlok haacuteloacutezati kapcsolatok stb)
bullSzaacutelak koumlzoumltti uumltemezeacutes az OS feladata
bullToumlbb CPUcore transzparens hasznaacutelata
SMP
bullSMP = Symmetric Multiprocessing
bullToumlbb CPU koumlzoumls memoacuteria IO teacuter
bullMinden CPUcore azonos tiacutepusuacute oacuterajelűű
bullDesktop geacutepekben szervereken tipikus
bullLehetnek specializaacutelt CPU-k maacutes rendszert futtatva
Memoacuteria
bullJelenlegi CPU-k oacuterajele a GHz tartomaacutenyban
bullEgy utasiacutetaacutes veacutegrehajtaacutesaacutehoz szuumlkseacuteges időő nanoszekundum nagysaacutegrend
bullDRAM memoacuteria hozzaacutefeacutereacuteshez szuumlkseacuteges időő mikroszekundum nagysaacutegrend (11000)
bullEz megegyezik a memoacuteriavinyoacute koumlzti araacutennyal
Cache
DRAM lassuacute az SRAM draacutega
Megoldaacutes
bull kisebb gyors cache memoacuteria
bull nagy lassuacute koumlzponti memoacuteria
bull 11000 araacuteny (meacuteret eacutes sebesseacuteg)
bull L1 L2 L3 szintek
Cache II
bullA cache a CPU eacutes a memoacuteria koumlzti gyorsiacutetoacutetaacuter
bullCPU aacuteltal automatikusan menedzselt program szaacutemaacutera transzparens
bullAsszociatiacutev taacuterolaacutes 32 byte-os egyseacutegekben (bdquocachelinerdquo)
Cache Hataacutesai
Egy algoritmus lehet utasiacutetaacutes szaacutemban minimaacutelis
13 13 13 13 13 13 13 13 13 EacuteS
Lassabb mint a toumlbb utasiacutetaacutesboacutel aacutelloacute de a cache-t hateacutekonyabban kihasznaacuteloacute vaacuteltozat
Cache amp SMP
bullEgy SMP rendszerben minden CPUcore kuumlloumln cache-sel rendelkezik
bullMemoacuteria mindegyik CPUcore szaacutemaacutera koumlzoumls
bullUgyanazon memoacuteria ciacutem eleacutereacuteseacutehez a CPU-k koumlzoumltt kommunikaacutecioacutera van szuumlkseacuteg
CPU-k koumlzti szinkronizaacutecioacute
MESI protokoll
bull Modified
bull Exclusive
bull Shared
bull Invalid
M E
S I
local read local writeremote read remote write
Kommunikaacutecioacute Hataacutesai
Egy laacutetszoacutelag egyszerűű műűvelethez moumlgoumltt komplex leacutepeacutesek toumlrteacutennek
A komplexitaacutes időőbe keruumll
Egy memoacuteria műűvelet
bull lehet 3 nagysaacutegrenddel lassabb
bull fuumlgghet a CPU-k szaacutemaacutetoacutel
Tipikus cache probleacutema
bull2 processzor veacutegez ugyanazon a cacheline-on felvaacuteltva atomikus write műűveletet (pl egy lock)
bullA write műűvelet miatt mindkeacutet CPU memoacuteriaacuteboacutel huacutezza be a cacheline-t mikoumlzben a maacutesik cache tartalmat invalidaacutelja
bullAka cache ping-pong
sch
Valoacutes tapasztalatok syslog-ng
syslog-ng
bullNaploacutezoacute szerver uumlzeneteket fogad TCP eacutes UDP csatornaacutekon
bullEgy uumlzenet egy sor
bullMinden sor kb 3-500 byte
bull~ ezer kapcsolat
bull~ neacutehaacuteny szaacutez ezer msgsec
Meacutereacutes reprodukcioacute
bdquoPremature optimization is the root of all evilrdquo - Donald Knuth
Meacutereacutes eacutes a reprodukaacutelhatoacute testcase fontos
bull ne kezdjuumlnk bele neacutelkuumlle
bull ismerjuumlk meg az eszkoumlzeinket
bull perf cachegrind gprof
syslog-ng műűkoumldeacutese
Bejoumlvőő uumlzenetek feldolgozaacutesa
bull beolvasaacutes parse-olaacutes szűűreacutesmoacutedosiacutetaacutes kikuumlldeacutes egy outputra
Kimenőő uumlzenetek feldolgozaacutesa
bull uumlzenet megformaacutezaacutesa kiiacuteraacutes egy faacutejlbahaacuteloacutezati kapcsolatra
syslog-ng koraacutebban
bull 1 szaacutel poll() ciklus
bull minden esemeacuteny kezeleacutese aszinkron callbackekkel
bull kb 100k msgsec
syslog-ng ma
bullfőő szaacutel + worker threadek
bulla főő szaacutel figyeli az oumlsszes nyitott kapcsolatot (epoll) IO esemeacuteny eseteacuten annak teljes feldolgozaacutesaacutet aacutetadja a worker threadnek
bullIO esemeacutenyek
bullinput adat eacuterkezett (fetch process enqueue loop)
bulloutput iacuterhatoacutevaacute vaacutelt (dequeue format write loop)
bullNonblocking IO
bullWorker threadek szaacutema megegyezik a CPU-k szaacutemaacuteval
bullEgy taszk 1-4 msec időő alatt veacutegez (1-4000 uumlzenet feldolgozaacutesa)
Szűűk keresztmetszetek probleacutemaacutek
Thread vaacuteltaacutesDraacutega mert
bull kihűűl a cache
bull scheduler
bull context switch regiszterek TLB
Elkeruumlleacutes moacutedja
bull keveacutes thread (=CPU-k szaacutema) nonblocking IO
bull egy feladat kb egy időőszeletig fut se hosszabban se roumlvidebben
KeacuteslelteteacutesA latency oumlnmagaacuteban nem okoz CPU hasznaacutelatot de
bull egy feldolgozaacutesba beeacutepuumllve okozhatja annak jelentőős lassulaacutesaacutet
bull 1 msec keacuteslelteteacutes oumlnmagaacuteban nem sok de 1000 tranzakcioacute eseteacuten maacuter 1 mp-cel nyuacutejtja az időőt
Latency forraacutesok
bull lockok eacutes szinkronizaacutecioacutes primitiacutevek
bull OS esemeacutenyek (epoll)
Dinamikus memoacuteriamallocfree jelentős időrablaacutes 500ksec tranzakcioacutenaacutel
bull threadek koumlzti szinkronizaacutecioacute
bull laacutencolt listaacutek
bull tipikus egyik szaacutel lefoglal maacutesik felszabadiacutet
Elkeruumlleacutes moacutedja
bull alloca() ill fixen meacuteretezett vaacuteltozoacutek
bull per-thread allokaacutecioacutek hosszuacute taacutevon megőőrizve igeacuteny eseteacuten noumlvelve
bull LogMessage adatszerkezet bdquotoumlmoumlriacuteteacuteserdquo ideaacutelis esetben 1 mallocmsg
Lock contentionTipikus cache ping-pong
bull N szaacutel ugyanazt a mutexet lockolja egymaacutest vaacuteltva
bull a reader-writer locknaacutel eacutes az atomikus referencia szaacutemlaacuteloacutenaacutel is előőfordul
Ceacutel
bull egy egyseacuteg hasznos munkaacutera esőő szinkronizaacutecioacutes időő csoumlkkenteacutese
Elkeruumlleacutes moacutedja
bull per-thread vaacuteltozoacutek
bull adatszerkezet moacutedosiacutetaacutesa nagyobb felbontaacutesuacute mutexek hasznaacutelata
bull toumlbb munkaacutet veacutegzuumlnk egy lock veacutedelme alatt ld skaacutelaacutezhatoacute queue-k
A nem triviaacutelis koumlltseacutegek miatt egy szekvenciaacutelis program paacuterhuzamos vaacuteltozata gyakran lassabb
lesz elsőő alkalommal
Tipikus trade-off-ok
Konzisztencia sorrendiseacuteg vs sebesseacuteg
bull az abszoluacutet sorrend sok szinkronizaacutecioacutet koumlvetel meg ezek koumlzuumll nem mind fontos
Hasznaacutelt memoacuteria mennyiseacuteg vs sebesseacuteg
bull pl per-thread vaacuteltozoacutek paacuterhuzamos objektum peacuteldaacutenyok
Skaacutelaacutezhatoacute queue
Az input eacutes az output koumlzti oumlsszekoumlteacutest biztosiacutetja
bull input taszkok (N) beteszik az esemeacutenyeket
bull output taszk (1) kiveszi az esemeacutenyeket majd kikuumlldi
Triviaacutelis megoldaacutes
Mutex
Uumlzenetenkeacutent 4 szinkronizaacutecioacutet igeacutenylőő műűvelet (inputoutput x lock-unlock)
Hogyan lehetne javiacutetani
Mutex
per-thread input queue
Konzisztenciamemoacuteria vs performanceAtomikus műűveletek szaacutema kb felezőődik
Mutex
per-thread input queue
Atomikus műűveletek maacutesik fele is nagysaacutegrendekkel csoumlkken
Lockolatlan output queue
Lockless
Lockless veszeacutelyekCompiler reordering
CPU reordering (cache eacutes memoacuteria miatt)
Stale adatok jelenleacutete miatt
bull nehezen debuggolhatoacute ritkaacuten előőforduloacute hibaacutek
Mielőtt ilyenbe kezdesz
bull memory ordering
bull memory barriers
bull compiler reordering barriers
Oumlsszefoglalaacutes
bullPaacuterhuzamos programozaacutes okozhat meglepeteacuteseket
bullEgy algoritmus paacuterhuzamosiacutetaacutesa gyakran lassulaacutest eredmeacutenyez elsőőre
bullMeacutereacutes amp megeacuterteacutesƩ
VEacuteGE
lwnnetArticles250967
rdropcomuserspaulmckperfbookperfbook20110828apdf
Paacuterhuzamos programozaacutesbullToumlbb szaacuteluacute futaacutes
bullKoumlzoumls memoacuteria
bullKoumlzoumls aacutellapotteacuter (nyitott faacutejlok haacuteloacutezati kapcsolatok stb)
bullSzaacutelak koumlzoumltti uumltemezeacutes az OS feladata
bullToumlbb CPUcore transzparens hasznaacutelata
SMP
bullSMP = Symmetric Multiprocessing
bullToumlbb CPU koumlzoumls memoacuteria IO teacuter
bullMinden CPUcore azonos tiacutepusuacute oacuterajelűű
bullDesktop geacutepekben szervereken tipikus
bullLehetnek specializaacutelt CPU-k maacutes rendszert futtatva
Memoacuteria
bullJelenlegi CPU-k oacuterajele a GHz tartomaacutenyban
bullEgy utasiacutetaacutes veacutegrehajtaacutesaacutehoz szuumlkseacuteges időő nanoszekundum nagysaacutegrend
bullDRAM memoacuteria hozzaacutefeacutereacuteshez szuumlkseacuteges időő mikroszekundum nagysaacutegrend (11000)
bullEz megegyezik a memoacuteriavinyoacute koumlzti araacutennyal
Cache
DRAM lassuacute az SRAM draacutega
Megoldaacutes
bull kisebb gyors cache memoacuteria
bull nagy lassuacute koumlzponti memoacuteria
bull 11000 araacuteny (meacuteret eacutes sebesseacuteg)
bull L1 L2 L3 szintek
Cache II
bullA cache a CPU eacutes a memoacuteria koumlzti gyorsiacutetoacutetaacuter
bullCPU aacuteltal automatikusan menedzselt program szaacutemaacutera transzparens
bullAsszociatiacutev taacuterolaacutes 32 byte-os egyseacutegekben (bdquocachelinerdquo)
Cache Hataacutesai
Egy algoritmus lehet utasiacutetaacutes szaacutemban minimaacutelis
13 13 13 13 13 13 13 13 13 EacuteS
Lassabb mint a toumlbb utasiacutetaacutesboacutel aacutelloacute de a cache-t hateacutekonyabban kihasznaacuteloacute vaacuteltozat
Cache amp SMP
bullEgy SMP rendszerben minden CPUcore kuumlloumln cache-sel rendelkezik
bullMemoacuteria mindegyik CPUcore szaacutemaacutera koumlzoumls
bullUgyanazon memoacuteria ciacutem eleacutereacuteseacutehez a CPU-k koumlzoumltt kommunikaacutecioacutera van szuumlkseacuteg
CPU-k koumlzti szinkronizaacutecioacute
MESI protokoll
bull Modified
bull Exclusive
bull Shared
bull Invalid
M E
S I
local read local writeremote read remote write
Kommunikaacutecioacute Hataacutesai
Egy laacutetszoacutelag egyszerűű műűvelethez moumlgoumltt komplex leacutepeacutesek toumlrteacutennek
A komplexitaacutes időőbe keruumll
Egy memoacuteria műűvelet
bull lehet 3 nagysaacutegrenddel lassabb
bull fuumlgghet a CPU-k szaacutemaacutetoacutel
Tipikus cache probleacutema
bull2 processzor veacutegez ugyanazon a cacheline-on felvaacuteltva atomikus write műűveletet (pl egy lock)
bullA write műűvelet miatt mindkeacutet CPU memoacuteriaacuteboacutel huacutezza be a cacheline-t mikoumlzben a maacutesik cache tartalmat invalidaacutelja
bullAka cache ping-pong
sch
Valoacutes tapasztalatok syslog-ng
syslog-ng
bullNaploacutezoacute szerver uumlzeneteket fogad TCP eacutes UDP csatornaacutekon
bullEgy uumlzenet egy sor
bullMinden sor kb 3-500 byte
bull~ ezer kapcsolat
bull~ neacutehaacuteny szaacutez ezer msgsec
Meacutereacutes reprodukcioacute
bdquoPremature optimization is the root of all evilrdquo - Donald Knuth
Meacutereacutes eacutes a reprodukaacutelhatoacute testcase fontos
bull ne kezdjuumlnk bele neacutelkuumlle
bull ismerjuumlk meg az eszkoumlzeinket
bull perf cachegrind gprof
syslog-ng műűkoumldeacutese
Bejoumlvőő uumlzenetek feldolgozaacutesa
bull beolvasaacutes parse-olaacutes szűűreacutesmoacutedosiacutetaacutes kikuumlldeacutes egy outputra
Kimenőő uumlzenetek feldolgozaacutesa
bull uumlzenet megformaacutezaacutesa kiiacuteraacutes egy faacutejlbahaacuteloacutezati kapcsolatra
syslog-ng koraacutebban
bull 1 szaacutel poll() ciklus
bull minden esemeacuteny kezeleacutese aszinkron callbackekkel
bull kb 100k msgsec
syslog-ng ma
bullfőő szaacutel + worker threadek
bulla főő szaacutel figyeli az oumlsszes nyitott kapcsolatot (epoll) IO esemeacuteny eseteacuten annak teljes feldolgozaacutesaacutet aacutetadja a worker threadnek
bullIO esemeacutenyek
bullinput adat eacuterkezett (fetch process enqueue loop)
bulloutput iacuterhatoacutevaacute vaacutelt (dequeue format write loop)
bullNonblocking IO
bullWorker threadek szaacutema megegyezik a CPU-k szaacutemaacuteval
bullEgy taszk 1-4 msec időő alatt veacutegez (1-4000 uumlzenet feldolgozaacutesa)
Szűűk keresztmetszetek probleacutemaacutek
Thread vaacuteltaacutesDraacutega mert
bull kihűűl a cache
bull scheduler
bull context switch regiszterek TLB
Elkeruumlleacutes moacutedja
bull keveacutes thread (=CPU-k szaacutema) nonblocking IO
bull egy feladat kb egy időőszeletig fut se hosszabban se roumlvidebben
KeacuteslelteteacutesA latency oumlnmagaacuteban nem okoz CPU hasznaacutelatot de
bull egy feldolgozaacutesba beeacutepuumllve okozhatja annak jelentőős lassulaacutesaacutet
bull 1 msec keacuteslelteteacutes oumlnmagaacuteban nem sok de 1000 tranzakcioacute eseteacuten maacuter 1 mp-cel nyuacutejtja az időőt
Latency forraacutesok
bull lockok eacutes szinkronizaacutecioacutes primitiacutevek
bull OS esemeacutenyek (epoll)
Dinamikus memoacuteriamallocfree jelentős időrablaacutes 500ksec tranzakcioacutenaacutel
bull threadek koumlzti szinkronizaacutecioacute
bull laacutencolt listaacutek
bull tipikus egyik szaacutel lefoglal maacutesik felszabadiacutet
Elkeruumlleacutes moacutedja
bull alloca() ill fixen meacuteretezett vaacuteltozoacutek
bull per-thread allokaacutecioacutek hosszuacute taacutevon megőőrizve igeacuteny eseteacuten noumlvelve
bull LogMessage adatszerkezet bdquotoumlmoumlriacuteteacuteserdquo ideaacutelis esetben 1 mallocmsg
Lock contentionTipikus cache ping-pong
bull N szaacutel ugyanazt a mutexet lockolja egymaacutest vaacuteltva
bull a reader-writer locknaacutel eacutes az atomikus referencia szaacutemlaacuteloacutenaacutel is előőfordul
Ceacutel
bull egy egyseacuteg hasznos munkaacutera esőő szinkronizaacutecioacutes időő csoumlkkenteacutese
Elkeruumlleacutes moacutedja
bull per-thread vaacuteltozoacutek
bull adatszerkezet moacutedosiacutetaacutesa nagyobb felbontaacutesuacute mutexek hasznaacutelata
bull toumlbb munkaacutet veacutegzuumlnk egy lock veacutedelme alatt ld skaacutelaacutezhatoacute queue-k
A nem triviaacutelis koumlltseacutegek miatt egy szekvenciaacutelis program paacuterhuzamos vaacuteltozata gyakran lassabb
lesz elsőő alkalommal
Tipikus trade-off-ok
Konzisztencia sorrendiseacuteg vs sebesseacuteg
bull az abszoluacutet sorrend sok szinkronizaacutecioacutet koumlvetel meg ezek koumlzuumll nem mind fontos
Hasznaacutelt memoacuteria mennyiseacuteg vs sebesseacuteg
bull pl per-thread vaacuteltozoacutek paacuterhuzamos objektum peacuteldaacutenyok
Skaacutelaacutezhatoacute queue
Az input eacutes az output koumlzti oumlsszekoumlteacutest biztosiacutetja
bull input taszkok (N) beteszik az esemeacutenyeket
bull output taszk (1) kiveszi az esemeacutenyeket majd kikuumlldi
Triviaacutelis megoldaacutes
Mutex
Uumlzenetenkeacutent 4 szinkronizaacutecioacutet igeacutenylőő műűvelet (inputoutput x lock-unlock)
Hogyan lehetne javiacutetani
Mutex
per-thread input queue
Konzisztenciamemoacuteria vs performanceAtomikus műűveletek szaacutema kb felezőődik
Mutex
per-thread input queue
Atomikus műűveletek maacutesik fele is nagysaacutegrendekkel csoumlkken
Lockolatlan output queue
Lockless
Lockless veszeacutelyekCompiler reordering
CPU reordering (cache eacutes memoacuteria miatt)
Stale adatok jelenleacutete miatt
bull nehezen debuggolhatoacute ritkaacuten előőforduloacute hibaacutek
Mielőtt ilyenbe kezdesz
bull memory ordering
bull memory barriers
bull compiler reordering barriers
Oumlsszefoglalaacutes
bullPaacuterhuzamos programozaacutes okozhat meglepeteacuteseket
bullEgy algoritmus paacuterhuzamosiacutetaacutesa gyakran lassulaacutest eredmeacutenyez elsőőre
bullMeacutereacutes amp megeacuterteacutesƩ
VEacuteGE
lwnnetArticles250967
rdropcomuserspaulmckperfbookperfbook20110828apdf
SMP
bullSMP = Symmetric Multiprocessing
bullToumlbb CPU koumlzoumls memoacuteria IO teacuter
bullMinden CPUcore azonos tiacutepusuacute oacuterajelűű
bullDesktop geacutepekben szervereken tipikus
bullLehetnek specializaacutelt CPU-k maacutes rendszert futtatva
Memoacuteria
bullJelenlegi CPU-k oacuterajele a GHz tartomaacutenyban
bullEgy utasiacutetaacutes veacutegrehajtaacutesaacutehoz szuumlkseacuteges időő nanoszekundum nagysaacutegrend
bullDRAM memoacuteria hozzaacutefeacutereacuteshez szuumlkseacuteges időő mikroszekundum nagysaacutegrend (11000)
bullEz megegyezik a memoacuteriavinyoacute koumlzti araacutennyal
Cache
DRAM lassuacute az SRAM draacutega
Megoldaacutes
bull kisebb gyors cache memoacuteria
bull nagy lassuacute koumlzponti memoacuteria
bull 11000 araacuteny (meacuteret eacutes sebesseacuteg)
bull L1 L2 L3 szintek
Cache II
bullA cache a CPU eacutes a memoacuteria koumlzti gyorsiacutetoacutetaacuter
bullCPU aacuteltal automatikusan menedzselt program szaacutemaacutera transzparens
bullAsszociatiacutev taacuterolaacutes 32 byte-os egyseacutegekben (bdquocachelinerdquo)
Cache Hataacutesai
Egy algoritmus lehet utasiacutetaacutes szaacutemban minimaacutelis
13 13 13 13 13 13 13 13 13 EacuteS
Lassabb mint a toumlbb utasiacutetaacutesboacutel aacutelloacute de a cache-t hateacutekonyabban kihasznaacuteloacute vaacuteltozat
Cache amp SMP
bullEgy SMP rendszerben minden CPUcore kuumlloumln cache-sel rendelkezik
bullMemoacuteria mindegyik CPUcore szaacutemaacutera koumlzoumls
bullUgyanazon memoacuteria ciacutem eleacutereacuteseacutehez a CPU-k koumlzoumltt kommunikaacutecioacutera van szuumlkseacuteg
CPU-k koumlzti szinkronizaacutecioacute
MESI protokoll
bull Modified
bull Exclusive
bull Shared
bull Invalid
M E
S I
local read local writeremote read remote write
Kommunikaacutecioacute Hataacutesai
Egy laacutetszoacutelag egyszerűű műűvelethez moumlgoumltt komplex leacutepeacutesek toumlrteacutennek
A komplexitaacutes időőbe keruumll
Egy memoacuteria műűvelet
bull lehet 3 nagysaacutegrenddel lassabb
bull fuumlgghet a CPU-k szaacutemaacutetoacutel
Tipikus cache probleacutema
bull2 processzor veacutegez ugyanazon a cacheline-on felvaacuteltva atomikus write műűveletet (pl egy lock)
bullA write műűvelet miatt mindkeacutet CPU memoacuteriaacuteboacutel huacutezza be a cacheline-t mikoumlzben a maacutesik cache tartalmat invalidaacutelja
bullAka cache ping-pong
sch
Valoacutes tapasztalatok syslog-ng
syslog-ng
bullNaploacutezoacute szerver uumlzeneteket fogad TCP eacutes UDP csatornaacutekon
bullEgy uumlzenet egy sor
bullMinden sor kb 3-500 byte
bull~ ezer kapcsolat
bull~ neacutehaacuteny szaacutez ezer msgsec
Meacutereacutes reprodukcioacute
bdquoPremature optimization is the root of all evilrdquo - Donald Knuth
Meacutereacutes eacutes a reprodukaacutelhatoacute testcase fontos
bull ne kezdjuumlnk bele neacutelkuumlle
bull ismerjuumlk meg az eszkoumlzeinket
bull perf cachegrind gprof
syslog-ng műűkoumldeacutese
Bejoumlvőő uumlzenetek feldolgozaacutesa
bull beolvasaacutes parse-olaacutes szűűreacutesmoacutedosiacutetaacutes kikuumlldeacutes egy outputra
Kimenőő uumlzenetek feldolgozaacutesa
bull uumlzenet megformaacutezaacutesa kiiacuteraacutes egy faacutejlbahaacuteloacutezati kapcsolatra
syslog-ng koraacutebban
bull 1 szaacutel poll() ciklus
bull minden esemeacuteny kezeleacutese aszinkron callbackekkel
bull kb 100k msgsec
syslog-ng ma
bullfőő szaacutel + worker threadek
bulla főő szaacutel figyeli az oumlsszes nyitott kapcsolatot (epoll) IO esemeacuteny eseteacuten annak teljes feldolgozaacutesaacutet aacutetadja a worker threadnek
bullIO esemeacutenyek
bullinput adat eacuterkezett (fetch process enqueue loop)
bulloutput iacuterhatoacutevaacute vaacutelt (dequeue format write loop)
bullNonblocking IO
bullWorker threadek szaacutema megegyezik a CPU-k szaacutemaacuteval
bullEgy taszk 1-4 msec időő alatt veacutegez (1-4000 uumlzenet feldolgozaacutesa)
Szűűk keresztmetszetek probleacutemaacutek
Thread vaacuteltaacutesDraacutega mert
bull kihűűl a cache
bull scheduler
bull context switch regiszterek TLB
Elkeruumlleacutes moacutedja
bull keveacutes thread (=CPU-k szaacutema) nonblocking IO
bull egy feladat kb egy időőszeletig fut se hosszabban se roumlvidebben
KeacuteslelteteacutesA latency oumlnmagaacuteban nem okoz CPU hasznaacutelatot de
bull egy feldolgozaacutesba beeacutepuumllve okozhatja annak jelentőős lassulaacutesaacutet
bull 1 msec keacuteslelteteacutes oumlnmagaacuteban nem sok de 1000 tranzakcioacute eseteacuten maacuter 1 mp-cel nyuacutejtja az időőt
Latency forraacutesok
bull lockok eacutes szinkronizaacutecioacutes primitiacutevek
bull OS esemeacutenyek (epoll)
Dinamikus memoacuteriamallocfree jelentős időrablaacutes 500ksec tranzakcioacutenaacutel
bull threadek koumlzti szinkronizaacutecioacute
bull laacutencolt listaacutek
bull tipikus egyik szaacutel lefoglal maacutesik felszabadiacutet
Elkeruumlleacutes moacutedja
bull alloca() ill fixen meacuteretezett vaacuteltozoacutek
bull per-thread allokaacutecioacutek hosszuacute taacutevon megőőrizve igeacuteny eseteacuten noumlvelve
bull LogMessage adatszerkezet bdquotoumlmoumlriacuteteacuteserdquo ideaacutelis esetben 1 mallocmsg
Lock contentionTipikus cache ping-pong
bull N szaacutel ugyanazt a mutexet lockolja egymaacutest vaacuteltva
bull a reader-writer locknaacutel eacutes az atomikus referencia szaacutemlaacuteloacutenaacutel is előőfordul
Ceacutel
bull egy egyseacuteg hasznos munkaacutera esőő szinkronizaacutecioacutes időő csoumlkkenteacutese
Elkeruumlleacutes moacutedja
bull per-thread vaacuteltozoacutek
bull adatszerkezet moacutedosiacutetaacutesa nagyobb felbontaacutesuacute mutexek hasznaacutelata
bull toumlbb munkaacutet veacutegzuumlnk egy lock veacutedelme alatt ld skaacutelaacutezhatoacute queue-k
A nem triviaacutelis koumlltseacutegek miatt egy szekvenciaacutelis program paacuterhuzamos vaacuteltozata gyakran lassabb
lesz elsőő alkalommal
Tipikus trade-off-ok
Konzisztencia sorrendiseacuteg vs sebesseacuteg
bull az abszoluacutet sorrend sok szinkronizaacutecioacutet koumlvetel meg ezek koumlzuumll nem mind fontos
Hasznaacutelt memoacuteria mennyiseacuteg vs sebesseacuteg
bull pl per-thread vaacuteltozoacutek paacuterhuzamos objektum peacuteldaacutenyok
Skaacutelaacutezhatoacute queue
Az input eacutes az output koumlzti oumlsszekoumlteacutest biztosiacutetja
bull input taszkok (N) beteszik az esemeacutenyeket
bull output taszk (1) kiveszi az esemeacutenyeket majd kikuumlldi
Triviaacutelis megoldaacutes
Mutex
Uumlzenetenkeacutent 4 szinkronizaacutecioacutet igeacutenylőő műűvelet (inputoutput x lock-unlock)
Hogyan lehetne javiacutetani
Mutex
per-thread input queue
Konzisztenciamemoacuteria vs performanceAtomikus műűveletek szaacutema kb felezőődik
Mutex
per-thread input queue
Atomikus műűveletek maacutesik fele is nagysaacutegrendekkel csoumlkken
Lockolatlan output queue
Lockless
Lockless veszeacutelyekCompiler reordering
CPU reordering (cache eacutes memoacuteria miatt)
Stale adatok jelenleacutete miatt
bull nehezen debuggolhatoacute ritkaacuten előőforduloacute hibaacutek
Mielőtt ilyenbe kezdesz
bull memory ordering
bull memory barriers
bull compiler reordering barriers
Oumlsszefoglalaacutes
bullPaacuterhuzamos programozaacutes okozhat meglepeteacuteseket
bullEgy algoritmus paacuterhuzamosiacutetaacutesa gyakran lassulaacutest eredmeacutenyez elsőőre
bullMeacutereacutes amp megeacuterteacutesƩ
VEacuteGE
lwnnetArticles250967
rdropcomuserspaulmckperfbookperfbook20110828apdf
Memoacuteria
bullJelenlegi CPU-k oacuterajele a GHz tartomaacutenyban
bullEgy utasiacutetaacutes veacutegrehajtaacutesaacutehoz szuumlkseacuteges időő nanoszekundum nagysaacutegrend
bullDRAM memoacuteria hozzaacutefeacutereacuteshez szuumlkseacuteges időő mikroszekundum nagysaacutegrend (11000)
bullEz megegyezik a memoacuteriavinyoacute koumlzti araacutennyal
Cache
DRAM lassuacute az SRAM draacutega
Megoldaacutes
bull kisebb gyors cache memoacuteria
bull nagy lassuacute koumlzponti memoacuteria
bull 11000 araacuteny (meacuteret eacutes sebesseacuteg)
bull L1 L2 L3 szintek
Cache II
bullA cache a CPU eacutes a memoacuteria koumlzti gyorsiacutetoacutetaacuter
bullCPU aacuteltal automatikusan menedzselt program szaacutemaacutera transzparens
bullAsszociatiacutev taacuterolaacutes 32 byte-os egyseacutegekben (bdquocachelinerdquo)
Cache Hataacutesai
Egy algoritmus lehet utasiacutetaacutes szaacutemban minimaacutelis
13 13 13 13 13 13 13 13 13 EacuteS
Lassabb mint a toumlbb utasiacutetaacutesboacutel aacutelloacute de a cache-t hateacutekonyabban kihasznaacuteloacute vaacuteltozat
Cache amp SMP
bullEgy SMP rendszerben minden CPUcore kuumlloumln cache-sel rendelkezik
bullMemoacuteria mindegyik CPUcore szaacutemaacutera koumlzoumls
bullUgyanazon memoacuteria ciacutem eleacutereacuteseacutehez a CPU-k koumlzoumltt kommunikaacutecioacutera van szuumlkseacuteg
CPU-k koumlzti szinkronizaacutecioacute
MESI protokoll
bull Modified
bull Exclusive
bull Shared
bull Invalid
M E
S I
local read local writeremote read remote write
Kommunikaacutecioacute Hataacutesai
Egy laacutetszoacutelag egyszerűű műűvelethez moumlgoumltt komplex leacutepeacutesek toumlrteacutennek
A komplexitaacutes időőbe keruumll
Egy memoacuteria műűvelet
bull lehet 3 nagysaacutegrenddel lassabb
bull fuumlgghet a CPU-k szaacutemaacutetoacutel
Tipikus cache probleacutema
bull2 processzor veacutegez ugyanazon a cacheline-on felvaacuteltva atomikus write műűveletet (pl egy lock)
bullA write műűvelet miatt mindkeacutet CPU memoacuteriaacuteboacutel huacutezza be a cacheline-t mikoumlzben a maacutesik cache tartalmat invalidaacutelja
bullAka cache ping-pong
sch
Valoacutes tapasztalatok syslog-ng
syslog-ng
bullNaploacutezoacute szerver uumlzeneteket fogad TCP eacutes UDP csatornaacutekon
bullEgy uumlzenet egy sor
bullMinden sor kb 3-500 byte
bull~ ezer kapcsolat
bull~ neacutehaacuteny szaacutez ezer msgsec
Meacutereacutes reprodukcioacute
bdquoPremature optimization is the root of all evilrdquo - Donald Knuth
Meacutereacutes eacutes a reprodukaacutelhatoacute testcase fontos
bull ne kezdjuumlnk bele neacutelkuumlle
bull ismerjuumlk meg az eszkoumlzeinket
bull perf cachegrind gprof
syslog-ng műűkoumldeacutese
Bejoumlvőő uumlzenetek feldolgozaacutesa
bull beolvasaacutes parse-olaacutes szűűreacutesmoacutedosiacutetaacutes kikuumlldeacutes egy outputra
Kimenőő uumlzenetek feldolgozaacutesa
bull uumlzenet megformaacutezaacutesa kiiacuteraacutes egy faacutejlbahaacuteloacutezati kapcsolatra
syslog-ng koraacutebban
bull 1 szaacutel poll() ciklus
bull minden esemeacuteny kezeleacutese aszinkron callbackekkel
bull kb 100k msgsec
syslog-ng ma
bullfőő szaacutel + worker threadek
bulla főő szaacutel figyeli az oumlsszes nyitott kapcsolatot (epoll) IO esemeacuteny eseteacuten annak teljes feldolgozaacutesaacutet aacutetadja a worker threadnek
bullIO esemeacutenyek
bullinput adat eacuterkezett (fetch process enqueue loop)
bulloutput iacuterhatoacutevaacute vaacutelt (dequeue format write loop)
bullNonblocking IO
bullWorker threadek szaacutema megegyezik a CPU-k szaacutemaacuteval
bullEgy taszk 1-4 msec időő alatt veacutegez (1-4000 uumlzenet feldolgozaacutesa)
Szűűk keresztmetszetek probleacutemaacutek
Thread vaacuteltaacutesDraacutega mert
bull kihűűl a cache
bull scheduler
bull context switch regiszterek TLB
Elkeruumlleacutes moacutedja
bull keveacutes thread (=CPU-k szaacutema) nonblocking IO
bull egy feladat kb egy időőszeletig fut se hosszabban se roumlvidebben
KeacuteslelteteacutesA latency oumlnmagaacuteban nem okoz CPU hasznaacutelatot de
bull egy feldolgozaacutesba beeacutepuumllve okozhatja annak jelentőős lassulaacutesaacutet
bull 1 msec keacuteslelteteacutes oumlnmagaacuteban nem sok de 1000 tranzakcioacute eseteacuten maacuter 1 mp-cel nyuacutejtja az időőt
Latency forraacutesok
bull lockok eacutes szinkronizaacutecioacutes primitiacutevek
bull OS esemeacutenyek (epoll)
Dinamikus memoacuteriamallocfree jelentős időrablaacutes 500ksec tranzakcioacutenaacutel
bull threadek koumlzti szinkronizaacutecioacute
bull laacutencolt listaacutek
bull tipikus egyik szaacutel lefoglal maacutesik felszabadiacutet
Elkeruumlleacutes moacutedja
bull alloca() ill fixen meacuteretezett vaacuteltozoacutek
bull per-thread allokaacutecioacutek hosszuacute taacutevon megőőrizve igeacuteny eseteacuten noumlvelve
bull LogMessage adatszerkezet bdquotoumlmoumlriacuteteacuteserdquo ideaacutelis esetben 1 mallocmsg
Lock contentionTipikus cache ping-pong
bull N szaacutel ugyanazt a mutexet lockolja egymaacutest vaacuteltva
bull a reader-writer locknaacutel eacutes az atomikus referencia szaacutemlaacuteloacutenaacutel is előőfordul
Ceacutel
bull egy egyseacuteg hasznos munkaacutera esőő szinkronizaacutecioacutes időő csoumlkkenteacutese
Elkeruumlleacutes moacutedja
bull per-thread vaacuteltozoacutek
bull adatszerkezet moacutedosiacutetaacutesa nagyobb felbontaacutesuacute mutexek hasznaacutelata
bull toumlbb munkaacutet veacutegzuumlnk egy lock veacutedelme alatt ld skaacutelaacutezhatoacute queue-k
A nem triviaacutelis koumlltseacutegek miatt egy szekvenciaacutelis program paacuterhuzamos vaacuteltozata gyakran lassabb
lesz elsőő alkalommal
Tipikus trade-off-ok
Konzisztencia sorrendiseacuteg vs sebesseacuteg
bull az abszoluacutet sorrend sok szinkronizaacutecioacutet koumlvetel meg ezek koumlzuumll nem mind fontos
Hasznaacutelt memoacuteria mennyiseacuteg vs sebesseacuteg
bull pl per-thread vaacuteltozoacutek paacuterhuzamos objektum peacuteldaacutenyok
Skaacutelaacutezhatoacute queue
Az input eacutes az output koumlzti oumlsszekoumlteacutest biztosiacutetja
bull input taszkok (N) beteszik az esemeacutenyeket
bull output taszk (1) kiveszi az esemeacutenyeket majd kikuumlldi
Triviaacutelis megoldaacutes
Mutex
Uumlzenetenkeacutent 4 szinkronizaacutecioacutet igeacutenylőő műűvelet (inputoutput x lock-unlock)
Hogyan lehetne javiacutetani
Mutex
per-thread input queue
Konzisztenciamemoacuteria vs performanceAtomikus műűveletek szaacutema kb felezőődik
Mutex
per-thread input queue
Atomikus műűveletek maacutesik fele is nagysaacutegrendekkel csoumlkken
Lockolatlan output queue
Lockless
Lockless veszeacutelyekCompiler reordering
CPU reordering (cache eacutes memoacuteria miatt)
Stale adatok jelenleacutete miatt
bull nehezen debuggolhatoacute ritkaacuten előőforduloacute hibaacutek
Mielőtt ilyenbe kezdesz
bull memory ordering
bull memory barriers
bull compiler reordering barriers
Oumlsszefoglalaacutes
bullPaacuterhuzamos programozaacutes okozhat meglepeteacuteseket
bullEgy algoritmus paacuterhuzamosiacutetaacutesa gyakran lassulaacutest eredmeacutenyez elsőőre
bullMeacutereacutes amp megeacuterteacutesƩ
VEacuteGE
lwnnetArticles250967
rdropcomuserspaulmckperfbookperfbook20110828apdf
Cache
DRAM lassuacute az SRAM draacutega
Megoldaacutes
bull kisebb gyors cache memoacuteria
bull nagy lassuacute koumlzponti memoacuteria
bull 11000 araacuteny (meacuteret eacutes sebesseacuteg)
bull L1 L2 L3 szintek
Cache II
bullA cache a CPU eacutes a memoacuteria koumlzti gyorsiacutetoacutetaacuter
bullCPU aacuteltal automatikusan menedzselt program szaacutemaacutera transzparens
bullAsszociatiacutev taacuterolaacutes 32 byte-os egyseacutegekben (bdquocachelinerdquo)
Cache Hataacutesai
Egy algoritmus lehet utasiacutetaacutes szaacutemban minimaacutelis
13 13 13 13 13 13 13 13 13 EacuteS
Lassabb mint a toumlbb utasiacutetaacutesboacutel aacutelloacute de a cache-t hateacutekonyabban kihasznaacuteloacute vaacuteltozat
Cache amp SMP
bullEgy SMP rendszerben minden CPUcore kuumlloumln cache-sel rendelkezik
bullMemoacuteria mindegyik CPUcore szaacutemaacutera koumlzoumls
bullUgyanazon memoacuteria ciacutem eleacutereacuteseacutehez a CPU-k koumlzoumltt kommunikaacutecioacutera van szuumlkseacuteg
CPU-k koumlzti szinkronizaacutecioacute
MESI protokoll
bull Modified
bull Exclusive
bull Shared
bull Invalid
M E
S I
local read local writeremote read remote write
Kommunikaacutecioacute Hataacutesai
Egy laacutetszoacutelag egyszerűű műűvelethez moumlgoumltt komplex leacutepeacutesek toumlrteacutennek
A komplexitaacutes időőbe keruumll
Egy memoacuteria műűvelet
bull lehet 3 nagysaacutegrenddel lassabb
bull fuumlgghet a CPU-k szaacutemaacutetoacutel
Tipikus cache probleacutema
bull2 processzor veacutegez ugyanazon a cacheline-on felvaacuteltva atomikus write műűveletet (pl egy lock)
bullA write műűvelet miatt mindkeacutet CPU memoacuteriaacuteboacutel huacutezza be a cacheline-t mikoumlzben a maacutesik cache tartalmat invalidaacutelja
bullAka cache ping-pong
sch
Valoacutes tapasztalatok syslog-ng
syslog-ng
bullNaploacutezoacute szerver uumlzeneteket fogad TCP eacutes UDP csatornaacutekon
bullEgy uumlzenet egy sor
bullMinden sor kb 3-500 byte
bull~ ezer kapcsolat
bull~ neacutehaacuteny szaacutez ezer msgsec
Meacutereacutes reprodukcioacute
bdquoPremature optimization is the root of all evilrdquo - Donald Knuth
Meacutereacutes eacutes a reprodukaacutelhatoacute testcase fontos
bull ne kezdjuumlnk bele neacutelkuumlle
bull ismerjuumlk meg az eszkoumlzeinket
bull perf cachegrind gprof
syslog-ng műűkoumldeacutese
Bejoumlvőő uumlzenetek feldolgozaacutesa
bull beolvasaacutes parse-olaacutes szűűreacutesmoacutedosiacutetaacutes kikuumlldeacutes egy outputra
Kimenőő uumlzenetek feldolgozaacutesa
bull uumlzenet megformaacutezaacutesa kiiacuteraacutes egy faacutejlbahaacuteloacutezati kapcsolatra
syslog-ng koraacutebban
bull 1 szaacutel poll() ciklus
bull minden esemeacuteny kezeleacutese aszinkron callbackekkel
bull kb 100k msgsec
syslog-ng ma
bullfőő szaacutel + worker threadek
bulla főő szaacutel figyeli az oumlsszes nyitott kapcsolatot (epoll) IO esemeacuteny eseteacuten annak teljes feldolgozaacutesaacutet aacutetadja a worker threadnek
bullIO esemeacutenyek
bullinput adat eacuterkezett (fetch process enqueue loop)
bulloutput iacuterhatoacutevaacute vaacutelt (dequeue format write loop)
bullNonblocking IO
bullWorker threadek szaacutema megegyezik a CPU-k szaacutemaacuteval
bullEgy taszk 1-4 msec időő alatt veacutegez (1-4000 uumlzenet feldolgozaacutesa)
Szűűk keresztmetszetek probleacutemaacutek
Thread vaacuteltaacutesDraacutega mert
bull kihűűl a cache
bull scheduler
bull context switch regiszterek TLB
Elkeruumlleacutes moacutedja
bull keveacutes thread (=CPU-k szaacutema) nonblocking IO
bull egy feladat kb egy időőszeletig fut se hosszabban se roumlvidebben
KeacuteslelteteacutesA latency oumlnmagaacuteban nem okoz CPU hasznaacutelatot de
bull egy feldolgozaacutesba beeacutepuumllve okozhatja annak jelentőős lassulaacutesaacutet
bull 1 msec keacuteslelteteacutes oumlnmagaacuteban nem sok de 1000 tranzakcioacute eseteacuten maacuter 1 mp-cel nyuacutejtja az időőt
Latency forraacutesok
bull lockok eacutes szinkronizaacutecioacutes primitiacutevek
bull OS esemeacutenyek (epoll)
Dinamikus memoacuteriamallocfree jelentős időrablaacutes 500ksec tranzakcioacutenaacutel
bull threadek koumlzti szinkronizaacutecioacute
bull laacutencolt listaacutek
bull tipikus egyik szaacutel lefoglal maacutesik felszabadiacutet
Elkeruumlleacutes moacutedja
bull alloca() ill fixen meacuteretezett vaacuteltozoacutek
bull per-thread allokaacutecioacutek hosszuacute taacutevon megőőrizve igeacuteny eseteacuten noumlvelve
bull LogMessage adatszerkezet bdquotoumlmoumlriacuteteacuteserdquo ideaacutelis esetben 1 mallocmsg
Lock contentionTipikus cache ping-pong
bull N szaacutel ugyanazt a mutexet lockolja egymaacutest vaacuteltva
bull a reader-writer locknaacutel eacutes az atomikus referencia szaacutemlaacuteloacutenaacutel is előőfordul
Ceacutel
bull egy egyseacuteg hasznos munkaacutera esőő szinkronizaacutecioacutes időő csoumlkkenteacutese
Elkeruumlleacutes moacutedja
bull per-thread vaacuteltozoacutek
bull adatszerkezet moacutedosiacutetaacutesa nagyobb felbontaacutesuacute mutexek hasznaacutelata
bull toumlbb munkaacutet veacutegzuumlnk egy lock veacutedelme alatt ld skaacutelaacutezhatoacute queue-k
A nem triviaacutelis koumlltseacutegek miatt egy szekvenciaacutelis program paacuterhuzamos vaacuteltozata gyakran lassabb
lesz elsőő alkalommal
Tipikus trade-off-ok
Konzisztencia sorrendiseacuteg vs sebesseacuteg
bull az abszoluacutet sorrend sok szinkronizaacutecioacutet koumlvetel meg ezek koumlzuumll nem mind fontos
Hasznaacutelt memoacuteria mennyiseacuteg vs sebesseacuteg
bull pl per-thread vaacuteltozoacutek paacuterhuzamos objektum peacuteldaacutenyok
Skaacutelaacutezhatoacute queue
Az input eacutes az output koumlzti oumlsszekoumlteacutest biztosiacutetja
bull input taszkok (N) beteszik az esemeacutenyeket
bull output taszk (1) kiveszi az esemeacutenyeket majd kikuumlldi
Triviaacutelis megoldaacutes
Mutex
Uumlzenetenkeacutent 4 szinkronizaacutecioacutet igeacutenylőő műűvelet (inputoutput x lock-unlock)
Hogyan lehetne javiacutetani
Mutex
per-thread input queue
Konzisztenciamemoacuteria vs performanceAtomikus műűveletek szaacutema kb felezőődik
Mutex
per-thread input queue
Atomikus műűveletek maacutesik fele is nagysaacutegrendekkel csoumlkken
Lockolatlan output queue
Lockless
Lockless veszeacutelyekCompiler reordering
CPU reordering (cache eacutes memoacuteria miatt)
Stale adatok jelenleacutete miatt
bull nehezen debuggolhatoacute ritkaacuten előőforduloacute hibaacutek
Mielőtt ilyenbe kezdesz
bull memory ordering
bull memory barriers
bull compiler reordering barriers
Oumlsszefoglalaacutes
bullPaacuterhuzamos programozaacutes okozhat meglepeteacuteseket
bullEgy algoritmus paacuterhuzamosiacutetaacutesa gyakran lassulaacutest eredmeacutenyez elsőőre
bullMeacutereacutes amp megeacuterteacutesƩ
VEacuteGE
lwnnetArticles250967
rdropcomuserspaulmckperfbookperfbook20110828apdf
Cache II
bullA cache a CPU eacutes a memoacuteria koumlzti gyorsiacutetoacutetaacuter
bullCPU aacuteltal automatikusan menedzselt program szaacutemaacutera transzparens
bullAsszociatiacutev taacuterolaacutes 32 byte-os egyseacutegekben (bdquocachelinerdquo)
Cache Hataacutesai
Egy algoritmus lehet utasiacutetaacutes szaacutemban minimaacutelis
13 13 13 13 13 13 13 13 13 EacuteS
Lassabb mint a toumlbb utasiacutetaacutesboacutel aacutelloacute de a cache-t hateacutekonyabban kihasznaacuteloacute vaacuteltozat
Cache amp SMP
bullEgy SMP rendszerben minden CPUcore kuumlloumln cache-sel rendelkezik
bullMemoacuteria mindegyik CPUcore szaacutemaacutera koumlzoumls
bullUgyanazon memoacuteria ciacutem eleacutereacuteseacutehez a CPU-k koumlzoumltt kommunikaacutecioacutera van szuumlkseacuteg
CPU-k koumlzti szinkronizaacutecioacute
MESI protokoll
bull Modified
bull Exclusive
bull Shared
bull Invalid
M E
S I
local read local writeremote read remote write
Kommunikaacutecioacute Hataacutesai
Egy laacutetszoacutelag egyszerűű műűvelethez moumlgoumltt komplex leacutepeacutesek toumlrteacutennek
A komplexitaacutes időőbe keruumll
Egy memoacuteria műűvelet
bull lehet 3 nagysaacutegrenddel lassabb
bull fuumlgghet a CPU-k szaacutemaacutetoacutel
Tipikus cache probleacutema
bull2 processzor veacutegez ugyanazon a cacheline-on felvaacuteltva atomikus write műűveletet (pl egy lock)
bullA write műűvelet miatt mindkeacutet CPU memoacuteriaacuteboacutel huacutezza be a cacheline-t mikoumlzben a maacutesik cache tartalmat invalidaacutelja
bullAka cache ping-pong
sch
Valoacutes tapasztalatok syslog-ng
syslog-ng
bullNaploacutezoacute szerver uumlzeneteket fogad TCP eacutes UDP csatornaacutekon
bullEgy uumlzenet egy sor
bullMinden sor kb 3-500 byte
bull~ ezer kapcsolat
bull~ neacutehaacuteny szaacutez ezer msgsec
Meacutereacutes reprodukcioacute
bdquoPremature optimization is the root of all evilrdquo - Donald Knuth
Meacutereacutes eacutes a reprodukaacutelhatoacute testcase fontos
bull ne kezdjuumlnk bele neacutelkuumlle
bull ismerjuumlk meg az eszkoumlzeinket
bull perf cachegrind gprof
syslog-ng műűkoumldeacutese
Bejoumlvőő uumlzenetek feldolgozaacutesa
bull beolvasaacutes parse-olaacutes szűűreacutesmoacutedosiacutetaacutes kikuumlldeacutes egy outputra
Kimenőő uumlzenetek feldolgozaacutesa
bull uumlzenet megformaacutezaacutesa kiiacuteraacutes egy faacutejlbahaacuteloacutezati kapcsolatra
syslog-ng koraacutebban
bull 1 szaacutel poll() ciklus
bull minden esemeacuteny kezeleacutese aszinkron callbackekkel
bull kb 100k msgsec
syslog-ng ma
bullfőő szaacutel + worker threadek
bulla főő szaacutel figyeli az oumlsszes nyitott kapcsolatot (epoll) IO esemeacuteny eseteacuten annak teljes feldolgozaacutesaacutet aacutetadja a worker threadnek
bullIO esemeacutenyek
bullinput adat eacuterkezett (fetch process enqueue loop)
bulloutput iacuterhatoacutevaacute vaacutelt (dequeue format write loop)
bullNonblocking IO
bullWorker threadek szaacutema megegyezik a CPU-k szaacutemaacuteval
bullEgy taszk 1-4 msec időő alatt veacutegez (1-4000 uumlzenet feldolgozaacutesa)
Szűűk keresztmetszetek probleacutemaacutek
Thread vaacuteltaacutesDraacutega mert
bull kihűűl a cache
bull scheduler
bull context switch regiszterek TLB
Elkeruumlleacutes moacutedja
bull keveacutes thread (=CPU-k szaacutema) nonblocking IO
bull egy feladat kb egy időőszeletig fut se hosszabban se roumlvidebben
KeacuteslelteteacutesA latency oumlnmagaacuteban nem okoz CPU hasznaacutelatot de
bull egy feldolgozaacutesba beeacutepuumllve okozhatja annak jelentőős lassulaacutesaacutet
bull 1 msec keacuteslelteteacutes oumlnmagaacuteban nem sok de 1000 tranzakcioacute eseteacuten maacuter 1 mp-cel nyuacutejtja az időőt
Latency forraacutesok
bull lockok eacutes szinkronizaacutecioacutes primitiacutevek
bull OS esemeacutenyek (epoll)
Dinamikus memoacuteriamallocfree jelentős időrablaacutes 500ksec tranzakcioacutenaacutel
bull threadek koumlzti szinkronizaacutecioacute
bull laacutencolt listaacutek
bull tipikus egyik szaacutel lefoglal maacutesik felszabadiacutet
Elkeruumlleacutes moacutedja
bull alloca() ill fixen meacuteretezett vaacuteltozoacutek
bull per-thread allokaacutecioacutek hosszuacute taacutevon megőőrizve igeacuteny eseteacuten noumlvelve
bull LogMessage adatszerkezet bdquotoumlmoumlriacuteteacuteserdquo ideaacutelis esetben 1 mallocmsg
Lock contentionTipikus cache ping-pong
bull N szaacutel ugyanazt a mutexet lockolja egymaacutest vaacuteltva
bull a reader-writer locknaacutel eacutes az atomikus referencia szaacutemlaacuteloacutenaacutel is előőfordul
Ceacutel
bull egy egyseacuteg hasznos munkaacutera esőő szinkronizaacutecioacutes időő csoumlkkenteacutese
Elkeruumlleacutes moacutedja
bull per-thread vaacuteltozoacutek
bull adatszerkezet moacutedosiacutetaacutesa nagyobb felbontaacutesuacute mutexek hasznaacutelata
bull toumlbb munkaacutet veacutegzuumlnk egy lock veacutedelme alatt ld skaacutelaacutezhatoacute queue-k
A nem triviaacutelis koumlltseacutegek miatt egy szekvenciaacutelis program paacuterhuzamos vaacuteltozata gyakran lassabb
lesz elsőő alkalommal
Tipikus trade-off-ok
Konzisztencia sorrendiseacuteg vs sebesseacuteg
bull az abszoluacutet sorrend sok szinkronizaacutecioacutet koumlvetel meg ezek koumlzuumll nem mind fontos
Hasznaacutelt memoacuteria mennyiseacuteg vs sebesseacuteg
bull pl per-thread vaacuteltozoacutek paacuterhuzamos objektum peacuteldaacutenyok
Skaacutelaacutezhatoacute queue
Az input eacutes az output koumlzti oumlsszekoumlteacutest biztosiacutetja
bull input taszkok (N) beteszik az esemeacutenyeket
bull output taszk (1) kiveszi az esemeacutenyeket majd kikuumlldi
Triviaacutelis megoldaacutes
Mutex
Uumlzenetenkeacutent 4 szinkronizaacutecioacutet igeacutenylőő műűvelet (inputoutput x lock-unlock)
Hogyan lehetne javiacutetani
Mutex
per-thread input queue
Konzisztenciamemoacuteria vs performanceAtomikus műűveletek szaacutema kb felezőődik
Mutex
per-thread input queue
Atomikus műűveletek maacutesik fele is nagysaacutegrendekkel csoumlkken
Lockolatlan output queue
Lockless
Lockless veszeacutelyekCompiler reordering
CPU reordering (cache eacutes memoacuteria miatt)
Stale adatok jelenleacutete miatt
bull nehezen debuggolhatoacute ritkaacuten előőforduloacute hibaacutek
Mielőtt ilyenbe kezdesz
bull memory ordering
bull memory barriers
bull compiler reordering barriers
Oumlsszefoglalaacutes
bullPaacuterhuzamos programozaacutes okozhat meglepeteacuteseket
bullEgy algoritmus paacuterhuzamosiacutetaacutesa gyakran lassulaacutest eredmeacutenyez elsőőre
bullMeacutereacutes amp megeacuterteacutesƩ
VEacuteGE
lwnnetArticles250967
rdropcomuserspaulmckperfbookperfbook20110828apdf
Cache Hataacutesai
Egy algoritmus lehet utasiacutetaacutes szaacutemban minimaacutelis
13 13 13 13 13 13 13 13 13 EacuteS
Lassabb mint a toumlbb utasiacutetaacutesboacutel aacutelloacute de a cache-t hateacutekonyabban kihasznaacuteloacute vaacuteltozat
Cache amp SMP
bullEgy SMP rendszerben minden CPUcore kuumlloumln cache-sel rendelkezik
bullMemoacuteria mindegyik CPUcore szaacutemaacutera koumlzoumls
bullUgyanazon memoacuteria ciacutem eleacutereacuteseacutehez a CPU-k koumlzoumltt kommunikaacutecioacutera van szuumlkseacuteg
CPU-k koumlzti szinkronizaacutecioacute
MESI protokoll
bull Modified
bull Exclusive
bull Shared
bull Invalid
M E
S I
local read local writeremote read remote write
Kommunikaacutecioacute Hataacutesai
Egy laacutetszoacutelag egyszerűű műűvelethez moumlgoumltt komplex leacutepeacutesek toumlrteacutennek
A komplexitaacutes időőbe keruumll
Egy memoacuteria műűvelet
bull lehet 3 nagysaacutegrenddel lassabb
bull fuumlgghet a CPU-k szaacutemaacutetoacutel
Tipikus cache probleacutema
bull2 processzor veacutegez ugyanazon a cacheline-on felvaacuteltva atomikus write műűveletet (pl egy lock)
bullA write műűvelet miatt mindkeacutet CPU memoacuteriaacuteboacutel huacutezza be a cacheline-t mikoumlzben a maacutesik cache tartalmat invalidaacutelja
bullAka cache ping-pong
sch
Valoacutes tapasztalatok syslog-ng
syslog-ng
bullNaploacutezoacute szerver uumlzeneteket fogad TCP eacutes UDP csatornaacutekon
bullEgy uumlzenet egy sor
bullMinden sor kb 3-500 byte
bull~ ezer kapcsolat
bull~ neacutehaacuteny szaacutez ezer msgsec
Meacutereacutes reprodukcioacute
bdquoPremature optimization is the root of all evilrdquo - Donald Knuth
Meacutereacutes eacutes a reprodukaacutelhatoacute testcase fontos
bull ne kezdjuumlnk bele neacutelkuumlle
bull ismerjuumlk meg az eszkoumlzeinket
bull perf cachegrind gprof
syslog-ng műűkoumldeacutese
Bejoumlvőő uumlzenetek feldolgozaacutesa
bull beolvasaacutes parse-olaacutes szűűreacutesmoacutedosiacutetaacutes kikuumlldeacutes egy outputra
Kimenőő uumlzenetek feldolgozaacutesa
bull uumlzenet megformaacutezaacutesa kiiacuteraacutes egy faacutejlbahaacuteloacutezati kapcsolatra
syslog-ng koraacutebban
bull 1 szaacutel poll() ciklus
bull minden esemeacuteny kezeleacutese aszinkron callbackekkel
bull kb 100k msgsec
syslog-ng ma
bullfőő szaacutel + worker threadek
bulla főő szaacutel figyeli az oumlsszes nyitott kapcsolatot (epoll) IO esemeacuteny eseteacuten annak teljes feldolgozaacutesaacutet aacutetadja a worker threadnek
bullIO esemeacutenyek
bullinput adat eacuterkezett (fetch process enqueue loop)
bulloutput iacuterhatoacutevaacute vaacutelt (dequeue format write loop)
bullNonblocking IO
bullWorker threadek szaacutema megegyezik a CPU-k szaacutemaacuteval
bullEgy taszk 1-4 msec időő alatt veacutegez (1-4000 uumlzenet feldolgozaacutesa)
Szűűk keresztmetszetek probleacutemaacutek
Thread vaacuteltaacutesDraacutega mert
bull kihűűl a cache
bull scheduler
bull context switch regiszterek TLB
Elkeruumlleacutes moacutedja
bull keveacutes thread (=CPU-k szaacutema) nonblocking IO
bull egy feladat kb egy időőszeletig fut se hosszabban se roumlvidebben
KeacuteslelteteacutesA latency oumlnmagaacuteban nem okoz CPU hasznaacutelatot de
bull egy feldolgozaacutesba beeacutepuumllve okozhatja annak jelentőős lassulaacutesaacutet
bull 1 msec keacuteslelteteacutes oumlnmagaacuteban nem sok de 1000 tranzakcioacute eseteacuten maacuter 1 mp-cel nyuacutejtja az időőt
Latency forraacutesok
bull lockok eacutes szinkronizaacutecioacutes primitiacutevek
bull OS esemeacutenyek (epoll)
Dinamikus memoacuteriamallocfree jelentős időrablaacutes 500ksec tranzakcioacutenaacutel
bull threadek koumlzti szinkronizaacutecioacute
bull laacutencolt listaacutek
bull tipikus egyik szaacutel lefoglal maacutesik felszabadiacutet
Elkeruumlleacutes moacutedja
bull alloca() ill fixen meacuteretezett vaacuteltozoacutek
bull per-thread allokaacutecioacutek hosszuacute taacutevon megőőrizve igeacuteny eseteacuten noumlvelve
bull LogMessage adatszerkezet bdquotoumlmoumlriacuteteacuteserdquo ideaacutelis esetben 1 mallocmsg
Lock contentionTipikus cache ping-pong
bull N szaacutel ugyanazt a mutexet lockolja egymaacutest vaacuteltva
bull a reader-writer locknaacutel eacutes az atomikus referencia szaacutemlaacuteloacutenaacutel is előőfordul
Ceacutel
bull egy egyseacuteg hasznos munkaacutera esőő szinkronizaacutecioacutes időő csoumlkkenteacutese
Elkeruumlleacutes moacutedja
bull per-thread vaacuteltozoacutek
bull adatszerkezet moacutedosiacutetaacutesa nagyobb felbontaacutesuacute mutexek hasznaacutelata
bull toumlbb munkaacutet veacutegzuumlnk egy lock veacutedelme alatt ld skaacutelaacutezhatoacute queue-k
A nem triviaacutelis koumlltseacutegek miatt egy szekvenciaacutelis program paacuterhuzamos vaacuteltozata gyakran lassabb
lesz elsőő alkalommal
Tipikus trade-off-ok
Konzisztencia sorrendiseacuteg vs sebesseacuteg
bull az abszoluacutet sorrend sok szinkronizaacutecioacutet koumlvetel meg ezek koumlzuumll nem mind fontos
Hasznaacutelt memoacuteria mennyiseacuteg vs sebesseacuteg
bull pl per-thread vaacuteltozoacutek paacuterhuzamos objektum peacuteldaacutenyok
Skaacutelaacutezhatoacute queue
Az input eacutes az output koumlzti oumlsszekoumlteacutest biztosiacutetja
bull input taszkok (N) beteszik az esemeacutenyeket
bull output taszk (1) kiveszi az esemeacutenyeket majd kikuumlldi
Triviaacutelis megoldaacutes
Mutex
Uumlzenetenkeacutent 4 szinkronizaacutecioacutet igeacutenylőő műűvelet (inputoutput x lock-unlock)
Hogyan lehetne javiacutetani
Mutex
per-thread input queue
Konzisztenciamemoacuteria vs performanceAtomikus műűveletek szaacutema kb felezőődik
Mutex
per-thread input queue
Atomikus műűveletek maacutesik fele is nagysaacutegrendekkel csoumlkken
Lockolatlan output queue
Lockless
Lockless veszeacutelyekCompiler reordering
CPU reordering (cache eacutes memoacuteria miatt)
Stale adatok jelenleacutete miatt
bull nehezen debuggolhatoacute ritkaacuten előőforduloacute hibaacutek
Mielőtt ilyenbe kezdesz
bull memory ordering
bull memory barriers
bull compiler reordering barriers
Oumlsszefoglalaacutes
bullPaacuterhuzamos programozaacutes okozhat meglepeteacuteseket
bullEgy algoritmus paacuterhuzamosiacutetaacutesa gyakran lassulaacutest eredmeacutenyez elsőőre
bullMeacutereacutes amp megeacuterteacutesƩ
VEacuteGE
lwnnetArticles250967
rdropcomuserspaulmckperfbookperfbook20110828apdf
Cache amp SMP
bullEgy SMP rendszerben minden CPUcore kuumlloumln cache-sel rendelkezik
bullMemoacuteria mindegyik CPUcore szaacutemaacutera koumlzoumls
bullUgyanazon memoacuteria ciacutem eleacutereacuteseacutehez a CPU-k koumlzoumltt kommunikaacutecioacutera van szuumlkseacuteg
CPU-k koumlzti szinkronizaacutecioacute
MESI protokoll
bull Modified
bull Exclusive
bull Shared
bull Invalid
M E
S I
local read local writeremote read remote write
Kommunikaacutecioacute Hataacutesai
Egy laacutetszoacutelag egyszerűű műűvelethez moumlgoumltt komplex leacutepeacutesek toumlrteacutennek
A komplexitaacutes időőbe keruumll
Egy memoacuteria műűvelet
bull lehet 3 nagysaacutegrenddel lassabb
bull fuumlgghet a CPU-k szaacutemaacutetoacutel
Tipikus cache probleacutema
bull2 processzor veacutegez ugyanazon a cacheline-on felvaacuteltva atomikus write műűveletet (pl egy lock)
bullA write műűvelet miatt mindkeacutet CPU memoacuteriaacuteboacutel huacutezza be a cacheline-t mikoumlzben a maacutesik cache tartalmat invalidaacutelja
bullAka cache ping-pong
sch
Valoacutes tapasztalatok syslog-ng
syslog-ng
bullNaploacutezoacute szerver uumlzeneteket fogad TCP eacutes UDP csatornaacutekon
bullEgy uumlzenet egy sor
bullMinden sor kb 3-500 byte
bull~ ezer kapcsolat
bull~ neacutehaacuteny szaacutez ezer msgsec
Meacutereacutes reprodukcioacute
bdquoPremature optimization is the root of all evilrdquo - Donald Knuth
Meacutereacutes eacutes a reprodukaacutelhatoacute testcase fontos
bull ne kezdjuumlnk bele neacutelkuumlle
bull ismerjuumlk meg az eszkoumlzeinket
bull perf cachegrind gprof
syslog-ng műűkoumldeacutese
Bejoumlvőő uumlzenetek feldolgozaacutesa
bull beolvasaacutes parse-olaacutes szűűreacutesmoacutedosiacutetaacutes kikuumlldeacutes egy outputra
Kimenőő uumlzenetek feldolgozaacutesa
bull uumlzenet megformaacutezaacutesa kiiacuteraacutes egy faacutejlbahaacuteloacutezati kapcsolatra
syslog-ng koraacutebban
bull 1 szaacutel poll() ciklus
bull minden esemeacuteny kezeleacutese aszinkron callbackekkel
bull kb 100k msgsec
syslog-ng ma
bullfőő szaacutel + worker threadek
bulla főő szaacutel figyeli az oumlsszes nyitott kapcsolatot (epoll) IO esemeacuteny eseteacuten annak teljes feldolgozaacutesaacutet aacutetadja a worker threadnek
bullIO esemeacutenyek
bullinput adat eacuterkezett (fetch process enqueue loop)
bulloutput iacuterhatoacutevaacute vaacutelt (dequeue format write loop)
bullNonblocking IO
bullWorker threadek szaacutema megegyezik a CPU-k szaacutemaacuteval
bullEgy taszk 1-4 msec időő alatt veacutegez (1-4000 uumlzenet feldolgozaacutesa)
Szűűk keresztmetszetek probleacutemaacutek
Thread vaacuteltaacutesDraacutega mert
bull kihűűl a cache
bull scheduler
bull context switch regiszterek TLB
Elkeruumlleacutes moacutedja
bull keveacutes thread (=CPU-k szaacutema) nonblocking IO
bull egy feladat kb egy időőszeletig fut se hosszabban se roumlvidebben
KeacuteslelteteacutesA latency oumlnmagaacuteban nem okoz CPU hasznaacutelatot de
bull egy feldolgozaacutesba beeacutepuumllve okozhatja annak jelentőős lassulaacutesaacutet
bull 1 msec keacuteslelteteacutes oumlnmagaacuteban nem sok de 1000 tranzakcioacute eseteacuten maacuter 1 mp-cel nyuacutejtja az időőt
Latency forraacutesok
bull lockok eacutes szinkronizaacutecioacutes primitiacutevek
bull OS esemeacutenyek (epoll)
Dinamikus memoacuteriamallocfree jelentős időrablaacutes 500ksec tranzakcioacutenaacutel
bull threadek koumlzti szinkronizaacutecioacute
bull laacutencolt listaacutek
bull tipikus egyik szaacutel lefoglal maacutesik felszabadiacutet
Elkeruumlleacutes moacutedja
bull alloca() ill fixen meacuteretezett vaacuteltozoacutek
bull per-thread allokaacutecioacutek hosszuacute taacutevon megőőrizve igeacuteny eseteacuten noumlvelve
bull LogMessage adatszerkezet bdquotoumlmoumlriacuteteacuteserdquo ideaacutelis esetben 1 mallocmsg
Lock contentionTipikus cache ping-pong
bull N szaacutel ugyanazt a mutexet lockolja egymaacutest vaacuteltva
bull a reader-writer locknaacutel eacutes az atomikus referencia szaacutemlaacuteloacutenaacutel is előőfordul
Ceacutel
bull egy egyseacuteg hasznos munkaacutera esőő szinkronizaacutecioacutes időő csoumlkkenteacutese
Elkeruumlleacutes moacutedja
bull per-thread vaacuteltozoacutek
bull adatszerkezet moacutedosiacutetaacutesa nagyobb felbontaacutesuacute mutexek hasznaacutelata
bull toumlbb munkaacutet veacutegzuumlnk egy lock veacutedelme alatt ld skaacutelaacutezhatoacute queue-k
A nem triviaacutelis koumlltseacutegek miatt egy szekvenciaacutelis program paacuterhuzamos vaacuteltozata gyakran lassabb
lesz elsőő alkalommal
Tipikus trade-off-ok
Konzisztencia sorrendiseacuteg vs sebesseacuteg
bull az abszoluacutet sorrend sok szinkronizaacutecioacutet koumlvetel meg ezek koumlzuumll nem mind fontos
Hasznaacutelt memoacuteria mennyiseacuteg vs sebesseacuteg
bull pl per-thread vaacuteltozoacutek paacuterhuzamos objektum peacuteldaacutenyok
Skaacutelaacutezhatoacute queue
Az input eacutes az output koumlzti oumlsszekoumlteacutest biztosiacutetja
bull input taszkok (N) beteszik az esemeacutenyeket
bull output taszk (1) kiveszi az esemeacutenyeket majd kikuumlldi
Triviaacutelis megoldaacutes
Mutex
Uumlzenetenkeacutent 4 szinkronizaacutecioacutet igeacutenylőő műűvelet (inputoutput x lock-unlock)
Hogyan lehetne javiacutetani
Mutex
per-thread input queue
Konzisztenciamemoacuteria vs performanceAtomikus műűveletek szaacutema kb felezőődik
Mutex
per-thread input queue
Atomikus műűveletek maacutesik fele is nagysaacutegrendekkel csoumlkken
Lockolatlan output queue
Lockless
Lockless veszeacutelyekCompiler reordering
CPU reordering (cache eacutes memoacuteria miatt)
Stale adatok jelenleacutete miatt
bull nehezen debuggolhatoacute ritkaacuten előőforduloacute hibaacutek
Mielőtt ilyenbe kezdesz
bull memory ordering
bull memory barriers
bull compiler reordering barriers
Oumlsszefoglalaacutes
bullPaacuterhuzamos programozaacutes okozhat meglepeteacuteseket
bullEgy algoritmus paacuterhuzamosiacutetaacutesa gyakran lassulaacutest eredmeacutenyez elsőőre
bullMeacutereacutes amp megeacuterteacutesƩ
VEacuteGE
lwnnetArticles250967
rdropcomuserspaulmckperfbookperfbook20110828apdf
CPU-k koumlzti szinkronizaacutecioacute
MESI protokoll
bull Modified
bull Exclusive
bull Shared
bull Invalid
M E
S I
local read local writeremote read remote write
Kommunikaacutecioacute Hataacutesai
Egy laacutetszoacutelag egyszerűű műűvelethez moumlgoumltt komplex leacutepeacutesek toumlrteacutennek
A komplexitaacutes időőbe keruumll
Egy memoacuteria műűvelet
bull lehet 3 nagysaacutegrenddel lassabb
bull fuumlgghet a CPU-k szaacutemaacutetoacutel
Tipikus cache probleacutema
bull2 processzor veacutegez ugyanazon a cacheline-on felvaacuteltva atomikus write műűveletet (pl egy lock)
bullA write műűvelet miatt mindkeacutet CPU memoacuteriaacuteboacutel huacutezza be a cacheline-t mikoumlzben a maacutesik cache tartalmat invalidaacutelja
bullAka cache ping-pong
sch
Valoacutes tapasztalatok syslog-ng
syslog-ng
bullNaploacutezoacute szerver uumlzeneteket fogad TCP eacutes UDP csatornaacutekon
bullEgy uumlzenet egy sor
bullMinden sor kb 3-500 byte
bull~ ezer kapcsolat
bull~ neacutehaacuteny szaacutez ezer msgsec
Meacutereacutes reprodukcioacute
bdquoPremature optimization is the root of all evilrdquo - Donald Knuth
Meacutereacutes eacutes a reprodukaacutelhatoacute testcase fontos
bull ne kezdjuumlnk bele neacutelkuumlle
bull ismerjuumlk meg az eszkoumlzeinket
bull perf cachegrind gprof
syslog-ng műűkoumldeacutese
Bejoumlvőő uumlzenetek feldolgozaacutesa
bull beolvasaacutes parse-olaacutes szűűreacutesmoacutedosiacutetaacutes kikuumlldeacutes egy outputra
Kimenőő uumlzenetek feldolgozaacutesa
bull uumlzenet megformaacutezaacutesa kiiacuteraacutes egy faacutejlbahaacuteloacutezati kapcsolatra
syslog-ng koraacutebban
bull 1 szaacutel poll() ciklus
bull minden esemeacuteny kezeleacutese aszinkron callbackekkel
bull kb 100k msgsec
syslog-ng ma
bullfőő szaacutel + worker threadek
bulla főő szaacutel figyeli az oumlsszes nyitott kapcsolatot (epoll) IO esemeacuteny eseteacuten annak teljes feldolgozaacutesaacutet aacutetadja a worker threadnek
bullIO esemeacutenyek
bullinput adat eacuterkezett (fetch process enqueue loop)
bulloutput iacuterhatoacutevaacute vaacutelt (dequeue format write loop)
bullNonblocking IO
bullWorker threadek szaacutema megegyezik a CPU-k szaacutemaacuteval
bullEgy taszk 1-4 msec időő alatt veacutegez (1-4000 uumlzenet feldolgozaacutesa)
Szűűk keresztmetszetek probleacutemaacutek
Thread vaacuteltaacutesDraacutega mert
bull kihűűl a cache
bull scheduler
bull context switch regiszterek TLB
Elkeruumlleacutes moacutedja
bull keveacutes thread (=CPU-k szaacutema) nonblocking IO
bull egy feladat kb egy időőszeletig fut se hosszabban se roumlvidebben
KeacuteslelteteacutesA latency oumlnmagaacuteban nem okoz CPU hasznaacutelatot de
bull egy feldolgozaacutesba beeacutepuumllve okozhatja annak jelentőős lassulaacutesaacutet
bull 1 msec keacuteslelteteacutes oumlnmagaacuteban nem sok de 1000 tranzakcioacute eseteacuten maacuter 1 mp-cel nyuacutejtja az időőt
Latency forraacutesok
bull lockok eacutes szinkronizaacutecioacutes primitiacutevek
bull OS esemeacutenyek (epoll)
Dinamikus memoacuteriamallocfree jelentős időrablaacutes 500ksec tranzakcioacutenaacutel
bull threadek koumlzti szinkronizaacutecioacute
bull laacutencolt listaacutek
bull tipikus egyik szaacutel lefoglal maacutesik felszabadiacutet
Elkeruumlleacutes moacutedja
bull alloca() ill fixen meacuteretezett vaacuteltozoacutek
bull per-thread allokaacutecioacutek hosszuacute taacutevon megőőrizve igeacuteny eseteacuten noumlvelve
bull LogMessage adatszerkezet bdquotoumlmoumlriacuteteacuteserdquo ideaacutelis esetben 1 mallocmsg
Lock contentionTipikus cache ping-pong
bull N szaacutel ugyanazt a mutexet lockolja egymaacutest vaacuteltva
bull a reader-writer locknaacutel eacutes az atomikus referencia szaacutemlaacuteloacutenaacutel is előőfordul
Ceacutel
bull egy egyseacuteg hasznos munkaacutera esőő szinkronizaacutecioacutes időő csoumlkkenteacutese
Elkeruumlleacutes moacutedja
bull per-thread vaacuteltozoacutek
bull adatszerkezet moacutedosiacutetaacutesa nagyobb felbontaacutesuacute mutexek hasznaacutelata
bull toumlbb munkaacutet veacutegzuumlnk egy lock veacutedelme alatt ld skaacutelaacutezhatoacute queue-k
A nem triviaacutelis koumlltseacutegek miatt egy szekvenciaacutelis program paacuterhuzamos vaacuteltozata gyakran lassabb
lesz elsőő alkalommal
Tipikus trade-off-ok
Konzisztencia sorrendiseacuteg vs sebesseacuteg
bull az abszoluacutet sorrend sok szinkronizaacutecioacutet koumlvetel meg ezek koumlzuumll nem mind fontos
Hasznaacutelt memoacuteria mennyiseacuteg vs sebesseacuteg
bull pl per-thread vaacuteltozoacutek paacuterhuzamos objektum peacuteldaacutenyok
Skaacutelaacutezhatoacute queue
Az input eacutes az output koumlzti oumlsszekoumlteacutest biztosiacutetja
bull input taszkok (N) beteszik az esemeacutenyeket
bull output taszk (1) kiveszi az esemeacutenyeket majd kikuumlldi
Triviaacutelis megoldaacutes
Mutex
Uumlzenetenkeacutent 4 szinkronizaacutecioacutet igeacutenylőő műűvelet (inputoutput x lock-unlock)
Hogyan lehetne javiacutetani
Mutex
per-thread input queue
Konzisztenciamemoacuteria vs performanceAtomikus műűveletek szaacutema kb felezőődik
Mutex
per-thread input queue
Atomikus műűveletek maacutesik fele is nagysaacutegrendekkel csoumlkken
Lockolatlan output queue
Lockless
Lockless veszeacutelyekCompiler reordering
CPU reordering (cache eacutes memoacuteria miatt)
Stale adatok jelenleacutete miatt
bull nehezen debuggolhatoacute ritkaacuten előőforduloacute hibaacutek
Mielőtt ilyenbe kezdesz
bull memory ordering
bull memory barriers
bull compiler reordering barriers
Oumlsszefoglalaacutes
bullPaacuterhuzamos programozaacutes okozhat meglepeteacuteseket
bullEgy algoritmus paacuterhuzamosiacutetaacutesa gyakran lassulaacutest eredmeacutenyez elsőőre
bullMeacutereacutes amp megeacuterteacutesƩ
VEacuteGE
lwnnetArticles250967
rdropcomuserspaulmckperfbookperfbook20110828apdf
Kommunikaacutecioacute Hataacutesai
Egy laacutetszoacutelag egyszerűű műűvelethez moumlgoumltt komplex leacutepeacutesek toumlrteacutennek
A komplexitaacutes időőbe keruumll
Egy memoacuteria műűvelet
bull lehet 3 nagysaacutegrenddel lassabb
bull fuumlgghet a CPU-k szaacutemaacutetoacutel
Tipikus cache probleacutema
bull2 processzor veacutegez ugyanazon a cacheline-on felvaacuteltva atomikus write műűveletet (pl egy lock)
bullA write műűvelet miatt mindkeacutet CPU memoacuteriaacuteboacutel huacutezza be a cacheline-t mikoumlzben a maacutesik cache tartalmat invalidaacutelja
bullAka cache ping-pong
sch
Valoacutes tapasztalatok syslog-ng
syslog-ng
bullNaploacutezoacute szerver uumlzeneteket fogad TCP eacutes UDP csatornaacutekon
bullEgy uumlzenet egy sor
bullMinden sor kb 3-500 byte
bull~ ezer kapcsolat
bull~ neacutehaacuteny szaacutez ezer msgsec
Meacutereacutes reprodukcioacute
bdquoPremature optimization is the root of all evilrdquo - Donald Knuth
Meacutereacutes eacutes a reprodukaacutelhatoacute testcase fontos
bull ne kezdjuumlnk bele neacutelkuumlle
bull ismerjuumlk meg az eszkoumlzeinket
bull perf cachegrind gprof
syslog-ng műűkoumldeacutese
Bejoumlvőő uumlzenetek feldolgozaacutesa
bull beolvasaacutes parse-olaacutes szűűreacutesmoacutedosiacutetaacutes kikuumlldeacutes egy outputra
Kimenőő uumlzenetek feldolgozaacutesa
bull uumlzenet megformaacutezaacutesa kiiacuteraacutes egy faacutejlbahaacuteloacutezati kapcsolatra
syslog-ng koraacutebban
bull 1 szaacutel poll() ciklus
bull minden esemeacuteny kezeleacutese aszinkron callbackekkel
bull kb 100k msgsec
syslog-ng ma
bullfőő szaacutel + worker threadek
bulla főő szaacutel figyeli az oumlsszes nyitott kapcsolatot (epoll) IO esemeacuteny eseteacuten annak teljes feldolgozaacutesaacutet aacutetadja a worker threadnek
bullIO esemeacutenyek
bullinput adat eacuterkezett (fetch process enqueue loop)
bulloutput iacuterhatoacutevaacute vaacutelt (dequeue format write loop)
bullNonblocking IO
bullWorker threadek szaacutema megegyezik a CPU-k szaacutemaacuteval
bullEgy taszk 1-4 msec időő alatt veacutegez (1-4000 uumlzenet feldolgozaacutesa)
Szűűk keresztmetszetek probleacutemaacutek
Thread vaacuteltaacutesDraacutega mert
bull kihűűl a cache
bull scheduler
bull context switch regiszterek TLB
Elkeruumlleacutes moacutedja
bull keveacutes thread (=CPU-k szaacutema) nonblocking IO
bull egy feladat kb egy időőszeletig fut se hosszabban se roumlvidebben
KeacuteslelteteacutesA latency oumlnmagaacuteban nem okoz CPU hasznaacutelatot de
bull egy feldolgozaacutesba beeacutepuumllve okozhatja annak jelentőős lassulaacutesaacutet
bull 1 msec keacuteslelteteacutes oumlnmagaacuteban nem sok de 1000 tranzakcioacute eseteacuten maacuter 1 mp-cel nyuacutejtja az időőt
Latency forraacutesok
bull lockok eacutes szinkronizaacutecioacutes primitiacutevek
bull OS esemeacutenyek (epoll)
Dinamikus memoacuteriamallocfree jelentős időrablaacutes 500ksec tranzakcioacutenaacutel
bull threadek koumlzti szinkronizaacutecioacute
bull laacutencolt listaacutek
bull tipikus egyik szaacutel lefoglal maacutesik felszabadiacutet
Elkeruumlleacutes moacutedja
bull alloca() ill fixen meacuteretezett vaacuteltozoacutek
bull per-thread allokaacutecioacutek hosszuacute taacutevon megőőrizve igeacuteny eseteacuten noumlvelve
bull LogMessage adatszerkezet bdquotoumlmoumlriacuteteacuteserdquo ideaacutelis esetben 1 mallocmsg
Lock contentionTipikus cache ping-pong
bull N szaacutel ugyanazt a mutexet lockolja egymaacutest vaacuteltva
bull a reader-writer locknaacutel eacutes az atomikus referencia szaacutemlaacuteloacutenaacutel is előőfordul
Ceacutel
bull egy egyseacuteg hasznos munkaacutera esőő szinkronizaacutecioacutes időő csoumlkkenteacutese
Elkeruumlleacutes moacutedja
bull per-thread vaacuteltozoacutek
bull adatszerkezet moacutedosiacutetaacutesa nagyobb felbontaacutesuacute mutexek hasznaacutelata
bull toumlbb munkaacutet veacutegzuumlnk egy lock veacutedelme alatt ld skaacutelaacutezhatoacute queue-k
A nem triviaacutelis koumlltseacutegek miatt egy szekvenciaacutelis program paacuterhuzamos vaacuteltozata gyakran lassabb
lesz elsőő alkalommal
Tipikus trade-off-ok
Konzisztencia sorrendiseacuteg vs sebesseacuteg
bull az abszoluacutet sorrend sok szinkronizaacutecioacutet koumlvetel meg ezek koumlzuumll nem mind fontos
Hasznaacutelt memoacuteria mennyiseacuteg vs sebesseacuteg
bull pl per-thread vaacuteltozoacutek paacuterhuzamos objektum peacuteldaacutenyok
Skaacutelaacutezhatoacute queue
Az input eacutes az output koumlzti oumlsszekoumlteacutest biztosiacutetja
bull input taszkok (N) beteszik az esemeacutenyeket
bull output taszk (1) kiveszi az esemeacutenyeket majd kikuumlldi
Triviaacutelis megoldaacutes
Mutex
Uumlzenetenkeacutent 4 szinkronizaacutecioacutet igeacutenylőő műűvelet (inputoutput x lock-unlock)
Hogyan lehetne javiacutetani
Mutex
per-thread input queue
Konzisztenciamemoacuteria vs performanceAtomikus műűveletek szaacutema kb felezőődik
Mutex
per-thread input queue
Atomikus műűveletek maacutesik fele is nagysaacutegrendekkel csoumlkken
Lockolatlan output queue
Lockless
Lockless veszeacutelyekCompiler reordering
CPU reordering (cache eacutes memoacuteria miatt)
Stale adatok jelenleacutete miatt
bull nehezen debuggolhatoacute ritkaacuten előőforduloacute hibaacutek
Mielőtt ilyenbe kezdesz
bull memory ordering
bull memory barriers
bull compiler reordering barriers
Oumlsszefoglalaacutes
bullPaacuterhuzamos programozaacutes okozhat meglepeteacuteseket
bullEgy algoritmus paacuterhuzamosiacutetaacutesa gyakran lassulaacutest eredmeacutenyez elsőőre
bullMeacutereacutes amp megeacuterteacutesƩ
VEacuteGE
lwnnetArticles250967
rdropcomuserspaulmckperfbookperfbook20110828apdf
Tipikus cache probleacutema
bull2 processzor veacutegez ugyanazon a cacheline-on felvaacuteltva atomikus write műűveletet (pl egy lock)
bullA write műűvelet miatt mindkeacutet CPU memoacuteriaacuteboacutel huacutezza be a cacheline-t mikoumlzben a maacutesik cache tartalmat invalidaacutelja
bullAka cache ping-pong
sch
Valoacutes tapasztalatok syslog-ng
syslog-ng
bullNaploacutezoacute szerver uumlzeneteket fogad TCP eacutes UDP csatornaacutekon
bullEgy uumlzenet egy sor
bullMinden sor kb 3-500 byte
bull~ ezer kapcsolat
bull~ neacutehaacuteny szaacutez ezer msgsec
Meacutereacutes reprodukcioacute
bdquoPremature optimization is the root of all evilrdquo - Donald Knuth
Meacutereacutes eacutes a reprodukaacutelhatoacute testcase fontos
bull ne kezdjuumlnk bele neacutelkuumlle
bull ismerjuumlk meg az eszkoumlzeinket
bull perf cachegrind gprof
syslog-ng műűkoumldeacutese
Bejoumlvőő uumlzenetek feldolgozaacutesa
bull beolvasaacutes parse-olaacutes szűűreacutesmoacutedosiacutetaacutes kikuumlldeacutes egy outputra
Kimenőő uumlzenetek feldolgozaacutesa
bull uumlzenet megformaacutezaacutesa kiiacuteraacutes egy faacutejlbahaacuteloacutezati kapcsolatra
syslog-ng koraacutebban
bull 1 szaacutel poll() ciklus
bull minden esemeacuteny kezeleacutese aszinkron callbackekkel
bull kb 100k msgsec
syslog-ng ma
bullfőő szaacutel + worker threadek
bulla főő szaacutel figyeli az oumlsszes nyitott kapcsolatot (epoll) IO esemeacuteny eseteacuten annak teljes feldolgozaacutesaacutet aacutetadja a worker threadnek
bullIO esemeacutenyek
bullinput adat eacuterkezett (fetch process enqueue loop)
bulloutput iacuterhatoacutevaacute vaacutelt (dequeue format write loop)
bullNonblocking IO
bullWorker threadek szaacutema megegyezik a CPU-k szaacutemaacuteval
bullEgy taszk 1-4 msec időő alatt veacutegez (1-4000 uumlzenet feldolgozaacutesa)
Szűűk keresztmetszetek probleacutemaacutek
Thread vaacuteltaacutesDraacutega mert
bull kihűűl a cache
bull scheduler
bull context switch regiszterek TLB
Elkeruumlleacutes moacutedja
bull keveacutes thread (=CPU-k szaacutema) nonblocking IO
bull egy feladat kb egy időőszeletig fut se hosszabban se roumlvidebben
KeacuteslelteteacutesA latency oumlnmagaacuteban nem okoz CPU hasznaacutelatot de
bull egy feldolgozaacutesba beeacutepuumllve okozhatja annak jelentőős lassulaacutesaacutet
bull 1 msec keacuteslelteteacutes oumlnmagaacuteban nem sok de 1000 tranzakcioacute eseteacuten maacuter 1 mp-cel nyuacutejtja az időőt
Latency forraacutesok
bull lockok eacutes szinkronizaacutecioacutes primitiacutevek
bull OS esemeacutenyek (epoll)
Dinamikus memoacuteriamallocfree jelentős időrablaacutes 500ksec tranzakcioacutenaacutel
bull threadek koumlzti szinkronizaacutecioacute
bull laacutencolt listaacutek
bull tipikus egyik szaacutel lefoglal maacutesik felszabadiacutet
Elkeruumlleacutes moacutedja
bull alloca() ill fixen meacuteretezett vaacuteltozoacutek
bull per-thread allokaacutecioacutek hosszuacute taacutevon megőőrizve igeacuteny eseteacuten noumlvelve
bull LogMessage adatszerkezet bdquotoumlmoumlriacuteteacuteserdquo ideaacutelis esetben 1 mallocmsg
Lock contentionTipikus cache ping-pong
bull N szaacutel ugyanazt a mutexet lockolja egymaacutest vaacuteltva
bull a reader-writer locknaacutel eacutes az atomikus referencia szaacutemlaacuteloacutenaacutel is előőfordul
Ceacutel
bull egy egyseacuteg hasznos munkaacutera esőő szinkronizaacutecioacutes időő csoumlkkenteacutese
Elkeruumlleacutes moacutedja
bull per-thread vaacuteltozoacutek
bull adatszerkezet moacutedosiacutetaacutesa nagyobb felbontaacutesuacute mutexek hasznaacutelata
bull toumlbb munkaacutet veacutegzuumlnk egy lock veacutedelme alatt ld skaacutelaacutezhatoacute queue-k
A nem triviaacutelis koumlltseacutegek miatt egy szekvenciaacutelis program paacuterhuzamos vaacuteltozata gyakran lassabb
lesz elsőő alkalommal
Tipikus trade-off-ok
Konzisztencia sorrendiseacuteg vs sebesseacuteg
bull az abszoluacutet sorrend sok szinkronizaacutecioacutet koumlvetel meg ezek koumlzuumll nem mind fontos
Hasznaacutelt memoacuteria mennyiseacuteg vs sebesseacuteg
bull pl per-thread vaacuteltozoacutek paacuterhuzamos objektum peacuteldaacutenyok
Skaacutelaacutezhatoacute queue
Az input eacutes az output koumlzti oumlsszekoumlteacutest biztosiacutetja
bull input taszkok (N) beteszik az esemeacutenyeket
bull output taszk (1) kiveszi az esemeacutenyeket majd kikuumlldi
Triviaacutelis megoldaacutes
Mutex
Uumlzenetenkeacutent 4 szinkronizaacutecioacutet igeacutenylőő műűvelet (inputoutput x lock-unlock)
Hogyan lehetne javiacutetani
Mutex
per-thread input queue
Konzisztenciamemoacuteria vs performanceAtomikus műűveletek szaacutema kb felezőődik
Mutex
per-thread input queue
Atomikus műűveletek maacutesik fele is nagysaacutegrendekkel csoumlkken
Lockolatlan output queue
Lockless
Lockless veszeacutelyekCompiler reordering
CPU reordering (cache eacutes memoacuteria miatt)
Stale adatok jelenleacutete miatt
bull nehezen debuggolhatoacute ritkaacuten előőforduloacute hibaacutek
Mielőtt ilyenbe kezdesz
bull memory ordering
bull memory barriers
bull compiler reordering barriers
Oumlsszefoglalaacutes
bullPaacuterhuzamos programozaacutes okozhat meglepeteacuteseket
bullEgy algoritmus paacuterhuzamosiacutetaacutesa gyakran lassulaacutest eredmeacutenyez elsőőre
bullMeacutereacutes amp megeacuterteacutesƩ
VEacuteGE
lwnnetArticles250967
rdropcomuserspaulmckperfbookperfbook20110828apdf
Valoacutes tapasztalatok syslog-ng
syslog-ng
bullNaploacutezoacute szerver uumlzeneteket fogad TCP eacutes UDP csatornaacutekon
bullEgy uumlzenet egy sor
bullMinden sor kb 3-500 byte
bull~ ezer kapcsolat
bull~ neacutehaacuteny szaacutez ezer msgsec
Meacutereacutes reprodukcioacute
bdquoPremature optimization is the root of all evilrdquo - Donald Knuth
Meacutereacutes eacutes a reprodukaacutelhatoacute testcase fontos
bull ne kezdjuumlnk bele neacutelkuumlle
bull ismerjuumlk meg az eszkoumlzeinket
bull perf cachegrind gprof
syslog-ng műűkoumldeacutese
Bejoumlvőő uumlzenetek feldolgozaacutesa
bull beolvasaacutes parse-olaacutes szűűreacutesmoacutedosiacutetaacutes kikuumlldeacutes egy outputra
Kimenőő uumlzenetek feldolgozaacutesa
bull uumlzenet megformaacutezaacutesa kiiacuteraacutes egy faacutejlbahaacuteloacutezati kapcsolatra
syslog-ng koraacutebban
bull 1 szaacutel poll() ciklus
bull minden esemeacuteny kezeleacutese aszinkron callbackekkel
bull kb 100k msgsec
syslog-ng ma
bullfőő szaacutel + worker threadek
bulla főő szaacutel figyeli az oumlsszes nyitott kapcsolatot (epoll) IO esemeacuteny eseteacuten annak teljes feldolgozaacutesaacutet aacutetadja a worker threadnek
bullIO esemeacutenyek
bullinput adat eacuterkezett (fetch process enqueue loop)
bulloutput iacuterhatoacutevaacute vaacutelt (dequeue format write loop)
bullNonblocking IO
bullWorker threadek szaacutema megegyezik a CPU-k szaacutemaacuteval
bullEgy taszk 1-4 msec időő alatt veacutegez (1-4000 uumlzenet feldolgozaacutesa)
Szűűk keresztmetszetek probleacutemaacutek
Thread vaacuteltaacutesDraacutega mert
bull kihűűl a cache
bull scheduler
bull context switch regiszterek TLB
Elkeruumlleacutes moacutedja
bull keveacutes thread (=CPU-k szaacutema) nonblocking IO
bull egy feladat kb egy időőszeletig fut se hosszabban se roumlvidebben
KeacuteslelteteacutesA latency oumlnmagaacuteban nem okoz CPU hasznaacutelatot de
bull egy feldolgozaacutesba beeacutepuumllve okozhatja annak jelentőős lassulaacutesaacutet
bull 1 msec keacuteslelteteacutes oumlnmagaacuteban nem sok de 1000 tranzakcioacute eseteacuten maacuter 1 mp-cel nyuacutejtja az időőt
Latency forraacutesok
bull lockok eacutes szinkronizaacutecioacutes primitiacutevek
bull OS esemeacutenyek (epoll)
Dinamikus memoacuteriamallocfree jelentős időrablaacutes 500ksec tranzakcioacutenaacutel
bull threadek koumlzti szinkronizaacutecioacute
bull laacutencolt listaacutek
bull tipikus egyik szaacutel lefoglal maacutesik felszabadiacutet
Elkeruumlleacutes moacutedja
bull alloca() ill fixen meacuteretezett vaacuteltozoacutek
bull per-thread allokaacutecioacutek hosszuacute taacutevon megőőrizve igeacuteny eseteacuten noumlvelve
bull LogMessage adatszerkezet bdquotoumlmoumlriacuteteacuteserdquo ideaacutelis esetben 1 mallocmsg
Lock contentionTipikus cache ping-pong
bull N szaacutel ugyanazt a mutexet lockolja egymaacutest vaacuteltva
bull a reader-writer locknaacutel eacutes az atomikus referencia szaacutemlaacuteloacutenaacutel is előőfordul
Ceacutel
bull egy egyseacuteg hasznos munkaacutera esőő szinkronizaacutecioacutes időő csoumlkkenteacutese
Elkeruumlleacutes moacutedja
bull per-thread vaacuteltozoacutek
bull adatszerkezet moacutedosiacutetaacutesa nagyobb felbontaacutesuacute mutexek hasznaacutelata
bull toumlbb munkaacutet veacutegzuumlnk egy lock veacutedelme alatt ld skaacutelaacutezhatoacute queue-k
A nem triviaacutelis koumlltseacutegek miatt egy szekvenciaacutelis program paacuterhuzamos vaacuteltozata gyakran lassabb
lesz elsőő alkalommal
Tipikus trade-off-ok
Konzisztencia sorrendiseacuteg vs sebesseacuteg
bull az abszoluacutet sorrend sok szinkronizaacutecioacutet koumlvetel meg ezek koumlzuumll nem mind fontos
Hasznaacutelt memoacuteria mennyiseacuteg vs sebesseacuteg
bull pl per-thread vaacuteltozoacutek paacuterhuzamos objektum peacuteldaacutenyok
Skaacutelaacutezhatoacute queue
Az input eacutes az output koumlzti oumlsszekoumlteacutest biztosiacutetja
bull input taszkok (N) beteszik az esemeacutenyeket
bull output taszk (1) kiveszi az esemeacutenyeket majd kikuumlldi
Triviaacutelis megoldaacutes
Mutex
Uumlzenetenkeacutent 4 szinkronizaacutecioacutet igeacutenylőő műűvelet (inputoutput x lock-unlock)
Hogyan lehetne javiacutetani
Mutex
per-thread input queue
Konzisztenciamemoacuteria vs performanceAtomikus műűveletek szaacutema kb felezőődik
Mutex
per-thread input queue
Atomikus műűveletek maacutesik fele is nagysaacutegrendekkel csoumlkken
Lockolatlan output queue
Lockless
Lockless veszeacutelyekCompiler reordering
CPU reordering (cache eacutes memoacuteria miatt)
Stale adatok jelenleacutete miatt
bull nehezen debuggolhatoacute ritkaacuten előőforduloacute hibaacutek
Mielőtt ilyenbe kezdesz
bull memory ordering
bull memory barriers
bull compiler reordering barriers
Oumlsszefoglalaacutes
bullPaacuterhuzamos programozaacutes okozhat meglepeteacuteseket
bullEgy algoritmus paacuterhuzamosiacutetaacutesa gyakran lassulaacutest eredmeacutenyez elsőőre
bullMeacutereacutes amp megeacuterteacutesƩ
VEacuteGE
lwnnetArticles250967
rdropcomuserspaulmckperfbookperfbook20110828apdf
syslog-ng
bullNaploacutezoacute szerver uumlzeneteket fogad TCP eacutes UDP csatornaacutekon
bullEgy uumlzenet egy sor
bullMinden sor kb 3-500 byte
bull~ ezer kapcsolat
bull~ neacutehaacuteny szaacutez ezer msgsec
Meacutereacutes reprodukcioacute
bdquoPremature optimization is the root of all evilrdquo - Donald Knuth
Meacutereacutes eacutes a reprodukaacutelhatoacute testcase fontos
bull ne kezdjuumlnk bele neacutelkuumlle
bull ismerjuumlk meg az eszkoumlzeinket
bull perf cachegrind gprof
syslog-ng műűkoumldeacutese
Bejoumlvőő uumlzenetek feldolgozaacutesa
bull beolvasaacutes parse-olaacutes szűűreacutesmoacutedosiacutetaacutes kikuumlldeacutes egy outputra
Kimenőő uumlzenetek feldolgozaacutesa
bull uumlzenet megformaacutezaacutesa kiiacuteraacutes egy faacutejlbahaacuteloacutezati kapcsolatra
syslog-ng koraacutebban
bull 1 szaacutel poll() ciklus
bull minden esemeacuteny kezeleacutese aszinkron callbackekkel
bull kb 100k msgsec
syslog-ng ma
bullfőő szaacutel + worker threadek
bulla főő szaacutel figyeli az oumlsszes nyitott kapcsolatot (epoll) IO esemeacuteny eseteacuten annak teljes feldolgozaacutesaacutet aacutetadja a worker threadnek
bullIO esemeacutenyek
bullinput adat eacuterkezett (fetch process enqueue loop)
bulloutput iacuterhatoacutevaacute vaacutelt (dequeue format write loop)
bullNonblocking IO
bullWorker threadek szaacutema megegyezik a CPU-k szaacutemaacuteval
bullEgy taszk 1-4 msec időő alatt veacutegez (1-4000 uumlzenet feldolgozaacutesa)
Szűűk keresztmetszetek probleacutemaacutek
Thread vaacuteltaacutesDraacutega mert
bull kihűűl a cache
bull scheduler
bull context switch regiszterek TLB
Elkeruumlleacutes moacutedja
bull keveacutes thread (=CPU-k szaacutema) nonblocking IO
bull egy feladat kb egy időőszeletig fut se hosszabban se roumlvidebben
KeacuteslelteteacutesA latency oumlnmagaacuteban nem okoz CPU hasznaacutelatot de
bull egy feldolgozaacutesba beeacutepuumllve okozhatja annak jelentőős lassulaacutesaacutet
bull 1 msec keacuteslelteteacutes oumlnmagaacuteban nem sok de 1000 tranzakcioacute eseteacuten maacuter 1 mp-cel nyuacutejtja az időőt
Latency forraacutesok
bull lockok eacutes szinkronizaacutecioacutes primitiacutevek
bull OS esemeacutenyek (epoll)
Dinamikus memoacuteriamallocfree jelentős időrablaacutes 500ksec tranzakcioacutenaacutel
bull threadek koumlzti szinkronizaacutecioacute
bull laacutencolt listaacutek
bull tipikus egyik szaacutel lefoglal maacutesik felszabadiacutet
Elkeruumlleacutes moacutedja
bull alloca() ill fixen meacuteretezett vaacuteltozoacutek
bull per-thread allokaacutecioacutek hosszuacute taacutevon megőőrizve igeacuteny eseteacuten noumlvelve
bull LogMessage adatszerkezet bdquotoumlmoumlriacuteteacuteserdquo ideaacutelis esetben 1 mallocmsg
Lock contentionTipikus cache ping-pong
bull N szaacutel ugyanazt a mutexet lockolja egymaacutest vaacuteltva
bull a reader-writer locknaacutel eacutes az atomikus referencia szaacutemlaacuteloacutenaacutel is előőfordul
Ceacutel
bull egy egyseacuteg hasznos munkaacutera esőő szinkronizaacutecioacutes időő csoumlkkenteacutese
Elkeruumlleacutes moacutedja
bull per-thread vaacuteltozoacutek
bull adatszerkezet moacutedosiacutetaacutesa nagyobb felbontaacutesuacute mutexek hasznaacutelata
bull toumlbb munkaacutet veacutegzuumlnk egy lock veacutedelme alatt ld skaacutelaacutezhatoacute queue-k
A nem triviaacutelis koumlltseacutegek miatt egy szekvenciaacutelis program paacuterhuzamos vaacuteltozata gyakran lassabb
lesz elsőő alkalommal
Tipikus trade-off-ok
Konzisztencia sorrendiseacuteg vs sebesseacuteg
bull az abszoluacutet sorrend sok szinkronizaacutecioacutet koumlvetel meg ezek koumlzuumll nem mind fontos
Hasznaacutelt memoacuteria mennyiseacuteg vs sebesseacuteg
bull pl per-thread vaacuteltozoacutek paacuterhuzamos objektum peacuteldaacutenyok
Skaacutelaacutezhatoacute queue
Az input eacutes az output koumlzti oumlsszekoumlteacutest biztosiacutetja
bull input taszkok (N) beteszik az esemeacutenyeket
bull output taszk (1) kiveszi az esemeacutenyeket majd kikuumlldi
Triviaacutelis megoldaacutes
Mutex
Uumlzenetenkeacutent 4 szinkronizaacutecioacutet igeacutenylőő műűvelet (inputoutput x lock-unlock)
Hogyan lehetne javiacutetani
Mutex
per-thread input queue
Konzisztenciamemoacuteria vs performanceAtomikus műűveletek szaacutema kb felezőődik
Mutex
per-thread input queue
Atomikus műűveletek maacutesik fele is nagysaacutegrendekkel csoumlkken
Lockolatlan output queue
Lockless
Lockless veszeacutelyekCompiler reordering
CPU reordering (cache eacutes memoacuteria miatt)
Stale adatok jelenleacutete miatt
bull nehezen debuggolhatoacute ritkaacuten előőforduloacute hibaacutek
Mielőtt ilyenbe kezdesz
bull memory ordering
bull memory barriers
bull compiler reordering barriers
Oumlsszefoglalaacutes
bullPaacuterhuzamos programozaacutes okozhat meglepeteacuteseket
bullEgy algoritmus paacuterhuzamosiacutetaacutesa gyakran lassulaacutest eredmeacutenyez elsőőre
bullMeacutereacutes amp megeacuterteacutesƩ
VEacuteGE
lwnnetArticles250967
rdropcomuserspaulmckperfbookperfbook20110828apdf
Meacutereacutes reprodukcioacute
bdquoPremature optimization is the root of all evilrdquo - Donald Knuth
Meacutereacutes eacutes a reprodukaacutelhatoacute testcase fontos
bull ne kezdjuumlnk bele neacutelkuumlle
bull ismerjuumlk meg az eszkoumlzeinket
bull perf cachegrind gprof
syslog-ng műűkoumldeacutese
Bejoumlvőő uumlzenetek feldolgozaacutesa
bull beolvasaacutes parse-olaacutes szűűreacutesmoacutedosiacutetaacutes kikuumlldeacutes egy outputra
Kimenőő uumlzenetek feldolgozaacutesa
bull uumlzenet megformaacutezaacutesa kiiacuteraacutes egy faacutejlbahaacuteloacutezati kapcsolatra
syslog-ng koraacutebban
bull 1 szaacutel poll() ciklus
bull minden esemeacuteny kezeleacutese aszinkron callbackekkel
bull kb 100k msgsec
syslog-ng ma
bullfőő szaacutel + worker threadek
bulla főő szaacutel figyeli az oumlsszes nyitott kapcsolatot (epoll) IO esemeacuteny eseteacuten annak teljes feldolgozaacutesaacutet aacutetadja a worker threadnek
bullIO esemeacutenyek
bullinput adat eacuterkezett (fetch process enqueue loop)
bulloutput iacuterhatoacutevaacute vaacutelt (dequeue format write loop)
bullNonblocking IO
bullWorker threadek szaacutema megegyezik a CPU-k szaacutemaacuteval
bullEgy taszk 1-4 msec időő alatt veacutegez (1-4000 uumlzenet feldolgozaacutesa)
Szűűk keresztmetszetek probleacutemaacutek
Thread vaacuteltaacutesDraacutega mert
bull kihűűl a cache
bull scheduler
bull context switch regiszterek TLB
Elkeruumlleacutes moacutedja
bull keveacutes thread (=CPU-k szaacutema) nonblocking IO
bull egy feladat kb egy időőszeletig fut se hosszabban se roumlvidebben
KeacuteslelteteacutesA latency oumlnmagaacuteban nem okoz CPU hasznaacutelatot de
bull egy feldolgozaacutesba beeacutepuumllve okozhatja annak jelentőős lassulaacutesaacutet
bull 1 msec keacuteslelteteacutes oumlnmagaacuteban nem sok de 1000 tranzakcioacute eseteacuten maacuter 1 mp-cel nyuacutejtja az időőt
Latency forraacutesok
bull lockok eacutes szinkronizaacutecioacutes primitiacutevek
bull OS esemeacutenyek (epoll)
Dinamikus memoacuteriamallocfree jelentős időrablaacutes 500ksec tranzakcioacutenaacutel
bull threadek koumlzti szinkronizaacutecioacute
bull laacutencolt listaacutek
bull tipikus egyik szaacutel lefoglal maacutesik felszabadiacutet
Elkeruumlleacutes moacutedja
bull alloca() ill fixen meacuteretezett vaacuteltozoacutek
bull per-thread allokaacutecioacutek hosszuacute taacutevon megőőrizve igeacuteny eseteacuten noumlvelve
bull LogMessage adatszerkezet bdquotoumlmoumlriacuteteacuteserdquo ideaacutelis esetben 1 mallocmsg
Lock contentionTipikus cache ping-pong
bull N szaacutel ugyanazt a mutexet lockolja egymaacutest vaacuteltva
bull a reader-writer locknaacutel eacutes az atomikus referencia szaacutemlaacuteloacutenaacutel is előőfordul
Ceacutel
bull egy egyseacuteg hasznos munkaacutera esőő szinkronizaacutecioacutes időő csoumlkkenteacutese
Elkeruumlleacutes moacutedja
bull per-thread vaacuteltozoacutek
bull adatszerkezet moacutedosiacutetaacutesa nagyobb felbontaacutesuacute mutexek hasznaacutelata
bull toumlbb munkaacutet veacutegzuumlnk egy lock veacutedelme alatt ld skaacutelaacutezhatoacute queue-k
A nem triviaacutelis koumlltseacutegek miatt egy szekvenciaacutelis program paacuterhuzamos vaacuteltozata gyakran lassabb
lesz elsőő alkalommal
Tipikus trade-off-ok
Konzisztencia sorrendiseacuteg vs sebesseacuteg
bull az abszoluacutet sorrend sok szinkronizaacutecioacutet koumlvetel meg ezek koumlzuumll nem mind fontos
Hasznaacutelt memoacuteria mennyiseacuteg vs sebesseacuteg
bull pl per-thread vaacuteltozoacutek paacuterhuzamos objektum peacuteldaacutenyok
Skaacutelaacutezhatoacute queue
Az input eacutes az output koumlzti oumlsszekoumlteacutest biztosiacutetja
bull input taszkok (N) beteszik az esemeacutenyeket
bull output taszk (1) kiveszi az esemeacutenyeket majd kikuumlldi
Triviaacutelis megoldaacutes
Mutex
Uumlzenetenkeacutent 4 szinkronizaacutecioacutet igeacutenylőő műűvelet (inputoutput x lock-unlock)
Hogyan lehetne javiacutetani
Mutex
per-thread input queue
Konzisztenciamemoacuteria vs performanceAtomikus műűveletek szaacutema kb felezőődik
Mutex
per-thread input queue
Atomikus műűveletek maacutesik fele is nagysaacutegrendekkel csoumlkken
Lockolatlan output queue
Lockless
Lockless veszeacutelyekCompiler reordering
CPU reordering (cache eacutes memoacuteria miatt)
Stale adatok jelenleacutete miatt
bull nehezen debuggolhatoacute ritkaacuten előőforduloacute hibaacutek
Mielőtt ilyenbe kezdesz
bull memory ordering
bull memory barriers
bull compiler reordering barriers
Oumlsszefoglalaacutes
bullPaacuterhuzamos programozaacutes okozhat meglepeteacuteseket
bullEgy algoritmus paacuterhuzamosiacutetaacutesa gyakran lassulaacutest eredmeacutenyez elsőőre
bullMeacutereacutes amp megeacuterteacutesƩ
VEacuteGE
lwnnetArticles250967
rdropcomuserspaulmckperfbookperfbook20110828apdf
syslog-ng műűkoumldeacutese
Bejoumlvőő uumlzenetek feldolgozaacutesa
bull beolvasaacutes parse-olaacutes szűűreacutesmoacutedosiacutetaacutes kikuumlldeacutes egy outputra
Kimenőő uumlzenetek feldolgozaacutesa
bull uumlzenet megformaacutezaacutesa kiiacuteraacutes egy faacutejlbahaacuteloacutezati kapcsolatra
syslog-ng koraacutebban
bull 1 szaacutel poll() ciklus
bull minden esemeacuteny kezeleacutese aszinkron callbackekkel
bull kb 100k msgsec
syslog-ng ma
bullfőő szaacutel + worker threadek
bulla főő szaacutel figyeli az oumlsszes nyitott kapcsolatot (epoll) IO esemeacuteny eseteacuten annak teljes feldolgozaacutesaacutet aacutetadja a worker threadnek
bullIO esemeacutenyek
bullinput adat eacuterkezett (fetch process enqueue loop)
bulloutput iacuterhatoacutevaacute vaacutelt (dequeue format write loop)
bullNonblocking IO
bullWorker threadek szaacutema megegyezik a CPU-k szaacutemaacuteval
bullEgy taszk 1-4 msec időő alatt veacutegez (1-4000 uumlzenet feldolgozaacutesa)
Szűűk keresztmetszetek probleacutemaacutek
Thread vaacuteltaacutesDraacutega mert
bull kihűűl a cache
bull scheduler
bull context switch regiszterek TLB
Elkeruumlleacutes moacutedja
bull keveacutes thread (=CPU-k szaacutema) nonblocking IO
bull egy feladat kb egy időőszeletig fut se hosszabban se roumlvidebben
KeacuteslelteteacutesA latency oumlnmagaacuteban nem okoz CPU hasznaacutelatot de
bull egy feldolgozaacutesba beeacutepuumllve okozhatja annak jelentőős lassulaacutesaacutet
bull 1 msec keacuteslelteteacutes oumlnmagaacuteban nem sok de 1000 tranzakcioacute eseteacuten maacuter 1 mp-cel nyuacutejtja az időőt
Latency forraacutesok
bull lockok eacutes szinkronizaacutecioacutes primitiacutevek
bull OS esemeacutenyek (epoll)
Dinamikus memoacuteriamallocfree jelentős időrablaacutes 500ksec tranzakcioacutenaacutel
bull threadek koumlzti szinkronizaacutecioacute
bull laacutencolt listaacutek
bull tipikus egyik szaacutel lefoglal maacutesik felszabadiacutet
Elkeruumlleacutes moacutedja
bull alloca() ill fixen meacuteretezett vaacuteltozoacutek
bull per-thread allokaacutecioacutek hosszuacute taacutevon megőőrizve igeacuteny eseteacuten noumlvelve
bull LogMessage adatszerkezet bdquotoumlmoumlriacuteteacuteserdquo ideaacutelis esetben 1 mallocmsg
Lock contentionTipikus cache ping-pong
bull N szaacutel ugyanazt a mutexet lockolja egymaacutest vaacuteltva
bull a reader-writer locknaacutel eacutes az atomikus referencia szaacutemlaacuteloacutenaacutel is előőfordul
Ceacutel
bull egy egyseacuteg hasznos munkaacutera esőő szinkronizaacutecioacutes időő csoumlkkenteacutese
Elkeruumlleacutes moacutedja
bull per-thread vaacuteltozoacutek
bull adatszerkezet moacutedosiacutetaacutesa nagyobb felbontaacutesuacute mutexek hasznaacutelata
bull toumlbb munkaacutet veacutegzuumlnk egy lock veacutedelme alatt ld skaacutelaacutezhatoacute queue-k
A nem triviaacutelis koumlltseacutegek miatt egy szekvenciaacutelis program paacuterhuzamos vaacuteltozata gyakran lassabb
lesz elsőő alkalommal
Tipikus trade-off-ok
Konzisztencia sorrendiseacuteg vs sebesseacuteg
bull az abszoluacutet sorrend sok szinkronizaacutecioacutet koumlvetel meg ezek koumlzuumll nem mind fontos
Hasznaacutelt memoacuteria mennyiseacuteg vs sebesseacuteg
bull pl per-thread vaacuteltozoacutek paacuterhuzamos objektum peacuteldaacutenyok
Skaacutelaacutezhatoacute queue
Az input eacutes az output koumlzti oumlsszekoumlteacutest biztosiacutetja
bull input taszkok (N) beteszik az esemeacutenyeket
bull output taszk (1) kiveszi az esemeacutenyeket majd kikuumlldi
Triviaacutelis megoldaacutes
Mutex
Uumlzenetenkeacutent 4 szinkronizaacutecioacutet igeacutenylőő műűvelet (inputoutput x lock-unlock)
Hogyan lehetne javiacutetani
Mutex
per-thread input queue
Konzisztenciamemoacuteria vs performanceAtomikus műűveletek szaacutema kb felezőődik
Mutex
per-thread input queue
Atomikus műűveletek maacutesik fele is nagysaacutegrendekkel csoumlkken
Lockolatlan output queue
Lockless
Lockless veszeacutelyekCompiler reordering
CPU reordering (cache eacutes memoacuteria miatt)
Stale adatok jelenleacutete miatt
bull nehezen debuggolhatoacute ritkaacuten előőforduloacute hibaacutek
Mielőtt ilyenbe kezdesz
bull memory ordering
bull memory barriers
bull compiler reordering barriers
Oumlsszefoglalaacutes
bullPaacuterhuzamos programozaacutes okozhat meglepeteacuteseket
bullEgy algoritmus paacuterhuzamosiacutetaacutesa gyakran lassulaacutest eredmeacutenyez elsőőre
bullMeacutereacutes amp megeacuterteacutesƩ
VEacuteGE
lwnnetArticles250967
rdropcomuserspaulmckperfbookperfbook20110828apdf
syslog-ng koraacutebban
bull 1 szaacutel poll() ciklus
bull minden esemeacuteny kezeleacutese aszinkron callbackekkel
bull kb 100k msgsec
syslog-ng ma
bullfőő szaacutel + worker threadek
bulla főő szaacutel figyeli az oumlsszes nyitott kapcsolatot (epoll) IO esemeacuteny eseteacuten annak teljes feldolgozaacutesaacutet aacutetadja a worker threadnek
bullIO esemeacutenyek
bullinput adat eacuterkezett (fetch process enqueue loop)
bulloutput iacuterhatoacutevaacute vaacutelt (dequeue format write loop)
bullNonblocking IO
bullWorker threadek szaacutema megegyezik a CPU-k szaacutemaacuteval
bullEgy taszk 1-4 msec időő alatt veacutegez (1-4000 uumlzenet feldolgozaacutesa)
Szűűk keresztmetszetek probleacutemaacutek
Thread vaacuteltaacutesDraacutega mert
bull kihűűl a cache
bull scheduler
bull context switch regiszterek TLB
Elkeruumlleacutes moacutedja
bull keveacutes thread (=CPU-k szaacutema) nonblocking IO
bull egy feladat kb egy időőszeletig fut se hosszabban se roumlvidebben
KeacuteslelteteacutesA latency oumlnmagaacuteban nem okoz CPU hasznaacutelatot de
bull egy feldolgozaacutesba beeacutepuumllve okozhatja annak jelentőős lassulaacutesaacutet
bull 1 msec keacuteslelteteacutes oumlnmagaacuteban nem sok de 1000 tranzakcioacute eseteacuten maacuter 1 mp-cel nyuacutejtja az időőt
Latency forraacutesok
bull lockok eacutes szinkronizaacutecioacutes primitiacutevek
bull OS esemeacutenyek (epoll)
Dinamikus memoacuteriamallocfree jelentős időrablaacutes 500ksec tranzakcioacutenaacutel
bull threadek koumlzti szinkronizaacutecioacute
bull laacutencolt listaacutek
bull tipikus egyik szaacutel lefoglal maacutesik felszabadiacutet
Elkeruumlleacutes moacutedja
bull alloca() ill fixen meacuteretezett vaacuteltozoacutek
bull per-thread allokaacutecioacutek hosszuacute taacutevon megőőrizve igeacuteny eseteacuten noumlvelve
bull LogMessage adatszerkezet bdquotoumlmoumlriacuteteacuteserdquo ideaacutelis esetben 1 mallocmsg
Lock contentionTipikus cache ping-pong
bull N szaacutel ugyanazt a mutexet lockolja egymaacutest vaacuteltva
bull a reader-writer locknaacutel eacutes az atomikus referencia szaacutemlaacuteloacutenaacutel is előőfordul
Ceacutel
bull egy egyseacuteg hasznos munkaacutera esőő szinkronizaacutecioacutes időő csoumlkkenteacutese
Elkeruumlleacutes moacutedja
bull per-thread vaacuteltozoacutek
bull adatszerkezet moacutedosiacutetaacutesa nagyobb felbontaacutesuacute mutexek hasznaacutelata
bull toumlbb munkaacutet veacutegzuumlnk egy lock veacutedelme alatt ld skaacutelaacutezhatoacute queue-k
A nem triviaacutelis koumlltseacutegek miatt egy szekvenciaacutelis program paacuterhuzamos vaacuteltozata gyakran lassabb
lesz elsőő alkalommal
Tipikus trade-off-ok
Konzisztencia sorrendiseacuteg vs sebesseacuteg
bull az abszoluacutet sorrend sok szinkronizaacutecioacutet koumlvetel meg ezek koumlzuumll nem mind fontos
Hasznaacutelt memoacuteria mennyiseacuteg vs sebesseacuteg
bull pl per-thread vaacuteltozoacutek paacuterhuzamos objektum peacuteldaacutenyok
Skaacutelaacutezhatoacute queue
Az input eacutes az output koumlzti oumlsszekoumlteacutest biztosiacutetja
bull input taszkok (N) beteszik az esemeacutenyeket
bull output taszk (1) kiveszi az esemeacutenyeket majd kikuumlldi
Triviaacutelis megoldaacutes
Mutex
Uumlzenetenkeacutent 4 szinkronizaacutecioacutet igeacutenylőő műűvelet (inputoutput x lock-unlock)
Hogyan lehetne javiacutetani
Mutex
per-thread input queue
Konzisztenciamemoacuteria vs performanceAtomikus műűveletek szaacutema kb felezőődik
Mutex
per-thread input queue
Atomikus műűveletek maacutesik fele is nagysaacutegrendekkel csoumlkken
Lockolatlan output queue
Lockless
Lockless veszeacutelyekCompiler reordering
CPU reordering (cache eacutes memoacuteria miatt)
Stale adatok jelenleacutete miatt
bull nehezen debuggolhatoacute ritkaacuten előőforduloacute hibaacutek
Mielőtt ilyenbe kezdesz
bull memory ordering
bull memory barriers
bull compiler reordering barriers
Oumlsszefoglalaacutes
bullPaacuterhuzamos programozaacutes okozhat meglepeteacuteseket
bullEgy algoritmus paacuterhuzamosiacutetaacutesa gyakran lassulaacutest eredmeacutenyez elsőőre
bullMeacutereacutes amp megeacuterteacutesƩ
VEacuteGE
lwnnetArticles250967
rdropcomuserspaulmckperfbookperfbook20110828apdf
syslog-ng ma
bullfőő szaacutel + worker threadek
bulla főő szaacutel figyeli az oumlsszes nyitott kapcsolatot (epoll) IO esemeacuteny eseteacuten annak teljes feldolgozaacutesaacutet aacutetadja a worker threadnek
bullIO esemeacutenyek
bullinput adat eacuterkezett (fetch process enqueue loop)
bulloutput iacuterhatoacutevaacute vaacutelt (dequeue format write loop)
bullNonblocking IO
bullWorker threadek szaacutema megegyezik a CPU-k szaacutemaacuteval
bullEgy taszk 1-4 msec időő alatt veacutegez (1-4000 uumlzenet feldolgozaacutesa)
Szűűk keresztmetszetek probleacutemaacutek
Thread vaacuteltaacutesDraacutega mert
bull kihűűl a cache
bull scheduler
bull context switch regiszterek TLB
Elkeruumlleacutes moacutedja
bull keveacutes thread (=CPU-k szaacutema) nonblocking IO
bull egy feladat kb egy időőszeletig fut se hosszabban se roumlvidebben
KeacuteslelteteacutesA latency oumlnmagaacuteban nem okoz CPU hasznaacutelatot de
bull egy feldolgozaacutesba beeacutepuumllve okozhatja annak jelentőős lassulaacutesaacutet
bull 1 msec keacuteslelteteacutes oumlnmagaacuteban nem sok de 1000 tranzakcioacute eseteacuten maacuter 1 mp-cel nyuacutejtja az időőt
Latency forraacutesok
bull lockok eacutes szinkronizaacutecioacutes primitiacutevek
bull OS esemeacutenyek (epoll)
Dinamikus memoacuteriamallocfree jelentős időrablaacutes 500ksec tranzakcioacutenaacutel
bull threadek koumlzti szinkronizaacutecioacute
bull laacutencolt listaacutek
bull tipikus egyik szaacutel lefoglal maacutesik felszabadiacutet
Elkeruumlleacutes moacutedja
bull alloca() ill fixen meacuteretezett vaacuteltozoacutek
bull per-thread allokaacutecioacutek hosszuacute taacutevon megőőrizve igeacuteny eseteacuten noumlvelve
bull LogMessage adatszerkezet bdquotoumlmoumlriacuteteacuteserdquo ideaacutelis esetben 1 mallocmsg
Lock contentionTipikus cache ping-pong
bull N szaacutel ugyanazt a mutexet lockolja egymaacutest vaacuteltva
bull a reader-writer locknaacutel eacutes az atomikus referencia szaacutemlaacuteloacutenaacutel is előőfordul
Ceacutel
bull egy egyseacuteg hasznos munkaacutera esőő szinkronizaacutecioacutes időő csoumlkkenteacutese
Elkeruumlleacutes moacutedja
bull per-thread vaacuteltozoacutek
bull adatszerkezet moacutedosiacutetaacutesa nagyobb felbontaacutesuacute mutexek hasznaacutelata
bull toumlbb munkaacutet veacutegzuumlnk egy lock veacutedelme alatt ld skaacutelaacutezhatoacute queue-k
A nem triviaacutelis koumlltseacutegek miatt egy szekvenciaacutelis program paacuterhuzamos vaacuteltozata gyakran lassabb
lesz elsőő alkalommal
Tipikus trade-off-ok
Konzisztencia sorrendiseacuteg vs sebesseacuteg
bull az abszoluacutet sorrend sok szinkronizaacutecioacutet koumlvetel meg ezek koumlzuumll nem mind fontos
Hasznaacutelt memoacuteria mennyiseacuteg vs sebesseacuteg
bull pl per-thread vaacuteltozoacutek paacuterhuzamos objektum peacuteldaacutenyok
Skaacutelaacutezhatoacute queue
Az input eacutes az output koumlzti oumlsszekoumlteacutest biztosiacutetja
bull input taszkok (N) beteszik az esemeacutenyeket
bull output taszk (1) kiveszi az esemeacutenyeket majd kikuumlldi
Triviaacutelis megoldaacutes
Mutex
Uumlzenetenkeacutent 4 szinkronizaacutecioacutet igeacutenylőő műűvelet (inputoutput x lock-unlock)
Hogyan lehetne javiacutetani
Mutex
per-thread input queue
Konzisztenciamemoacuteria vs performanceAtomikus műűveletek szaacutema kb felezőődik
Mutex
per-thread input queue
Atomikus műűveletek maacutesik fele is nagysaacutegrendekkel csoumlkken
Lockolatlan output queue
Lockless
Lockless veszeacutelyekCompiler reordering
CPU reordering (cache eacutes memoacuteria miatt)
Stale adatok jelenleacutete miatt
bull nehezen debuggolhatoacute ritkaacuten előőforduloacute hibaacutek
Mielőtt ilyenbe kezdesz
bull memory ordering
bull memory barriers
bull compiler reordering barriers
Oumlsszefoglalaacutes
bullPaacuterhuzamos programozaacutes okozhat meglepeteacuteseket
bullEgy algoritmus paacuterhuzamosiacutetaacutesa gyakran lassulaacutest eredmeacutenyez elsőőre
bullMeacutereacutes amp megeacuterteacutesƩ
VEacuteGE
lwnnetArticles250967
rdropcomuserspaulmckperfbookperfbook20110828apdf
Szűűk keresztmetszetek probleacutemaacutek
Thread vaacuteltaacutesDraacutega mert
bull kihűűl a cache
bull scheduler
bull context switch regiszterek TLB
Elkeruumlleacutes moacutedja
bull keveacutes thread (=CPU-k szaacutema) nonblocking IO
bull egy feladat kb egy időőszeletig fut se hosszabban se roumlvidebben
KeacuteslelteteacutesA latency oumlnmagaacuteban nem okoz CPU hasznaacutelatot de
bull egy feldolgozaacutesba beeacutepuumllve okozhatja annak jelentőős lassulaacutesaacutet
bull 1 msec keacuteslelteteacutes oumlnmagaacuteban nem sok de 1000 tranzakcioacute eseteacuten maacuter 1 mp-cel nyuacutejtja az időőt
Latency forraacutesok
bull lockok eacutes szinkronizaacutecioacutes primitiacutevek
bull OS esemeacutenyek (epoll)
Dinamikus memoacuteriamallocfree jelentős időrablaacutes 500ksec tranzakcioacutenaacutel
bull threadek koumlzti szinkronizaacutecioacute
bull laacutencolt listaacutek
bull tipikus egyik szaacutel lefoglal maacutesik felszabadiacutet
Elkeruumlleacutes moacutedja
bull alloca() ill fixen meacuteretezett vaacuteltozoacutek
bull per-thread allokaacutecioacutek hosszuacute taacutevon megőőrizve igeacuteny eseteacuten noumlvelve
bull LogMessage adatszerkezet bdquotoumlmoumlriacuteteacuteserdquo ideaacutelis esetben 1 mallocmsg
Lock contentionTipikus cache ping-pong
bull N szaacutel ugyanazt a mutexet lockolja egymaacutest vaacuteltva
bull a reader-writer locknaacutel eacutes az atomikus referencia szaacutemlaacuteloacutenaacutel is előőfordul
Ceacutel
bull egy egyseacuteg hasznos munkaacutera esőő szinkronizaacutecioacutes időő csoumlkkenteacutese
Elkeruumlleacutes moacutedja
bull per-thread vaacuteltozoacutek
bull adatszerkezet moacutedosiacutetaacutesa nagyobb felbontaacutesuacute mutexek hasznaacutelata
bull toumlbb munkaacutet veacutegzuumlnk egy lock veacutedelme alatt ld skaacutelaacutezhatoacute queue-k
A nem triviaacutelis koumlltseacutegek miatt egy szekvenciaacutelis program paacuterhuzamos vaacuteltozata gyakran lassabb
lesz elsőő alkalommal
Tipikus trade-off-ok
Konzisztencia sorrendiseacuteg vs sebesseacuteg
bull az abszoluacutet sorrend sok szinkronizaacutecioacutet koumlvetel meg ezek koumlzuumll nem mind fontos
Hasznaacutelt memoacuteria mennyiseacuteg vs sebesseacuteg
bull pl per-thread vaacuteltozoacutek paacuterhuzamos objektum peacuteldaacutenyok
Skaacutelaacutezhatoacute queue
Az input eacutes az output koumlzti oumlsszekoumlteacutest biztosiacutetja
bull input taszkok (N) beteszik az esemeacutenyeket
bull output taszk (1) kiveszi az esemeacutenyeket majd kikuumlldi
Triviaacutelis megoldaacutes
Mutex
Uumlzenetenkeacutent 4 szinkronizaacutecioacutet igeacutenylőő műűvelet (inputoutput x lock-unlock)
Hogyan lehetne javiacutetani
Mutex
per-thread input queue
Konzisztenciamemoacuteria vs performanceAtomikus műűveletek szaacutema kb felezőődik
Mutex
per-thread input queue
Atomikus műűveletek maacutesik fele is nagysaacutegrendekkel csoumlkken
Lockolatlan output queue
Lockless
Lockless veszeacutelyekCompiler reordering
CPU reordering (cache eacutes memoacuteria miatt)
Stale adatok jelenleacutete miatt
bull nehezen debuggolhatoacute ritkaacuten előőforduloacute hibaacutek
Mielőtt ilyenbe kezdesz
bull memory ordering
bull memory barriers
bull compiler reordering barriers
Oumlsszefoglalaacutes
bullPaacuterhuzamos programozaacutes okozhat meglepeteacuteseket
bullEgy algoritmus paacuterhuzamosiacutetaacutesa gyakran lassulaacutest eredmeacutenyez elsőőre
bullMeacutereacutes amp megeacuterteacutesƩ
VEacuteGE
lwnnetArticles250967
rdropcomuserspaulmckperfbookperfbook20110828apdf
Thread vaacuteltaacutesDraacutega mert
bull kihűűl a cache
bull scheduler
bull context switch regiszterek TLB
Elkeruumlleacutes moacutedja
bull keveacutes thread (=CPU-k szaacutema) nonblocking IO
bull egy feladat kb egy időőszeletig fut se hosszabban se roumlvidebben
KeacuteslelteteacutesA latency oumlnmagaacuteban nem okoz CPU hasznaacutelatot de
bull egy feldolgozaacutesba beeacutepuumllve okozhatja annak jelentőős lassulaacutesaacutet
bull 1 msec keacuteslelteteacutes oumlnmagaacuteban nem sok de 1000 tranzakcioacute eseteacuten maacuter 1 mp-cel nyuacutejtja az időőt
Latency forraacutesok
bull lockok eacutes szinkronizaacutecioacutes primitiacutevek
bull OS esemeacutenyek (epoll)
Dinamikus memoacuteriamallocfree jelentős időrablaacutes 500ksec tranzakcioacutenaacutel
bull threadek koumlzti szinkronizaacutecioacute
bull laacutencolt listaacutek
bull tipikus egyik szaacutel lefoglal maacutesik felszabadiacutet
Elkeruumlleacutes moacutedja
bull alloca() ill fixen meacuteretezett vaacuteltozoacutek
bull per-thread allokaacutecioacutek hosszuacute taacutevon megőőrizve igeacuteny eseteacuten noumlvelve
bull LogMessage adatszerkezet bdquotoumlmoumlriacuteteacuteserdquo ideaacutelis esetben 1 mallocmsg
Lock contentionTipikus cache ping-pong
bull N szaacutel ugyanazt a mutexet lockolja egymaacutest vaacuteltva
bull a reader-writer locknaacutel eacutes az atomikus referencia szaacutemlaacuteloacutenaacutel is előőfordul
Ceacutel
bull egy egyseacuteg hasznos munkaacutera esőő szinkronizaacutecioacutes időő csoumlkkenteacutese
Elkeruumlleacutes moacutedja
bull per-thread vaacuteltozoacutek
bull adatszerkezet moacutedosiacutetaacutesa nagyobb felbontaacutesuacute mutexek hasznaacutelata
bull toumlbb munkaacutet veacutegzuumlnk egy lock veacutedelme alatt ld skaacutelaacutezhatoacute queue-k
A nem triviaacutelis koumlltseacutegek miatt egy szekvenciaacutelis program paacuterhuzamos vaacuteltozata gyakran lassabb
lesz elsőő alkalommal
Tipikus trade-off-ok
Konzisztencia sorrendiseacuteg vs sebesseacuteg
bull az abszoluacutet sorrend sok szinkronizaacutecioacutet koumlvetel meg ezek koumlzuumll nem mind fontos
Hasznaacutelt memoacuteria mennyiseacuteg vs sebesseacuteg
bull pl per-thread vaacuteltozoacutek paacuterhuzamos objektum peacuteldaacutenyok
Skaacutelaacutezhatoacute queue
Az input eacutes az output koumlzti oumlsszekoumlteacutest biztosiacutetja
bull input taszkok (N) beteszik az esemeacutenyeket
bull output taszk (1) kiveszi az esemeacutenyeket majd kikuumlldi
Triviaacutelis megoldaacutes
Mutex
Uumlzenetenkeacutent 4 szinkronizaacutecioacutet igeacutenylőő műűvelet (inputoutput x lock-unlock)
Hogyan lehetne javiacutetani
Mutex
per-thread input queue
Konzisztenciamemoacuteria vs performanceAtomikus műűveletek szaacutema kb felezőődik
Mutex
per-thread input queue
Atomikus műűveletek maacutesik fele is nagysaacutegrendekkel csoumlkken
Lockolatlan output queue
Lockless
Lockless veszeacutelyekCompiler reordering
CPU reordering (cache eacutes memoacuteria miatt)
Stale adatok jelenleacutete miatt
bull nehezen debuggolhatoacute ritkaacuten előőforduloacute hibaacutek
Mielőtt ilyenbe kezdesz
bull memory ordering
bull memory barriers
bull compiler reordering barriers
Oumlsszefoglalaacutes
bullPaacuterhuzamos programozaacutes okozhat meglepeteacuteseket
bullEgy algoritmus paacuterhuzamosiacutetaacutesa gyakran lassulaacutest eredmeacutenyez elsőőre
bullMeacutereacutes amp megeacuterteacutesƩ
VEacuteGE
lwnnetArticles250967
rdropcomuserspaulmckperfbookperfbook20110828apdf
KeacuteslelteteacutesA latency oumlnmagaacuteban nem okoz CPU hasznaacutelatot de
bull egy feldolgozaacutesba beeacutepuumllve okozhatja annak jelentőős lassulaacutesaacutet
bull 1 msec keacuteslelteteacutes oumlnmagaacuteban nem sok de 1000 tranzakcioacute eseteacuten maacuter 1 mp-cel nyuacutejtja az időőt
Latency forraacutesok
bull lockok eacutes szinkronizaacutecioacutes primitiacutevek
bull OS esemeacutenyek (epoll)
Dinamikus memoacuteriamallocfree jelentős időrablaacutes 500ksec tranzakcioacutenaacutel
bull threadek koumlzti szinkronizaacutecioacute
bull laacutencolt listaacutek
bull tipikus egyik szaacutel lefoglal maacutesik felszabadiacutet
Elkeruumlleacutes moacutedja
bull alloca() ill fixen meacuteretezett vaacuteltozoacutek
bull per-thread allokaacutecioacutek hosszuacute taacutevon megőőrizve igeacuteny eseteacuten noumlvelve
bull LogMessage adatszerkezet bdquotoumlmoumlriacuteteacuteserdquo ideaacutelis esetben 1 mallocmsg
Lock contentionTipikus cache ping-pong
bull N szaacutel ugyanazt a mutexet lockolja egymaacutest vaacuteltva
bull a reader-writer locknaacutel eacutes az atomikus referencia szaacutemlaacuteloacutenaacutel is előőfordul
Ceacutel
bull egy egyseacuteg hasznos munkaacutera esőő szinkronizaacutecioacutes időő csoumlkkenteacutese
Elkeruumlleacutes moacutedja
bull per-thread vaacuteltozoacutek
bull adatszerkezet moacutedosiacutetaacutesa nagyobb felbontaacutesuacute mutexek hasznaacutelata
bull toumlbb munkaacutet veacutegzuumlnk egy lock veacutedelme alatt ld skaacutelaacutezhatoacute queue-k
A nem triviaacutelis koumlltseacutegek miatt egy szekvenciaacutelis program paacuterhuzamos vaacuteltozata gyakran lassabb
lesz elsőő alkalommal
Tipikus trade-off-ok
Konzisztencia sorrendiseacuteg vs sebesseacuteg
bull az abszoluacutet sorrend sok szinkronizaacutecioacutet koumlvetel meg ezek koumlzuumll nem mind fontos
Hasznaacutelt memoacuteria mennyiseacuteg vs sebesseacuteg
bull pl per-thread vaacuteltozoacutek paacuterhuzamos objektum peacuteldaacutenyok
Skaacutelaacutezhatoacute queue
Az input eacutes az output koumlzti oumlsszekoumlteacutest biztosiacutetja
bull input taszkok (N) beteszik az esemeacutenyeket
bull output taszk (1) kiveszi az esemeacutenyeket majd kikuumlldi
Triviaacutelis megoldaacutes
Mutex
Uumlzenetenkeacutent 4 szinkronizaacutecioacutet igeacutenylőő műűvelet (inputoutput x lock-unlock)
Hogyan lehetne javiacutetani
Mutex
per-thread input queue
Konzisztenciamemoacuteria vs performanceAtomikus műűveletek szaacutema kb felezőődik
Mutex
per-thread input queue
Atomikus műűveletek maacutesik fele is nagysaacutegrendekkel csoumlkken
Lockolatlan output queue
Lockless
Lockless veszeacutelyekCompiler reordering
CPU reordering (cache eacutes memoacuteria miatt)
Stale adatok jelenleacutete miatt
bull nehezen debuggolhatoacute ritkaacuten előőforduloacute hibaacutek
Mielőtt ilyenbe kezdesz
bull memory ordering
bull memory barriers
bull compiler reordering barriers
Oumlsszefoglalaacutes
bullPaacuterhuzamos programozaacutes okozhat meglepeteacuteseket
bullEgy algoritmus paacuterhuzamosiacutetaacutesa gyakran lassulaacutest eredmeacutenyez elsőőre
bullMeacutereacutes amp megeacuterteacutesƩ
VEacuteGE
lwnnetArticles250967
rdropcomuserspaulmckperfbookperfbook20110828apdf
Dinamikus memoacuteriamallocfree jelentős időrablaacutes 500ksec tranzakcioacutenaacutel
bull threadek koumlzti szinkronizaacutecioacute
bull laacutencolt listaacutek
bull tipikus egyik szaacutel lefoglal maacutesik felszabadiacutet
Elkeruumlleacutes moacutedja
bull alloca() ill fixen meacuteretezett vaacuteltozoacutek
bull per-thread allokaacutecioacutek hosszuacute taacutevon megőőrizve igeacuteny eseteacuten noumlvelve
bull LogMessage adatszerkezet bdquotoumlmoumlriacuteteacuteserdquo ideaacutelis esetben 1 mallocmsg
Lock contentionTipikus cache ping-pong
bull N szaacutel ugyanazt a mutexet lockolja egymaacutest vaacuteltva
bull a reader-writer locknaacutel eacutes az atomikus referencia szaacutemlaacuteloacutenaacutel is előőfordul
Ceacutel
bull egy egyseacuteg hasznos munkaacutera esőő szinkronizaacutecioacutes időő csoumlkkenteacutese
Elkeruumlleacutes moacutedja
bull per-thread vaacuteltozoacutek
bull adatszerkezet moacutedosiacutetaacutesa nagyobb felbontaacutesuacute mutexek hasznaacutelata
bull toumlbb munkaacutet veacutegzuumlnk egy lock veacutedelme alatt ld skaacutelaacutezhatoacute queue-k
A nem triviaacutelis koumlltseacutegek miatt egy szekvenciaacutelis program paacuterhuzamos vaacuteltozata gyakran lassabb
lesz elsőő alkalommal
Tipikus trade-off-ok
Konzisztencia sorrendiseacuteg vs sebesseacuteg
bull az abszoluacutet sorrend sok szinkronizaacutecioacutet koumlvetel meg ezek koumlzuumll nem mind fontos
Hasznaacutelt memoacuteria mennyiseacuteg vs sebesseacuteg
bull pl per-thread vaacuteltozoacutek paacuterhuzamos objektum peacuteldaacutenyok
Skaacutelaacutezhatoacute queue
Az input eacutes az output koumlzti oumlsszekoumlteacutest biztosiacutetja
bull input taszkok (N) beteszik az esemeacutenyeket
bull output taszk (1) kiveszi az esemeacutenyeket majd kikuumlldi
Triviaacutelis megoldaacutes
Mutex
Uumlzenetenkeacutent 4 szinkronizaacutecioacutet igeacutenylőő műűvelet (inputoutput x lock-unlock)
Hogyan lehetne javiacutetani
Mutex
per-thread input queue
Konzisztenciamemoacuteria vs performanceAtomikus műűveletek szaacutema kb felezőődik
Mutex
per-thread input queue
Atomikus műűveletek maacutesik fele is nagysaacutegrendekkel csoumlkken
Lockolatlan output queue
Lockless
Lockless veszeacutelyekCompiler reordering
CPU reordering (cache eacutes memoacuteria miatt)
Stale adatok jelenleacutete miatt
bull nehezen debuggolhatoacute ritkaacuten előőforduloacute hibaacutek
Mielőtt ilyenbe kezdesz
bull memory ordering
bull memory barriers
bull compiler reordering barriers
Oumlsszefoglalaacutes
bullPaacuterhuzamos programozaacutes okozhat meglepeteacuteseket
bullEgy algoritmus paacuterhuzamosiacutetaacutesa gyakran lassulaacutest eredmeacutenyez elsőőre
bullMeacutereacutes amp megeacuterteacutesƩ
VEacuteGE
lwnnetArticles250967
rdropcomuserspaulmckperfbookperfbook20110828apdf
Lock contentionTipikus cache ping-pong
bull N szaacutel ugyanazt a mutexet lockolja egymaacutest vaacuteltva
bull a reader-writer locknaacutel eacutes az atomikus referencia szaacutemlaacuteloacutenaacutel is előőfordul
Ceacutel
bull egy egyseacuteg hasznos munkaacutera esőő szinkronizaacutecioacutes időő csoumlkkenteacutese
Elkeruumlleacutes moacutedja
bull per-thread vaacuteltozoacutek
bull adatszerkezet moacutedosiacutetaacutesa nagyobb felbontaacutesuacute mutexek hasznaacutelata
bull toumlbb munkaacutet veacutegzuumlnk egy lock veacutedelme alatt ld skaacutelaacutezhatoacute queue-k
A nem triviaacutelis koumlltseacutegek miatt egy szekvenciaacutelis program paacuterhuzamos vaacuteltozata gyakran lassabb
lesz elsőő alkalommal
Tipikus trade-off-ok
Konzisztencia sorrendiseacuteg vs sebesseacuteg
bull az abszoluacutet sorrend sok szinkronizaacutecioacutet koumlvetel meg ezek koumlzuumll nem mind fontos
Hasznaacutelt memoacuteria mennyiseacuteg vs sebesseacuteg
bull pl per-thread vaacuteltozoacutek paacuterhuzamos objektum peacuteldaacutenyok
Skaacutelaacutezhatoacute queue
Az input eacutes az output koumlzti oumlsszekoumlteacutest biztosiacutetja
bull input taszkok (N) beteszik az esemeacutenyeket
bull output taszk (1) kiveszi az esemeacutenyeket majd kikuumlldi
Triviaacutelis megoldaacutes
Mutex
Uumlzenetenkeacutent 4 szinkronizaacutecioacutet igeacutenylőő műűvelet (inputoutput x lock-unlock)
Hogyan lehetne javiacutetani
Mutex
per-thread input queue
Konzisztenciamemoacuteria vs performanceAtomikus műűveletek szaacutema kb felezőődik
Mutex
per-thread input queue
Atomikus műűveletek maacutesik fele is nagysaacutegrendekkel csoumlkken
Lockolatlan output queue
Lockless
Lockless veszeacutelyekCompiler reordering
CPU reordering (cache eacutes memoacuteria miatt)
Stale adatok jelenleacutete miatt
bull nehezen debuggolhatoacute ritkaacuten előőforduloacute hibaacutek
Mielőtt ilyenbe kezdesz
bull memory ordering
bull memory barriers
bull compiler reordering barriers
Oumlsszefoglalaacutes
bullPaacuterhuzamos programozaacutes okozhat meglepeteacuteseket
bullEgy algoritmus paacuterhuzamosiacutetaacutesa gyakran lassulaacutest eredmeacutenyez elsőőre
bullMeacutereacutes amp megeacuterteacutesƩ
VEacuteGE
lwnnetArticles250967
rdropcomuserspaulmckperfbookperfbook20110828apdf
A nem triviaacutelis koumlltseacutegek miatt egy szekvenciaacutelis program paacuterhuzamos vaacuteltozata gyakran lassabb
lesz elsőő alkalommal
Tipikus trade-off-ok
Konzisztencia sorrendiseacuteg vs sebesseacuteg
bull az abszoluacutet sorrend sok szinkronizaacutecioacutet koumlvetel meg ezek koumlzuumll nem mind fontos
Hasznaacutelt memoacuteria mennyiseacuteg vs sebesseacuteg
bull pl per-thread vaacuteltozoacutek paacuterhuzamos objektum peacuteldaacutenyok
Skaacutelaacutezhatoacute queue
Az input eacutes az output koumlzti oumlsszekoumlteacutest biztosiacutetja
bull input taszkok (N) beteszik az esemeacutenyeket
bull output taszk (1) kiveszi az esemeacutenyeket majd kikuumlldi
Triviaacutelis megoldaacutes
Mutex
Uumlzenetenkeacutent 4 szinkronizaacutecioacutet igeacutenylőő műűvelet (inputoutput x lock-unlock)
Hogyan lehetne javiacutetani
Mutex
per-thread input queue
Konzisztenciamemoacuteria vs performanceAtomikus műűveletek szaacutema kb felezőődik
Mutex
per-thread input queue
Atomikus műűveletek maacutesik fele is nagysaacutegrendekkel csoumlkken
Lockolatlan output queue
Lockless
Lockless veszeacutelyekCompiler reordering
CPU reordering (cache eacutes memoacuteria miatt)
Stale adatok jelenleacutete miatt
bull nehezen debuggolhatoacute ritkaacuten előőforduloacute hibaacutek
Mielőtt ilyenbe kezdesz
bull memory ordering
bull memory barriers
bull compiler reordering barriers
Oumlsszefoglalaacutes
bullPaacuterhuzamos programozaacutes okozhat meglepeteacuteseket
bullEgy algoritmus paacuterhuzamosiacutetaacutesa gyakran lassulaacutest eredmeacutenyez elsőőre
bullMeacutereacutes amp megeacuterteacutesƩ
VEacuteGE
lwnnetArticles250967
rdropcomuserspaulmckperfbookperfbook20110828apdf
Tipikus trade-off-ok
Konzisztencia sorrendiseacuteg vs sebesseacuteg
bull az abszoluacutet sorrend sok szinkronizaacutecioacutet koumlvetel meg ezek koumlzuumll nem mind fontos
Hasznaacutelt memoacuteria mennyiseacuteg vs sebesseacuteg
bull pl per-thread vaacuteltozoacutek paacuterhuzamos objektum peacuteldaacutenyok
Skaacutelaacutezhatoacute queue
Az input eacutes az output koumlzti oumlsszekoumlteacutest biztosiacutetja
bull input taszkok (N) beteszik az esemeacutenyeket
bull output taszk (1) kiveszi az esemeacutenyeket majd kikuumlldi
Triviaacutelis megoldaacutes
Mutex
Uumlzenetenkeacutent 4 szinkronizaacutecioacutet igeacutenylőő műűvelet (inputoutput x lock-unlock)
Hogyan lehetne javiacutetani
Mutex
per-thread input queue
Konzisztenciamemoacuteria vs performanceAtomikus műűveletek szaacutema kb felezőődik
Mutex
per-thread input queue
Atomikus műűveletek maacutesik fele is nagysaacutegrendekkel csoumlkken
Lockolatlan output queue
Lockless
Lockless veszeacutelyekCompiler reordering
CPU reordering (cache eacutes memoacuteria miatt)
Stale adatok jelenleacutete miatt
bull nehezen debuggolhatoacute ritkaacuten előőforduloacute hibaacutek
Mielőtt ilyenbe kezdesz
bull memory ordering
bull memory barriers
bull compiler reordering barriers
Oumlsszefoglalaacutes
bullPaacuterhuzamos programozaacutes okozhat meglepeteacuteseket
bullEgy algoritmus paacuterhuzamosiacutetaacutesa gyakran lassulaacutest eredmeacutenyez elsőőre
bullMeacutereacutes amp megeacuterteacutesƩ
VEacuteGE
lwnnetArticles250967
rdropcomuserspaulmckperfbookperfbook20110828apdf
Skaacutelaacutezhatoacute queue
Az input eacutes az output koumlzti oumlsszekoumlteacutest biztosiacutetja
bull input taszkok (N) beteszik az esemeacutenyeket
bull output taszk (1) kiveszi az esemeacutenyeket majd kikuumlldi
Triviaacutelis megoldaacutes
Mutex
Uumlzenetenkeacutent 4 szinkronizaacutecioacutet igeacutenylőő műűvelet (inputoutput x lock-unlock)
Hogyan lehetne javiacutetani
Mutex
per-thread input queue
Konzisztenciamemoacuteria vs performanceAtomikus műűveletek szaacutema kb felezőődik
Mutex
per-thread input queue
Atomikus műűveletek maacutesik fele is nagysaacutegrendekkel csoumlkken
Lockolatlan output queue
Lockless
Lockless veszeacutelyekCompiler reordering
CPU reordering (cache eacutes memoacuteria miatt)
Stale adatok jelenleacutete miatt
bull nehezen debuggolhatoacute ritkaacuten előőforduloacute hibaacutek
Mielőtt ilyenbe kezdesz
bull memory ordering
bull memory barriers
bull compiler reordering barriers
Oumlsszefoglalaacutes
bullPaacuterhuzamos programozaacutes okozhat meglepeteacuteseket
bullEgy algoritmus paacuterhuzamosiacutetaacutesa gyakran lassulaacutest eredmeacutenyez elsőőre
bullMeacutereacutes amp megeacuterteacutesƩ
VEacuteGE
lwnnetArticles250967
rdropcomuserspaulmckperfbookperfbook20110828apdf
Triviaacutelis megoldaacutes
Mutex
Uumlzenetenkeacutent 4 szinkronizaacutecioacutet igeacutenylőő műűvelet (inputoutput x lock-unlock)
Hogyan lehetne javiacutetani
Mutex
per-thread input queue
Konzisztenciamemoacuteria vs performanceAtomikus műűveletek szaacutema kb felezőődik
Mutex
per-thread input queue
Atomikus műűveletek maacutesik fele is nagysaacutegrendekkel csoumlkken
Lockolatlan output queue
Lockless
Lockless veszeacutelyekCompiler reordering
CPU reordering (cache eacutes memoacuteria miatt)
Stale adatok jelenleacutete miatt
bull nehezen debuggolhatoacute ritkaacuten előőforduloacute hibaacutek
Mielőtt ilyenbe kezdesz
bull memory ordering
bull memory barriers
bull compiler reordering barriers
Oumlsszefoglalaacutes
bullPaacuterhuzamos programozaacutes okozhat meglepeteacuteseket
bullEgy algoritmus paacuterhuzamosiacutetaacutesa gyakran lassulaacutest eredmeacutenyez elsőőre
bullMeacutereacutes amp megeacuterteacutesƩ
VEacuteGE
lwnnetArticles250967
rdropcomuserspaulmckperfbookperfbook20110828apdf
Mutex
Uumlzenetenkeacutent 4 szinkronizaacutecioacutet igeacutenylőő műűvelet (inputoutput x lock-unlock)
Hogyan lehetne javiacutetani
Mutex
per-thread input queue
Konzisztenciamemoacuteria vs performanceAtomikus műűveletek szaacutema kb felezőődik
Mutex
per-thread input queue
Atomikus műűveletek maacutesik fele is nagysaacutegrendekkel csoumlkken
Lockolatlan output queue
Lockless
Lockless veszeacutelyekCompiler reordering
CPU reordering (cache eacutes memoacuteria miatt)
Stale adatok jelenleacutete miatt
bull nehezen debuggolhatoacute ritkaacuten előőforduloacute hibaacutek
Mielőtt ilyenbe kezdesz
bull memory ordering
bull memory barriers
bull compiler reordering barriers
Oumlsszefoglalaacutes
bullPaacuterhuzamos programozaacutes okozhat meglepeteacuteseket
bullEgy algoritmus paacuterhuzamosiacutetaacutesa gyakran lassulaacutest eredmeacutenyez elsőőre
bullMeacutereacutes amp megeacuterteacutesƩ
VEacuteGE
lwnnetArticles250967
rdropcomuserspaulmckperfbookperfbook20110828apdf
Hogyan lehetne javiacutetani
Mutex
per-thread input queue
Konzisztenciamemoacuteria vs performanceAtomikus műűveletek szaacutema kb felezőődik
Mutex
per-thread input queue
Atomikus műűveletek maacutesik fele is nagysaacutegrendekkel csoumlkken
Lockolatlan output queue
Lockless
Lockless veszeacutelyekCompiler reordering
CPU reordering (cache eacutes memoacuteria miatt)
Stale adatok jelenleacutete miatt
bull nehezen debuggolhatoacute ritkaacuten előőforduloacute hibaacutek
Mielőtt ilyenbe kezdesz
bull memory ordering
bull memory barriers
bull compiler reordering barriers
Oumlsszefoglalaacutes
bullPaacuterhuzamos programozaacutes okozhat meglepeteacuteseket
bullEgy algoritmus paacuterhuzamosiacutetaacutesa gyakran lassulaacutest eredmeacutenyez elsőőre
bullMeacutereacutes amp megeacuterteacutesƩ
VEacuteGE
lwnnetArticles250967
rdropcomuserspaulmckperfbookperfbook20110828apdf
Mutex
per-thread input queue
Konzisztenciamemoacuteria vs performanceAtomikus műűveletek szaacutema kb felezőődik
Mutex
per-thread input queue
Atomikus műűveletek maacutesik fele is nagysaacutegrendekkel csoumlkken
Lockolatlan output queue
Lockless
Lockless veszeacutelyekCompiler reordering
CPU reordering (cache eacutes memoacuteria miatt)
Stale adatok jelenleacutete miatt
bull nehezen debuggolhatoacute ritkaacuten előőforduloacute hibaacutek
Mielőtt ilyenbe kezdesz
bull memory ordering
bull memory barriers
bull compiler reordering barriers
Oumlsszefoglalaacutes
bullPaacuterhuzamos programozaacutes okozhat meglepeteacuteseket
bullEgy algoritmus paacuterhuzamosiacutetaacutesa gyakran lassulaacutest eredmeacutenyez elsőőre
bullMeacutereacutes amp megeacuterteacutesƩ
VEacuteGE
lwnnetArticles250967
rdropcomuserspaulmckperfbookperfbook20110828apdf
Mutex
per-thread input queue
Atomikus műűveletek maacutesik fele is nagysaacutegrendekkel csoumlkken
Lockolatlan output queue
Lockless
Lockless veszeacutelyekCompiler reordering
CPU reordering (cache eacutes memoacuteria miatt)
Stale adatok jelenleacutete miatt
bull nehezen debuggolhatoacute ritkaacuten előőforduloacute hibaacutek
Mielőtt ilyenbe kezdesz
bull memory ordering
bull memory barriers
bull compiler reordering barriers
Oumlsszefoglalaacutes
bullPaacuterhuzamos programozaacutes okozhat meglepeteacuteseket
bullEgy algoritmus paacuterhuzamosiacutetaacutesa gyakran lassulaacutest eredmeacutenyez elsőőre
bullMeacutereacutes amp megeacuterteacutesƩ
VEacuteGE
lwnnetArticles250967
rdropcomuserspaulmckperfbookperfbook20110828apdf
Lockless
Lockless veszeacutelyekCompiler reordering
CPU reordering (cache eacutes memoacuteria miatt)
Stale adatok jelenleacutete miatt
bull nehezen debuggolhatoacute ritkaacuten előőforduloacute hibaacutek
Mielőtt ilyenbe kezdesz
bull memory ordering
bull memory barriers
bull compiler reordering barriers
Oumlsszefoglalaacutes
bullPaacuterhuzamos programozaacutes okozhat meglepeteacuteseket
bullEgy algoritmus paacuterhuzamosiacutetaacutesa gyakran lassulaacutest eredmeacutenyez elsőőre
bullMeacutereacutes amp megeacuterteacutesƩ
VEacuteGE
lwnnetArticles250967
rdropcomuserspaulmckperfbookperfbook20110828apdf
Lockless veszeacutelyekCompiler reordering
CPU reordering (cache eacutes memoacuteria miatt)
Stale adatok jelenleacutete miatt
bull nehezen debuggolhatoacute ritkaacuten előőforduloacute hibaacutek
Mielőtt ilyenbe kezdesz
bull memory ordering
bull memory barriers
bull compiler reordering barriers
Oumlsszefoglalaacutes
bullPaacuterhuzamos programozaacutes okozhat meglepeteacuteseket
bullEgy algoritmus paacuterhuzamosiacutetaacutesa gyakran lassulaacutest eredmeacutenyez elsőőre
bullMeacutereacutes amp megeacuterteacutesƩ
VEacuteGE
lwnnetArticles250967
rdropcomuserspaulmckperfbookperfbook20110828apdf
Oumlsszefoglalaacutes
bullPaacuterhuzamos programozaacutes okozhat meglepeteacuteseket
bullEgy algoritmus paacuterhuzamosiacutetaacutesa gyakran lassulaacutest eredmeacutenyez elsőőre
bullMeacutereacutes amp megeacuterteacutesƩ
VEacuteGE
lwnnetArticles250967
rdropcomuserspaulmckperfbookperfbook20110828apdf
VEacuteGE
lwnnetArticles250967
rdropcomuserspaulmckperfbookperfbook20110828apdf