* nixã‚ˇã‚šãƒ†ãƒ ã§ãŽC / C ++ã‚ŗãƒŧãƒ‰ãŽãƒ—ãƒ­ãƒ•ã‚Ąã‚¤ãƒĒãƒŗã‚°



ã‚ĸãƒŦクã‚ĩãƒŗãƒ€ãƒŧãƒģã‚ĸãƒŦã‚¯ã‚ˇãƒŧエフīŧˆ Postgres Professional īŧ‰


ãƒ—ãƒ­ã‚°ãƒŠãƒ ã‚ŗãƒŧãƒ‰ãŽãƒ—ãƒ­ãƒ•ã‚Ąã‚¤ãƒĒãƒŗã‚°æ–šæŗ•ãĢé–ĸするHighLoad ++ 2016äŧšč­°ãŽå„ĒれたæĻ‚čρãƒŦポãƒŧト。 æ¸Ŧ厚中ãĢį™ēį”Ÿã™ã‚‹ä¸€čˆŦįš„ãĒエナãƒŧãĢついãĻ。 そしãĻã€ã‚‚ãĄã‚ã‚“ã€ãƒ„ãƒŧãƒĢãĢついãĻīŧš

-gettimeofday
-strace、ltrace、トナ゚
-gprof
-gdb / lldb
-パフりãƒŧãƒžãƒŗã‚š
-pmcstat
-SystemTap
-DTrace
-HeapTrack
-BPF / bcc

į”ģ像

æœ€åˆã¯ã€ãƒ™ãƒŗãƒãƒžãƒŧã‚¯ã‚’čĄŒã‚ãĒã„æ–šæŗ•ãĢついãĻã‚ãžã‚ŠæŠ€čĄ“įš„ãĒéƒ¨åˆ†ã¯æŒãĄãžã›ã‚“ã€‚

į§ã¯ã€äēēã€…ãŒãƒ™ãƒŗãƒãƒžãƒŧã‚¯ã‚’čĄŒã†éš›ãĢã‚ˆãã‚ã‚‹é–“é•ã„ã‚’įŠ¯ã™ã“ã¨ãŒå¤šã„ã“ã¨ã‚’čĻŗå¯Ÿã—ãžã™ã€‚ そしãĻ、ここãĢそれらぎ最初ぎもぎがありぞす...



わからãĒい場合は、HighLoad ++ぎすずãĻぎ゚ピãƒŧã‚ĢãƒŧãŒã€į•°ãĒるベクã‚ŋãƒŧã§č¤‡æ•°ãŽåŽŗã—ã„ã‚ŗãƒŧãƒãƒŗã‚°ã‚’å—ã‘ãžã™ã€‚ 1ã¤ãŽã‚ŗãƒŧãƒãƒŗã‚°ãŒåŋ…čĻã§ã™ãŒã€æŽ‹ã‚Šã¯ã‚Ēãƒ—ã‚ˇãƒ§ãƒŗã§ã™ã€‚ ã‚Ēãƒ—ã‚ˇãƒ§ãƒŗãŽã‚ŗãƒŧãƒãƒŗã‚°ã¯ã€ãŸã¨ãˆã°ã€čˆžå°ææ€–į—‡ã‚’å…‹æœã™ã‚‹ã‚ˆã†ãĒもぎです。 これは、こぎ全äŊ“ã‚’æ•´į†ã™ã‚‹ãŸã‚ãŽéžå¸¸ãĢåŽŗã—ã„ã‚ĸプロãƒŧチです。 そしãĻã€į§ãŒHighLoad ++ãĢé–ĸするãƒŦポãƒŧトを提å‡ēしたとき、ä¸ģå‚Ŧč€…ã¯ã“ãŽæŠ€čĄ“įš„ãĒ部分をすずãĻ削除し、さらãĢクãƒŧãƒĢãĒã‚‚ãŽã€įžŽã—ã„ã‚šã‚¯ãƒĒãƒŧãƒŗã‚ˇãƒ§ãƒƒãƒˆãĒおをčŋŊåŠ ã™ã‚‹ã“ã¨ã‚’ææĄˆã—ãžã—ãŸã€‚ そしãĻã€ãã‚Œã‚’åŽŸčĄŒã™ã‚‹æ–šæŗ•ã€å…ĨåŠ›ã™ã‚‹ã‚ŗãƒžãƒŗãƒ‰ãĢčˆˆå‘ŗãŒã‚ã‚‹äēēは、ドキãƒĨãƒĄãƒŗãƒˆã‚’å‚į…§ã™ã‚‹ã“ã¨ãŒã§ããžã™-ãã‚ŒãŒį†į”ąã§ã™-すずãĻがそこãĢã‚ã‚‹ãŽã§ã€į§ãŽãƒ–ãƒ­ã‚°ã¸ãŽãƒĒãƒŗã‚¯ã€‚

たとえば、Linux上でSystemTapã‚’æ§‹į¯‰ã™ã‚‹ãŽãŒé›Ŗã—ã„å ´åˆãĢčˆˆå‘ŗãŒã‚ã‚‹å ´åˆã¯ã€ãƒ–ãƒ­ã‚°ã¸ãŽãƒĒãƒŗã‚¯ã‚’é–‹ãã¨ã€ã™ãšãĻがそこãĢ襨į¤ēされぞす。 そしãĻ、こぎãƒŦポãƒŧトãĢはおそらくそぎようãĒãƒŦビãƒĨãƒŧがあり、一čˆŦįš„ãĒツãƒŧãƒĢ、それらが提䞛するもぎ、いつäŊŋį”¨ã™ã‚‹ã‹ã‚’æƒŗåƒã™ã‚‹ã“ã¨ãŒã§ããžã™ã€‚
æœ€åˆã¯ã€ãƒ™ãƒŗãƒãƒžãƒŧã‚¯ã‚’čĄŒã‚ãĒã„æ–šæŗ•ãĢついãĻã‚ãžã‚ŠæŠ€čĄ“įš„ãĒéƒ¨åˆ†ã¯æŒãĄãžã›ã‚“ã€‚

į§ã¯ã€äēēã€…ãŒãƒ™ãƒŗãƒãƒžãƒŧã‚¯ã‚’čĄŒã†éš›ãĢã‚ˆãã‚ã‚‹é–“é•ã„ã‚’įŠ¯ã™ã“ã¨ãŒå¤šã„ã“ã¨ã‚’čĻŗå¯Ÿã—ãžã™ã€‚




少ãĒくともãģãŧ同じįĩæžœã‚’å†įžã§ãã‚‹ã¯ãšã§ã™ã€‚




厌全ãĒå›ŗã‚’äŊœæˆã™ã‚‹ãŸã‚ãĢã€ã‚ŗãƒŧãƒ‰ãŽãƒ™ãƒŗãƒãƒžãƒŧã‚¯ã‚’čĄŒã†åŋ…čĻãŒãĒã„æ–šæŗ•ã‹ã‚‰å§‹ã‚ãžã™ã€‚ æœ€ã‚‚į°Ąå˜ãĒæ–šæŗ•ã¯gettimeofdayīŧˆīŧ‰ã§ã™ã€‚ 昔ãĒãŒã‚‰ãŽæ–šæŗ•ã¯ã€ã‚ŗãƒŧドがある場合、それがおれだけ速いか遅いかをįŸĨりたいです-最初ãĢ時間をæ¸ŦåŽšã—ã€ã‚ŗãƒŧãƒ‰ã‚’åŽŸčĄŒã—ã€æœ€åžŒãĢ時間をæ¸Ŧ厚し、デãƒĢã‚ŋをã‚Ģã‚Ļãƒŗãƒˆã—ã€ã‚ŗãƒŧドが非常ãĢæ™‚é–“ãŒã‹ã‹ãŖãĻいるとįĩčĢ–äģ˜ã‘ぞした。



åŽŸéš›ã€ã“ã‚Œã¯æœ€ã‚‚ã°ã‹ã’ãŸæ–šæŗ•ã§ã¯ã‚ã‚Šãžã›ã‚“ã€‚ãŸã¨ãˆã°ã€ã“ãŽã‚ŗãƒŧドがバã‚ĢãĒ場合、つぞりごくぞれãĢ、たとえば10,000ãƒĒクエ゚トãĢ1回というようãĒ場合ãĢäžŋ刊です。 加えãĻ、あãĒたが思うかもしれãĒいようãĢ、あãĒãŸã¯ã‚ˇã‚šãƒ†ãƒ ã‚ŗãƒŧãƒĢをしãĻいãĒã„ã¨č€ƒãˆã‚‹ãŽãŒįŋ’æ…Ŗã§ã‚ã‚‹ãģおéĢ˜äžĄã§ã¯ã‚ã‚Šãžã›ã‚“ã€‚ Linuxã§ã¯ã€ã“ãŽãƒĄã‚Ģニã‚ēムはVDSOとå‘ŧばれぞす。 原際、すずãĻぎプロã‚ģ゚ぎã‚ĸドãƒŦ゚įŠē間ãĢマップするペãƒŧジがã‚ĢãƒŧネãƒĢãĢあり、gettimeofdayīŧˆīŧ‰ã¯ãƒĄãƒĸãƒĒã‚ĸクã‚ģ゚ãĢãĒりぞすが、syscallはį™ēį”Ÿã—ãžã›ã‚“ã€‚

ã‚šãƒ”ãƒŗãƒ­ãƒƒã‚¯ã‚’äŊŋãŖãĻäŊ•かをしãĻã„ã‚‹å ´åˆã¯åŽ‰äžĄã§ã‚ã‚‹ãĢもかかわらず、äŊŋį”¨ã—ãĒいでください。 ã‚šãƒ”ãƒŗãƒ­ãƒƒã‚¯č‡ĒäŊ“は非常ãĢéĢ˜é€ŸãĢ動äŊœã™ã‚‹ãŸã‚ã§ã™ã€‚ つぞり、æ¸ŦåŽšå¯žčąĄã¯å°‘ãĒくともミãƒĒį§’ã§ã‚ã‚‹åŋ…čĻãŒã‚ã‚Šãžã™ã€‚ãã†ã§ãĒい場合、エナãƒŧはæ¸Ŧ厚ãƒŦベãƒĢでį™ēį”Ÿã—ãžã™ã€‚



strace、ltrace、trussãĒおぎツãƒŧãƒĢはクãƒŧãƒĢãĒツãƒŧãƒĢであり、syscallã‚’åŽŸčĄŒã—ãĻいる時間をį¤ēす-cフナグがありぞす。 さãĻ、ltraceはナイブナãƒĒãƒ—ãƒ­ã‚ˇãƒŧã‚¸ãƒŖã‚’æ¸Ŧ厚し、straceはsyscallsをæ¸Ŧ厚しぞすが、原則としãĻ、それらはいくつかぎã‚ŋ゚クぎおこかãĢäžŋ刊です。 よくäŊŋã†ã¨ã¯č¨€ãˆãžã›ã‚“ã€‚



Gprof、こぎようãĒクãƒŧãƒĢãĒツãƒŧãƒĢがありぞす。゚ナイドはテキ゚トãƒŦポãƒŧトぎ䞋をį¤ēしãĻいぞす。 それも明らかです。ここでは、プログナムãĢ手順があり、äŊ•åēĻもå‘ŧãŗå‡ēされ、パãƒŧã‚ģãƒŗãƒˆå˜äŊã§åŽŸčĄŒã•ã‚Œãžã—ãŸã€‚ ã‚ˇãƒŗãƒ—ãƒĢã§į›´æ„Ÿįš„ãĒãƒŦポãƒŧãƒˆã€‚ãƒžã‚¤ã‚¯ãƒ­ãƒ™ãƒŗãƒãƒžãƒŧクをäŊœæˆã—た場合、それをäŊŋį”¨ã§ããžã™ã€‚

gprofをäŊŋį”¨ã—ãĻ、これらぎį”ģåƒã‚’į”Ÿæˆã§ããžã™ã€‚



むしろ、それは、それをしãĒã„æ–šæŗ•ãŽäž‹ã§ã™ã€‚ ã“ãŽå†™įœŸã‚’čĻšãˆãĻおいãĻください、6ã¤ãŽæ­Ŗæ–šåŊĸがありぞす。 それらが占める゚ペãƒŧ゚ãĢæŗ¨æ„ã—ãĻãã ã•ã„ã€‚ã“ã“ã§ã¯ã€ãƒ—ãƒ­ã‚ˇãƒŧã‚¸ãƒŖãŽåå‰ã€äŊ•かがįŸĸ印ぎ上ãĢ常ãĢ書かれãĻいぞすが、äŊ•も明įĸēではありぞせん-それは多くぎ゚ペãƒŧ゚を占有しぞす。 これよりもはるかãĢčĻ–čĻšįš„ãĒãƒŦポãƒŧãƒˆãŒčĄ¨į¤ēされぞす。 しかし、原則としãĻã€įžŽã—ã„å†™įœŸã€åŊ“åą€ã€ãƒ‘ãƒŗãƒˆã‚’į¤ēすことができぞす。



デバッã‚Ŧãƒŧ 原際、これはæ—ĸãĢã€ãƒ—ãƒ­ãƒ•ã‚Ąã‚¤ãƒĒãƒŗã‚°æ™‚ãĢ原際ãĢäŊŋį”¨ã—ãĒければãĒらãĒいツãƒŧãƒĢãŽäž‹ã§ã™ã€‚ãƒãƒƒãƒã‚ŗãƒžãƒŗãƒ‰ã‚’åŽŸčĄŒã™ã‚‹ã‚¯ãƒŧãƒĢãĒãƒ—ãƒ­ãƒ‘ãƒ†ã‚ŖãŒã‚ã‚Šã€ã“ãŽãƒãƒƒãƒã‚ŗãƒžãƒŗãƒ‰ã‚ģットīŧˆbtīŧ‰ãĢバックトナックを書きčžŧむことができるためです。 これは、ロックぎįĢļ合をデバッグするとき、ロックをäē‰ã†ã¨ããĢ非常ãĢäžŋ刊です。



http://habr.ru/p/310372/

ここãĢ少しクãƒŧãƒĢã‚ŗã‚ĸがありぞす。 į§ãŽæ„čĻ‹ã§ã¯ã€ã“ã‚Œã¯į§ãŒPostgresᔍãĢ書いた最初ぎパッチでした。 įŦŦäēŒãĢã€į§ã¯čĻšãˆãĻいぞせん。 PostgresãĢは、Postgresã‚ŋ゚クãĢ合わせãĻã‚Ģ゚ã‚ŋマイã‚ēされたį‹Ŧč‡ĒãŽãƒãƒƒã‚ˇãƒĨテãƒŧブãƒĢãŽåŽŸčŖ…ãŒã‚ã‚Šãžã™ã€‚ ぞた、そぎようãĒフナグをäŊŋį”¨ã—ãĻäŊœæˆã—、さぞざぞãĒプロã‚ģ゚でäŊŋį”¨ã§ããžã™ã€‚ クナイã‚ĸãƒŗãƒˆã¯ã€Œã“ã“ã§į§ã¯ããŽã‚ˆã†ãĒčĻæą‚ã‚’ã—ãĻいるぎãĢ、すずãĻがそぎようãĒ計į”ģãĢ劊けられãĻã„ã‚‹ã€ã¨ã„ã†å•éĄŒã‚’æ€ã„äģ˜ããžã—た。 čˆˆå‘ŗæˇąã„ã“ã¨ãĢã€æœ€åˆã¯ãƒãƒƒã‚¯ãƒˆãƒŠãƒƒã‚¯æ‰‹æŗ•ã‚’äŊŋį”¨ã—ãĻ、gdbを10回開始したようãĢčĻ‹ãˆãžã—ãŸã€‚5ã¤ãŽã‚ąãƒŧ゚ではバックトナックがロックを取垗しįļšã‘ã€åŠåˆ†ãŽã‚ąãƒŧ゚ではäģ–ぎäŊ•かãĢã‹ã‹ãŖãĻいぞす。ロックãĢæŽ›ã‹ãŖãĻいる、äŊ•ã‹ãŒé–“é•ãŖãĻいぞす。

ところで、éĢ˜č˛ čˇã‚ˇã‚šãƒ†ãƒ HighLoad ++ぎ開į™ēč€…ãŽäŧšč­°ãŽéŽåŽģ5嚴間ぎå…Ŧ開ビデã‚Ēをå…Ŧ開しぞした。 YouTubeãƒãƒŖãƒŗãƒãƒĢをčĻ–č´ã€å­Ļįŋ’ã€å…ąæœ‰ã€čŗŧčĒ­ã—ãžã™ 。

バックトナックãĢã‚ˆãŖãĻã€į§ã¯ã“ã‚ŒãŒãƒ­ãƒƒã‚¯ã‚’å–åž—ãžãŸã¯č§Ŗæ”žã™ã‚‹ã‚ŗãƒŧãƒ‰ãŽį¨ŽéĄžã‚’čĻ‹ã¤ã‘ã‚‹ã“ã¨ãŒã§ããžã—ãŸã€‚ ã“ã‚Œã¯é•ˇã„čŠąã§ã™ã€‚ãƒĒãƒŗã‚¯ã‚’ãŸãŠãŖãĻHabrÃŠãŽč¨˜äē‹ã‚’čĒ­ã‚€ã“ã¨ãŒã§ããžã™ã€‚ æŠ€čĄ“įš„ãĒčŠŗį´°ãŒã‚ã‚‹ãƒãƒƒã‚ĢãƒŧãŽãƒ‡ã‚Ŗã‚šã‚Ģãƒƒã‚ˇãƒ§ãƒŗã¸ãŽãƒĒãƒŗã‚¯ã‚‚ã‚ã‚Šãžã™ã€‚

ä¸Šč¨˜ãŽã‚šãƒŠã‚¤ãƒ‰ã§ã¯ã€ãƒ­ãƒƒã‚¯ãŽå–åž—ã¨č§Ŗæ”žãŽé–“ãĢã‚ã‚‹ã‚ŗãƒŧãƒ‰ãŽä¸€éƒ¨ãŒã€ãƒ€ã‚¤ãƒŠãƒƒã‚ˇãƒĨぎおこかãĢčŊä¸‹ã—ã€ã‚šãƒ”ãƒŗãƒ­ãƒƒã‚¯ã‚’å–åž—ã™ã‚‹ã¨å›žčģĸしãĻいぞした。 デバッã‚Ŧãƒŧぎ劊けを借りãĻ、パッチをčĻ‹ã¤ã‘ã€äŋŽæ­Ŗã—、提䞛することができぞした。 そしãĻã€ããŽãƒ€ã‚¤ãƒŠãƒãƒƒã‚ˇãƒĨīŧˆã“れはPostgresãŽãƒãƒƒã‚ˇãƒĨプãƒŦãƒŧトですīŧ‰ãŽã‚šãƒ”ãƒŗãƒ­ãƒƒã‚¯ã¯ã€8ぞたは16ãŽã‚šãƒ”ãƒŗãƒ­ãƒƒã‚¯ãĢ変わりぞした。 ãĒんとかプãƒŦイできぞしたが、すでãĢ9.6ãĢãĒãŖãĻいぞす。



perf topは上äŊãŽæ‰‹é †ã‚’į¤ēしãĻいるため、Perfはå„ĒれたツãƒŧãƒĢです。 こぎ場合、į¤ēされたプロã‚ģã‚šã§ã€ãã‚Œã‚‰ãŒåŽŸčĄŒã•ã‚ŒãĻいる時間。 上部ãĢは30īŧ…、20īŧ…ãŒčĄ¨į¤ēされ、ResourceOwnerãŒčĄ¨į¤ēされぞす。æŦĄãŽã‚¯ãƒŧãƒĢãĒ゚トãƒŧãƒĒãƒŧも原際ぎパッチãĢé–ĸã™ã‚‹ã‚‚ãŽã§ã‚ã‚‹ãŸã‚ã€ãƒ—ãƒ­ã‚ˇãƒŧã‚¸ãƒŖãŽåå‰ãĢ間違いはありぞせん。



クナイã‚ĸãƒŗãƒˆãŒæĨãĻč¨€ãŖãŸīŧšã€Œį§ã¯ããŽã‚ˆã†ãĒčĻæą‚ã¨ããŽã‚ˆã†ãĒ゚キãƒŧãƒ ã‚’æŒãŖãĻいぞす。 すずãĻが愚かです。 おうするīŧŸã€ デバッグを開始しぞした。 そしãĻ、åŊŧã¯ã‚¨ãƒŗã‚ŋãƒŧプナイã‚ēã‚ĸプãƒĒã‚ąãƒŧã‚ˇãƒ§ãƒŗã‚’æŒãĄã€ãƒ†ãƒŧブãƒĢと1000個ぎ子テãƒŧブãƒĢã‚’æŒãŖãĻいぞすīŧˆPostgresでは、čĒ°ã‚‚įŸĨらãĒい場合、テãƒŧブãƒĢぎį‰ŋがありぞすīŧ‰ã€‚ ぞた、perf topをäŊŋį”¨ã™ã‚‹ã¨ã€ResourceOwnerぎすずãĻが鈍いことがわかりぞす。 ResourceOwnerは、さぞざぞãĒãƒĒã‚Ŋãƒŧã‚šã€ãƒ•ã‚Ąã‚¤ãƒĢã€å…ąæœ‰ãƒĄãƒĸãƒĒãĒおをæ ŧį´ã™ã‚‹ã‚Ēブジェクトですīŧˆå˜čĒžã‚ĒブジェクトがC言čĒžãĢéŠį”¨ã•ã‚Œã‚‹é™ã‚Šīŧ‰ã€‚ そしãĻ、通常、ãƒĒã‚Ŋãƒŧ゚を配列ãĢå‰˛ã‚ŠåŊ“ãĻãĻ配列ãĢå…Ĩれ、それらを逆ぎ順åēã§č§Ŗæ”žã™ã‚‹ã¨ã„うäģŽåŽšãŽä¸‹ã§æ›¸ã‹ã‚ŒãĻいぞす。 ã—ãŸãŒãŖãĻ、ãƒĒã‚Ŋãƒŧ゚を削除するとき、åŊŧはãƒĒã‚Ŋãƒŧ゚を最垌から検į´ĸし始めぞす。 ã‚ã‚‹æ„å‘ŗã§ã€åŊŧは配列ぎã‚ĩイã‚ēをįŸĨãŖãĻいぞす-最垌ぎčĻį´ ãŽã‚¤ãƒŗãƒ‡ãƒƒã‚¯ã‚šã‚’æŒãŖãĻいぞす。 ã“ãŽæĄäģļは常ãĢæē€ãŸã•れãĻいるわけではãĒく、åŊŧはこぎ配列ぎすずãĻぎ斚向をčĻ‹ã‚‹åŋ…čĻãŒã‚ã‚‹ãŸã‚ã€ãã‚Œã¯æ„šã‹ã§ã‚ã‚‹ã“ã¨ãŒåˆ¤æ˜Žã—ãžã—ãŸã€‚ パッチは、一厚量ぎãƒĒã‚Ŋãƒŧ゚īŧˆį´„16ぞたはこれぎ数īŧ‰ã§ã€ã“ãŽé…åˆ—ãŒãƒãƒƒã‚ˇãƒĨテãƒŧブãƒĢãĢ変わるというäē‹åޟãĢありぞす。 įĢļåˆã‚’č§Ŗæąēするとき、あãĒãŸã¯ãƒ˜ã‚¤ãƒ–ãŒé…åˆ—ãŽä¸Žãˆã‚‰ã‚ŒãŸã‚¤ãƒŗãƒ‡ãƒƒã‚¯ã‚šãĢæĨãĻã‹ã‚‰ã€ãŠãĄã‚‰ã‹ãŽå´ãĢčĄŒããžã™ã€‚

ところで、čĒ°ã‹ãŒįŦŦ3åƒåš´į´€ã§čĒ°ãŒãƒãƒƒã‚ˇãƒĨテãƒŧブãƒĢをäŊœæˆã™ã‚‹åŋ…čĻãŒã‚ã‚‹ãŽã‹â€‹â€‹ã¨ã„ã†čŗĒ問ãĢčˆˆå‘ŗãŒã‚ã‚‹å ´åˆã¯ã€æ¨™æē–ãŽåŽŸčŖ…ãŒéŠã—ãĻいãĒいため、2ã¤ãŽãƒ‘ãƒƒãƒã§ãƒãƒƒã‚ˇãƒĨテãƒŧブãƒĢをäŊœæˆã—ぞす。 これは9.6ãĢもæ—ĸãĢ存在しぞす。åŧˇããƒ‘ãƒŧãƒ†ã‚Ŗã‚ˇãƒ§ãƒŗåŒ–ã•ã‚ŒãŸãƒ†ãƒŧブãƒĢがある場合、ResourceOwnerはバã‚ĢãĢãĒりぞせん。 į§ã¯ã€åŊŧはぞだ愚かですが、åŧąã„です。



perfをäŊŋį”¨ã™ã‚‹ã¨ã€ãƒ•ãƒŦãƒŧムグナフとå‘ŧã°ã‚Œã‚‹įžŽã—ã„å†™įœŸã‚’äŊœæˆã§ããžã™ã€‚ 下から上ãĢčĒ­ãŋぞす。 äģĨ下ãĢ手順がありぞす-それがč˛ģやす時間ãĢ比䞋しãĻ、順į•ĒãĢå‘ŧãŗå‡ēしぞす-äģ–ぎ手順ãĢåˆ†å‰˛ã•ã‚Œãžã™ã€‚ ãã‚Œã‹ã‚‰į§ãŸãĄã¯ä¸ŠãĢčĄŒãã€åŊŧåĨŗãŒãŠã“ã§éŽã”ã™æ™‚é–“ã‚’æ¯”äž‹įš„ãĢå…ąæœ‰ã—ãžã™ã€‚ そしãĻさらãĢ上。 これは非常ãĢ明į™Ŋですが、初めãĻčĻ‹ãŸå ´åˆã¯įã—ã„ã“ã¨ã§ã™ã€‚ 原際、これは非常ãĢčĻ–čĻšįš„ãĒãƒŦポãƒŧトであり、GprofがäŊœæˆã—ãĻいるグナフぎ䞋よりもはるかãĢčĻ–čĻšįš„ã§ã™ã€‚ 場所がおれだけįĩŒæ¸ˆįš„ãĢäŊŋį”¨ã•ã‚ŒãĻいるかãĢæŗ¨æ„ã—ãĻください。゚ナイドãĢ襨į¤ēすることはできぞせんが、すずãĻクãƒĒックできぞす。 そしãĻåŊŧã¯čˆˆå‘ŗã‚’į¤ēã™æ‰‹ãŒã‹ã‚Šã‚’æŒãŖãĻいぞす。

ã“ã‚Œã¯æ‹Ąå¤§éƒ¨åˆ†ã§ã™ã€‚ã“ã‚Œã¯éƒ¨å“ãŽä¸­å¤ŽãŽãŠã“ã‹ãĢありぞす。



原際、これでおそらくすずãĻです。 これをよくäŊŋį”¨ã—ãžã™ã€‚ 前ぎäŊœæĨ­ã§ã€ãƒ­ã‚°ã‚’åŒã˜æ–šæŗ•ã§åˆ†æžã—ãžã—ãŸã€‚ åˆĨãŽčŠąãŒã‚ã‚Šãžã—ãŸ-AKクナ゚ã‚ŋãƒŧã€åˆ†æ•Ŗã‚ĸプãƒĒã‚ąãƒŧã‚ˇãƒ§ãƒŗãŒã‚ã‚Šã€ãƒ­ã‚°ã‹ã‚‰ããŽã‚ˆã†ãĒã‚‚ãŽã‚’æ§‹į¯‰ã—ã€ã‚ŗãƒŧドがおこで遅くãĒã‚‹ã‹ã‚’į†č§Ŗã—ã‚ˆã†ã¨ã—ãžã—ãŸã€‚ ã‚‚ãĄã‚ã‚“ã€ãƒ­ã‚°ã¯ã™ãšãĻãŽãƒãƒƒã‚¯ã‚¨ãƒŗãƒ‰ã‹ã‚‰é›†č¨ˆã™ã‚‹åŋ…čĻãŒã‚ã‚Šãžã—ãŸã€‚ 一čˆŦįš„ãĢ、äžŋ刊ãĒã“ã¨ã¯ã€į§ã¯įš†ãĢそれをお勧めしぞす。



http://youtu.be/tDacjrSCeq4

ã“ã‚Œã¯ãƒ–ãƒŠãƒŗãƒ‰ãƒŗãƒģグãƒŦッグです。 åŊŧはフãƒŦãƒŧムグナフをį™ē明し、ãģとんおč‡Ē分č‡ĒčēĢã‚’åŽŸčĄŒã—ãžã—ãŸã€‚ おそらく、åŊŧは厌全ãĢ一äēēではありぞせんでしたが、かãĒã‚ŠãŽæŠ•čŗ‡ã‚’ã—ãžã—ãŸã€‚ åŊŧはYouTubeビデã‚ĒでもįŸĨられãĻいぞす。そこでは、デãƒŧã‚ŋã‚ģãƒŗã‚ŋãƒŧぎハãƒŧドドナイブでåĢãŗã€ã“ã‚Œã‚‰ãŽãƒ‰ãƒŠã‚¤ãƒ–ãĢã‚ĸクã‚ģ゚するとãƒŦã‚¤ãƒ†ãƒŗã‚ˇãƒŧがåĸ—å¤§ã—ãžã™ã€‚į´ æ™´ã‚‰ã—ã„ãƒ“ãƒ‡ã‚Ēです。 čĒ°ã‹ãŒčˆˆå‘ŗã‚’æŒãŖãĻいる場合、これはæœŦåŊ“ぎトピックですが、SSDで動äŊœã™ã‚‹ã‹ãŠã†ã‹ã¯ã‚ã‹ã‚Šãžã›ã‚“。

最čŋ‘ã€éŠ€čĄŒãŽæļˆé˜˛č¨“Ꮄ䏭ãĢ、įĢįŊをæļˆįĢするã‚Ŧ゚を䞛įĩĻã—ãŸãƒ‘ã‚¤ãƒ—ãŽåŖloudが大きすぎたため、デãƒŧã‚ŋã‚ģãƒŗã‚ŋãƒŧ全äŊ“ãŒåˆ‡æ–­ã•ã‚ŒãŸã¨ã„ã†åŒæ§˜ãŽčŠąãŒã‚ã‚Šãžã—ãŸã€‚ つぞり、įŠē気振動がすずãĻãŽãƒ‡ã‚Ŗã‚šã‚¯ã‚’ãƒŽãƒƒã‚¯ã‚ĸã‚Ļトしぞした。

ãƒ–ãƒŠãƒŗãƒ‰ãƒŗãĢæˆģã‚Šãžã™ã€‚ãƒ—ãƒ­ãƒ•ã‚Ąã‚¤ãƒĒãƒŗã‚°ãĢé–ĸするすずãĻぎįŸĨč­˜ãŒã‚ã‚Šã€ãã‚ŒãĢå¤šãã‚’æŗ¨ãŽčžŧã‚“ã§ã„ã‚‹ã‹ã‚‰ã§ã™ã€‚įžåœ¨ã¯Netflixã§ã“ã‚Œã‚’čĄŒãŖãĻいぞす。



http://eax.me/freebsd-pmcstat/

Pmcstatは、FreeBSDå°‚į”¨ãŽãƒ„ãƒŧãƒĢです。 これらぎ゚ナイドをäŊœæˆã—たとき、čĒ°ã‚‚FreeBSDã‚’æŒãŖãĻいãĒã„ã ã‚ã†ã¨æ€ãŖãŸãŽã§ã€pmcstatãĢついãĻãŽčŠŗį´°ã¯į‰šãĢありぞせん。 掋りはあぞりéĸį™ŊくãĒい。 しかし、čĻį´„ã‚’čĻ‹ã‚‹ã¨ã€perfをäŊŋį”¨ã—ãŸå ´åˆã¨åŒã˜ã‚ˆã†ãĢすずãĻã‚’åŽŸčĄŒã§ããžã™ã€‚ åŊŧã¯ãžãŸã€ãƒˆãƒƒãƒ—ã‚’į˛åž—ã—ã€ãƒ•ãƒŦãƒŧムグナフをäŊœæˆã—ぞす。åŊŧはæ‚ĒくはãĒãã€į•°ãĒるチãƒŧムです。 気ãĢするäēēは、ここãĢį‰šåŽšãŽč¨˜äē‹ã¸ãŽãƒĒãƒŗã‚¯ãŒã‚ã‚Šãžã™ã€‚



ã‚ˆã‚ŠæˇąåˆģãĒツãƒŧãƒĢãĢį§ģりぞす。 SystemTap こぎ上ãĢは、äŊ•かが遅くãĒるCPUãƒ—ãƒ­ãƒ•ã‚Ąã‚¤ãƒĒãƒŗã‚°ãŒã‚ã‚Šã€SystemTapをäŊŋį”¨ã™ã‚‹ã¨ã•ã‚‰ãĢ多くぎことができぞす-ã‚ĢãƒŧネãƒĢ内ぎ文字列をčĻ‹ãĻ、ネットワãƒŧã‚¯ä¸Šã§æŒãŖãĻã„ã‚‹ãƒ‘ã‚ąãƒƒãƒˆæ•°ã‚’æ¸ŦåŽšã—ã€ãƒ‡ã‚Ŗã‚šã‚¯ãĢã‚ĸクã‚ģ゚し、すずãĻをæ¸Ŧ厚できぞすあãĒãŸãŽæƒŗåƒåŠ›ãĢã‚ˆãŖãĻぎãŋåˆļ限されぞす。 SystemTapでは、こぎようãĒ゚クãƒĒプトをここでäŊœæˆã§ããžã™ã€‚こぎ場合、ip_rcvå‘ŧãŗå‡ēしがトãƒŦãƒŧ゚されぞす。つぞり、äŊ•ã‚‰ã‹ãŽį¨ŽéĄžãŽiPãƒ‘ã‚ąãƒƒãƒˆã‚’å—äŋĄã—ぞす。



é•ˇæ‰€ã¨įŸ­æ‰€ã€‚ ä¸ģãĒįŸ­æ‰€2.ぞず、これはLinuxぎå…Ŧåŧãƒ„ãƒŧãƒĢではありぞせん。RedHatぎ担åŊ“č€…ã¯ã€ã‚ŗãƒŧドをデバッグするためãĢ、ä¸ģãĢč‡Ē分č‡ĒčēĢでčĻ‹ãŸã‚ˆã†ãĢčĻ‹čŊとしãĻいぞした。 ã‚¤ãƒŗã‚šãƒˆãƒŧãƒĢするぎは非常ãĢ不äžŋです。ã‚ĢãƒŧネãƒĢãƒ‡ãƒãƒƒã‚°ã‚ˇãƒŗãƒœãƒĢをåĢã‚€ãƒ‘ãƒƒã‚ąãƒŧジをダã‚Ļãƒŗãƒ­ãƒŧドしãĻã‹ã‚‰ã‚¤ãƒŗã‚šãƒˆãƒŧãƒĢし、SystemTapを非常ãĢé•ˇã„æ™‚é–“ã‚ŗãƒŗãƒ‘ã‚¤ãƒĢするåŋ…čĻãŒã‚ã‚Šãžã™ã€‚ãžãŸã€ã‚ŗãƒŗãƒ‘ã‚¤ãƒĢがそれãģお厚易ではãĒいため、バãƒŧã‚¸ãƒ§ãƒŗãŒåŋ…čĻã§ã™ã€‚ しかし、最įĩ‚įš„ãĢは抟čƒŊし始めぞす。 2į•Ēį›ŽãŽæŦ į‚šã¯ã€åˆ†æžã™ã‚‹å¯žčąĄã§ã‚るポッã‚ŋãƒŧぎåŸēį¤Žã‚’ååˆ†ãĢį†č§Ŗã™ã‚‹åŋ…čĻãŒã‚ã‚‹ã“ã¨ã§ã™ã€‚ čĒ°ã‚‚ãŒLinuxã‚ĢãƒŧネãƒĢをåŋƒã‹ã‚‰įŸĨãŖãĻいるわけではありぞせん。 ã—ã‹ã—ã€ã‚ŗãƒŧドをよくįŸĨãŖãĻいれば、それをäŊŋį”¨ã§ããžã™ã€‚

čˆˆå‘ŗæˇąã„į‰šæ€§ãŒã‚ã‚Šãžã™-ã‚ŗãƒŧドはCãĢ変換され、ã‚ĢãƒŧネãƒĢãƒĸジãƒĨãƒŧãƒĢãĢã‚ŗãƒŗãƒ‘ã‚¤ãƒĢされぞす。ã‚ĢãƒŧネãƒĢãƒĸジãƒĨãƒŧãƒĢはロãƒŧドされ、すずãĻぎįĩąč¨ˆã€ã™ãšãĻぎトãƒŦãƒŧ゚を収集しぞす。 こぎ場合、ã‚ŧãƒ­ã§é™¤įŽ—ã™ã‚‹ãŽã‚’æã‚Œã‚‹ã“ã¨ã¯ã§ããžã›ã‚“ã€‚é€†å‚į…§ãƒã‚¤ãƒŗã‚ŋãƒŧã¯é–“é•ãŖãĻいぞす。 これを゚クãƒĒãƒ—ãƒˆč¨€čĒžã§č¨˜čŋ°ã—た場合、ã‚ĢãƒŧネãƒĢã‚¯ãƒŠãƒƒã‚ˇãƒĨはį™ēį”Ÿã›ãšã€čļŗãŒãã‚Œã„ãĢ折りたたぞれãĻã‚ĸãƒŗãƒ­ãƒŧドされぞすが、ã‚ĢãƒŧネãƒĢはåŧ•きįļšãå‹•äŊœã—ぞす。

č‡Ē動型推čĢ–ãŒã‚ã‚Šãžã™ã€‚ įĸēかãĢ、2つぞたは3つぎã‚ŋイプしかありぞせんが、それらはč‡Ēå‹•įš„ãĢ襨į¤ēされぞす。

個äēēįš„ãĢは、厉厚したæĨŊ器とは思えãĒいぎで、æœŦį•Ēį’°åĸƒã§äŊŋį”¨ã™ã‚‹ãŽãŒæ€–ã„ã§ã—ã‚‡ã†ã€‚ 1つぎäē‹åŽŸã¯ã€10į§’ãŽã‚šã‚¯ãƒĒãƒ—ãƒˆã‚’ã‚ŗãƒŗãƒ‘ã‚¤ãƒĢしãĻロãƒŧドしたことであり、そこで減速するぎではãĒく、減速するもぎはあぞり明įĸēではありぞせん。 į§ã¯ãã‚Œã‚’åąé™ēãĢさらしぞせんが、多分あãĒãŸã¯å¤§čƒ†ã§ã™ã€‚



DTraceは、FreeBSDだけでãĒくLinuxでもäŊŋį”¨ã§ãã‚‹ã‚¯ãƒŧãƒĢãĒツãƒŧãƒĢであり、すずãĻå•éĄŒã‚ã‚Šãžã›ã‚“ã€‚ SystemTapãĢäŧŧãĻいぞす。こぎ䞋では、postgresとå‘ŧばれるプロã‚ģ゚ぎポãƒŧãƒĒãƒŗã‚°ã‚ˇã‚šãƒ†ãƒ ã‚ŗãƒŧãƒĢをトãƒŦãƒŧ゚しãĻいぞす。 å‘ŧãŗå‡ēされるåŧ•数とčŋ”されるもぎでトãƒŦãƒŧ゚しぞす。



é•ˇæ‰€ã¨įŸ­æ‰€ã€‚ ぞず、SystemTapã¨ã¯į•°ãĒã‚Šã€ããŽãžãžã‚ˇã‚šãƒ†ãƒ ãĢį›´æŽĨįĩ„ãŋčžŧぞれãĻã„ã‚‹ãŸã‚ã€ã‚¤ãƒŗã‚šãƒˆãƒŧãƒĢã‚„ã‚ŗãƒŗãƒ‘ã‚¤ãƒĢぎåŋ…čĻã¯ã‚ã‚Šãžã›ã‚“ã€‚ FreeBSD、Mac OSã§åˆŠį”¨å¯čƒŊです。 Linuxぎ場合、äŊ•ã‚‰ã‹ãŽæ–šæŗ•ã§Oracle LinuxをäŊŋį”¨ã—ãĻいる場合がありぞす。 さらãĢ、GitHubãĢdtrace4linuxãƒ—ãƒ­ã‚¸ã‚§ã‚¯ãƒˆãŒã‚ã‚Šã€ã‚ŗãƒŗãƒ‘ã‚¤ãƒĢ、動äŊœã€įĸēčĒã—ãžã—ãŸã€‚ 原則としãĻ、äŊŋį”¨ã§ããžã™ã€‚

SystemTapã¨ã¯į•°ãĒり、DTraceはæœŦį•Ēį’°åĸƒã§äŊŋį”¨ã™ã‚‹ãŽãŒæ€–ã„ã‚ã‘ã§ã¯ã‚ã‚Šãžã›ã‚“ã€‚æˆĻé—˜į’°åĸƒã§MacãĢã‚ĸクã‚ģ゚しãĻ、åĨŊきãĒもぎをトãƒŦãƒŧ゚しãĻください。 į§ãŽä¸ģčĻŗįš„ãĒ感čϚãĢよると、DTraceã¯įŽĄį†č€…ãĢã¨ãŖãĻよりäžŋ刊です。ãĒぜãĒら、ã‚ĢãƒŧネãƒĢãĢは多くぎã‚ĩãƒŗãƒ—ãƒĢãŒã‚ã‚Šã€ã‚ŗãƒŧドベãƒŧ゚をįŸĨるåŋ…čĻã¯ãĒく、「IPãƒ‘ã‚ąãƒƒãƒˆãŽįĩąč¨ˆã‚’収集したい-ãŠã‚Œã ã‘čĄŒãŖãŸãŽã‹ã€ãŠã‚Œã ã‘čĄŒãŖãŸãŽã‹ã€ 。 ところで、æ—ĸčŖŊぎãƒĻãƒŧãƒ†ã‚ŖãƒĒãƒ†ã‚Ŗã‚ģットがありぞす。゚クãƒĒプトをすずãĻč‡Ē分でäŊœæˆã™ã‚‹åŋ…čĻã¯ã‚ã‚Šãžã›ã‚“ã€‚ DTrace Toolkitがå‘ŧãŗå‡ēされぞした。

ぞた、SystemTapã¯įŽĄį†č€…å‘ã‘ã§ã¯ãĒく、開į™ēč€…å‘ã‘ã§ã™ã€‚ã€Œã‚ĢãƒŧネãƒĢã‚ŗãƒŧドをįŸĨãŖãĻã„ã‚‹ãŽã§ã€ã‚ŗãƒŧãƒ‰ã‚’č¨˜čŋ°ã›ãšã€ãƒ‘ッチをåŊ“ãĻずãĢこぎ場所でプãƒŦイしたい」



これぞで、CPUäŊŋį”¨įŽ‡ãŽčĻŗį‚šã‹ã‚‰ãƒ—ãƒ­ãƒ•ã‚Ąã‚¤ãƒĒãƒŗã‚°ãĢついãĻčĒŦ明しãĻきぞしたが、もう1つぎ一čˆŦįš„ãĒå•éĄŒã¯ã€ã€Œå¤§é‡ãŽãƒĄãƒĸãƒĒがæļˆč˛ģされãĻいる場合はおうãĒりぞすかīŧŸã€ã§ã™ã€‚ 個äēēįš„ãĢã€į§ã¯HeapTrackツãƒŧãƒĢがåĨŊきです。ValgrindMassifをäŊŋį”¨ã—ãŸã“ã¨ãŒã‚ã‚‹å ´åˆã€ãã‚Œã¯åŒã˜ã§ã™ãŒã€éĢ˜é€Ÿã§ã™ãŒã€åˆļ限がありぞす-Linuxでぎãŋ抟čƒŊしぞす。

ここīŧˆä¸ŠãŽã‚šãƒŠã‚¤ãƒ‰īŧ‰ã¯ãƒ†ã‚­ã‚šãƒˆãƒŦポãƒŧãƒˆãŽäž‹ã§ã™ã€‚ãƒĄãƒĸãƒĒぎãģã¨ã‚“ãŠã‚’éŖŸã„å°Ŋくす場所​​がčĻ‹ã¤ã‹ã‚Šãžã™ã€‚į‰šåŽšãŽčĄŒį•Ēåˇã€ã‚Ŋãƒŧã‚šã‚ŗãƒŧドäģ˜ããŽãƒ•ã‚Ąã‚¤ãƒĢ名ãĒおがありぞす。



さらãĢ、åŊŧはMassif VisualizerツãƒŧãƒĢでこぎようãĒįžŽã—ã„ãƒŦポãƒŧトをäŊœæˆã§ããžã™ã€‚ そぎ中ぎすずãĻを開くことができぞす、それはすずãĻダイナミク゚です。 そこãĢ記æ†ļãŒæˆé•ˇã—ã€ãã‚Œã‹ã‚‰ãƒ”ãƒŧクãĢ達し、それからčŊ下し始め、č‡Ēį”ąãĢãĒã‚Šã€į›ŽįĢ‹ãĄã€åŗãĢį—•čˇĄãŒã‚ã‚Šãžã™ã€‚ すずãĻが非常ãĢ明įĸēã§įžŽã—ã„ã§ã™ã€‚



é•ˇæ‰€ã¨įŸ­æ‰€ã€‚ Valgrindã¨ã¯į•°ãĒり、éĢ˜é€Ÿã§ã™ã€‚ åŽŸčĄŒä¸­ãŽãƒ—ãƒ­ã‚ģ゚ãĢしがãŋついãĻ、そぎ下でプロã‚ģã‚šã‚’åŽŸčĄŒã§ããžã™ã€‚ įžŽã—ã„ãƒŦポãƒŧト。 åŊŧã¯č¨˜åŋĩįĸ‘ã‚’čĻ‹ã¤ã‘ã‚‹æ–šæŗ•ã‚’įŸĨãŖãĻいぞす。 あãĒたぎ標æē–įš„ãĒ言čĒžãƒŠã‚¤ãƒ–ãƒŠãƒĒがåŊŧぎ内部ぎニãƒŧã‚ēぎいくつかãĢ16 KBã‚’å‰˛ã‚ŠåŊ“ãĻ、それらをãƒĒãƒĒãƒŧ゚しãĒã‹ãŖãŸå ´åˆã€åŊŧã¯ãã‚Œã‚‰ã‚’å°‘ã—æ›˛ãŒãŖãŸã¨čĻ‹ã¤ã‘ãžã™ã€‚ã€Œãžã‚ã€ãĒぜīŧŸã€ã€åŊŧã¯ã“ã‚ŒãŒč¨˜åŋĩã ã¨č¨€ã†ã§ã—ã‚‡ã† しかし、原則としãĻ、これらすずãĻãĢもかかわらず、非常ãĢäžŋ刊ãĒツãƒŧãƒĢです。

æœ€ã‚‚å¤šãå‰˛ã‚ŠåŊ“ãĻられãĻいる8ãƒã‚¤ãƒˆãŽæ–­į‰‡ã¨ã€å°‘ã—é ģįšãĢå‰˛ã‚ŠåŊ“ãĻられãĻいる32ãƒã‚¤ãƒˆãŽãƒĄãƒĸãƒĒを持つピトグナムをäŊœæˆã™ã‚‹ã“とができぞす。 こぎようãĒįžŽã—ã„ãƒ’ã‚šãƒˆã‚°ãƒŠãƒ ãŒåž—ã‚‰ã‚Œãžã™ã€‚

゚ã‚ŋックがåŋ…čρãĒ場合、ぞたはLinuxäģĨ外ぎäŊ•かがåŋ…čρãĒ場合は、ValgrindをäŊŋį”¨ã—ãžã™ã€‚ į§ã¯Linux'oidãĒぎで、ValgrindãĢついãĻはäŊ•ã‚‚įŸĨりぞせん。



LinuxãĢは、BPFとå‘ŧばれるこぎようãĒトピックがありぞす。これは元々バãƒŧクãƒŦãƒŧãƒ‘ã‚ąãƒƒãƒˆãƒ•ã‚ŖãƒĢã‚ŋãƒŧであり、名前がį¤ēすようãĢ、バãƒŧクãƒŦãƒŧとäŊ•ã‚‰ã‹ãŽãƒ‘ã‚ąãƒƒãƒˆãƒ•ã‚ŖãƒĢã‚ŋãƒĒãƒŗã‚°ãĢé–ĸé€Ŗã—ãĻいぞすが、2.6ぎ2.6ãƒ–ãƒŠãƒŗãƒãŽãŠã“ã‹ãĢ一åēĻ上陸しぞした。 しかし、įĩæžœã¨ã—ãĻ、それは最įĩ‚æąē厚され、原際、すでãĢč¨€åŠã•ã‚ŒãŸãƒ–ãƒŠãƒŗãƒ‰ãƒŗãƒģグãƒŦッグぎ劊けãĒしではãĒく、Linux上ぎDTraceãĢ変わりぞした。

これãĢã‚ˆã‚Šã€ãžãŖãŸãåŒã˜ã“ã¨ãŒã™ãšãĻ可čƒŊãĢãĒりぞす。 Brandonは最čŋ‘、ブログポ゚トをäŊœæˆã—ぞした。こぎブログでは、4.9ã‚ĢãƒŧネãƒĢã¯įžåœ¨ãžã ãƒĒãƒĒãƒŧã‚šå€™čŖœã§ã™ãŒã€ãžã‚‚ãĒくBPFぎ変更がãƒĒãƒĒãƒŧ゚されるäēˆåŽšã§ã™ã€‚ 大きãĒ大きãĒ変更はありぞせん。äŊ•ã‹ã‚’č§Ŗæąēするかもしれぞせんし、少しäŋŽæ­Ŗã™ã‚‹ã‹ã‚‚ã—ã‚Œãžã›ã‚“ãŒã€įŠæĨĩįš„ãĢčŋŊ加するためãĢ、これはもうčĩˇã“りぞせん。

Bccは、BPFがã‚ĢãƒŧネãƒĢ内ぎさぞざぞãĒå ´æ‰€ãŽãƒ—ãƒ­ãƒ•ã‚Ąã‚¤ãƒĢをäŊœæˆã™ã‚‹ãŸã‚ãĢäŊŋį”¨ã™ã‚‹ãƒĻãƒŧãƒ†ã‚ŖãƒĒãƒ†ã‚ŖãŽã‚ģットです。 å†™įœŸã§ã¯ã€ã“ã‚Œã‚‰ã¯ã™ãšãĻãƒĻãƒŧãƒ†ã‚ŖãƒĒãƒ†ã‚ŖãŽåå‰ã§ã™ã€‚ 原際ãĢは、ã‚ĢãƒŧネãƒĢ内ぎäģģæ„ãŽå ´æ‰€ã€ã‚ĢãƒŧネãƒĢå†…ãŽãƒ—ãƒ­ãƒ•ã‚Ąã‚¤ãƒĢã‚’į ´æŖ„ã§ããžã™ã€‚

BPFぎæŦ į‚šã¯ã€DTraceやSystemTapぎようãĢį‹Ŧč‡Ēぎ゚クãƒĒãƒ—ãƒˆč¨€čĒžã‚’ãžã æŒãŖãĻいãĒいことですが、こぎ斚向ãĢはすでãĢ成果がありぞす。 į‰šãĢ、Red HatãŽé€Ŗä¸­ãŒæŽĨįļšã—、SystemTapを取垗しãĻBPFᔍãĢæ§‹į¯‰ã—ãžã—ãŸã€‚ つぞり、SystemTap言čĒžãŒäŊŋį”¨ã•ã‚Œãžã™ãŒã€BPFで抟čƒŊしぞす。 それはぞだいくらかåˆļ限されãĻãŠã‚Šã€æ–‡å­—åˆ—åž‹ã‚’ãžãŖãŸãã‚ĩポãƒŧトしãĻいぞせんが、åŊŧらはそれãĢ取りįĩ„んでいぞす。

čĻã™ã‚‹ãĢ、BPFã¯į§ãŸãĄãŽé ã„æ˜Žã‚‹ã„æœĒæĨぎようãĒもぎであり、Facebookからぎ゚クãƒĒãƒ—ãƒˆãŒã‚ãŖãŸãŸã‚ã€Red HatはSystemTapã‚’æŒãŖãĻいたぎで、すずãĻぎäŧæĨ­ãŒæœ€įĩ‚įš„ãĢå‡ēäŧšãŖãŸæœ€å¤§ãŽå…ąé€šį‚šã§ã™ã€‚トãƒŦãƒŧã‚šį”¨ãĢこぎようãĒもぎを開į™ēするåŋ…čĻãŒã‚ã‚Šãžã—ãŸã€‚ åŊŧらはäģ•äē‹ã‚’č§Ŗæąēし、äģ–ãĢäŊ•ã‚‚åŋ…čĻã¨ã—ãžã›ã‚“ã€‚ しかし、BPFはįĩæžœã¨ã—ãĻすずãĻぎäēēぎニãƒŧã‚ēã‚’č§Ŗæąēするもぎであり、すぐãĢã‚ŗã‚ĸぎæē–備ができãĻおり、最įĩ‚įš„ãĢはčĒ°ã‚‚ãŒã“ã‚ŒãĢ取りįĩ„ãŋ、数嚴垌ãĢは大きãĒ嚸įĻãŒã‚‚ãŸã‚‰ã•ã‚Œã‚‹ã‚ˆã†ã§ã™ã€‚



äŊ•į™žä¸‡ã‚‚ãŽäēē々ぎåŋƒã‚’åˆēæŋ€ã™ã‚‹ä¸ģãĒčŗĒ問īŧšã€Œã•ãĻ、多くぎツãƒŧãƒĢ、äŊ•を、いつäŊŋうずきかīŧŸã€ į§ãŒå€‹äēēįš„ãĢäŊŋį”¨ã™ã‚‹ã‚‚ãŽã€‚ デバッã‚Ŧãƒŧ ロックぎįĢļåˆãŒį–‘ã‚ã‚Œã‚‹å ´åˆã€ãã‚Œã‚’į–‘ã†ãŽã¯į°Ąå˜ã§ã™ã€‚perftopでは、čĒ°ã‹ãŒå¤šããŽæ™‚é–“ã‚’éŖŸãšãĻã„ã‚‹ã“ã¨ã¯ã‚ã‹ã‚Šãžã›ã‚“ã€‚ãŠãã‚‰ããƒ­ãƒƒã‚¯ã§ãƒãƒŗã‚°ã—ãžã™ã€‚ パフりãƒŧãƒžãƒŗã‚šã€CPUãĢå‡ēäŧšãŖãŸã¨æ€ã†å ´åˆã¯ã€é€šå¸¸ãŽhtopでčĻ‹ã‚‹ã“ã¨ãŒã§ããžã™-ここãĢプロã‚ģ゚があり、CPUを大量ãĢæļˆč˛ģしぞす。 Pmcstat、FreeBSD、SystemTapã‚’ãŠæŒãĄãŽå ´åˆã€perfãŒã‚ã‚‹ã¨ã„ã†į†į”ąã§åŊšãĢįĢ‹ãŸãĒいツãƒŧãƒĢぎようです-よりäžŋ刊です。 ã¤ãžã‚Šã€ãƒ—ãƒ­ãƒ•ã‚Ąã‚¤ãƒĒãƒŗã‚°ãŽã‚ŗãƒŗãƒ†ã‚­ã‚šãƒˆã§ã€ã¤ãžã‚Šperfã§ãƒ—ãƒ­ãƒ•ã‚Ąã‚¤ãƒĢをäŊœæˆã§ããžã™ãŒã€SystemTapをトãƒŦãƒŧ゚するためãĢã¯ã€ãƒ—ãƒ­ãƒ•ã‚Ąã‚¤ãƒĒãƒŗã‚°ã ã‘ã§ã¯ã‚ã‚Šãžã›ã‚“ã€‚

DTraceは、あãĒたがMacぎ下ãĢåē§ãŖãĻいる場合、すずãĻをįŸĨãŖãĻいるぎで、それがあãĒたぎすずãĻです。

HeapTrack for memory、Vagrant Massif-LinuxをäŊŋį”¨ã—ãĻいる場合、BPFは明るいæœĒæĨですが、äģŠã§ã¯4. 9をčŖŊ品ãĢčŋŊåŠ ã™ã‚‹ã“ã¨ã¯ã—ãžã›ã‚“ãŒã€ãŠãã‚‰ãå¤§čƒ†ã§ã™ã€‚



Brandon GreggãŒå…ąč‘—ã—ãŸæœŦをお勧めしぞす。

1ã¤į›Žã¯ã€ã‚ˇã‚šãƒ†ãƒ ãƒ‘ãƒ•ã‚Šãƒŧãƒžãƒŗã‚šīŧšã‚¨ãƒŗã‚ŋãƒŧプナイã‚ēとクナã‚Ļドです。すばらしいæœŦであり、čǰãĢã¨ãŖãĻもåŋ…čĒ­ã§ã™ã€‚ ã“ã‚Œã¯ã€į§ãŒčĒ­ã‚“ã ä¸­ã§ãƒ—ãƒ­ã‚°ãƒŠãƒŸãƒŗã‚°ãĢé–ĸé€Ŗã™ã‚‹æœ€éĢ˜ãŽæœŦぎ1つです。 åŊŧåĨŗã¯į§ãŽč„ŗã‚’åšãéŖ›ã°ã—ãŸåžŒã€į ´į‰‡ãŒåŒåƒšãŽč„ŗãĢč§Ļれ、一čˆŦãĢそれをčĒ­ã‚“ã ã€‚

DTraceãĢついãĻぎ2į•Ēį›ŽãŽæœŦã¯ã€ãƒ–ãƒŠãƒŗãƒ‰ãƒŗã‚°ãƒŦッグぎæœŦã§ã‚‚ã‚ã‚Šã€į§ãŒãŠã‚ŒãģãŠæŗ¨į›ŽãĢ値するか分からãĒã„į”ˇã¨å…ąč‘—ã—ãĻいぞす。 į§ã¯ãã‚Œã‚’čĒ­ãŋãžã›ã‚“ã§ã—ãŸã€į§ã¯ãã‚Œã‚’čĒŋずぞした;これはDTraceãĢé–ĸするãƒŦã‚ˇãƒ”ãŽéžå¸¸ãĢ大きãĒã‚ŗãƒŦã‚¯ã‚ˇãƒ§ãƒŗã§ã™ã€‚ ゚クãƒĒãƒ—ãƒˆãŽäž‹ã¨ã‚ŗãƒžãƒŗãƒ‰ã‚’æäž›ã—ãžã™ã€‚ そしãĻ千ペãƒŧジãĢ。 ã“ã‚Œã¯ã‚ãžã‚Ščˆˆå‘ŗæˇąã„čĒ­ãŋį‰Šã§ã¯ãĒいようãĢ思えぞすが、DTraceãĢ非常ãĢčˆˆå‘ŗãŒã‚ã‚‹å ´åˆã¯ã€å¤•æ–šãĢį›Žã‚’é€šã—ãĻã‚‚åŽŗã¯ã‚ã‚Šãžã›ã‚“ã€‚

ã‚ĒãƒŗãƒŠã‚¤ãƒŗãƒĒã‚Ŋãƒŧ゚ぎ束īŧš


ᧁãĢはすずãĻがありぞす。

こぎãƒŦポãƒŧトは、éĢ˜č˛ čˇã‚ˇã‚šãƒ†ãƒ HighLoad ++ぎ開į™ēč€…ãŽäŧšč­°ã§čĄŒã‚ã‚ŒãŸæœ€éĢ˜ãŽã‚šãƒ”ãƒŧチぎ1つぎčģĸ写です 。 HighLoad ++ 2017ã‚Ģãƒŗãƒ•ã‚ĄãƒŦãƒŗã‚šãŽ1か月æœĒæē€ãŒæŽ‹ã‚Šãžã™ã€‚

į§ãŸãĄã¯ã™ã§ãĢäŧšč­°ãƒ—ログナムをæē–備しãĻãŠã‚Šã€įžåœ¨ã‚šã‚ąã‚¸ãƒĨãƒŧãƒĢãŒįŠæĨĩįš„ãĢåŊĸ成されãĻいぞす。

äģŠåš´ã€ã€Œ Right Handles 」ã‚ŋグãĢついãĻå ąå‘Šã—ãžã™ã€‚


ãžãŸã€ã“ã‚Œã‚‰ãŽčŗ‡æ–™ãŽä¸€éƒ¨ã¯ã€éĢ˜č˛ čˇã‚ˇã‚šãƒ†ãƒ HighLoadぎ開į™ēãĢé–ĸするã‚ĒãƒŗãƒŠã‚¤ãƒŗãƒˆãƒŦãƒŧãƒ‹ãƒŗã‚°ã‚ŗãƒŧ゚でäŊŋį”¨ã•ã‚Œãžã™ã‚Ŧã‚¤ãƒ‰ã¯ã€į‰šåˆĨãĢé¸æŠžã•ã‚ŒãŸæ–‡å­—ã€č¨˜äē‹ã€čŗ‡æ–™ã€ãƒ“デã‚Ēぎチェãƒŧãƒŗã§ã™ã€‚į§ãŸãĄãŽæ•™į§‘æ›¸ãĢはすでãĢ30äģĨ上ぎãƒĻニãƒŧクãĒčŗ‡æ–™ãŒã‚ã‚Šãžã™ã€‚æŽĨįļšã—ãĻくださいīŧ

Source: https://habr.com/ru/post/J340394/


All Articles