magvas gondolatok
DESCRIPTION
Mire használjuk a magokat, ha már úgy is vannak? A több szálú adatfeldolgozás architekturális problémái.TRANSCRIPT
![Page 1: Magvas gondolatok](https://reader034.vdocuments.mx/reader034/viewer/2022052523/5560b32bd8b42af43b8b47ab/html5/thumbnails/1.jpg)
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
![Page 2: Magvas gondolatok](https://reader034.vdocuments.mx/reader034/viewer/2022052523/5560b32bd8b42af43b8b47ab/html5/thumbnails/2.jpg)
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
![Page 3: Magvas gondolatok](https://reader034.vdocuments.mx/reader034/viewer/2022052523/5560b32bd8b42af43b8b47ab/html5/thumbnails/3.jpg)
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
![Page 4: Magvas gondolatok](https://reader034.vdocuments.mx/reader034/viewer/2022052523/5560b32bd8b42af43b8b47ab/html5/thumbnails/4.jpg)
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
![Page 5: Magvas gondolatok](https://reader034.vdocuments.mx/reader034/viewer/2022052523/5560b32bd8b42af43b8b47ab/html5/thumbnails/5.jpg)
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
![Page 6: Magvas gondolatok](https://reader034.vdocuments.mx/reader034/viewer/2022052523/5560b32bd8b42af43b8b47ab/html5/thumbnails/6.jpg)
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
![Page 7: Magvas gondolatok](https://reader034.vdocuments.mx/reader034/viewer/2022052523/5560b32bd8b42af43b8b47ab/html5/thumbnails/7.jpg)
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
![Page 8: Magvas gondolatok](https://reader034.vdocuments.mx/reader034/viewer/2022052523/5560b32bd8b42af43b8b47ab/html5/thumbnails/8.jpg)
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
![Page 9: Magvas gondolatok](https://reader034.vdocuments.mx/reader034/viewer/2022052523/5560b32bd8b42af43b8b47ab/html5/thumbnails/9.jpg)
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
![Page 10: Magvas gondolatok](https://reader034.vdocuments.mx/reader034/viewer/2022052523/5560b32bd8b42af43b8b47ab/html5/thumbnails/10.jpg)
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
![Page 11: Magvas gondolatok](https://reader034.vdocuments.mx/reader034/viewer/2022052523/5560b32bd8b42af43b8b47ab/html5/thumbnails/11.jpg)
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
![Page 12: Magvas gondolatok](https://reader034.vdocuments.mx/reader034/viewer/2022052523/5560b32bd8b42af43b8b47ab/html5/thumbnails/12.jpg)
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
![Page 13: Magvas gondolatok](https://reader034.vdocuments.mx/reader034/viewer/2022052523/5560b32bd8b42af43b8b47ab/html5/thumbnails/13.jpg)
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
![Page 14: Magvas gondolatok](https://reader034.vdocuments.mx/reader034/viewer/2022052523/5560b32bd8b42af43b8b47ab/html5/thumbnails/14.jpg)
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
![Page 15: Magvas gondolatok](https://reader034.vdocuments.mx/reader034/viewer/2022052523/5560b32bd8b42af43b8b47ab/html5/thumbnails/15.jpg)
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
![Page 16: Magvas gondolatok](https://reader034.vdocuments.mx/reader034/viewer/2022052523/5560b32bd8b42af43b8b47ab/html5/thumbnails/16.jpg)
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
![Page 17: Magvas gondolatok](https://reader034.vdocuments.mx/reader034/viewer/2022052523/5560b32bd8b42af43b8b47ab/html5/thumbnails/17.jpg)
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
![Page 18: Magvas gondolatok](https://reader034.vdocuments.mx/reader034/viewer/2022052523/5560b32bd8b42af43b8b47ab/html5/thumbnails/18.jpg)
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
![Page 19: Magvas gondolatok](https://reader034.vdocuments.mx/reader034/viewer/2022052523/5560b32bd8b42af43b8b47ab/html5/thumbnails/19.jpg)
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
![Page 20: Magvas gondolatok](https://reader034.vdocuments.mx/reader034/viewer/2022052523/5560b32bd8b42af43b8b47ab/html5/thumbnails/20.jpg)
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
![Page 21: Magvas gondolatok](https://reader034.vdocuments.mx/reader034/viewer/2022052523/5560b32bd8b42af43b8b47ab/html5/thumbnails/21.jpg)
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
![Page 22: Magvas gondolatok](https://reader034.vdocuments.mx/reader034/viewer/2022052523/5560b32bd8b42af43b8b47ab/html5/thumbnails/22.jpg)
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
![Page 23: Magvas gondolatok](https://reader034.vdocuments.mx/reader034/viewer/2022052523/5560b32bd8b42af43b8b47ab/html5/thumbnails/23.jpg)
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
![Page 24: Magvas gondolatok](https://reader034.vdocuments.mx/reader034/viewer/2022052523/5560b32bd8b42af43b8b47ab/html5/thumbnails/24.jpg)
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
![Page 25: Magvas gondolatok](https://reader034.vdocuments.mx/reader034/viewer/2022052523/5560b32bd8b42af43b8b47ab/html5/thumbnails/25.jpg)
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
![Page 26: Magvas gondolatok](https://reader034.vdocuments.mx/reader034/viewer/2022052523/5560b32bd8b42af43b8b47ab/html5/thumbnails/26.jpg)
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
![Page 27: Magvas gondolatok](https://reader034.vdocuments.mx/reader034/viewer/2022052523/5560b32bd8b42af43b8b47ab/html5/thumbnails/27.jpg)
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
![Page 28: Magvas gondolatok](https://reader034.vdocuments.mx/reader034/viewer/2022052523/5560b32bd8b42af43b8b47ab/html5/thumbnails/28.jpg)
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
![Page 29: Magvas gondolatok](https://reader034.vdocuments.mx/reader034/viewer/2022052523/5560b32bd8b42af43b8b47ab/html5/thumbnails/29.jpg)
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
![Page 30: Magvas gondolatok](https://reader034.vdocuments.mx/reader034/viewer/2022052523/5560b32bd8b42af43b8b47ab/html5/thumbnails/30.jpg)
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
![Page 31: Magvas gondolatok](https://reader034.vdocuments.mx/reader034/viewer/2022052523/5560b32bd8b42af43b8b47ab/html5/thumbnails/31.jpg)
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
![Page 32: Magvas gondolatok](https://reader034.vdocuments.mx/reader034/viewer/2022052523/5560b32bd8b42af43b8b47ab/html5/thumbnails/32.jpg)
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
![Page 33: Magvas gondolatok](https://reader034.vdocuments.mx/reader034/viewer/2022052523/5560b32bd8b42af43b8b47ab/html5/thumbnails/33.jpg)
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
![Page 34: Magvas gondolatok](https://reader034.vdocuments.mx/reader034/viewer/2022052523/5560b32bd8b42af43b8b47ab/html5/thumbnails/34.jpg)
Oumlsszefoglalaacutes
bullPaacuterhuzamos programozaacutes okozhat meglepeteacuteseket
bullEgy algoritmus paacuterhuzamosiacutetaacutesa gyakran lassulaacutest eredmeacutenyez elsőőre
bullMeacutereacutes amp megeacuterteacutesƩ
VEacuteGE
lwnnetArticles250967
rdropcomuserspaulmckperfbookperfbook20110828apdf
![Page 35: Magvas gondolatok](https://reader034.vdocuments.mx/reader034/viewer/2022052523/5560b32bd8b42af43b8b47ab/html5/thumbnails/35.jpg)
VEacuteGE
lwnnetArticles250967
rdropcomuserspaulmckperfbookperfbook20110828apdf