35
“Magvas gondolatok” Scheidler Balázs

Magvas gondolatok

Embed Size (px)

DESCRIPTION

Mire használjuk a magokat, ha már úgy is vannak? A több szálú adatfeldolgozás architekturális problémái.

Citation preview

Page 1: Magvas gondolatok

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Oumlsszefoglalaacutes

bullPaacuterhuzamos programozaacutes okozhat meglepeteacuteseket

bullEgy algoritmus paacuterhuzamosiacutetaacutesa gyakran lassulaacutest eredmeacutenyez elsőőre

bullMeacutereacutes amp megeacuterteacutesƩ

VEacuteGE

lwnnetArticles250967

rdropcomuserspaulmckperfbookperfbook20110828apdf

Page 35: Magvas gondolatok

VEacuteGE

lwnnetArticles250967

rdropcomuserspaulmckperfbookperfbook20110828apdf