-- ·|­û / µù¥U -- ¡@
¡@±b¸¹¡G
¡@±K½X¡G
¡@ | µù¥U | §Ñ°O±K½X
3/26 ·s®Ñ¨ì¡I 3/19 ·s®Ñ¨ì¡I 3/14 ·s®Ñ¨ì¡I 12/12 ·s®Ñ¨ì¡I
ÁʮѬyµ{¡EQ & A¡E¯¸°È¯d¨¥ª©¡E«ÈªA«H½c
¢x 3ds Max¢x Maya¢x Rhino¢x After Effects¢x SketchUp¢x ZBrush¢x Painter¢x Unity¢x
¢x PhotoShop¢x AutoCad¢x MasterCam¢x SolidWorks¢x Creo¢x UG¢x Revit¢x Nuke¢x
¢x C#¢x C¢x C++¢x Java¢x ¹CÀ¸µ{¦¡¢x Linux¢x ´O¤J¦¡¢x PLC¢x FPGA¢x Matlab¢x
¢x Àb«È¢x ¸ê®Æ®w¢x ·j¯Á¤ÞÀº¢x ¼v¹³³B²z¢x Fluent¢x VR+AR¢x ANSYS¢x ²`«×¾Ç²ß¢x
¢x ³æ´¹¤ù¢x AVR¢x OpenGL¢x Arduino¢x Raspberry Pi¢x ¹q¸ô³]­p¢x Cadence¢x Protel¢x
¢x Hadoop¢x Python¢x Stm32¢x Cortex¢x Labview¢x ¤â¾÷µ{¦¡¢x Android¢x iPhone¢x
¥i¬d®Ñ¦W,§@ªÌ,ISBN,3dwoo®Ñ¸¹
¸Ô²Ó®ÑÄy¤ÀÃþ

BPF¤§Åq¡G¬}±xLinux¨t²Î©MÀ³¥Î©Ê¯à

( ²Åé ¦r)
§@ªÌ¡G®]¦tÁo µ¥Ãþ§O¡G1. -> §@·~¨t²Î -> Linux
ĶªÌ¡G
¥Xª©ªÀ¡G¹q¤l¤u·~¥Xª©ªÀBPF¤§Åq¡G¬}±xLinux¨t²Î©MÀ³¥Î©Ê¯à 3dWoo®Ñ¸¹¡G 53818
¸ß°Ý®ÑÄy½Ð»¡¥X¦¹®Ñ¸¹¡I

¡i¯Ê®Ñ¡j
NT°â»ù¡G 995 ¤¸

¥Xª©¤é¡G11/1/2020
­¶¼Æ¡G856
¥úºÐ¼Æ¡G0
¯¸ªø±ÀÂË¡G
¦L¨ê¡G¶Â¥Õ¦L¨ê»y¨t¡G ( ²Åé ª© )
¥[¤JÁʪ«¨® ¢x¥[¨ì§Úªº³Ì·R
(½Ð¥ýµn¤J·|­û)
ISBN¡G9787121399725
§@ªÌ§Ç¡@|¡@ĶªÌ§Ç¡@|¡@«e¨¥¡@|¡@¤º®e²¤¶¡@|¡@¥Ø¿ý¡@|¡@§Ç
(²Åé®Ñ¤W©Ò­z¤§¤U¸ü³sµ²¯Ó®É¶O¥\, ®¤¤£¾A¥Î¦b¥xÆW, ­YŪªÌ»Ý­n½Ð¦Û¦æ¹Á¸Õ, ®¤¤£«OÃÒ)
§@ªÌ§Ç¡G

ĶªÌ§Ç¡G

«e¨¥¡G

ĶªÌ§Ç¤@
§Ú²{¦b¤´¯à¦^·Q°_ 2003 ¦~¦~ªì¦b¥_¨Ê¥æ³q¤j¾Ç¾÷©Ð¨½ªº±¡´º¡C¯Z¥D¥ô°ª¦Ñ®v»¼µ¹§Ú¤@±i¦Û¨èªº Debian ¥ú½L¡AÅý§Ú³o­Ó Windows ª±®a­t³d¦w¸Ë¤@»O·sªA°È¾¹¡A¦]¬°¡§ªA°È¾¹¤¤¦w¸Ëªº³£¬O³o­Ó¨t²Î¡¨¡C§Ú´N³o¼Ë¦b¾÷©Ð¨½¼õ¤F´X­Ó³q®d¡A¤£ª¾¹D¨ê¤F¦h¤Ö¹M¾÷¡A¤@ÂI¤@ÂI¦a½ñ¤W¤F Linux ¨Ï¥Î¤§¸ô¡C¦A¦Z¨Ó¡A§Ú¦¬¨ì¤F¤H¥Í¤¤²Ä¤@¥÷°ê»Ú§Ö»¼ ¡X ¨Ó¦Û
Ubuntu ªº§K¶O¦w¸Ë¥ú½L¡C¦^­º·Q·Q¡A¦b§Úªì¾Ç Linux ªº¸ô¤W¡Aµ¹§Ú¯d¤U³Ì²`¦L¶Hªº¡A´N¬O¡§³¾­ôªº Linux ¨p©Ðµæ¡¨µ¥¤@¨t¦C Linux ±Ðµ{¤å³¹¡C¤u§@¤§¦Z¡A§@¬°¤@¦W¦Û»{¬°§Þ³N¦X®æªº¹Bºû SRE ±q·~¤H­û©M¤ª­pºâ·R¦nªÌ¡A­É¤u§@¤§«K§Ú¥i¥H¾\Ū¨ì¤@¨Ç Linux §Þ³N³Õ«È¡BÂø§Ó¡AÁÙ¯à°Ñ¥[¤@¨Ç§Þ³N·|ij¡C§Ú¤@ª½·QµÛ¦³¤@¤Ñ¯à¬° Linux §Þ³Nªºµo®i©M±À¼s°µ
¥X¦Û¤vªº¤@ÂI°^Äm¡C
±q 2017 ¦~°_¡A§Ú´N³vº¥Ãöª`¨ì¡ABPF ³o­Ó¦Wµü¦b Linux §Þ³N°Q½×¤¤¥X²{ªºÀW²v¶V¨Ó¶V°ª¡C2019 ¦~°Ñ¥[ USENIX ¤j·|®É¡A§Ú¦³©¯°Ñ¥[¤F¥»®Ñ§@ªÌ Brendan Gregg ¥DÁ¿ªº¤@°ó BPF Á¿®y¡A¨ü¯q­ê²L¡CBPF §Þ³N§@¬° Linux ¤º®Öªº¤@­ÓÃöÁäµo®i¸`ÂI¡A¨ä­«­nµ{«×¤£¨È¤_µêÀÀ¤Æ¡B®e¾¹¡BSDN µ¥§Þ³N¡C§Ú§Æ±æ¯à¨Ì¾a¥»®Ñ¡A¬°³o¶µ·s§Þ³Nªº±À¼s©Mµo®i°^Äm¤@¨Ç¦Û¤vªº¤O¶q¡C³o´N¬O§Ú¥D°Ê½ÐÅÕ¥[¤J½Ķ¹Î¶¤ªºªì°J¡C
¤@¦~¹L¥h¡A§Ú·Q·PÁ½Ķ¹Î¶¤ªº¦¨­û¡B¥Xª©ªÀ½s¿èªº¤j¤O¤ä«ù¡A·PÁ®a¤H©MªB¤Íªº¤ä«ù¡B¥]®e©M²z¸Ñ¡C§Æ±æ¥»®Ñ¯àµ¹·Q­n²`¤J¤F¸Ñ BPF §Þ³N»P Linux ¤º®Ö§Þ³NªºªB¤Í±a¨Ó«K§Q¡A¤]´Á«ÝµÛ¥¼¨Ó¯à¦b³o¤è­±»P¤j®a¶i¦æ§ó¦h§ó²`¤Jªº¥æ¬y¡C
®]¦tÁo 2020 ¦~ 10 ¤ë 18 ¤é±ß¤_¬ü°ê¥[¦{ÆW°Ï

ĶªÌ§Ç¤G
¥»¤H¦b¤¬Ápºô»â°ì²`¯Ñ¦h¦~¡A´¿´N¾¤_¨¦ºq¥_¨Ê¡B¨¦ºq·Rº¸Äõ¡Bªü¨½¤Ú¤Ú¥_¨Ê¡A²{¦b¦b¬ü°ê¨¦ºqÁ`³¡°ò¦¬[ºc³¡ªù¤u§@¡A¹ï§Þ³N¥Ñ°J¦a¼ö·R¡A¤×¨ä¬O¹ï¨t²Î©³¼h§Þ³N¡C»¡°_¥»®ÑªºÂ½Ä¶¡A²{¦b·Q·Q¡A¦³¤@ºØ­ß­ß¤§¤¤ª`©wªº½t¤À¡C
2019 ¦~ 10 ¤ë©³¡A¬ù¦n¤Í®]¦tÁo°Ñ¥[¤@¦~¤@«×ªº LISA ·|ij¡C·|ij¦b¬ü°êªi¯SÄõÁ|¦æ¡A¦ñµÛ¦â±m´³Ä㪺¬î¦â¡A¦b«Â©Ô¦Ì¯Sªe¯`ªº¸U»¨°s©±¤º¡A§Ú²Ä¤@¦¸­±¹ï­±¨£¨ì¤F¥»®Ñ§@ªÌBrendan Gregg¡C
Brendan Gregg ¬O§Þ³N°é¤½»{ªº¨t²Î©Ê¯à¡§¤j¯«¡¨¡A¤§«e¥u¬O¦b¥Lªººô¯¸¤W¾\Äý¹L¥LªºÃö¤_¨t²Î©Ê¯àªº§Þ³N¤å³¹¡A¦¬Àòª¾ÃѪº¦P®É·P´n¥L¹ï¨t²Îªº²`¨è²z¸Ñ¡C¦b¥Lªº¬ã°Q·|¤W¡A±oª¾¤F¥Lªº·s®Ñ BPF Performance Tools °¨¤W´N­n¤W¥«¤F¡C
·|¦Z¡A¦bªi¯SÄõ¾÷³õªºÀ\ÆU¤º¡A§Ú©M¦tÁoºZ·Q¤F 2020 ¦~§Ú­Ì·Q°µªº´X¥ó¨Æ±¡¡A²Ä¤@¥ó¨Æ´N¬O­n½Ķ Brendan Gregg ªº³o¥»·s®Ñ¡C¦³¦P¼Ë·Qªkªº¤£¤î§Ú­Ì¨â­Ó¡A2019 ¦~¦~©³ªº®É­Ô¡A§Ú­Ì¤T¦ìĶªÌ´N®³¨ì¤F­^¤å­ìª©®Ñ¡A¥¿¦¡¶}©l½Ķ¡C
BPF ¥»¨­¤w¸g¦s¦b«Ü¦h¦~¤F¡A¦ý¬O³Ìªñ´X¦~ eBPF ¤~¶}©l¯u¥¿µn¤W»R»O¡]²{¦b¤j®a»¡ªº BPF ´N¬O eBPF¡^¡A³Q¤j¤½¥qÀ³¥Î¤_¥Í²£Àô¹Ò¡AÂл\­S³ò¤]¶}©l¯A¤Îºôµ¸¤§¥~ªº¨ä¥L»â°ì¡CBrendan Gregg ©Ý®i¤F­ì¥» BPF ªºÀ³¥Î­S³ò¡A¦}°ò¤_¦Û¤v¹ï¨t²Î¥iÆ[´ú©Ê©M©Ê¯à¤ÀªRªº»Ý­n¶}µo¤F¤@¨t¦C BPF ¤u¨ã¡C³o¨Ç¤u¨ã¦n¤ñ·ç¤h­x¤M¡AÅ髬Áö¤p¡A¦ý¬O«D±`¹ê¥Î¡A¦}¥B«Ü®e©öÂX®i¡B©w¨î¨Ó¾AÀ³¤£¦Pªº¥Í²£Àô¹Ò ¡F¥»®Ñ´N¬O¸Ó¡§·ç¤h­x¤M¡¨ªº»¡©ú®Ñ¡A¥i¥HÅý§A§Ö³t¤W¤â¸Ñ¨M°ÝÃD¡A¦}À°§U§A²z¸Ñ¤°¤\®É­Ô¨Ï¥Î¶Ç²Î©Ê¯à¤ÀªR¤u¨ã¡A¤°¤\®É­Ô¨Ï¥Î BPF ¤u¨ã¡C
¥»®Ñ¥i¥H§@¬°¤@¥»°Ñ¦Ò¤â¥U¨Ï¥Î¡A¦b¹J¨ì°ÝÃD®É°Ñ¦Ò¹ïÀ³ªº³¹¸`§Y¥i¡C®Ñ¤¤¤¶²Ðªº¤u¨ã¶È¶È¬O¤@­Ó¶}©l¡A·í¹ï BPF ¶}µoÀô¹Ò¦³¤@©wªº¤F¸Ñ¤§¦Z¡A§A¥i¥H®Ú¾Ú»Ý­n¹ï²{¦³¤u¨ã¶i¦æ²`«×©w¨î¡C¦pªG§A¬O¤@¦W§Þ³N·R¦nªÌ¡A·Q¹ï¨t²Î©³¼h½Õ¸Õ¶i¦æ§ó²`¤Jªº¾Ç²ß¡A¥»®Ñ«Ü¾A¦X§A ¡F¦pªG§A¬O¤@¦W¨t²ÎºûÅ@ªÌ¡A·Q¤F¸Ñ¨t²Îªº²~ÀV¦b­þ¨½¡A¥»®Ñ«Ü¾A¦X§A ¡F¦p
ªG§A¬O¤@¦W¸ê·½¥DºÞ¡A·Q­n´£°ª¨t²Îªº®Ä²v¡A¥»®Ñ¤]«Ü¾A¦X§A¡C
2020 ¦~ª`©w¬O¤£¥­¤Zªº¤@¦~¡C¦~ªì¥ª»L«e¥æ¤e¶´±a©ÔÂ_¡A°µ¤F­««Ø¤â³N¡A¥þ²y¤SÃzµo¤F·s«aªÍª¢¬Ì±¡¡A¤u§@¦w±Æ¤]¸òµÛ¶i¦æ¤F½Õ¾ã¡C¤T¦ìĶªÌ¨Ó¦Û¤£¦Pªº IT ¤½¥q¡A½Ķ¶i«×¨ü¨ì«Ü¤j¼vÅT¡A­ì©wªº¥æ½Z¤é´Á¤]±q¦~ªì©ì¨ì¤F¤U¥b¦~¡C¦b¦p¦¹Á}ÃøªºÀô¹Ò¤U§¹¦¨Â½Ä¶¡A¹ï¦Û¤v¬O¤@­Ó²ö¤jªº¬D¾Ô¡C¦b³o¨½°J¤ß§Æ±æ¥»®Ñ¯àÀ°§U¨º¨Ç·Q©ºªA©Ê¯à½Õ¸Õ°ª®p
ªº§Þ³N·R¦nªÌ¡C
³Ì¦Z¡A§Ú­n·PÁ®]¦tÁo¦V½s¿èªº±ÀÂË¡A·PÁÂ¥Xª©ªÀ§â³o¼Ë¤@¥»µw®Ö¹Ï®Ñ¥æµ¹§Ú­Ì´X¦ìĶªÌ½Ķ ¡FÁÙ­n·PÁ§ڪº®a¤H©MªB¤Í¡A¥L­ÌªºÃöÃh©MÀ°§UÅý§Ú¶¶§Q§¹¦¨¥»®ÑªºÂ½Ä¶¡C
§f§»§Q 2020 ¦~ 10 ¤ë 15 ¤é¤_¬ü°ê¥[¦{ÆW°Ï

ĶªÌ§Ç¤T
²@µLºÃ°Ý¡ABPF ¬Oªñ¦~¨Ó Linux ¨t²Î§Þ³N»â°ì¤@­Ó¥¨¤jªº³Ð·s¡C2018 ¦~§Úªì¦¸±µÄ²BPF¡A«K¹ï¥¦¦³¤@¨£¶É¤ßªº·Pı¡A¤u§@¤§§E²V¸ñ¤_ BCC ©M bpftrace µ¥¬ÛÃö¶µ¥ØªÀ°Ï¡A³°Äò°^Äm¤F¤@¨Ç¸É¤Bµ{§Ç¡C²{¦b¡A§Ú©M¦r¸`¸õ°Êªº¦P¨Æ°ò¤_³o¶µ¨t²Î©³¼h§Þ³Nºc«Ø¤F¥þ·s¦Ó±j¤jªº©Ê¯à¤ÀªR©Mºôµ¸ºÊ±±¶EÂ_¥­»O¡A¨ú±o¤F«D±`¦nªº®ÄªG¡C¦b³o¨½¥Ñ°J¦a·PÁ¬ÛÃö
¶}·½ªÀ°Ï¤Î¥»®Ñ§@ªÌ Brendan Gregg ¡I
°l®Ú·¹·½ªº¸Ü¡ABPF ¤_ 1992 ¦~½Ï¥Í¦b¬ü°ê³Ò­Û´µ§B§J§Q°ê®a¹êÅç«Ç¡]B ¥Nªí§B§J§Q¡^¡C¤£¹L¡ABPF ¦b¹L¥h¬Û·íªøªº®É¶¡¤º³£ÂA¬°¤Hª¾¡A­ì¦]µL«D¬O¥Î¤á©MÀ³¥Î³õ´º¤Ö¡A§Y«K¦b¸g±`¨Ï¥Î tcpdump ¶å±´§ì¥]ªººôµ¸ºÞ²z­û¤¤¡A¤S¦³¦h¤Ö¤Hª¾¹D¥¦ªº¦s¦b©O¡H
¤µ«D©õ¤ñ¡A¸g¹LÂX®i¦Zªº·s BPF §l¤Þ¤FªÀ°Ï¶}µoªÌªº¼sªxÃöª`¡C¨ä¼ö«×¤§°ª¡A¨Ï±o Linux ¤º®Ö¶}µoªÌ°é¤¤´¿¥X²{¡§BPF ·|´À¥N Linux¡¨³o¼Ëªºª±¯º¨¥½×¡C¤£¹Lª½±µ½s¼gBPF µ{§Ç¶}®i¬ÛÃö¤u§@¤ñ¸û·Ðº¾¡A¦Ó BCC/bpftrace µ¥¶µ¥Ø«h¤j¤j­°§C¤F BPF µ{§Ç½s¼g©M¨Ï¥ÎªºªùÂe¡A¶i¤@¨B«P¶i¤F BPF ªº¹ê¾ÔÀ³¥Î¡C
§@¬°©Ê¯à¤ÀªR»â°ì¨ÉÅA¥þ²yªº±M®a¡ABrendan Gregg ¤]¬O¤W­z¶µ¥Øªº®Ö¤ß¶}µoªÌ¡A¦]¦¹¨S¦³¤H¤ñ¥L§ó¾A¦X¨Ó¼g³o¼Ë¤@¥»§Q¥Î BPF ¤u¨ã¶i¦æ©Ê¯à¤ÀªRªº®Ñ¤F¡C±q³o­Ó¨¤«×¨Ó»¡¡A½Ķ©M¾\Ū³o¥»®Ñ³£¬O¦b¦V¤j®v¾Ç²ß¡C
¦b¥»®ÑªºÂ½Ä¶¹Lµ{¤¤¡A§Ú±o¨ì¤F¹q¤l¤u·~¥Xª©ªÀ½s¿è«L¤Ö¡B¦X§@ĶªÌ®]¦tÁo©M§f§»§QªºÀ°§U¡B¤ä«ù¥H¤Î®a¤Hªº²z¸Ñ©M¥]®e¡A¦b¦¹ªí¥Ü²`²`ªº·PÁ¡I
¼B¾å¦à 2020 ¦~ 10 ¤ë¤_¥_¨Ê

§Ç
µ{§Ç­û±`±`»¡¥L­Ì¡§·Î¤F¤@­Ó¸É¤B¡¨¡]cook a patch¡^¦Ó¤£¬O¡§¹ê²{¤F¤@­Ó¸É¤B¡¨¡]implement a patch¡^¡C§Ú±q¾Ç¥Í®É¥N°_´NµÛ°g¤_½sµ{¡C¬°¤F¼g¥X¦nªº¥N½X¡Aµ{§Ç­û»Ý­n³Ì¦nªº¡§­¹§÷¡¨¡CÁöµM¦UºØ¤£¦Pªº½sµ{»y¨¥´£¨Ñ¤F¤£¦Pªº²Õ¥ó¡A¤]´N¬O¡§­¹§÷¡¨¡A¦ý¬O¹ïLinux ¤º®Ö½sµ{¨Ó»¡¡A°£¤F¤º®Ö¥N½X¥»¨­¡A´N¨S¦³¨ä¥L¿ï¾Ü¤F¡C
2012 ¦~¡A§Ú»Ý­n¼W¥[¤@²Õ¤º®Ö¯S©Ê¡A¦ý¬O§Ú»Ý­nªº¡§­¹§÷¡¨¦}¤£¦s¦b¡C§Ú§¹¥þ¥i¥H¿ï¾Ü¦b¤º®Ö¤¤²K¥[¤@¨Ç·sªº±M¥Î¥N½X¡A³o¼Ë´X¦~¤§¦ZÁÙ¯à¨Ï¥Î¡C¦ý¬O¡A§Ú¨M©w³Ð«Ø¤@ºØ¡§´¶¾Aªº­¹§÷¡¨¡A³o¼Ë¦b¦³¸gÅ窺µ{§Ç­û¤â¤¤¡A¥¦¬J¥i¥H¦¨¬°¤º®Ö¤¤¤G¼hªººô¾ô¡A¤]¥i¥H¦¨¬°¤T¼hªººôµ¸¸ô¥Ñ¾¹¡C
§Ú¦³¤@¨Ç­«­nªº­n¨D ¡G¡§´¶¾Aªº­¹§÷¡¨¥²¶·©M¨Ï¥ÎªÌªº½sµ{§Þ¯àµLÃö¡A¥i¥H³Q¦w¥þ¨Ï¥Î¡C¤@­ÓÃhµÛ´c·N©ÎªÌ¸gÅ礣¨¬ªº¶}µoªÌ¤£À³¸Ó¨ã³Æ³q¹L¥¦¨î§@¯f¬rªº¯à¤O¡C¡§´¶¾Aªº­¹§÷¡¨¤£À³¸Ó¤¹³\³oºØ±¡ªpªºµo¥Í¡C
¦b¤º®Ö¤¤¤w¸g¦s¦b¤@­Ó¥s§@ BPF¡]§B§J§Q¼Æ¾Ú¥]¹LÂo¾¹¡^ªº¡§­¹§÷¡¨¨ã³ÆÃþ¦üªº¯S©Ê¡G¤@­Ó³Ì¤p¤Æªº«ü¥O¶°¡A¥i¥H¦b¼Æ¾Ú³Q tcpdump ³o¼ËªºÀ³¥Î³B²z¤§«e¶i¦æ¹LÂo¡C§Ú­É¥Î¥¦ªº¦W¦rºÙ©I³o­Ó·sªº¡§­¹§÷¡¨¬° eBPF¡A³o¨½ e ¥NªíÂX®iª©¡]extended¡^¡C
´X¦~¤§¦Z¡AeBPF ©M¸g¨å BPF ªº®t¶Z¤w¸g®ø¥¢¤F¡C§Úªº¡§´¶¾Aªº­¹§÷¡¨¤w¸g§¹¥þ´À¥N¤F­ì¨Óªº BPF¡C«Ü¦hª¾¦Wªº¤½¥q°ò¤_¥¦«Ø³y¤FÃe¤jªº¨t²Î¡A¨Ó¦V¥]¬A§A©M§Ú¦b¤ºªº¼Æ¤Q»õ¥Î¤á´£¨ÑªA°È¡C¥¦¨ã¦³ªº¦w¥þ©Ê­ì«h¤¹³\³\¦h¡§¼p®v¡¨¦¨ªø¬°¥@¬É¯Å¤j¼p¡C
²Ä¤@­Ó BPF¡§¤j¼p¡¨´N¬O Brendan Gregg¡C¥L±Ó¾U¦aµo²{¡A°£¤FÀ³¥Î¤_ºôµ¸©M¦w¥þ»â°ì¡ABPF ¥ç¥i§@¬°©Ê¯à¤ÀªR¡BºÊµø©M¥iÆ[´ú©Êªº¤u¨ã¡C¤£¹L³Ð³y³o¨Ç¤u¨ãµM¦Z¦A¹ï¥¦­Ìªº©Ê¯à¶i¦æ¸ÑÄÀ¡A¹ï¹ê½î©Mª¾ÃѪº­n¨D¬O«Ü°ªªº¡C
§Ú°J¤ß§Æ±æ¥»®Ñ¯à°÷¦¨¬°ÅªªÌ³Ì¤ß·Rªº¡§µæÃС¨¡A¦b³o¨½§A¥i¥H¦V¼p¯«¾Ç²ß¦p¦ó¦bLinux ¼p©Ð¤¤¨Ï¥Î BPF¡C
Alexei Starovoitov 2019 ¦~ 8 ¤ë¤_¬ü°êµØ²±¹y¦{¦è¶®¹Ï¥«

«e¡@¨¥
¡§ÂX®iª© BPF ªº¨Ï¥Î®×¨Ò ¡G¡K¡K¯uºÆ¨g°Ú¡C¡¨ ¡X¡XAlexei Starovoitov¡A·s BPF ªº³Ð«ØªÌ¡A2015 ¦~ 2 ¤ë
2014 ¦~ 7 ¤ë¡AAlexei Starovoitov ¨ì³X¤F Netflix ¤½¥q¦ì¤_¥[¦{ Los Gatos ªº¿ì¤½«Ç¡A¹ï¥L¶}µoªº¤@¶µ¦³½ìªº§Þ³N¶i¦æ¬ã°Q ¡GÂX®iª©ªº§B§J§Q¼Æ¾Ú¥]¹LÂo¾¹¡]²¼g¬° eBPF ©ÎªÌ BPF¡^¡CBPF ¬O¤@¶µ¥Î¤_§ï¶i¥]¹LÂoªº§Nªù§Þ³N¡A¦¹®É Alexei ¤w¸g¦³¤F¹ï¨ä¦b¥]¹LÂo¤§¥~ªº»â°ì¶i¦æÂX®iªº»·¨£¨ôÃÑ¡CAlexei ©M¥t¥~¤@¦Wºôµ¸¤uµ{®v Daniel Borkmann ¦}ªÓ¨ó§@¡A±N BPF §ï¼g¬°¤@­Ó³q¥ÎªºµêÀÀ¾÷¡A¥i¥H¹B¦æ°ª¯Åªººôµ¸µ{§Ç©M¨ä¥LÃþ«¬ªºµ{§Ç¡C
³o¬O¤@­Ó¥O¤HÅå¹Äªº·Qªk¡C¦³¤@ºØ¨Ï¥Î³õ´º¥O§Ú¤Q¤À·P¿³½ì¡A¨º´N¬O¥i¥H±N BPF ¥Î¦b¶}µo©Ê¯à¤ÀªRªº¤u¨ã¤W¡A§Ú¬Ý¨ì¤F BPF ¯à°÷´£¨Ñ§Ú©Ò»Ý­nªº¥i½sµ{¯à¤O¡C¤_¬O§Ú­Ì°µ¤F¤@­Ó¬ù©w ¡G¦pªG Alexei ¯à°÷±N BPF »P¼Æ¾Ú¥]¤§¥~ªºªF¦è¬Û³s±µ¡A§Ú±N¨Ï¥Î¥¦¨Ó¶}µo©Ê¯à¤ÀªR¤u¨ã¡C
BPF ²{¦b¤w¸g¥i¥H±¾¸ü¨ì¥ô¦ó¨Æ¥ó·½¤W¡A¥¦¤]¦¨¬°¨t²Î¤uµ{»â°ì¤@¶µ¼öªùªº·s§Þ³N¡A¾Ö¦³²³¦h¬¡ÅDªº°^ÄmªÌ¡C¨ì¥Ø«e¬°¤î¡A§Ú¤w¸g¶}µo¦}¤½¶}¤F¶W¹L 70 ­Ó BPF ©Ê¯à¤ÀªR¤u¨ã¡A¥¦­Ì¦b¥þ²y­S³ò¤º±o¨ì¼sªx¨Ï¥Î¡A¦}¥B¦b Netflix¡BFacebook µ¥¤½¥q¤¤¶i¤JªA°È¾¹ªºÀq»{¦w¸Ë³n¥ó¦Cªí¡C§ÚÁÙ±Mªù¬°¥»®Ñ³æ¿W¶}µo¤F³\¦h¤u¨ã¡A¦P®É¤]¤Þ¤J¤£¤Ö¨ä¥L¤H°^Ämªº¤u¨ã¡C«Üºa©¯¯à°÷¦b³o¥»®Ñ¤¤¬°¤j®a¤À¨É³o¨Ç¹ê¥Îªº¤u¨ã¡A³o¼Ë§A´N¥i¥H¨Ï¥Î¥¦­Ì¶i¦æ©Ê¯à¤ÀªR¡B¬G»Ù©w¦ì¥H¤Î¨ä¥LºØºØ¤u§@¡C
§@¬°¤@¦W©Ê¯à¤uµ{®v¡A§Ú±`¨I°g¤_¨Ï¥Î¦UºØ¤u¨ã¤§¤¤¡C¨t²Î¤¤ªºª¼ÂI¬O©Ê¯à²~ÀV©M³n¥ó bug ªºÂè­¤§³B¡C§Ú¦­¥ý¦b¤u§@¤¤¨Ï¥Î¹L DTrace §Þ³N¡A¦b 2011 ¦~§Ú½s¼g¤F DTrace ¡GDynamic Tracing in Oracle Solaris¡AMac OS X¡Aand FreeBSD ¤@®Ñ¡]¥Ñ Prentice Hall ¥Xª©¡A¥H¤U²ºÙ¬°¡§DTrace ¤@®Ñ¡¨¡^¡A¦b¨º¥»®Ñ¤¤¤À¨É¤F§Ú¬°³o¨Ç¾Þ§@¨t²Î¶}µoªº¤u¨ã¡C²{¦b¯à°÷¤À¨É Linux ¤UªºÃþ¦ü¤u¨ã ¡X ¬Æ¦Ü¥i¥H°µ±o§ó¦h¡B¬Ý¨ì§ó¦h ¡X §Ú·P¨ì¤Q¤À¿³¾Ä¡C
¬°¤°¤\§A»Ý­nBPF©Ê¯à¤u¨ã
BPF ©Ê¯à¤u¨ã¥i¥HÀ°§U§A§ï¶i©Ê¯à¡B­°§C¶}¾P¡B¸Ñ¨M³n¥ó°ÝÃD¡A±q¦Ó¨Ï¨t²Î©MÀ³¥Îªº®Ä¯q³Ì¤j¤Æ¡C¥¦­Ì¯à¤ñ¶Ç²Î©Ê¯à¤u¨ã¤ÀªR±o§ó¦h¡A¦}¤¹³\§A¦V¥Í²£Àô¹Ò¤¤ªº¨t²ÎÀH·N´£¥X°ÝÃD¡A¦}¥B¯à°÷¥ß¨è±o¨ìµª®×¡C
Ãö¤_¥»®Ñ
¥»®Ñ¬OÃö¤_À³¥Î¦b¥iÆ[´ú©Ê©M©Ê¯à¤ÀªR»â°ìªº BPF ¤u¨ãªº¡A¦ý¬O³o¨Ç¤u¨ã¤]¦³¨ä¥L¥Î³~ ¡G³n¥ó¬G»Ù±Æ¬d¡B¦w¥þ¤ÀªRµ¥¡C¾Ç²ß BPF ³Ì§xÃøªº³¡¤À¤£¦b¤_¼g¥N½X ¡G§A¥i¥H¦b¤@¤Ñªº®É¶¡¤º¾Ç·|½s¼g±µ¤fµ{§Ç¡C§xÃø¤§³B¦b¤_¦p¦óÀ³¥Î ¡G¦b¼Æ¥H¤d­pªº¥i¥Î¨Æ¥ó¤¤¡A§A¯à°÷±q¤¤±o¨ì¤°¤\«H®§¡H¥»®Ñ·|À°§U§A¦^µª³o¨Ç°ÝÃD¡A³q¹Lµ¹¥X©Ê¯à¤ÀªRªº¤@¨Ç¥²­nªº
­I´º¡AµM¦Z¨Ï¥Î BPF ©Ê¯à¤u¨ã¹ï³\¦h¤£¦Pªº³nµw¥ó¥Ø¼Ð¶i¦æ¤ÀªR¡A¦}ªþ¤W Netflix ªA°È¾¹¤Wªº¼Ë¨Ò¿é¥X¡C
BPF ªº¥iÆ[´ú©Ê¬O¤@ºØ¶W¯à¤O¡A¤£¹L³o¶È¶È¬O¦]¬°¥¦ÂX®i¤F§Ú­Ì¹ï¨t²Î©MÀ³¥Îªº¥iÆ[´ú¯à¤O¡A¦Ó«D­«´_³oºØ¯à¤O¡C¬°¤F°ª®Ä¦a¨Ï¥Î BPF¡A§A»Ý­n²z¸Ñ¤°¤\®É­Ô¨Ï¥Î¶Ç²Îªº©Ê¯à¤ÀªR¤u¨ã¡A¥]¬A iostat(1) ©M perf(1)¡A¤°¤\®É­Ô¨Ï¥Î BPF ¤u¨ã¡C¥»®Ñ¤]·|¤¶²Ð¶Ç²Îªº¤u¨ã¡A¥i¯à¹ï¤_¸Ñ¨M¬Y¨Ç©Ê¯à°ÝÃD¥¦­Ì¤w¸g°÷¥Î¤F¡A·í¤£¯à¸Ñ¨M®É¡A¥¦­Ì¤]·|´£¨Ñ¦³¥Î
ªº¤W¤U¤å©M½u¯Á¡A«ü¾É¶i¤@¨B¨Ï¥Î BPF ¤u¨ã¡C
¥»®Ñ¤¤ªº³\¦h³¹¸`¥]§t¤F¾Ç²ß¥Ø¼Ð¡A§iª¾ÅªªÌ­þ¨Ç¬O¾Ç²ß­nÂI¡C¥»®Ñ¤¤ªº§÷®Æ¤]¥Î¦b Netflix Ãö¤_¨Ï¥Î BPF ¤ÀªRªº¤º³¡½Òµ{¤¤¡A¦³¨Ç³¹¸`ÁÙ¥]§t¤F¥i¿ïªº½m²ß¡C
¥»®Ñ¤¤ªº³\¦h BPF ¤u¨ã¨Ó¦Û BCC ©M bpftrace ªº¥N½X­Ü®w¡A³o¨â­Ó¶µ¥Ø¬O Linux °òª÷·|¤Uªº IO Visor ¶µ¥Ø¡C¥¦­Ì¬O¶}·½ªº¡A¥i¥H¦Û¥Ñ¨Ï¥Î¡A¤£¶È¥i¥H±q¶µ¥Øªººô¯¸¤W¤U¸ü¡A¦Ó¥B«Ü¦h Linux µo¦æª©¤¤¤w¸g¥]§t¤F¥¦­Ì¡C§Ú¤]¬°¥»®Ñ·s¼g¤F¤@¨Ç bpftrace ¤u¨ã¡A¦}§â¥¦­Ìªº·½¥N½X¤@¦}¥]§t¨ì¥»®Ñ¤¤¡C
³o¨Ç¤u¨ã¦}¤£¬O¬°¤Fºt¥Ü¦UºØ BPF ¥\¯à¦ÓÀH·N³Ð«Øªº¡A³Ð«Ø¥¦­Ì¬O¬°¤F¦b¥Í²£Àô¹Ò¤¤¨Ï¥Î¡C§Ú¨Ï¥Î³o¨Ç¤u¨ã¸Ñ¨Mªº¥Í²£°ÝÃD¶W¥X¤F·í«e¤ÀªR¤u¨ã¶°ªº¯à¤O¡C
¹ï¤_¥Î bpftrace ½s¼gªº¤u¨ã¡A¥»®Ñ¤w¸g¥]§t¤F·½¥N½X¡C¦pªG§A§Æ±æ­×§ï©Î¶}µo·sªºbpftrace ¤u¨ã¡A«h¥i¥H±q²Ä 5 ³¹¤¤¾Ç²ß bpftrace »y¨¥¡A¤]¥i¥H±q¥»®Ñªº³\¦h·½¥N½X²M³æ¤¤¾Ç²ß¡C³o¨Ç·½¥N½X¦³§U¤_»¡©ú¨C­Ó¤u¨ãªº¥\¯à¥H¤Î¥¦­Ì©ÒÀË´úªº¨Æ¥ó ¡G´N¹³¥]§t¥i¥H¹B¦æªº°°¥N½X¤@¼Ë¡C
BCC ©M bpftrace «eºÝ¤w¸gÁͤ_¦¨¼ô¡A¦ý¬O±N¨ÓªºÅܧó¥i¯à·|¾É­P¥»®Ñ¤¤¥]§tªº¬Y¨Ç·½¥N½X°±¤î¤u§@¡A¦}¥B»Ý­n§ó·s¡C¦pªG¤u¨ã¨Ó·½¤_ BCC ©Î bpftrace¡A½ÐÀˬd¨º¨Ç¦sÀx®w¤¤ªº§ó·sª©¥»¡C¦pªG¤u¨ã¨Ó·½¤_¥»®Ñ¡A½Ð³X°Ý¥»®Ñªººô¯¸¡]°Ñ¨£Ãì±µ 1 1 ¡^¡C³Ì­«­nªº¤£¬O¬Y­Ó¤u¨ã¦³®Ä¡A¦Ó¬O§A¤F¸Ñ¸Ó¤u¨ã¦}Åý¥¦¯à°÷¤u§@¡C BPF ¸òÂ̧ܳxÃøªº³¡¤À¬O­nª¾¹D¥Î¥¦¨Ó°µ¤°¤\ ¡F¬Æ¦Ü·lÃaªº¤u¨ã¤]·|¬O¦³¥Î·Qªkªº¨Ó·½¤§¤@¡C
·s¤u¨ã
¬°¤Fµ¹§A´£¨Ñ¤@¾ã®M¥þ­±ªº¤ÀªR¤u¨ã¡A¦}¥B¥X¤_¥i¥Î¤_¥N½X¥Ü¨Òªº¥Øªº¡A¥»®Ñ¦@¶}µo¤F 80 ¦hºØ·s¤u¨ã¡C¨ä¤¤³\¦h¦p¹Ï P-1 ©Ò¥Ü¡C ¦b¦¹¹Ï¤¤¡A¥ý«e¦s¦bªº¤u¨ã¥H¶Â¦â¤å¥»Åã¥Ü¡A¬°¸Ó®Ñ³Ð«Øªº·s¤u¨ã«h¥H¦Ç¦âÅã¥Ü¡C¥»®Ñ¦P®É²[»\¤F¬J¦³¤u¨ã©M·s¤u¨ã¡AºÉºÞ¦Z­±ªº³\¦h¹Ï³£¨S¦³¨Ï¥Î¦Ç¦â / ¶Â¦â¤è®×¨Ó°Ï¤À¥¦­Ì¡C
Ãö¤_¹Ï§Î¬É­±¡]GUI¡^
¤@¨Ç BCC ¤u¨ã¤w¸g¦¨¬°´ú¶q¤u¨ã GUI ªº¼Æ¾Ú¨Ó·½ ¡X ´£¨Ñ®É¶¡§Ç¦C¼Æ¾Ú¨Óø¨î§é½u¹Ï¡A´£¨Ñ½Õ¥Î´Ì¨Óø¨î¤õµK¹Ï¡A©ÎªÌ´£¨Ñ¬í²É«×ªºª½¤è¹Ï¥Hø¨î¼ö¤O¹Ïµ¥¡C§Ú¹w´Á¥¼¨Ó·|¦³§ó¦hªº¤H³q¹L GUI ¨Ï¥Î³o¨Ç BPF ¤u¨ã¡A¦Ó«Dª½±µ¨Ï¥Î³o¨Ç¤u¨ã¥»¨­¡CµL½×§A³Ì²×¦p¦ó¨Ï¥Î¡A¥¦­Ì³£¥i¥H´£¨ÑÂ×´Iªº«H®§¡C¥»®Ñ¤¶²Ð¤F³o¨Ç¤u¨ã´£¨Ñªº«ü¼Ð¡A¦p¦ó¸ÑŪ«ü¼Ð¡A¥H¤Î§A¦p¦ó¦Û¤v°Ê¤â³Ð«Ø·s¤u¨ã¡C
Ãö¤_ Linux ª©¥»
¦b¥»®Ñ¤¤¤¶²Ð¤F³\¦h Linux §Þ³N¡A³q±`±a¦³¤º®Öª©¥»¸¹©M¥X²{ªº¦~¥÷¡C¦³®É¡A§Ú¤]«ü©ú¤F¸Ó§Þ³Nªº¶}µo¤H­û¡A¥H«K§A¥i¥H¿ëÃÑ¥X­ì©l§@ªÌ¼¶¼gªº¤ä«ù§÷®Æ¡C
ÂX®iª© BPF ¤w³Q³¡¤À²K¥[¨ì Linux ¤¤¡C²Ä¤@³¡¤À¦b 2014 ¦~ªº Linux 3.18 ¤¤²K¥[¡A¦¹¦Z¦b Linux 4.x ©M 5.x ¨t¦C¤¤²K¥[¤F§ó¦h¤º®e¡C¬°¤F¨ã¦³¨¬°÷ªº¥\¯à¨Ó¹B¦æ¥»®Ñ¤¤¤¶²Ðªº BPF ¤u¨ã¡A«Øij¨Ï¥Î Linux 4.9 ©Î§ó°ªª©¥»¡C¥»®Ñ¤¤ªº¥Ü¨Ò¹B¦æ¦b Linux 4.9 ¨ì 5.3 ¤º®Ö¤§¤W¡C
¤w¸g¶}©l±NÂX®iª© BPF ¤Þ¤J¨ä¥L¤º®Ö¡A¦}¥B¥»®Ñªº¥¼¨Óª©¥»¥i¯à¤£¶È¶È¯A¤Î Linux¡C
¥»®Ñ¤£¥]§tªº¤º®e
BPF ªºÀ³¥Î­S³ò«Ü¼s¡ABPF ©Ê¯à¤u¨ãªº³\¦h¥Î¨Ò¥»®Ñ¦}¥¼¯A¤Î¡A¨ä¤¤¥]¬A¥Î¤_³n¥ó©w¸qºôµ¸¡B¨¾¤õùÙ¡B®e¾¹¦w¥þ©M³]³ÆÅX°Êµ{§Ç¡C
¥»®Ñ»EµJ¤_¨Ï¥Î bpftrace ©M BCC ¤u¨ã¡A¥H¤Î¶}µo·sªº bpftrace ¤u¨ã¡A¦ý¤£¯A¤Î¶}µo·sªº BCC ¤u¨ã¡C BCC ·½¥N½X³q±`«Üªø¡AµLªk¦b®Ñ¤¤ª½±µ¥]§t¡A¦ý¬Oªþ¿ý C ¤¤´£¨Ñ¤F¤@¨Ç¥Ü¨Ò§@¬°¥i¿ï¤º®e¨ÑŪªÌ°Ñ¦Ò¡Cªþ¿ý D ¤¤´£¨Ñ¤F¨Ï¥Î C »y¨¥¶i¦æ½sµ{ªº¥Ü­S¡Aªþ¿ý E¤¤´£¨Ñ¤F¨Ï¥Î BPF «ü¥O¶i¦æ¤u¨ã¶}µoªº¥Ü¨Ò¡A¹ï¨º¨Ç§Æ±æ§ó²`¤J¤F¸Ñ BPF ¤u¨ãªº¤u§@­ì²zªº¤H¨Ó»¡¡A³o¨Ç¥Ü¨Ò¤]¥i¯à¦³¥Î¡C
¥»®Ñ¦}¤£±Mªù°w¹ï¬YºØ¯S©w»y¨¥©ÎÀ³¥Îµ{§Çªº©Ê¯à¶i¦æ¤ÀªR¡A¦]¬°³o¤è­±¤w¸g¦³¨ä¥L®ÑÄy¤F¡A¥¦­Ì²[»\¤F¹ïÀ³»y¨¥½Õ¸Õ©M¤ÀªR¤u¨ãªº¤¶²Ð¡C¨Ï¥Î¨ä¥L¤u¨ã©M BPF ¤u¨ãÁp¦X¸Ñ¨M°ÝÃD¬O«Ü±`¨£ªº¡A¤£¦Pªº¤u¨ã¤§¶¡¥i¥H¤¬¸É¡A´£¨Ñ¤£¦Pªº¸Ñ¨M°ÝÃDªº½u¯Á¡C¥»®Ñ¤¶²Ð¤F¨Ó¦Û Linux ªº°ò¥»¨t²Î¤ÀªR¤u¨ã¡A¦]¦¹§A¥i¥H§Q¥Î³o¨Ç¤u¨ãª½±µ¸Ñ¨M¤@¨Ç°ÝÃD¡A¦pªG»Ý­n¶i¤@¨B¤ÀªR¡A¦AÂà¦V¨Ï¥Î´£¨Ñ¶i¤@¨BÆ[¹î¯à¤Oªº BPF ¤u¨ã¡C
¥»®Ñ²­n¤¶²Ð¤F¨C­Ó¤ÀªR¥Ø¼Ðªº­I´º©Mµ¦²¤¡C³o¨Ç¥DÃD¦b§Ú¤§«e¥Xª©ªº¨º¥»¡m©Ê¯à¤§Åq ¡G¬}±x¨t²Î¡B¥ø·~»P¤ª­pºâ¡n [Gregg 13b] ®Ñ¤¤¦³¸û¸Ô²Óªº¸ÑÄÀ¡C
¥»®Ñªºµ²ºc
¥»®Ñ¤À¬°¤T­Ó³¡¤À¡C²Ä 1 ³¡¤À ¡G²Ä 1 ¦Ü 5 ³¹¡A¤¶²Ð¤F BPF ¸òÂܩһݪº­I´ºª¾ÃÑ¡A¥]¬A©Ê¯à¤ÀªR¡B¤º®Ö¸òÂܧ޳N¥H¤Î¨â­Ó¥D­nªº BPF ¸òÂÜ«eºÝ¹ê²{ ¡X BCC ©M bpftrace¡C
²Ä 2 ³¡¤À¥]§t²Ä 6 ¦Ü 16 ³¹¡A²[»\ BPF ¥i¸òÂܪº¥Ø¼Ð¡GCPU¡B¤º¦s¡B¤å¥ó¨t²Î¡BºÏ½L I/O¡Bºôµ¸¡B¦w¥þ¡B»y¨¥¡BÀ³¥Îµ{§Ç¡B¤º®Ö¡B®e¾¹©MµêÀÀ¾÷ºÞ²z¾¹µ¥¡CºÉºÞ§A¥i¥H«ö¶¶§Ç¾Ç²ß³o¨Ç³¹¸`¡A¦ý¥»®Ñ³]­p¬°¤ä«ù¸õ¦Ü§A·P¿³½ìªº³¹¸`¡C³o¨Ç³¹¸`¿í´`¦P¼Ëªºµ²ºc¡G­I´º°Q½×¡B¤ÀªRµ¦²¤«Øij¥H¤Î¯S©wªº BPF ¤u¨ã¡C¤å¤¤ÁÙ¥]§t¤F¤@¨Ç¥i¥HÀ°§UŪªÌ²z¶¶¤ÀªR«ä¸ôªº¹Ïªí¡C
³Ì¦Z¤@³¡¤À¡A¥]§t²Ä 17 ³¹©M²Ä 18 ³¹¡A²[»\¤F¤@¨Ç¨ä¥L¥DÃD¡G¨ä¥L BPF ¤u¨ã¥H¤Î´£¥Ü¡B§Þ¥©©M±`¨£°ÝÃD¡C
ªþ¿ý´£¨Ñ¤F bpftrace ³æ¦æµ{§Ç©M bpftrace ³t¬dªí¡A¤¶²Ð¤F BCC ¤u¨ã¶}µo¡A¥]¬A³q¹Lperf(1)¡]Linux ¤u¨ã¡^¶i¦æªº C BPF ¤u¨ã¶}µo¥H¤Î BPF «ü¥OºK­n¡C
¥»®Ñ¨Ï¥Î¤F³\¦h³N»y©MÁY¼g¡A¦b»Ý­nªº¦a¤è·|¹ï¥¦­Ì¶i¦æ¸ÑÄÀ¡C
¦³Ãö§ó¦h«H®§·½¡A½Ð°Ñ¨£¥»«e¨¥µ²§À³Bªº¡§¸É¥R§÷®Æ©M°Ñ¦Ò¸ê®Æ¡¨³¡¤À¡C
¥Ø¼ÐŪªÌ
¥»®Ñªº¼g§@ªì°J¬O§Æ±æ¹ï¦UºØ¨¤¦âªº¤H³£¦³¥Î¡CµL¶·¥ô¦ó½s½X§Y¥i¨Ï¥Î¥»®Ñ¤¤ªºBPF ¤u¨ã ¡G§A¥i¥H±N¨ä¥Î§@¥i¥H¹B¦æªº¹w½s¼g¤u¨ãªí¡C¦pªG½T¹ê·Q½s¼g¥N½X¡A«h¥»®Ñ¤¤¥]§tªº©Ò¦³¥N½X©M²Ä 5 ³¹ªº¤º®e±NÀ°§U§A¾Ç²ß§Ö³t½s¼g¦Û¤vªº¤u¨ã¡C
§A¤£¥²¨ã³Æ©Ê¯à¤ÀªRªº­I´ºª¾ÃÑ¡A¨C³¹·|²­z¥²­nªº­I´ºª¾ÃѲӸ`¡C
¥»®Ñªº¯S©wŪªÌ¥]¬A ¡G
? ­t³d¥Í²£¨t²Îªº¨t²ÎºÞ²z­û¡B¯¸ÂI¥i¾a©Ê¤uµ{®v¡B¼Æ¾Ú®wºÞ²z­û¡B©Ê¯à¤uµ{®v©M¤ä«ù¤H­û¥i¥H±N¥»®Ñ¥Î§@¶EÂ_©Ê¯à°ÝÃD¡B¤F¸Ñ¸ê·½¨Ï¥Î±¡ªp¥H¤Î¹ï°ÝÃD¶i¦æ¬G»Ù±Æ°£ªº«ü«n¡C
? À³¥Îµ{§Ç¶}µo¤H­û¥i¥H¨Ï¥Î³o¨Ç¤u¨ã¨Ó¤ÀªR¦Û¤vªº¥N½X¡A¦}ÀË´ú¥N½X¥H¤Î¨t²Î¨Æ¥ó¡C¨Ò¦p¡A¥i¥HÀˬdIJµoºÏ½L I/O ¨Æ¥óªºÀ³¥Îµ{§Ç¥N½X¡C³o¼Ë¥i¥H¦bµLªkª½±µ¬d¬Ý¤º®Ö¨Æ¥óªºÀ³¥Îµ{§Ç¯S©w¤u¨ã¤§¥~¡A´£¨Ñ¤@­Ó§ó§¹¾ãªº¦æ¬°µø¹Ï¡C
? ¦w¥þ¤uµ{®v¥i¥H¾Ç²ß¦p¦óºÊ±±©Ò¦³ªº¨Æ¥ó¥Hµo²{¥iºÃ¦æ¬°¡A¦}³Ð«Ø¥¿±`¬¡°Êªº¥Õ¦W³æ¡]½Ð°Ñ¨£²Ä 11 ³¹¡^¡C
? ©Ê¯àºÊ±±¶}µoªÌ¥i¥H¨Ï¥Î¥»®Ñ¨ÓÀò±o¦³Ãö¦b¨ä²£«~¤¤²K¥[·sªº¥iÆ[´ú©Êªº·Qªk¡C
? ¤º®Ö¶}µo¤H­û¥i¥H¾Ç²ß¦p¦ó½s¼g bpftrace ³æ¦æµ{§Ç¨Ó½Õ¸Õ¦Û¤vªº¥N½X¡C
? ¾Ç²ß¾Þ§@¨t²Î©MÀ³¥Îµ{§Çªº¾Ç¥Í¥i¥H¨Ï¥Î BPF ¤u¨ã¥H·sªº©M¦Û©w¸qªº¤è¦¡¤ÀªR¥¿¦b¹B¦æªº¨t²Î¡C¾Ç¥ÍµL¶·¾Ç²ß©â¶Hªº¤º®Ö§Þ³N¡A¦Ó¬O¥i¥H¹ï¨ä¶i¦æ¸òÂܦ}¹ê®É¤F¸Ñ¥¦­Ìªº¹B¦æ¤è¦¡¡C
¬°¤F¨Ï¥»®Ñ¯à°÷±Mª`¤_ BPF ¤u¨ãªºÀ³¥Î¡A°²©w§A¨ã³Æ·¥¤ÖªºÃö¤_©Ò¯A¤Î¥DÃDªºª¾ÃÑÀx³Æ¡A¥]¬A¤¬Ápºô¡]¨Ò¦p¡AIPv4 ¦a§}¬O¤°¤\¡^©M©R¥O¦æ¥Îªk¡C
¤º®e²¤¶¡G

°ò¤_BPFªº©Ê¯àÀu¤Æ¤u¨ã´£¨Ñ¤F«e©Ò¥¼¦³ªº¨t²Î¯Å©MÀ³¥Îµ{§Ç¯ÅªºÆ[¹î¯à¤O¡A¨Ï¥Î³o¨Ç¤u¨ã¥i¥HÀu¤Æ©Ê¯à¡B½Õ¸Õ¥N½X¡B¼W±j¦w¥þ©Ê¡B­°§C¦¨¥»¡C¥»®Ñ¬O¨Ï¥Î³o¨ÇÆ[¹î¤u¨ãªº¥þ­±«ü«n¡C¥»®Ñ§@¬°¥þ­±¤¶²Ð BPF §Þ³Nªº¹Ï®Ñ¡A±q BPF §Þ³Nªº°_·½¨ì¥¼¨Óµo®i¤è¦V³£¦³²[»\¡A¤£¶È¥þ­±¤¶²Ð¤F BPF ªº½sµ{¼Ò«¬¡AÁÙ§¹¾ã¤¶²Ð¤F¨â­Ó¥D­nªº BPF «eºÝ½sµ{®Ø¬[ ¡X BCC ©M bpftrace¡A§óµ¹¥X¤F¤@¨t¦C¹ê²{­S¨Ò¡A¥þ­±®i¥Ü¤F BPF§Þ³Nªº¹ê»Ú¯à¤O©M¥¼¨Óµo®i«e´º¡A¥H¤Î¨Ï¥ÎBPF¤u¨ãÀu¤Æ©Ê¯à¡B­×´_°ÝÃD¡B±´¯Á½u¤W¨t²Îªº¤º³¡±¡ªp¡C¥»®Ñªº¥t¤@­ÓÃöª`¤è¦V¬O Linux ¨t²Î©Ê¯à©MÀ³¥Îµ{§Ç©Ê¯àªº½ÕÀu¡C¥»®Ñ¥þ­±¤¶²Ð¤F¨t²Î©Ê¯à½ÕÀuªºµ¦²¤¡B¤u¨ã»P¹ê½î®×¨Ò¡A¤£¶È¤¶²Ð¤F¹ïÀ³ªº BPF ¤u¨ã¡AÁÙµÛ­«¤¶²Ð¤F³o¨Ç¤u¨ã¦p¦ó»P Linux ¶Ç²Î©Ê¯à¤u¨ã¶i¦æ¤¬¸É¡A³o¼ËŪªÌ¥i¥H¦³¿ï¾Ü¦a¶i¦æ¨Ï¥Î¡C¥»®Ñ¤¶²Ðªº¤u¨ã¤p¥©ºë­P¡A¥B¥]§t¤F²³æ©öŪªº·½¥N½X¡A³o´N¬O BPF §Þ³Nªº¾y¤O©Ò¦b ¡G¦w¥þ¡B°ª®Ä¡B§Ö±¶ªº¨t²ÎÂX®i¤O¡C¥¼¨Ó BPF §Þ³N¦b Linux ¤¤ªºÀ³¥Î³õ´º·|¶V¨Ó¶V¦h¡A¶V¨Ó¶V­«­n¡C§Æ±æ¥»®Ñ¯à¦b¤j®a¾Ç²ß³o¶µ§Þ³N¦}Ãöª`¥¦ªºµo®i®É´£¨Ñ¤@©wªº«K§Q¡C¥»®Ñ¬O¨t²ÎºÞ²z­û¡BÀ³¥Îµ{§Ç¶}µoªÌ¡B¹Bºû¤H­û¡A¥H¤Î¨ä¥LIT±q·~ªÌ¦b¥ø·~¤º³¡©Î¤ª¤W¨Ï¥Î¦UºØLinuxµo¦æª©®É³£¥i°Ñ¦Òªº¸ê®Æ¡C


¥Ø¿ý¡G

²Ä1³¹¡@¤Þ¡@¨¥.............1
1.1¡@BPF©MeBPF¬O¤°¤\ ............ 1
1.2¡@¸òÂÜ¡B¶å±´¡Bªö¼Ë¡B­åªR©M¥iÆ[´ú©Ê¤À§O¬O¤°¤\ ...... 2
1.3¡@BCC¡Bbpftrace©MIO Visor ........... 3
1.4¡@ªìÃÑBCC¡G§Ö³t¤W¤â .......... 4
1.5¡@BPF¸òÂܪº¯à¨£«× ........... 7
1.6¡@°ÊºA´¡¼Î¡Gkprobes©Muprobes .......... 8
1.7¡@ÀRºA´¡¼Î¡Gtracepoint©MUSDT ......... 9
1.8¡@ªìÃÑbpftrace¡G¸òÂÜopen() .......... 10
1.9¡@¦A¦^¨ìBCC¡G¸òÂÜopen() ......... 13
1.10¡@¤pµ² .............. 15
²Ä2³¹¡@§Þ³N­I´º.............16
2.1¡@¹ÏÄÀBPF ............. 16
2.2¡@BPF ............. 17
2.3¡@ÂX®iª©BPF ............. 18
2.3.1¡@¬°¤°¤\©Ê¯à¤u¨ã»Ý­n BPF §Þ³N ....... 21
2.3.2¡@BPF »P¤º®Ö¼Ò¶ôªº¹ï¤ñ ........23
2.3.3¡@½s¼g BPF µ{§Ç ...........23
2.3.4¡@¨Ï¥Î BPF ¬d¬Ý«ü¥O¶° ¡Gbpftool ........24
2.3.5¡@¨Ï¥Î bpftrace ¬d¬Ý BPF «ü¥O¶° ........ 32
2.3.6¡@BPF API ............ 33
2.3.7¡@BPF ¦}µo±±¨î ..........37
2.3.8¡@BPF sysfs ±µ¤f ........... 38
2.3.9¡@BPF Ãþ«¬®æ¦¡ ..........38
2.3.10¡@BPF CO-RE .......... 39
2.3.11¡@BPF ªº§½­­©Ê ........... 40
2.3.12¡@BPF ÂX®i¾\Ū¸ê®Æ ..........40
2.4¡@½Õ¥Î´Ì¦^·¹ ............ 41
2.4.1¡@°ò¤_´V«ü°wªº½Õ¥Î´Ì¦^·¹ ......... 41
2.4.2¡@½Õ¸Õ«H®§ ........... 42
2.4.3¡@³Ì¦Z¤À¤ä°O¿ý ........... 43
2.4.4¡@ORC ............ 43
2.4.5¡@²Å¸¹ ............. 43
2.4.6¡@ÂX®i¾\Ū ........... 43
2.5¡@¤õµK¹Ï .............. 44
2.5.1¡@½Õ¥Î´Ì«H®§ ........... 44
2.5.2¡@¹ï½Õ¥Î´Ì«H®§ªº­åªR ......... 44
2.5.3¡@¤õµK¹Ï ........... 45
2.5.4¡@¤õµK¹Ïªº¯S©Ê ........... 47
2.5.5¡@¤õµK¹ÏªºÅÜÅé ........... 48
2.6¡@¨Æ¥ó·½ .............. 48
2.7¡@kprobes ............. 49
2.7.1¡@kprobes ¬O¦p¦ó¤u§@ªº ......... 49
2.7.2¡@kprobes ±µ¤f ........... 51
2.7.3¡@BPF ©M kprobes ...........51
2.7.4¡@Ãö¤_ kprobes ªº§ó¦h¤º®e ........ 53
2.8¡@uprobes ............. 53
2.8.1¡@uprobes ¬O¦p¦ó¤u§@ªº ......... 53
2.8.2¡@uprobes ±µ¤f ........... 55
2.8.3¡@BPF »P uprobes ...........55
2.8.4¡@uprobes ªº¶}¾P©M¥¼¨Óªº¤u§@ ....... 56
2.8.5¡@ÂX®i¾\Ū ........... 57
2.9¡@¸òÂÜÂI .............. 57
2.9.1¡@¦p¦ó²K¥[¸òÂÜÂI ........... 58
2.9.2¡@¸òÂÜÂIªº¤u§@­ì²z ......... 59
2.9.3¡@¸òÂÜÂIªº±µ¤f ........... 60
2.9.4¡@¸òÂÜÂI©M BPF .......... 61
2.9.5¡@BPF ­ì©l¸òÂÜÂI ..........62
2.9.6¡@ÂX®i¾\Ū ........... 62
2.10¡@USDT ............. 62
2.10.1¡@²K¥[ USDT ±´°w .......... 63
2.10.2¡@USDT ¬O¦p¦ó¤u§@ªº ......... 65
2.10.3¡@BPF »P USDT ........... 66
2.10.4¡@USDT ªº§ó¦h«H®§ ......... 66
2.11¡@°ÊºAUSDT ............ 66
2.12¡@©Ê¯àºÊ±±­p¼Æ¾¹ ............ 68
2.12.1¡@PMC ªº¼Ò¦¡ ...........68
2.12.2¡@PEBS ........... 69
2.12.3¡@¤ª­pºâ ........... 69
2.13¡@perf_events ............. 69
2.14¡@¤pµ² .............. 70
²Ä3³¹¡@©Ê¯à¤ÀªR.............71
3.1¡@·§Äý .............. 71
3.1.1¡@¥Ø¼Ð ............. 71
3.1.2¡@¤ÀªR¤u§@ ........... 72
3.1.3¡@¦h­«©Ê¯à°ÝÃD ........... 73
3.2¡@©Ê¯à¤ÀªR¤èªk½× ............ 73
3.2.1¡@·~°È­t¸üµe¹³ ........... 74
3.2.2¡@¤U๤ÀªR ........... 75
3.2.3¡@USE ¤èªk½× .......... 76
3.2.4¡@Àˬd²M³æªk ........... 77
3.3¡@Linux 60¬í¤ÀªR ........... 77
3.3.1¡@uptime ........... 77
3.3.2¡@dmesg | tail ............ 78
3.3.3¡@vmstat 1 ........... 78
3.3.4¡@mpstat -P ALL 1 ..........79
3.3.5¡@pidstat 1 ........... 80
3.3.6¡@iostat -xz 1 ........... 80
3.3.7¡@free -m ........... 82
3.3.8¡@sar -n DEV 1 ...........82
3.3.9¡@sar -n TCP,ETCP 1 .......... 83
3.3.10¡@top ............. 83
3.4¡@BCC¤u¨ãÀˬd²M³æ ............ 84
3.4.1¡@execsnoop ............ 84
3.4.2¡@opensnoop ........... 85
3.4.3¡@ext4slower ........... 85
3.4.4¡@biolatency ............ 86
3.4.5¡@biosnoop ............ 86
3.4.6¡@cachestat ............ 87
3.4.7¡@tcpconnect ...........87
3.4.8¡@tcpaccept ........... 87
3.4.9¡@tcpretrans ........... 88
3.4.10¡@runqlat ........... 88
3.4.11¡@profile ............ 89
3.5¡@¤pµ² .............. 90
²Ä4³¹¡@BCC..............91
4.1¡@BCCªº²Õ¥ó ............ 92
4.2¡@BCCªº¯S©Ê ............ 92
4.2.1¡@BCC ªº¤º®ÖºA¯S©Ê .......... 92
4.2.2¡@BCC ªº¥Î¤áºA¯S©Ê .......... 93
4.3¡@¦w¸ËBCC ............ 94
4.3.1¡@¤º®Ö­n¨D ........... 94
4.3.2¡@Ubuntu ........... 94
4.3.3¡@RHEL ............ 95
4.3.4¡@¨ä¥Lµo¦æª© ........... 95
4.4¡@BCCªº¤u¨ã ............ 96
4.4.1¡@­«ÂI¤u¨ã ........... 96
4.4.2¡@¤u¨ãªº¯SÂI ........... 97
4.4.3¡@³æ¤@¥Î³~¤u¨ã ........... 98
4.4.4¡@¦h¥Î³~¤u¨ã ........... 99
4.5¡@funccount ............ 100
4.5.1¡@funccount ªº¥Ü¨Ò .......... 101
4.5.2¡@funccount ªº»yªk .......... 103
4.5.3¡@funccount ªº³æ¦æµ{§Ç ........ 103
4.5.4¡@funccount ªºÀ°§U«H®§ ........ 104
4.6¡@stackcount ............. 105
4.6.1¡@stackcount ªº¥Ü¨Ò .......... 105
4.6.2¡@stackcount ªº¤õµK¹Ï .......... 107
4.6.3¡@stackcount ´Ý¯Êªº½Õ¥Î´Ì ........ 108
4.6.4¡@stackcount ªº»yªk .......... 108
4.6.5¡@stackcount ªº³æ¦æµ{§Ç ........ 109
4.6.6¡@stackcount ªºÀ°§U«H®§ ........ 109
4.7¡@trace .............. 110
4.7.1¡@trace ªº¥Ü¨Ò ...........111
4.7.2¡@trace ªº»yªk ...........111
4.7.3¡@trace ªº³æ¦æµ{§Ç .......... 113
4.7.4¡@trace ªºµ²ºcÅé .......... 113
4.7.5¡@trace ½Õ¸Õ¤å¥ó´y­z²ÅªnÅS°ÝÃD ........ 114
4.7.6¡@trace ªºÀ°§U«H®§ .......... 115
4.8¡@argdist ............. 117
4.8.1¡@argdist ªº»yªk ........... 118
4.8.2¡@argdist ªº³æ¦æµ{§Ç ......... 119
4.8.3¡@argdist ªºÀ°§U«H®§ ......... 119
4.9¡@¤u¨ã¤åÀÉ ............ 121
4.9.1¡@man À°§U¤åÀÉ ¡Gopensnoop ....... 121
4.9.2¡@¥Ü¨Ò¤å¥ó ¡Gopensnoop ......... 125
4.10¡@¶}µoBCC¤u¨ã ............ 126
4.11¡@BCCªº¤º³¡¹ê²{ ............ 127
4.12¡@BCCªº½Õ¸Õ ............ 128
4.12.1¡@printf() ½Õ¸Õ .......... 129
4.12.2¡@BCC ½Õ¸Õ¿é¥X ..........131
4.12.3¡@BCC ªº½Õ¸Õ¼Ð§Ó¦ì .......... 132
4.12.4¡@bpflist ........... 133
4.12.5¡@bpftool ........... 134
4.12.6¡@dmesg ............ 134
4.12.7¡@­«¸m¨Æ¥ó ........... 134
4.13¡@¤pµ² .............. 136
²Ä5³¹¡@bpftrace.............137
5.1¡@bpftraceªº²Õ¥ó ........... 138
5.2¡@bpftraceªº¯S©Ê ........... 139
5.2.1¡@bpftrace ªº¨Æ¥ó·½ .......... 139
5.2.2¡@bpftrace ªº°Ê§@ .......... 139
5.2.3¡@bpftrace ªº¤@¯ë¯S©Ê .......... 140
5.2.4¡@bpftrace »P¨ä¥LÆ[´ú¤u¨ãªº¤ñ¸û ...... 140
5.3¡@bpftraceªº¦w¸Ë ........... 141
5.3.1¡@¤º®Öª©¥»­n¨D ........... 141
5.3.2¡@Ubuntu ........... 142
5.3.3¡@Fedora ........... 142
5.3.4¡@ºc«Ø¦Zªº¦w¸Ë¨BÆJ ......... 143
5.3.5¡@¨ä¥Lµo¦æª© ........... 143
5.4¡@bpftrace¤u¨ã ............. 143
5.4.1¡@­«ÂI¤u¨ã ........... 144
5.4.2¡@¤u¨ã¯S©º ........... 144
5.4.3¡@¤u¨ãªº¹B¦æ ........... 145
5.5¡@bpftrace³æ¦æµ{§Ç ........... 145
5.6¡@bpftraceªº¤åÀÉ ........... 146
5.7¡@bpftrace½sµ{ ............. 146
5.7.1¡@¥Îªk ............. 147
5.7.2¡@µ{§Çµ²ºc ........... 148
5.7.3¡@ª`ÄÀ ............. 148
5.7.4¡@±´°w®æ¦¡ ........... 149
5.7.5¡@±´°w³q°t²Å ........... 149
5.7.6¡@¹LÂo¾¹ ........... 150
5.7.7¡@°Ê§@ ............. 150
5.7.8¡@Hello, World! ...........151
5.7.9¡@¨ç¼Æ ............. 151
5.7.10¡@Åܶq ........... 152
5.7.11¡@¬M®gªí¨ç¼Æ ........... 153
5.7.12¡@¹ï vfs_read() ­p®É .......... 154
5.8¡@bpftraceªºÀ°§U«H®§ ........... 155
5.9¡@bpftraceªº±´°wÃþ«¬ ........... 157
5.9.1¡@tracepoint ........... 157
5.9.2¡@usdt ............ 159
5.9.3¡@kprobe ©M kretprobe ..........160
5.9.4¡@uprobe ©M uretprobe .......... 160
5.9.5¡@software ©M hardware ..........161
5.9.6¡@profile ©M interval .......... 162
5.10¡@bpftraceªº±±¨î¬y ........... 163
5.10.1¡@¹LÂo¾¹ ........... 163
5.10.2¡@¤T¤¸¾Þ§@²Å ........... 163
5.10.3¡@if »y¥y ........... 163
5.10.4¡@´`Àô®i¶} ........... 164
5.11¡@bpftraceªº¹Bºâ²Å ........... 164
5.12¡@bpftraceªºÅܶq ........... 165
5.12.1¡@¤º¸mÅܶq ........... 165
5.12.2¡@¤º¸mÅܶq ¡Gpid¡Bcomm ©M uid ........166
5.12.3¡@¤º¸mÅܶq ¡Gkstack ©M ustack ........166
5.12.4¡@¤º¸mÅܶq ¡G¦ì¸m°Ñ¼Æ ......... 168
5.12.5¡@Á{®ÉÅܶq ........... 169
5.12.6¡@¬M®gªíÅܶq ........... 169
5.13¡@bpftraceªº¨ç¼Æ ........... 170
5.13.1¡@printf() ........... 171
5.13.2¡@join() ............ 172
5.13.3¡@str() ............ 173
5.13.4¡@kstack() ©M ustack() ......... 173
5.13.5¡@ksym() ©M usym() .......... 174
5.13.6¡@kaddr() ©M uaddr() .........175
5.13.7¡@system() ........... 176
5.13.8¡@exit() ............ 176
5.14¡@bpftrace¬M®gªíªº¾Þ§@¨ç¼Æ ......... 177
5.14.1¡@count() ........... 177
5.14.2¡@sum()¡Bavg()¡Bmin() ©M max() ........178
5.14.3¡@hist() ............ 179
5.14.4¡@lhist() ........... 180
5.14.5¡@delete() ............ 181
5.14.6¡@clear() ©M zero() .........181
5.14.7¡@print() ............ 182
5.15¡@bpftraceªº¤U¤@¨B¤u§@ ........... 183
5.15.1¡@Å㦡°Ï¤À¦a§}¼Ò¦¡ ......... 183
5.15.2¡@¨ä¥LÂX®i ........... 184
5.15.3¡@ply ............. 184
5.16¡@bpftraceªº¤º³¡¹B§@ ........... 185
5.17¡@bpftraceªº½Õ¸Õ ........... 186
5.17.1¡@printf() ½Õ¸Õ .......... 186
5.17.2¡@½Õ¸Õ¼Ò¦¡ ........... 187
5.17.3¡@¸Ô±¡¼Ò¦¡ ........... 188
5.18¡@¤pµ² .............. 190
²Ä6³¹¡@CPU..............191
6.1¡@­I´ºª¾ÃÑ ............ 192
6.1.1¡@CPU °ò¦ª¾ÃÑ ..........192
6.1.2¡@BPF ªº¤ÀªR¯à¤O ..........194
6.1.3¡@¤ÀªRµ¦²¤ ........... 196
6.2¡@¶Ç²Î¤u¨ã ............ 197
6.2.1¡@¤º®Ö²Î­p ........... 197
6.2.2¡@µw¥ó²Î­p ........... 200
6.2.3¡@µw¥óªö¼Ë ........... 202
6.2.4¡@©w®Éªö¼Ë ........... 203
6.2.5¡@¨Æ¥ó²Î­p»P¨Æ¥ó¸òÂÜ ......... 207
6.3¡@BPF¤u¨ã ............. 210
6.3.1¡@execsnoop ............ 211
6.3.2¡@exitsnoop ........... 214
6.3.3¡@runqlat ........... 215
6.3.4¡@runqlen ............ 219
6.3.5¡@runqslower ........... 222
6.3.6¡@cpudist ........... 223
6.3.7¡@cpufreq ............ 224
6.3.8¡@profile ............ 227
6.3.9¡@offcputime ........... 232
6.3.10¡@syscount ........... 236
6.3.11¡@argdist ©M trace ..........239
6.3.12¡@funccount ........... 242
6.3.13¡@softirqs ........... 244
6.3.14¡@hardirqs ........... 245
6.3.15¡@smpcalls ........... 246
6.3.16¡@llcstat ........... 250
6.3.17¡@¨ä¥L¤u¨ã ........... 251
6.4¡@BPF³æ¦æµ{§Ç ........... 251
6.4.1¡@BCC ¤u¨ã ............251
6.4.2¡@bpftrace ª©¥» .......... 252
6.5¡@¥i¿ï½m²ß ............ 253
6.6¡@¤pµ² .............. 254
²Ä7³¹¡@¤º¦s..............255
7.1¡@­I´ºª¾ÃÑ ............ 256
7.1.1¡@¤º¦s°ò¦ª¾ÃÑ ........... 256
7.1.2¡@BPF ªº¤ÀªR¯à¤O ..........260
7.1.3¡@¤ÀªRµ¦²¤ ........... 262
7.2¡@¶Ç²Î¤u¨ã ............ 263
7.2.1¡@¤º®Ö¤é§Ó ........... 263
7.2.2¡@¤º®Ö²Î­p«H®§ ........... 264
7.2.3¡@µw¥ó²Î­p©Mµw¥óªö¼Ë ......... 268
7.3¡@BPF¤u¨ã ............. 269
7.3.1¡@oomkill ............ 270
7.3.2¡@memleak ............ 271
7.3.3¡@mmapsnoop ........... 274
7.3.4¡@brkstack ........... 275
7.3.5¡@shmsnoop ............ 277
7.3.6¡@faults ............ 277
7.3.7¡@ffaults ............ 280
7.3.8¡@vmscan ............ 281
7.3.9¡@drsnoop ............ 284
7.3.10¡@swapin ........... 285
7.3.11¡@hfaults ............ 287
7.3.12¡@¨ä¥L¤u¨ã ........... 287
7.4¡@BPF³æ¦æµ{§Ç ........... 288
7.4.1¡@BCC ............. 288
7.4.2¡@bpftrace ........... 288
7.5¡@¥i¿ï½m²ß ............ 289
7.6¡@¤pµ² .............. 290
²Ä8³¹¡@¤å¥ó¨t²Î.............291
8.1¡@­I´ºª¾ÃÑ ............ 292
8.1.1¡@¤å¥ó¨t²Î°ò¦ª¾ÃÑ ......... 292
8.1.2¡@BPF ªº¤ÀªR¯à¤O ..........294
8.1.3¡@¤ÀªRµ¦²¤ ........... 295
8.2¡@¶Ç²Î¤u¨ã ............ 296
8.2.1¡@df ............. 297
8.2.2¡@mount ............ 297
8.2.3¡@strace ........... 298
8.2.4¡@perf ............ 298
8.2.5¡@fatrace ............ 301
8.3¡@BPF¤u¨ã ............. 302
8.3.1¡@opensnoop ........... 303
8.3.2¡@statsnoop ........... 306
8.3.3¡@syncsnoop ............ 308
8.3.4¡@mmapfiles ............ 309
8.3.5¡@scread ............ 311
8.3.6¡@fmapfault ........... 312
8.3.7¡@filelife ............ 313
8.3.8¡@vfsstat ............ 315
8.3.9¡@vfscount ........... 317
8.3.10¡@vfssize ........... 318
8.3.11¡@fsrwstat ............ 320
8.3.12¡@fileslower ........... 322
8.3.13¡@filetop ............ 325
8.3.14¡@writesync ........... 327
8.3.15¡@filetype ........... 328
8.3.16¡@cachestat ............ 331
8.3.17¡@writeback ........... 334
8.3.18¡@dcstat ........... 336
8.3.19¡@dcsnoop ........... 338
8.3.20¡@mountsnoop ........... 340
8.3.21¡@xfsslower ........... 341
8.3.22¡@xfsdist ............ 342
8.2.23¡@ext4dist ............ 345
8.3.24¡@icstat ............ 348
8.3.25¡@bufgrow ........... 350
8.3.26¡@readahead .......... 351
8.3.27¡@¨ä¥L¤u¨ã ........... 353
8.4¡@BPF³æ¦æµ{§Ç ........... 353
8.4.1¡@BCC ............. 353
8.4.2¡@bpftrace ........... 354
8.4.3¡@BPF ³æ¦æµ{§Ç¥Ü­S ..........356
8.5¡@¥i¿ï½m²ß ............ 359
8.6¡@¤pµ² .............. 360
²Ä9³¹¡@ºÏ½LI/O............361
9.1¡@­I´ºª¾ÃÑ ............ 362
9.1.1¡@ºÏ½L¨t²Î°ò¦ª¾ÃÑ ......... 362
9.1.2¡@BPF ªº¤ÀªR¯à¤O ..........365
9.1.3¡@¤ÀªRµ¦²¤ ........... 366
9.2¡@¶Ç²Î¤u¨ã ............ 367
9.2.1¡@iostat ............ 367
9.2.2¡@perf ............ 369
9.2.3¡@blktrace ............ 370
9.2.4¡@SCSI ¤é§Ó ...........371
9.3¡@BPF¤u¨ã ............. 372
9.3.1¡@biolatency ............373
9.3.2¡@biosnoop ............ 379
9.3.3¡@biotop ............ 383
9.3.4¡@bitesize ............ 384
9.3.5¡@seeksize ........... 386
9.3.6¡@biopattern ............ 388
9.3.7¡@biostacks ............ 390
9.3.8¡@bioerr ........... 393
9.3.9¡@mdflush ............ 395
9.3.10¡@iosched ............ 397
9.3.11¡@scsilatency ........... 399
9.3.12¡@scsiresult ............ 401
9.3.13¡@nvmelatency ..........403
9.4¡@BPF³æ¦æµ{§Ç ........... 406
9.4.1¡@BCC ............. 406
9.4.2¡@bpftrace ........... 407
9.4.3¡@BPF ³æ¦æµ{§Ç¥Ü­S ..........408
9.5¡@¥i¿ï½m²ß ............ 409
9.6¡@¤pµ² .............. 410
²Ä10³¹¡@ºôµ¸..............411
10.1¡@­I´ºª¾ÃÑ ............ 412
10.1.1¡@ºôµ¸°ò¦ª¾ÃÑ ........... 412
10.1.2¡@BPF ªº¤ÀªR¯à¤O ..........419
10.1.3¡@¤ÀªRµ¦²¤ ........... 421
10.1.4¡@±`¨£ªº¸òÂÜ¿ù»~ ......... 421
10.2¡@¶Ç²Î¤u¨ã ............ 422
10.2.1¡@ss ............. 423
10.2.2¡@ip ............. 424
10.2.3¡@nstat ........... 425
10.2.4¡@netstat ............ 425
10.2.5¡@sar ............ 428
10.2.6¡@nicstat ............ 429
10.2.7¡@ethtool ........... 429
10.2.8¡@tcpdump ........... 431
10.2.9¡@/proc ............ 432
10.3¡@BPF¤u¨ã ............. 433
10.3.1¡@sockstat ............ 435
10.3.2¡@sofamily ........... 437
10.3.3¡@soprotocol .......... 440
10.3.4¡@soconnect ........... 442
10.3.5¡@soaccept ...........445
10.3.6¡@socketio ........... 447
10.3.7¡@socksize ........... 450
10.3.8¡@sormem ............ 452
10.3.9¡@soconnlat ........... 455
10.3.10¡@so1stbyte ........... 459
10.3.11¡@tcpconnect ........... 461
10.3.12¡@tcpaccept ...........464
10.3.13¡@tcplife ............ 467
10.3.14¡@tcptop ........... 472
10.3.15¡@tcpsnoop .......... 473
10.3.16¡@tcpretrans ...........474
10.3.17¡@tcpsynbl ........... 477
10.3.18¡@tcpwin ............ 479
10.3.19¡@tcpnagle ...........481
10.3.20¡@udpconnect .......... 483
10.3.21¡@gethostlatency ......... 485
10.3.22¡@ipecn ............ 487
10.3.23¡@superping ........... 488
10.3.24¡@qdisc-fq ........... 491
10.3.25¡@qdisc-cbq¡Bqdisc-cbs¡Bqdisc-codel¡Bqdisc-fq_codel¡Bqdisc-red¡Bqdisc-tbf ......... 493
10.3.26¡@netsize ........... 495
10.3.27¡@nettxlat ........... 498
10.3.28¡@skbdrop ............ 500
10.3.29¡@skblife ............ 503
10.3.30¡@ieee80211scan .........505
10.3.31¡@¨ä¥L¤u¨ã ........... 507
10.4¡@BPF³æ¦æµ{§Ç ........... 507
10.4.1¡@BCC ........... 507
10.4.2¡@bpftrace ........... 508
10.4.3¡@BPF ³æ¦æµ{§Ç¥Ü­S ..........510
10.5¡@¥i¿ï½m²ß ............ 513
10.6¡@¤pµ² .............. 515
²Ä11³¹¡@¦w¥þ..............516
11.1¡@­I´ºª¾ÃÑ ............ 516
11.1.1¡@BPF ªº¤ÀªR¯à¤O ......... 517
11.1.2¡@µL¯SÅv BPF ¥Î¤á .......... 521
11.1.3¡@°t¸m BPF ¦w¥þµ¦²¤ .......... 521
11.1.4¡@¤ÀªRµ¦²¤ ........... 523
11.2¡@BPF¤u¨ã ............. 523
11.2.1¡@execsnoop .......... 524
11.2.2¡@elfsnoop ........... 524
11.2.3¡@modsnoop .......... 526
11.2.4¡@bashreadline........... 527
11.2.5¡@shellsnoop .......... 528
11.2.6¡@ttysnoop ........... 530
11.2.7¡@opensnoop ........... 532
11.2.8¡@eperm ........... 532
11.2.9¡@tcpconnect ©M tcpaccept ........ 534
11.2.10¡@tcpreset ............ 534
11.2.11¡@capable ........... 536
11.2.12¡@setuids ............ 540
11.3¡@BPF³æ¦æµ{§Ç ........... 542
11.3.1¡@BCC ........... 542
11.3.2¡@bpftrace ............543
11.3.3¡@BPF ³æ¦æµ{§Ç¥Ü­S ......... 543
11.4¡@¤pµ² .............. 544
²Ä12³¹¡@½sµ{»y¨¥.............545
12.1¡@­I´ºª¾ÃÑ ............ 545
12.1.1¡@½sĶ«¬»y¨¥ ........... 546
12.1.2¡@§Y®É½sĶ«¬»y¨¥ ......... 547
12.1.3¡@¸ÑÄÀ«¬»y¨¥ ........... 548
12.1.4¡@BPF ªº¤ÀªR¯à¤O ..........549
12.1.5¡@¤ÀªRµ¦²¤ ........... 550
12.1.6¡@BPF ¤u¨ã ..........550
12.2¡@C ............. 551
12.2.1¡@C ¨ç¼Æ²Å¸¹ ........... 552
12.2.2¡@C ½Õ¥Î´Ì ........... 555
12.2.3¡@C ¨ç¼Æ¸òÂÜ ........... 557
12.2.4¡@C ¨ç¼Æ°¾²¾¶q¸òÂÜ ......... 558
12.2.5¡@C USDT ........... 558
12.2.6¡@C ³æ¦æµ{§Ç ........... 559
12.3¡@Java ............. 560
12.3.1¡@¸òÂÜ libjvm ........... 561
12.3.2¡@jnistacks ........... 563
12.3.3¡@Java ½uµ{¦W¦r .......... 565
12.3.4¡@Java ¤èªkªº²Å¸¹ .......... 566
12.3.5¡@Java ½Õ¥Î´Ì .......... 569
12.3.6¡@Java USDT ±´°w ......... 573
12.3.7¡@profile ............ 579
12.3.8¡@offcputime ........... 583
12.3.9¡@stackcount ........... 589
12.3.10¡@javastat ............ 593
12.3.11¡@javathreads........... 594
12.3.12¡@javacalls ........... 596
12.3.13¡@javaflow ........... 597
12.3.14¡@javagc ............ 599
12.3.15¡@javaobjnew .......... 599
12.3.16¡@Java ³æ¦æµ{§Ç .......... 600
12.4¡@bash shell ............ 601
12.4.1¡@¨ç¼Æ­p¼Æ ........... 603
12.4.2¡@¨ç¼Æ°Ñ¼Æ¸òÂÜ¡]bashfunc.bt¡^ ........ 604
12.4.3¡@¨ç¼Æ°õ¦æ®Éªø¡]bashfunclat.bt¡^ ...... 607
12.4.4¡@/bin/bash ............ 609
12.4.5¡@/bin/bash USDT ......... 613
12.4.6¡@bash ³æ¦æµ{§Ç .......... 613
12.5¡@¨ä¥L»y¨¥ ............ 614
12.5.1¡@JavaScript¡]Node.js¡^ ........ 614
12.5.2¡@C++ ........... 616
12.5.3¡@Golang ........... 616
12.6¡@¤pµ² .............. 619
²Ä13³¹¡@À³¥Îµ{§Ç.............620
13.1¡@­I´ºª¾ÃÑ ............ 621
13.1.1¡@À³¥Îµ{§Ç°ò¦«H®§ ......... 621
13.1.2¡@À³¥Îµ{§Ç¥Ü¨Ò ¡GMySQL ªA°È¾¹ ......622
13.1.3¡@BPF ªº¯à¤O ..........623
13.1.4¡@¤ÀªRµ¦²¤ ........... 624
13.2¡@BPF¤u¨ã ............. 625
13.2.1¡@execsnoop .......... 626
13.2.2¡@threadsnoop ........... 626
13.2.3¡@profile ............ 629
13.2.4¡@threaded ........... 632
13.2.5¡@offcputime ........... 634
13.2.6¡@offcpuhist .......... 638
13.2.7¡@syscount ........... 641
13.2.8¡@ioprofile ........... 642
13.2.9¡@libc ´V«ü°w .......... 644
13.2.10¡@mysqld_qslower .......... 645
13.2.11¡@mysqld_clat ........... 648
13.2.12¡@signals ........... 652
13.2.13¡@killsnoop .......... 654
13.2.14¡@pmlock ©M pmheld ......... 655
13.2.15¡@naptime ............ 660
13.2.16¡@¨ä¥L¤u¨ã ........... 662
13.3¡@BPF³æ¦æµ{§Ç ........... 662
13.3.1¡@BCC ........... 662
13.3.2¡@bpftrace ........... 663
13.4¡@BPF³æ¦æµ{§Ç¥Ü­S ........... 664
13.5¡@¤pµ² .............. 664
²Ä14³¹¡@¤º®Ö..............665
14.1¡@­I´ºª¾ÃÑ ............ 666
14.1.1¡@¤º®Ö°ò¦ª¾ÃÑ ........... 666
14.1.2¡@BPF ªº¤ÀªR¯à¤O ..........668
14.2¡@¤ÀªRµ¦²¤ ............ 669
14.3¡@¶Ç²Î¤u¨ã ............ 670
14.3.1¡@Ftrace ........... 670
14.3.2¡@perf sched .......... 673
14.3.3¡@slabtop ........... 674
14.3.4¡@¨ä¥L¤u¨ã ........... 675
14.4¡@BPF¤u¨ã ............. 675
14.4.1¡@loads ............ 676
14.4.2¡@offcputime ........... 677
14.4.3¡@wakeuptime ...........679
14.4.4¡@offwaketime .......... 681
14.4.5¡@mlock ©M mheld ......... 683
14.4.6¡@¦Û±ÛÂê ........... 687
14.4.7¡@kmem ........... 688
14.4.8¡@kpages ........... 689
14.4.9¡@memleak ............690
14.4.10¡@slabratetop ........... 691
14.4.11¡@numamove ........... 692
14.4.12¡@workq ............ 694
14.4.13¡@¤p¥ô°È ........... 695
14.4.14¡@¨ä¥L¤u¨ã ........... 696
14.5¡@BPF³æ¦æµ{§Ç ........... 697
14.5.1¡@BCC ........... 697
14.5.2¡@bpftrace ........... 698
14.6¡@BPF³æ¦æµ{§Ç¥Ü­S ........... 699
14.6.1¡@«ö¨t²Î½Õ¥Î¨ç¼Æ¹ï¨t²Î½Õ¥Î¶i¦æ­p¼Æ ..... 699
14.6.2¡@¹ï¤º®Ö¨ç¼Æ¶}©lªº hrtimer ¶i¦æ­p¼Æ ..... 699
14.7¡@¬D¾Ô .............. 700
14.8¡@¤pµ² .............. 700
²Ä15³¹¡@®e¾¹..............701
15.1¡@­I´ºª¾ÃÑ ............ 701
15.1.1¡@BPF ªº¤ÀªR¯à¤O ..........703
15.1.2¡@¬D¾Ô ........... 703
15.1.3¡@¤ÀªRµ¦²¤ ........... 706
15.2¡@¶Ç²Î¤u¨ã ............ 706
15.2.1¡@±q¥D¾÷¤W¤ÀªR ........... 706
15.2.2¡@¦b®e¾¹¤º¤ÀªR ........... 707
15.2.3¡@systemd-cgtop ........... 707
15.2.4¡@kubectl top ........... 708
15.2.5¡@docker stats .......... 708
15.2.6¡@/sys/fs/cgroups ........... 709
15.2.7¡@perf ............ 709
15.3¡@BPF¤u¨ã ............. 710
15.3.1¡@runqlat ........... 710
15.3.2¡@pidnss ............ 711
15.3.3¡@blkthrot ............ 714
15.3.4¡@overlayfs ............ 715
15.4¡@BPF³æ¦æµ{§Ç ........... 717
15.5¡@¥i¿ï½m²ß ............ 717
15.6¡@¤pµ² .............. 718
²Ä16³¹¡@µêÀÀ¾÷ºÞ²z¾¹............719
16.1¡@­I´ºª¾ÃÑ ............ 719
16.1.1¡@BPF ªº¤ÀªR¯à¤O ..........721
16.1.2¡@«Øijªº¤ÀªRµ¦²¤ ......... 722
16.2¡@¶Ç²Î¤u¨ã ............ 722
16.3¡@³X«È¨t²ÎªºBPF¤u¨ã ........... 723
16.3.1¡@Xen ¶W¯Å½Õ¥Î ........... 723
16.3.2¡@xenhyper ............ 727
16.3.3¡@Xen ¦^½Õ ........... 729
16.3.4¡@cpustolen ........... 731
16.3.5¡@HVM °h¥X¸òÂÜ .......... 732
16.4¡@±J¥D¾÷BPF¤u¨ã ........... 732
16.4.1¡@kvmexits ............ 733
16.4.2¡@¥¼¨Óªº¤u§@ ........... 737
16.5¡@¤pµ² .............. 737
²Ä17³¹¡@¨ä¥LBPF©Ê¯à¤u¨ã...........738
17.1¡@Vector©MPerformance Co-Pilot¡]PCP¡^ ....... 738
17.1.1¡@¥iµø¤Æ ........... 739
17.1.2¡@¥iµø¤Æ ¡G¼ö¹Ï ........... 740
17.1.3¡@¥iµø¤Æ ¡Gªí®æ§Î¦¡ªº¼Æ¾Ú ....... 742
17.1.4¡@BCC ´£¨Ñªº«ü¼Ð ..........743
17.1.5¡@¤º³¡¹ê²{ ........... 743
17.1.6¡@¦w¸Ë PCP ©M Vector ..........744
17.1.7¡@³s±µ¦}Åã¥Ü¼Æ¾Ú ......... 744
17.1.8¡@°t¸m BCC PMDA ......... 746
17.1.9¡@§ï¶i¤u§@ ........... 747
17.1.10¡@¶i¤@¨B¾\Ū ........... 747
17.2¡@Grafana©MPerformance Co-Pilot ........ 747
17.2.1¡@¦w¸Ë©M°t¸m ........... 748
17.2.2¡@³s±µ¦}¬d¬Ý¼Æ¾Ú ......... 748
17.2.3¡@§ï¶i¤u§@ ........... 750
17.2.4¡@¶i¤@¨B¾\Ū ........... 750
17.3¡@Cloudflare eBPF Prometheus Exporter¡]°t¦XGrafana¡^ ..... 750
17.3.1¡@ºc«Ø¦}¹B¦æ ebpf ¾É¥X¾¹ ......... 750
17.3.2¡@°t¸m Prometheus ºÊ±± ebpf_exporter ¹ê¨Ò ..... 751
17.3.3¡@¦b Grafana ¤¤³]¸m¤@­Ó¬d¸ß ........ 751
17.3.4¡@¶i¤@¨B¾\Ū ........... 751
17.4¡@kubectl-trace ........... 752
17.4.1¡@¸òÂܸ`ÂI ........... 752
17.4.2¡@¸òÂÜ pod ©M®e¾¹ ......... 753
17.4.3¡@¶i¤@¨B¾\Ū ........... 755
17.5¡@¨ä¥L¤u¨ã ............ 755
17.6¡@¤pµ² .............. 755
²Ä18³¹¡@«Øij¡B§Þ¥©©M±`¨£°ÝÃD. .........756
18.1¡@¨å«¬¨Æ¥óªºÀW²v©MÃB¥~¶}¾P ........ 756
18.1.1¡@ÀW²v ........... 757
18.1.2¡@°õ¦æªº¾Þ§@ ........... 758
18.1.3¡@¦Û¦æ´ú¸Õ ........... 760
18.2¡@¥H49Hz©Î99Hz¬°ªö¼ËÀW²v .......... 760
18.3¡@¶À½Þ©M¦Ç¹« ............ 760
18.4¡@¶}µo¥Ø¼Ð³n¥ó ............ 762
18.5¡@¾Ç²ß¨t²Î½Õ¥Î ............ 763
18.6¡@«O«ù²³æ ............ 764
18.7¡@¨Æ¥ó¯Ê¥¢ ............ 764
18.8¡@½Õ¥Î´Ì¯Ê¥¢ ............ 766
18.8.1¡@¦p¦ó­×´_·lÃaªº½Õ¥Î´Ì ......... 767
18.9¡@¥´¦L®É²Å¸¹¯Ê¥¢¡]¨ç¼Æ¦WºÙ¡^ ........ 767
18.9.1¡@¦p¦ó­×´_²Å¸¹¯Ê¥¢ ¡GJIT ¹B¦æ®É¡]Java¡BNode.js¡B.¡^ .. 768
18.9.2¡@¦p¦ó­×´_²Å¸¹¯Ê¥¢ ¡GELF ¤G¶i¨î¤å¥ó¡]C¡BC++¡B.¡^ .. 768
18.10¡@¸òÂܮɨç¼Æ¯Ê¥¢ .......... 768
18.11¡@¤ÏõX¦^¸ô ............ 769
18.12¡@³Q¥á±¼ªº¨Æ¥ó ............ 769
ªþ¿ýA¡@bpftrace³æ¦æµ{§Ç............770
ªþ¿ýB¡@bpftrace³Æ§Ñ³æ...........775
ªþ¿ýC¡@BCC¤u¨ãªº¶}µo...........778
ªþ¿ýD¡@C.BPF. ............793
ªþ¿ýE¡@BPF«ü¥O.............812
§Ç¡G