{"id":1834,"date":"2023-02-11T13:45:45","date_gmt":"2023-02-11T05:45:45","guid":{"rendered":"https:\/\/blog.cauchyschwarz.com\/?p=1834"},"modified":"2023-02-12T11:50:16","modified_gmt":"2023-02-12T03:50:16","slug":"systemtap-2","status":"publish","type":"post","link":"https:\/\/blog.cauchyschwarz.com\/?p=1834","title":{"rendered":"SystemTap"},"content":{"rendered":"\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 ez-toc-wrap-right counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<label for=\"ez-toc-cssicon-toggle-item-69fc54d47b329\" class=\"ez-toc-cssicon-toggle-label\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/label><input type=\"checkbox\"  id=\"ez-toc-cssicon-toggle-item-69fc54d47b329\" checked aria-label=\"Toggle\" \/><nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/blog.cauchyschwarz.com\/?p=1834\/#%E5%AE%89%E8%A3%85ubuntu_debug_symbols\" >\u5b89\u88c5ubuntu debug symbols<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/blog.cauchyschwarz.com\/?p=1834\/#%E5%AE%89%E8%A3%85%E5%BD%93%E5%89%8D%E7%89%88%E6%9C%AC%E6%BA%90%E7%A0%81\" >\u5b89\u88c5\u5f53\u524d\u7248\u672c\u6e90\u7801<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/blog.cauchyschwarz.com\/?p=1834\/#SystemTap\" >SystemTap<\/a><ul class='ez-toc-list-level-2' ><li class='ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/blog.cauchyschwarz.com\/?p=1834\/#31_Architecture\" >3.1 Architecture<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/blog.cauchyschwarz.com\/?p=1834\/#32_SystemTap%E8%84%9A%E6%9C%AC\" >3.2 SystemTap\u811a\u672c<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/blog.cauchyschwarz.com\/?p=1834\/#321_Event\" >3.2.1 Event<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/blog.cauchyschwarz.com\/?p=1834\/#322_SystemTap_HandlerBody\" >3.2.2 SystemTap Handler\/Body<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/blog.cauchyschwarz.com\/?p=1834\/#33_Basic_SystemTab_Handler_Constructs\" >3.3 Basic SystemTab Handler Constructs<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/blog.cauchyschwarz.com\/?p=1834\/#331_variables\" >3.3.1 variables<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/blog.cauchyschwarz.com\/?p=1834\/#332_Target_Variables\" >3.3.2 Target Variables<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/blog.cauchyschwarz.com\/?p=1834\/#3321_Pretty_Printing_Target_Variables\" >3.3.2.1 Pretty Printing Target Variables<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/blog.cauchyschwarz.com\/?p=1834\/#3322_Typecasting\" >3.3.2.2 Typecasting<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/blog.cauchyschwarz.com\/?p=1834\/#3323_Checking_Target_Variable_Availability\" >3.3.2.3 Checking Target Variable Availability<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/blog.cauchyschwarz.com\/?p=1834\/#333_Conditional_Statements\" >3.3.3 Conditional Statements<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/blog.cauchyschwarz.com\/?p=1834\/#334_Command-Line_Arguments\" >3.3.4 Command-Line Arguments<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/blog.cauchyschwarz.com\/?p=1834\/#34_Associative_Arrays\" >3.4 Associative Arrays<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/blog.cauchyschwarz.com\/?p=1834\/#35_Array_Operations_in_SystemTap\" >3.5 Array Operations in SystemTap<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/blog.cauchyschwarz.com\/?p=1834\/#36_Tapsets\" >3.6 Tapsets<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E5%AE%89%E8%A3%85ubuntu_debug_symbols\"><\/span>\u5b89\u88c5ubuntu debug symbols<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p>\u5185\u6838\uff1a<\/p>\n\n\n\n<p><a href=\"https:\/\/hadibrais.wordpress.com\/2017\/03\/13\/installing-ubuntu-kernel-debugging-symbols\/\">Installing Ubuntu Kernel Debugging Symbols | Micromysteries<\/a><\/p>\n\n\n\n<p>\u5e94\u7528\u7a0b\u5e8f\uff1a<\/p>\n\n\n\n<p><a href=\"https:\/\/wiki.ubuntu.com\/Debug%20Symbol%20Packages\">Debug Symbol Packages &#8211; Ubuntu Wiki<\/a><\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"%E5%AE%89%E8%A3%85%E5%BD%93%E5%89%8D%E7%89%88%E6%9C%AC%E6%BA%90%E7%A0%81\"><\/span>\u5b89\u88c5\u5f53\u524d\u7248\u672c\u6e90\u7801<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p><a href=\"https:\/\/wiki.ubuntu.com\/Kernel\/SourceCode\">Kernel\/SourceCode &#8211; Ubuntu Wiki<\/a><\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"SystemTap\"><\/span>SystemTap<span class=\"ez-toc-section-end\"><\/span><\/h1>\n\n\n\n<p>\u76f4\u63a5\u901a\u8fc7apt\u5b89\u88c5\u7684\u6709\u95ee\u9898\uff0c\u4f1a\u62a5\u201dPass 4: compilation failed\u201d\uff0c\u9700\u8981\u81ea\u5df1\u624b\u52a8\u7f16\u8bd1\u5b89\u88c5\uff1a<\/p>\n\n\n\n<p><a href=\"https:\/\/askubuntu.com\/questions\/1173904\/is-systemtap-broken-on-5-0-0-kernel\">Is systemtap broken on 5.0.0 kernel? &#8211; Ask Ubuntu<\/a><\/p>\n\n\n\n<p>systemtap\u6559\u7a0b\uff1a<\/p>\n\n\n\n<p><a href=\"https:\/\/sourceware.org\/systemtap\/SystemTap_Beginners_Guide\/index.html\">SystemTap Beginners Guide<\/a><\/p>\n\n\n\n<p>\u522b\u4eba\u7528systemtap\u5b9e\u73b0\u7684trace tcp\u5185\u90e8\u62e5\u585e\u63a7\u5236\u7b97\u6cd5\u7684\u4ee3\u7801\uff1a<\/p>\n\n\n\n<p><a href=\"https:\/\/github.com\/fastos\/tcpdive\/blob\/master\/src\/congestion.stp\">https:\/\/github.com\/fastos\/tcpdive\/blob\/master\/src\/congestion.stp<\/a><\/p>\n\n\n\n<p>systemtap\u4e0ebpftrace\u6bd4\u8f83<\/p>\n\n\n\n<p><a href=\"https:\/\/catbro666.github.io\/posts\/46dd3f4b\/\">https:\/\/catbro666.github.io\/posts\/46dd3f4b\/<\/a><\/p>\n\n\n\n<p>Systemtap\u6587\u6863\u7b14\u8bb0<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"31_Architecture\"><\/span>3.1 Architecture<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>systemtap\u7684\u5de5\u4f5c\u8fc7\u7a0b\uff1a<\/p>\n\n\n\n<p>1.\u5c06\u811a\u672c\u91cc\u7528\u5230\u7684\u7c7b\u4f3c\u5e93\u51fd\u6570\u7684\u4e1c\u897f\u66ff\u6362\u4e3a\u5e93\u51fd\u6570\u7684\u5b9e\u73b0(\u4e00\u822c\u4f4d\u4e8e\/usr\/share\/systemtap\/tapset\/)\uff1b<\/p>\n\n\n\n<p>2.\u5c06systemtap\u811a\u672c\u7ffb\u8bd1\u4e3aC\u4ee3\u7801\uff0c\u7136\u540e\u7f16\u8bd1\u4e3a\u5185\u6838\u6a21\u5757\uff1b<\/p>\n\n\n\n<p>3.\u52a0\u8f7d\u5185\u6838\u6a21\u5757\uff0c\u5e76\u4e14\u4f7f\u80fd\u811a\u672c\u4e2d\u7684\u6240\u6709probe(event+handler)\uff1b<\/p>\n\n\n\n<p>4.\u5f53\u811a\u672c\u4e2d\u6307\u5b9a\u7684event\u89e6\u53d1\u65f6\uff0c\u6267\u884chandler\uff1b<\/p>\n\n\n\n<p>5.systemtap\u811a\u672c\u7ed3\u675f\u65f6\uff0c\u5173\u95ed\u6240\u6709probe\uff0c\u5378\u8f7d\u5185\u6838\u6a21\u5757\uff1b<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"32_SystemTap%E8%84%9A%E6%9C%AC\"><\/span>3.2 SystemTap\u811a\u672c<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>SystemTap\u811a\u672c\u7531\u591a\u4e2aprobe\u7ec4\u6210\uff0c\u6bcf\u4e2aprobe\u5305\u542bevent\u548chandler(\u6216\u8005\u79f0\u4e4b\u4e3aprobe body)\uff0c\u5728SystemTap\u76d1\u6d4b\u5230\u7cfb\u7edf\u53d1\u751fevent\u65f6\uff0c\u6267\u884c\u76f8\u5e94\u7684handler\u3002<\/p>\n\n\n\n<p>probe\u683c\u5f0f\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">probe <em>event<\/em> {<em>statements<\/em>}<\/code><\/pre>\n\n\n\n<p>\u6bcf\u4e2aprobe\u53ef\u4ee5\u6709\u591a\u4e2aevent\uff0c\u7528\u9017\u53f7\u9694\u5f00\u5c31\u884c\u3002<\/p>\n\n\n\n<p>SystemTap\u811a\u672c\u652f\u6301\u5b9a\u4e49\u51fd\u6570\uff0c\u4ee5\u8fbe\u5230\u91cd\u590d\u5229\u7528\u4ee3\u7801\u7684\u76ee\u7684\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">function <em>function_name<\/em>(<em>arguments<\/em>) {<em>statements<\/em>}<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">probe <em>event<\/em> {<em>function_name<\/em>(<em>arguments<\/em>)}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"321_Event\"><\/span>3.2.1 Event<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Event\u53ef\u4ee5\u5206\u4e3a\u4e24\u7c7b\uff0c\u540c\u6b65\u548c\u5f02\u6b65\u3002<\/p>\n\n\n\n<p>Synchronous Events<\/p>\n\n\n\n<p>\u540c\u6b65\u4e8b\u4ef6\u5728\u5185\u6838\u4ee3\u7801\u6267\u884c\u5230\u6307\u5b9a\u4ee3\u7801(probe\u4e2d\u7684event\u4e8b\u4ef6)\u65f6\u89e6\u53d1\u3002<\/p>\n\n\n\n<p>\u4f8b\u5b50\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>syscall.<\/strong><strong><em>system_call\uff0c<\/em><\/strong>\u53ef\u4ee5\u52a0.return\u540e\u7f00\uff0c\u8868\u793a\u51fd\u6570\u8fd4\u56de\u8fd9\u4e2a\u4e8b\u4ef6<strong><em>\u3002<\/em><\/strong><em>\u5982<\/em><strong><em>syscall.system_call.return<\/em><\/strong><em>\u3002<\/em><\/li>\n\n\n\n<li><strong><em>vfs.file_operation\uff0c<\/em><\/strong>\u4e5f\u53ef\u4ee5\u52a0.return\u540e\u7f00\u3002<\/li>\n\n\n\n<li><strong><em>kernel.function(&#8220;function&#8221;)\uff0c<\/em><\/strong>\u76d1\u542c\u5185\u6838\u4e2d\u4efb\u610f\u4e00\u4e2a\u51fd\u6570\u7684\u8c03\u7528\u3002\u5185\u6838\u51fd\u6570\u540d\u5b57function\u8fd8\u53ef\u4ee5\u4f7f\u7528\u901a\u914d\u7b26\u548c\u6309\u7167\u51fd\u6570\u6240\u5728\u6e90\u6587\u4ef6\u6765\u6307\u5b9a\uff0c\u5982\u4e0b\u9762\u7684\u4ee3\u7801\u53ef\u4ee5\u76d1\u542cnet\/socket.c\u6587\u4ef6\u4e2d\u6240\u6709\u51fd\u6570\u7684\u8fdb\u5165\u548c\u9000\u51fa\uff1a<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">probe kernel.function(\"*@net\/socket.c\") { }\uff0c<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">probe kernel.function(\"*@net\/socket.c\").return { }<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>kernel.trace(&#8220;<\/strong><strong><em>tracepoint<\/em><\/strong><strong>&#8220;)\uff0c<\/strong>\u7528\u4e8e\u76d1\u542c\u5185\u6838\u4e2d\u7684tracepoint,tracepoint\u662f\u4e00\u4e9b\u5185\u6838\u5728\u7f16\u8bd1\u65f6\u5df2\u7ecf\u5b9a\u597d\u4e86\u7684\u53ef\u4ee5hook\u7684\u70b9\u3002<\/li>\n\n\n\n<li><strong>module(&#8220;<\/strong><strong><em>module<\/em><\/strong><strong>&#8220;).function(&#8220;<\/strong><strong><em>function<\/em><\/strong><strong>&#8220;)\uff0c<\/strong>\u6309\u7167module\u540d\u5b57\u6765\u6307\u5b9a\u8981\u76d1\u542c\u7684\u51fd\u6570\uff0c\u4e5f\u53ef\u4ee5\u4f7f\u7528\u901a\u914d\u7b26\u3002<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">probe module(\"ext3\").function(\"*\") { }<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">probe module(\"ext3\").function(\"*\").return { }<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>kernel.statement(&#8220;*@net\/ipv4\/tcp_cubic.c:443&#8221;)<\/strong>\uff0c\u8fd9\u4e2a\u6bd4\u8f83\u9ebb\u70e6\uff0c\u9700\u8981\u7f16\u8bd1\u65f6\u52a0-g(\u5e94\u7528\u7a0b\u5e8f)\u6216\u8005\u5185\u6838\u6709\u914d\u7f6e\u4fdd\u5b58linenumber\u4fe1\u606f\u3002\u53ef\u4ee5\u901a\u8fc7stap -vv -L\u547d\u4ee4\uff0c\u770b\u662f\u5426\u5b58\u5728\u6307\u5b9astatement\u7684debug\u4fe1\u606f\u3002<a href=\"https:\/\/unix.stackexchange.com\/questions\/539761\/systemtap-can-not-resolve-probe-point-although-it-is-shown-in-probe-list\">Systemtap can not resolve probe point although it is shown in probe list &#8211; Unix &amp; Linux Stack Exchange<\/a><\/li>\n<\/ul>\n\n\n\n<p>Asynchronous Events<\/p>\n\n\n\n<p>\u5f02\u6b65\u4e8b\u4ef6\u4e0d\u662f\u7528\u4e8e\u76d1\u542c\u7cfb\u7edf\u4e2d\u4e8b\u4ef6\u7684\u53d1\u751f\uff0c\u800c\u662f\u4e00\u4e9b\u7279\u6b8a\u7684\u65f6\u95f4\u70b9\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>begin\uff0cSystemTap\u811a\u672c\u6267\u884c\u7684\u5f00\u59cb\u65f6\u523b<\/li>\n\n\n\n<li>end\uff0cSystemTap\u811a\u672c\u6267\u884c\u7684\u7ed3\u675f\u65f6\u523b<\/li>\n\n\n\n<li>timer events\uff0cSystemTap\u811a\u672c\u53ef\u4ee5\u8bbe\u5b9atimer\uff0c\u4ee5\u652f\u6301\u4e00\u4e9b\u5b9a\u65f6\u4efb\u52a1\uff1a<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">probe timer.s(4)\n{\n&nbsp;&nbsp;printf(\"hello world\\n\")\n}<\/code><\/pre>\n\n\n\n<p>timer.s\u4e5f\u53ef\u4ee5\u66ff\u6362\u4e3atimer.ms,timer.us,timer.ns,timer.hz,timer.jiffies\u3002<\/p>\n\n\n\n<p>\u5173\u4e8esystemtap\u652f\u6301\u7684event\u7684\u66f4\u5168\u9762\u7684\u4ecb\u7ecd\uff0c\u53ef\u4ee5\u901a\u8fc7\u547d\u4ee4\u67e5\u770bman stapprobes\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"322_SystemTap_HandlerBody\"><\/span>3.2.2 SystemTap Handler\/Body<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>handler\u4e2d\u6bcf\u4e00\u884c\u4ee3\u7801\u672b\u5c3e\u7684\u5206\u53f7\u4e0d\u662f\u5fc5\u987b\u7684\uff1b<\/p>\n\n\n\n<p>SystemTap\u811a\u672c\u53ea\u6709\u5728\u6267\u884cexit()\u51fd\u6570\u540e\u624d\u4f1a\u9000\u51fa\uff0c\u6216\u8005\u7531\u7528\u6237\u901a\u8fc7Ctrl+C\u4e2d\u65ad\u6267\u884c\u3002<\/p>\n\n\n\n<p>printf\u8bed\u53e5\u7684\u683c\u5f0f\u5316\u8bed\u6cd5\u4e0eC\u8bed\u8a00\u5b8c\u5168\u4e00\u81f4\u3002<\/p>\n\n\n\n<p>\u652f\u6301\u4e09\u79cd\u6ce8\u91ca\u65b9\u6cd5\uff1a#,\/\/,\/*&#8230;*\/<\/p>\n\n\n\n<p>SystemTap\u4e2d\u7684\u4e00\u4e9b\u8f85\u52a9\u51fd\u6570\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>tid()\uff0c\u83b7\u53d6\u5f53\u524d\u7ebf\u7a0b\u7684ID<\/li>\n\n\n\n<li>uid()\uff0c\u83b7\u53d6\u5f53\u524d\u7528\u6237\u7684ID<\/li>\n\n\n\n<li>cpu()\uff0c\u83b7\u53d6\u5f53\u524dCPU\u7684\u7f16\u53f7<\/li>\n\n\n\n<li>gettimeofday_s()\uff0cepoch\uff0c\u79d2\u7ea7\u3002\u4e5f\u6709\u66f4\u9ad8\u7cbe\u5ea6\u7684gettimeofday_ms\/ns\/us\u3002<\/li>\n\n\n\n<li>ctime()\uff0c\u4e0ec\u8bed\u8a00\u4e2d\u7684ctime\u4e00\u81f4<\/li>\n\n\n\n<li>PP()\uff0c\u83b7\u53d6\u4e00\u4e2a\u63cf\u8ff0\u5f53\u524d\u6b63\u5728\u6267\u884c\u7684probe point\u7684\u5b57\u7b26\u4e32<\/li>\n\n\n\n<li>thread_indent()\uff0c\u7528\u4e8e\u83b7\u53d6\u4e00\u4e2a\u5305\u542b\u8c03\u7528\u8fdb\u7a0b\u540d\u5b57\u3001timestamp(\u4ece\u7b2c\u4e00\u6b21\u8c03\u7528thread_indent()\u5f00\u59cb)\uff0c\u548c\u7f29\u8fdb\u7684\u5b57\u7b26\u4e32\u3002\u7f29\u8fdb\u7684\u957f\u5ea6\u7531thread_indent()\u51fd\u6570\u5185\u90e8\u7684\u6280\u672f\u5668\u7ef4\u62a4\uff0c\u6bcf\u6b21\u8c03\u7528thread_indent()\u65f6\uff0c\u52a0\u51cf\u53c2\u6570\u503c\u6307\u5b9a\u7684\u957f\u5ea6\u3002\u5178\u578b\u4f7f\u7528\u793a\u4f8b\uff1a<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">probe kernel.function(\"*@net\/socket.c\").call\n{\n&nbsp;&nbsp;printf (\"%s -&gt; %s\\n\", thread_indent(1), probefunc())\n}\n\nprobe kernel.function(\"*@net\/socket.c\").return\n{\n&nbsp;&nbsp;printf (\"%s &lt;- %s\\n\", thread_indent(-1), probefunc())\n}<\/code><\/pre>\n\n\n\n<p>\u4e0a\u9762\u7684\u4ee3\u7801\u53ef\u4ee5\u7528\u6765\u89c2\u5bdf\u51fd\u6570\u7684\u8fdb\u5165\u9000\u51fa\u6267\u884c\u8fc7\u7a0b\uff0c\u5e76\u4e14\u53ef\u4ee5\u901a\u8fc7\u7f29\u8fdb\u65b9\u4fbf\u7684\u5339\u914d\u5230\u6bcf\u4e00\u6b21\u51fd\u6570\u8c03\u7528\u7684\u8fdb\u5165\u548c\u9000\u51fa\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>name\uff0c\u83b7\u53d6\u7cfb\u7edf\u8c03\u7528\u7684\u540d\u5b57\uff0c\u53ea\u6709\u5728syscall.system_call\u4e8b\u4ef6\u4e2d\u624d\u53ef\u4ee5\u4f7f\u7528\uff0c\u6ce8\u610f\u8fd9\u4e0d\u662f\u4e00\u4e2a\u51fd\u6570<\/li>\n\n\n\n<li>target()\uff0c\u4e0e<strong><em>stap script<\/em><\/strong><strong> -x <\/strong><strong><em>process ID <\/em><\/strong>\u548c <strong><em>stap script -c command<\/em><\/strong>\u914d\u5408\u4f7f\u7528\uff0c\u8868\u793a\u6307\u5b9a\u7684\u8fdb\u7a0bpid\u3002<\/li>\n<\/ul>\n\n\n\n<p>\u66f4\u5168\u9762\u7684SystemTap\u5185\u7f6e\u51fd\u6570\u9700\u8981\u53c2\u8003\u547d\u4ee4man stapfuncs\u3002<\/p>\n\n\n\n<p><strong>\u60f3\u63d0\u524d\u9000\u51faprobe handler\uff0c\u9700\u8981\u4f7f\u7528next\u8bed\u53e5<\/strong>(exit()\u662f\u76f4\u63a5\u9000\u51fa\u6574\u4e2asystemtap\u811a\u672c)\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"33_Basic_SystemTab_Handler_Constructs\"><\/span>3.3 Basic SystemTab Handler Constructs<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"331_variables\"><\/span>3.3.1 variables<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>\u53d8\u91cf\u7c7b\u578b\u4e0d\u9700\u8981\u663e\u793a\u6307\u5b9a\uff0c\u800c\u662f\u901a\u8fc7\u8d4b\u503cSystemTap\u81ea\u52a8\u8fdb\u884c\u63a8\u65ad\uff1b<\/p>\n\n\n\n<p>\u5168\u5c40\u53d8\u91cf\u5fc5\u987b\u5728probe\u4e4b\u5916\u901a\u8fc7global\u5173\u952e\u5b57\u663e\u793a\u58f0\u660e\uff1b<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">global count_jiffies, count_ms\nprobe timer.jiffies(100) { count_jiffies ++ }\nprobe timer.ms(100) { count_ms ++ }\nprobe timer.ms(12345)\n{\n  hz=(1000*count_jiffies) \/ count_ms\n  printf (\"jiffies:ms ratio %d:%d =&gt; CONFIG_HZ=%d\\n\",\n    count_jiffies, count_ms, hz)\n  exit ()\n}\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"332_Target_Variables\"><\/span>3.3.2 Target Variables<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>\u6240\u8c13Target Variables\uff0c\u5c31\u662fprobe\u5bf9\u5e94\u7684event\u89e6\u53d1\u65f6\uff0c\u60f3\u8981\u8bfb\u53d6\u7684\u5185\u6838\u6e90\u7801\u4e2d\u7684\u53d8\u91cf\u3002\u53ef\u4ee5\u901a\u8fc7stap -L &#8216;kernel.function(&#8220;vfs_read&#8221;)&#8217;\u8fd9\u79cd\u65b9\u5f0f\u6765\u786e\u5b9aprobe\u7684event\u53ef\u4ee5\u67e5\u770b\u54ea\u4e9b\u53d8\u91cf\u7684\u503c\u3002\u5f15\u7528target variables\u65f6\uff0c\u5fc5\u987b\u8981\u52a0$\u524d\u7f00\u3002<\/p>\n\n\n\n<p>\u8fd8\u53ef\u4ee5\u5f15\u7528probe point\u4e4b\u5916\u7684\u53d8\u91cf\uff0c\u4f46\u5f15\u7528\u65f6\u9700\u8981\u52a0\u4e0a\u8be5\u53d8\u91cf\u7684\u6587\u4ef6\u8def\u5f84\uff0c\u5982\uff1a<\/p>\n\n\n\n<p><strong>@var(&#8220;<\/strong><strong><em>varname<\/em><\/strong><strong>@<\/strong><strong><em>src\/file.c<\/em><\/strong><strong>&#8220;)<\/strong><\/p>\n\n\n\n<p><strong>@var(&#8220;<\/strong><strong><em>varname<\/em><\/strong><strong>&#8220;, &#8220;<\/strong><strong><em>\/path\/to\/exe\/or\/lib<\/em><\/strong><strong>&#8220;)<\/strong><\/p>\n\n\n\n<p>SystemTap\u8fd8\u652f\u6301\u7528-&gt;\u8fd0\u7b97\u7b26\u8bfb\u53d6\u53d8\u91cf\u7684\u5185\u90e8\u6210\u5458\uff0c\u65e0\u8bba\u53d8\u91cf\u662f\u6307\u9488\u8fd8\u662f\u7ed3\u6784\u4f53\uff0c-&gt;\u8fd0\u7b97\u7b26\u90fd\u9002\u7528\uff0cSystemTap\u4f1a\u81ea\u884c\u5224\u65ad\u53d8\u91cf\u7684\u7c7b\u578b\u3002<\/p>\n\n\n\n<p>\u5bf9\u4e8e\u57fa\u7840\u7c7b\u578b\u7684\u6307\u9488\uff0cSystemTap\u53ef\u4ee5\u901a\u8fc7\u4e0b\u5217\u51fd\u6570\u8bfb\u53d6\u6307\u9488\u6307\u5411\u5730\u5740\u7684\u503c\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>kernel_char(address)<\/li>\n\n\n\n<li>kernel_short(address)<\/li>\n\n\n\n<li>kernel_int(address)<\/li>\n\n\n\n<li>kernel_long(address)<\/li>\n\n\n\n<li>kernel_string(address)<\/li>\n\n\n\n<li>kernel_string_n(address)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"3321_Pretty_Printing_Target_Variables\"><\/span>3.3.2.1 Pretty Printing Target Variables<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>SystemTap\u63d0\u4f9b\u4e86\u4e00\u4e9b\u5e38\u7528\u7684\u6253\u5370\u51fd\u6570\u5185\u90e8\u53d8\u91cf\u7684operation\uff0c\u65b9\u4fbf\u7528\u6237\u4f7f\u7528\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>$$vars\uff0c\u4f1a\u81ea\u52a8\u6269\u5c55\u6210<strong>sprintf(&#8220;parm1=%x &#8230; parmN=%x var1=%x &#8230; varN=%x&#8221;, parm1, &#8230;, parmN, var1, &#8230;, varN),<\/strong>\u5982\u679c\u5b9a\u4f4d\u4e0d\u5230\u53d8\u91cf\uff0c\u4f1a\u6253\u5370\u4e3a=?<strong>\u3002<\/strong><\/li>\n\n\n\n<li>$$locals\uff0c\u548c\\$\\$vars\u7c7b\u4f3c\uff0c\u4f46\u662f\u53ea\u6253\u5370local\u53d8\u91cf<\/li>\n\n\n\n<li>$$parms\uff0c\u548c\\$\\$vars\u7c7b\u4f3c\uff0c\u4f46\u662f\u53ea\u6253\u5370\u51fd\u6570\u53c2\u6570<\/li>\n\n\n\n<li>$$return\uff0c\u548c\\$\\$vars\u7c7b\u4f3c\uff0c\u4f46\u662f\u53ea\u4f7f\u7528\u4e8e.return\u7c7b\u578b\u7684probe point\uff0c\u83b7\u53d6\u51fd\u6570\u7684\u8fd4\u56de\u503c(\u53ef\u4ee5\u76f4\u63a5\u7528$return\u8bbf\u95ee\u51fd\u6570\u7684\u8fd4\u56de\u503c)\u3002<\/li>\n<\/ul>\n\n\n\n<p>\u4f7f\u7528\u793a\u4f8b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">stap -e 'probe kernel.function(\"vfs_read\") {printf(\"%s\\n\", $$parms); exit(); }'<\/code><\/pre>\n\n\n\n<p>\u5bf9\u4e8e\u4e0a\u8ff0\u51e0\u4e2aoperation\uff0c\u8fd8\u53ef\u4ee5\u901a\u8fc7\u52a0$\u540e\u7f00\u5c06\u8981\u6253\u5370\u7684\u6307\u9488\u578b\u53d8\u91cf\u8f6c\u6362\u4e3a\u6307\u9488\u6307\u5411\u7684\u5bf9\u8c61\u6765\u6253\u5370\uff0c<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">stap -e 'probe kernel.function(\"vfs_read\") {printf(\"%s\\n\", $$parms$); exit(); }'<\/code><\/pre>\n\n\n\n<p>$\u540e\u7f00\u53ef\u4ee5\u52a0\u591a\u4e2a\uff0c\u52a0\u4e00\u5c42\uff0c\u8868\u793a\u8fdb\u884c\u51e0\u5c42\u7684\u6307\u9488\u5f15\u7528\u8f6c\u6362\u3002\u6bd4\u5982\u5982\u679c\u4e00\u4e2a\u6307\u9488\u6307\u5411\u4e00\u4e2a\u5305\u542b\u4e86\u6307\u9488\u7684\u7ed3\u6784\u4f53\uff0c\u90a3\u4e48$$vars$$\uff0c\u53ef\u4ee5\u628a\u8fd9\u4e2a\u7ed3\u6784\u4f53\u4e2d\u7684\u6307\u9488\u4e5f\u4f5c\u5bfb\u5740\u64cd\u4f5c\uff0c\u8f6c\u6362\u4e3a\u5177\u4f53\u7684\u53d8\u91cf\u6253\u5370\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"3322_Typecasting\"><\/span>3.3.2.2 Typecasting<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>\u6709\u65f6\u5019\u5185\u6838\u6e90\u7801\u91cc\u4f7f\u7528\u4e86void\u7c7b\u578b\u6307\u9488\uff0c\u4f46\u662f\u6211\u4eec\u4e5f\u5b9e\u9645\u77e5\u9053\u8fd9\u4e2a\u6307\u9488\u6307\u5411\u5185\u5b58\u7684\u5177\u4f53\u7c7b\u578b\uff0c\u8fd9\u65f6\u9700\u8981\u8fdb\u884c\u5f3a\u5236\u8f6c\u6362\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">function task_state:long (task:long)\n{\n    return @cast(task, \"task_struct\", \"kernel&lt;linux\/sched.h&gt;\")-&gt;state\n}\n<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"3323_Checking_Target_Variable_Availability\"><\/span>3.3.2.3 Checking Target Variable Availability<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<p>\u53ef\u4ee5\u901a\u8fc7@defined\u64cd\u4f5c\u7b26\u6d4b\u8bd5\u5728probe point\u5904\uff0c\u53d8\u91cf\u662f\u5426\u5b58\u5728\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">probe vm.pagefault = kernel.function(\"__handle_mm_fault@mm\/memory.c\") ?,\n                     kernel.function(\"handle_mm_fault@mm\/memory.c\") ?\n{\n        name = \"pagefault\"\n        write_access = (@defined($flags)\n\t\t\t? $flags &amp; FAULT_FLAG_WRITE : $write_access)\n\taddress =  $address\n}\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"333_Conditional_Statements\"><\/span>3.3.3 Conditional Statements<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Conditional Statements\u4e0eC\u8bed\u8a00\u4e00\u81f4\u3002<\/p>\n\n\n\n<p>Conditional operators\u652f\u6301\uff1a&gt;=,&lt;=,!=\u3002\u6ca1\u6709&gt;\u548c&lt;?<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"334_Command-Line_Arguments\"><\/span>3.3.4 Command-Line Arguments<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>\u5982\u679c\u811a\u672c\u60f3\u8981\u63a5\u6536\u547d\u4ee4\u884c\u7684\u53c2\u6570\uff0c\u4f7f\u7528$1\u6216@1\u3002$\u8868\u793a\u53c2\u6570\u662f\u6574\u6570\u7c7b\u578b\uff0c@\u8868\u793a\u53c2\u6570\u662f\u5b57\u7b26\u7c7b\u578b\uff0c\u6570\u5b57\u8868\u793a\u662f\u5f15\u7528\u7684\u547d\u4ee4\u884c\u7684\u7b2c\u51e0\u4e2a\u53c2\u6570\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">probe kernel.function(@1) { }<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">probe kernel.function(@1).return { }<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"34_Associative_Arrays\"><\/span>3.4 Associative Arrays<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Associative arrays\u5fc5\u987b\u7528global\u5173\u952e\u5b57\u58f0\u660e\uff0c\u5373\u65f6\u4ed6\u4eec\u53ea\u5728\u67d0\u4e9bprobe\u4e2d\u4f7f\u7528\u5230\u3002<\/p>\n\n\n\n<p>\u5173\u8054\u6570\u7ec4\u5141\u8bb8key\u7531\u6700\u591a9\u4e2a\u8868\u8fbe\u5f0f\u6784\u6210\uff0c\u8868\u8fbe\u5f0f\u95f4\u7528\u9017\u53f7\u5206\u9694\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">device[pid(),execname(),uid(),ppid(),\"W\"] = devname<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"35_Array_Operations_in_SystemTap\"><\/span>3.5 Array Operations in SystemTap<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>\u5982\u679c\u5173\u8054\u6570\u7ec4\u4e2d\u6ca1\u6709\u6307\u5b9a\u7684key\uff0c\u90a3\u4e48\u5728\u8bfb\u53d6\u5173\u8054\u6570\u7ec4\u4e2d\u8fd9\u4e2akey\u5bf9\u5e94\u7684value\u65f6\uff0c\u5173\u8054\u6570\u7ec4\u4f1a\u8fd4\u56de0\u6216\u7a7a\u5b57\u7b26\u4e32(\u5177\u4f53\u4e0e\u5173\u8054\u6570\u7ec4\u7684\u7c7b\u578b\u6709\u5173)\u3002<\/p>\n\n\n\n<p>\u5173\u8054\u6570\u7ec4\u652f\u6301++\u64cd\u4f5c\u7b26\uff1a<\/p>\n\n\n\n<p>array[key]++<\/p>\n\n\n\n<p>\u904d\u5386\u5173\u8054\u6570\u7ec4\u5143\u7d20\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">probe timer.s(3)\n{\n  foreach (count in reads)\n    printf(\"%s : %d \\n\", count, reads[count])\n}\n\nprobe timer.s(3)\n{\n  foreach (count in reads- limit 10)\n    printf(\"%s : %d \\n\", count, reads[count])\n}\n<\/code><\/pre>\n\n\n\n<p>\u51cf\u53f7\u8868\u793a\u4ee5\u964d\u5e8f\u65b9\u5f0f\u904d\u5386\uff0c\u52a0\u53f7\u8868\u793a\u5347\u5e8f\u904d\u5386\uff0climit\u8868\u793a\u9650\u5236\u904d\u5386\u7684\u5143\u7d20\u4e2a\u6570<\/p>\n\n\n\n<p>\u5220\u9664\u5173\u8054\u6570\u7ec4\u4e2d\u7684\u5143\u7d20<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">delete array[key];<\/code><\/pre>\n\n\n\n<p>\u6e05\u7a7a\u5173\u8054\u6570\u7ec4<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">delete array\uff1b<\/code><\/pre>\n\n\n\n<p>membership testing<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">if([<em>index_expression<\/em>] in <em>array_name<\/em>) <em>statement<\/em><\/code><\/pre>\n\n\n\n<p>SystemTap\u811a\u672c\u4e2d\u53d8\u91cf\u7684\u7edf\u8ba1\u529f\u80fd<\/p>\n\n\n\n<p>\u5bf9\u4e8e\u811a\u672c\u4e2d\u7684\u53d8\u91cf\u548cmap\u4e2d\u7684\u5143\u7d20\uff0c\u53ef\u4ee5\u4f7f\u7528&lt;&lt;&lt;\u64cd\u4f5c\u7b26\uff0c\u8868\u793a\u4e3a\u8fd9\u4e2a\u53d8\u91cf\u8f93\u5165\u4e00\u4e2a\u7edf\u8ba1\u7528\u7684sample\uff0c\u8f93\u5165\u7684\u7edf\u8ba1sample\u4e0d\u4f1a\u5f71\u54cd\u53d8\u91cf\u5b57\u9762\u4e0a\u7684\u503c\uff0c\u53d8\u91cf\u7684\u7edf\u8ba1\u6570\u636e\u9700\u8981\u901a\u8fc7\u4e0b\u9762\u7684\u51e0\u4e2aextractor\u83b7\u53d6\uff0c\u683c\u5f0f\u4e3a<strong>@<\/strong><strong><em>extractor<\/em><\/strong><strong>(<\/strong><strong><em>variable\/array index expression<\/em><\/strong><strong>):<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>count \u8fd4\u56de\u7edf\u8ba1\u5230\u7684sample\u5143\u7d20\u4e2a\u6570<\/strong><\/li>\n\n\n\n<li><strong>sum \u8fd4\u56de\u7edf\u8ba1\u5230\u7684sample\u4e4b\u548c<\/strong><\/li>\n\n\n\n<li><strong>min \u6700\u5c0f\u503c<\/strong><\/li>\n\n\n\n<li><strong>max \u6700\u5927\u503c<\/strong><\/li>\n\n\n\n<li><strong>avg \u5e73\u5747\u503c<\/strong><\/li>\n<\/ul>\n\n\n\n<p>\u4f7f\u7528\u7edf\u8ba1\u529f\u80fd\u65f6\uff0c\u5173\u8054\u6570\u7ec4\u7684key\u53ea\u80fd\u652f\u6301\u6700\u591a5\u4e2a\u8868\u8fbe\u5f0f\u4f5c\u7d22\u5f15\u800c\u4e0d\u662f\u5e73\u65f6\u76849\u4e2a\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"36_Tapsets\"><\/span>3.6 Tapsets<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>tapsets\u5c31\u662fSystemTap\u7684\u6807\u51c6\u5e93\uff0c\u4f4d\u4e8e<strong>\/usr\/share\/systemtap\/tapset\/\u3002<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u5b89\u88c5ubuntu debug symbols \u5185\u6838\uff1a Installing Ubuntu Kernel Debugging Symbols | Micromysteries \u5e94\u7528\u7a0b\u5e8f\uff1a Debug S&#46;&#46;&#46;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10],"tags":[37,81],"class_list":["post-1834","post","type-post","status-publish","format-standard","hentry","category-10","tag-kernel","tag-systemtap"],"_links":{"self":[{"href":"https:\/\/blog.cauchyschwarz.com\/index.php?rest_route=\/wp\/v2\/posts\/1834","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.cauchyschwarz.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.cauchyschwarz.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.cauchyschwarz.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.cauchyschwarz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1834"}],"version-history":[{"count":3,"href":"https:\/\/blog.cauchyschwarz.com\/index.php?rest_route=\/wp\/v2\/posts\/1834\/revisions"}],"predecessor-version":[{"id":1838,"href":"https:\/\/blog.cauchyschwarz.com\/index.php?rest_route=\/wp\/v2\/posts\/1834\/revisions\/1838"}],"wp:attachment":[{"href":"https:\/\/blog.cauchyschwarz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1834"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.cauchyschwarz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1834"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.cauchyschwarz.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1834"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}