{"id":1380,"date":"2023-10-19T09:11:03","date_gmt":"2023-10-19T01:11:03","guid":{"rendered":"https:\/\/airy.cn\/WordPress\/?p=1380"},"modified":"2023-10-19T09:11:03","modified_gmt":"2023-10-19T01:11:03","slug":"cpu-%e7%9f%a5%e8%af%86%ef%bc%9anuma","status":"publish","type":"post","link":"https:\/\/airy.cn\/WordPress\/?p=1380","title":{"rendered":"\u00a0CPU \u77e5\u8bc6\uff1aNUMA"},"content":{"rendered":"\n<p><a href=\"https:\/\/zhuanlan.zhihu.com\/p\/336365600\">\u6bcf\u4e2a\u7a0b\u5e8f\u5458\u90fd\u5e94\u8be5\u77e5\u9053\u7684 CPU \u77e5\u8bc6\uff1aNUMA &#8211; \u77e5\u4e4e (zhihu.com)<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\u4ec0\u4e48\u662f NUMA\uff1f<\/strong><\/h2>\n\n\n\n<p>\u65e9\u671f\u7684\u8ba1\u7b97\u673a\uff0c\u5185\u5b58\u63a7\u5236\u5668\u8fd8\u6ca1\u6709\u6574\u5408\u8fdb CPU\uff0c\u6240\u6709\u7684\u5185\u5b58\u8bbf\u95ee\u90fd\u9700\u8981\u7ecf\u8fc7\u5317\u6865\u82af\u7247\u6765\u5b8c\u6210\u3002\u5982\u4e0b\u56fe\u6240\u793a\uff0cCPU \u901a\u8fc7\u524d\u7aef\u603b\u7ebf\uff08FSB\uff0cFront Side Bus\uff09\u8fde\u63a5\u5230\u5317\u6865\u82af\u7247\uff0c\u7136\u540e\u5317\u6865\u82af\u7247\u8fde\u63a5\u5230\u5185\u5b58\u2014\u2014\u5185\u5b58\u63a7\u5236\u5668\u96c6\u6210\u5728\u5317\u6865\u82af\u7247\u91cc\u9762\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"668\" height=\"484\" src=\"https:\/\/airy.cn\/WordPress\/wp-content\/uploads\/2023\/10\/image.webp\" alt=\"\" class=\"wp-image-1381\" srcset=\"https:\/\/airy.cn\/WordPress\/wp-content\/uploads\/2023\/10\/image.webp 668w, https:\/\/airy.cn\/WordPress\/wp-content\/uploads\/2023\/10\/image-300x217.webp 300w\" sizes=\"auto, (max-width: 668px) 100vw, 668px\" \/><\/figure>\n\n\n\n<p>\u8fd9\u79cd\u67b6\u6784\u88ab\u79f0\u4e3a UMA<strong><a href=\"https:\/\/en.wikipedia.org\/wiki\/Uniform_memory_access\" target=\"_blank\" rel=\"noreferrer noopener\">1<\/a><\/strong>\uff08Uniform Memory Access, \u4e00\u81f4\u6027\u5185\u5b58\u8bbf\u95ee \uff09\uff1a\u603b\u7ebf\u6a21\u578b\u4fdd\u8bc1\u4e86 CPU \u7684\u6240\u6709\u5185\u5b58\u8bbf\u95ee\u90fd\u662f\u4e00\u81f4\u7684\uff0c\u4e0d\u5fc5\u8003\u8651\u4e0d\u540c\u5185\u5b58\u5730\u5740\u4e4b\u95f4\u7684\u5dee\u5f02\u3002<\/p>\n\n\n\n<p>\u5728 UMA \u67b6\u6784\u4e0b\uff0cCPU \u548c\u5185\u5b58\u4e4b\u95f4\u7684\u901a\u4fe1\u5168\u90e8\u90fd\u8981\u901a\u8fc7\u524d\u7aef\u603b\u7ebf\u3002\u800c\u63d0\u9ad8\u6027\u80fd\u7684\u65b9\u5f0f\uff0c\u5c31\u662f\u4e0d\u65ad\u5730\u63d0\u9ad8 CPU\u3001\u524d\u7aef\u603b\u7ebf\u548c\u5185\u5b58\u7684\u5de5\u4f5c\u9891\u7387\u3002<\/p>\n\n\n\n<p>\u540e\u9762\u7684\u6545\u4e8b\uff0c\u5927\u90e8\u5206\u4eba\u90fd\u5f88\u6e05\u695a\uff1a\u56e0\u4e3a\u7269\u7406\u6761\u4ef6\u7684\u9650\u5236\uff0c\u4e0d\u65ad\u63d0\u9ad8\u5de5\u4f5c\u9891\u7387\u7684\u8def\u5b50\u8d70\u4e0d\u4e0b\u53bb\u4e86\u3002CPU \u6027\u80fd\u7684\u63d0\u5347\u5f00\u59cb\u4ece\u63d0\u9ad8\u4e3b\u9891\u8f6c\u5411\u589e\u52a0 CPU \u6570\u91cf\uff08\u591a\u6838\u3001\u591a CPU\uff09\u3002\u8d8a\u6765\u8d8a\u591a\u7684 CPU \u5bf9\u524d\u7aef\u603b\u7ebf\u7684\u4e89\u7528\uff0c\u4f7f\u524d\u7aef\u603b\u7ebf\u6210\u4e3a\u4e86\u74f6\u9888\u3002\u4e3a\u4e86\u6d88\u9664 UMA \u67b6\u6784\u7684\u74f6\u9888\uff0cNUMA<strong><a href=\"https:\/\/en.wikipedia.org\/wiki\/Non-uniform_memory_access\" target=\"_blank\" rel=\"noreferrer noopener\">2<\/a><\/strong>\uff08Non-Uniform Memory Access, \u975e\u4e00\u81f4\u6027\u5185\u5b58\u8bbf\u95ee\uff09\u67b6\u6784\u8bde\u751f\u4e86\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"668\" height=\"484\" src=\"https:\/\/airy.cn\/WordPress\/wp-content\/uploads\/2023\/10\/image.webp\" alt=\"\" class=\"wp-image-1382\" srcset=\"https:\/\/airy.cn\/WordPress\/wp-content\/uploads\/2023\/10\/image.webp 668w, https:\/\/airy.cn\/WordPress\/wp-content\/uploads\/2023\/10\/image-300x217.webp 300w\" sizes=\"auto, (max-width: 668px) 100vw, 668px\" \/><\/figure>\n\n\n\n<ol class=\"wp-block-list\">\n<li>CPU \u5382\u5546\u628a\u5185\u5b58\u63a7\u5236\u5668\u96c6\u6210\u5230 CPU \u5185\u90e8\uff0c\u4e00\u822c\u4e00\u4e2a CPU socket \u4f1a\u6709\u4e00\u4e2a\u72ec\u7acb\u7684\u5185\u5b58\u63a7\u5236\u5668\u3002<\/li>\n\n\n\n<li>\u6bcf\u4e2a CPU scoket \u72ec\u7acb\u8fde\u63a5\u5230\u4e00\u90e8\u5206\u5185\u5b58\uff0c\u8fd9\u90e8\u5206 CPU \u76f4\u8fde\u7684\u5185\u5b58\u79f0\u4e3a\u201c\u672c\u5730\u5185\u5b58\u201d\u3002<\/li>\n\n\n\n<li>CPU \u4e4b\u95f4\u901a\u8fc7 QPI\uff08Quick Path Interconnect\uff09 \u603b\u7ebf\u8fdb\u884c\u8fde\u63a5\u3002CPU \u53ef\u4ee5\u901a\u8fc7 QPI \u603b\u7ebf\u8bbf\u95ee\u4e0d\u548c\u81ea\u5df1\u76f4\u8fde\u7684\u201c\u8fdc\u7a0b\u5185\u5b58\u201d\u3002<\/li>\n<\/ol>\n\n\n\n<p>\u548c UMA \u67b6\u6784\u4e0d\u540c\uff0c\u5728 NUMA \u67b6\u6784\u4e0b\uff0c\u5185\u5b58\u7684\u8bbf\u95ee\u51fa\u73b0\u4e86\u672c\u5730\u548c\u8fdc\u7a0b\u7684\u533a\u522b\uff1a\u8bbf\u95ee\u8fdc\u7a0b\u5185\u5b58\u7684\u5ef6\u65f6\u4f1a\u660e\u663e\u9ad8\u4e8e\u8bbf\u95ee\u672c\u5730\u5185\u5b58\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>NUMA \u7684\u8bbe\u7f6e<\/strong><\/h2>\n\n\n\n<p>Linux \u6709\u4e00\u4e2a\u547d\u4ee4 numactl<strong><a href=\"https:\/\/linux.die.net\/man\/8\/numactl\" target=\"_blank\" rel=\"noreferrer noopener\">3<\/a><\/strong>&nbsp;\u53ef\u4ee5\u67e5\u770b\u6216\u8bbe\u7f6e NUMA \u4fe1\u606f\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6267\u884c&nbsp;<code>numactl --hardware<\/code>&nbsp;\u53ef\u4ee5\u67e5\u770b\u786c\u4ef6\u5bf9 NUMA \u7684\u652f\u6301\u4fe1\u606f\uff1a<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code># numactl --hardware\navailable: 2 nodes (0-1)\nnode 0 cpus: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71\nnode 0 size: 96920 MB\nnode 0 free: 2951 MB\nnode 1 cpus: 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95\nnode 1 size: 98304 MB\nnode 1 free: 33 MB\nnode distances:\nnode   0   1 \n  0:  10  21 \n  1:  21  10\n<\/code><\/pre>\n\n\n\n<ol class=\"wp-block-list\">\n<li>CPU \u88ab\u5206\u6210 node 0 \u548c node 1 \u4e24\u7ec4\uff08\u8fd9\u53f0\u673a\u5668\u6709\u4e24\u4e2a CPU Socket\uff09\u3002<\/li>\n\n\n\n<li>\u4e00\u7ec4 CPU \u5206\u914d\u5230 96 GB \u7684\u5185\u5b58\uff08\u8fd9\u53f0\u673a\u5668\u603b\u5171\u6709 192GB \u5185\u5b58\uff09\u3002<\/li>\n\n\n\n<li>node distances \u662f\u4e00\u4e2a\u4e8c\u7ef4\u77e9\u9635\uff0cnode[i][j] \u8868\u793a node i \u8bbf\u95ee node j \u7684\u5185\u5b58\u7684\u76f8\u5bf9\u8ddd\u79bb\u3002\u6bd4\u5982 node 0 \u8bbf\u95ee node 0 \u7684\u5185\u5b58\u7684\u8ddd\u79bb\u662f 10\uff0c\u800c node 0 \u8bbf\u95ee node 1 \u7684\u5185\u5b58\u7684\u8ddd\u79bb\u662f 21\u3002<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6267\u884c&nbsp;<code>numactl --show<\/code>&nbsp;\u663e\u793a\u5f53\u524d\u7684 NUMA \u8bbe\u7f6e\uff1a<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code># numactl --show\npolicy: default\npreferred node: current\nphyscpubind: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 \ncpubind: 0 1 \nnodebind: 0 1 \nmembind: 0 1 \n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>numactl \u547d\u4ee4\u8fd8\u6709\u51e0\u4e2a\u91cd\u8981\u9009\u9879\uff1a<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><code>--cpubind=0<\/code>\uff1a \u7ed1\u5b9a\u5230 node 0 \u7684 CPU \u4e0a\u6267\u884c\u3002<\/li>\n\n\n\n<li><code>--membind=1<\/code>\uff1a \u53ea\u5728 node 1 \u4e0a\u5206\u914d\u5185\u5b58\u3002<\/li>\n\n\n\n<li><code>--interleave=nodes<\/code>\uff1anodes \u53ef\u4ee5\u662f all\u3001N,N,N \u6216 N-N\uff0c\u8868\u793a\u5728 nodes \u4e0a\u8f6e\u5faa\uff08round robin\uff09\u5206\u914d\u5185\u5b58\u3002<\/li>\n\n\n\n<li><code>--physcpubind=cpus<\/code>\uff1acpus \u662f \/proc\/cpuinfo \u4e2d\u7684 processor\uff08\u8d85\u7ebf\u7a0b\uff09 \u5b57\u6bb5\uff0ccpus \u7684\u683c\u5f0f\u4e0e &#8211;interleave=nodes \u4e00\u6837\uff0c\u8868\u793a\u7ed1\u5b9a\u5230 cpus \u4e0a\u8fd0\u884c\u3002<\/li>\n\n\n\n<li><code>--preferred=1<\/code>\uff1a \u4f18\u5148\u8003\u8651\u4ece node 1 \u4e0a\u5206\u914d\u5185\u5b58\u3002<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>numactl \u547d\u4ee4\u7684\u51e0\u4e2a\u4f8b\u5b50\uff1a<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code># \u8fd0\u884c test_program \u7a0b\u5e8f\uff0c\u53c2\u6570\u662f argument\uff0c\u7ed1\u5b9a\u5230 node 0 \u7684 CPU \u548c node 1 \u7684\u5185\u5b58\nnumactl --cpubind=0 --membind=1 test_program arguments\n\n# \u5728 processor 0-4\uff0c8-12 \u4e0a\u8fd0\u884c test_program\nnumactl --physcpubind=0-4,8-12 test_program arguments\n\n# \u8f6e\u8be2\u5206\u914d\u5185\u5b58\nnumactl --interleave=all test_program arguments\n\n# \u4f18\u5148\u8003\u8651\u4ece node 1 \u4e0a\u5206\u914d\u5185\u5b58\nnumactl --preferred=1\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\u6d4b\u8bd5 NUMA<\/strong><\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;sys\/time.h&gt;\n\n#include &lt;iostream&gt;\n#include &lt;string&gt;\n#include &lt;vector&gt;\n\nint main(int argc, char** argv) {\n  int size = std::stoi(argv&#91;1]);\n  std::vector&lt;std::vector&lt;uint64_t&gt;&gt; data(size, std::vector&lt;uint64_t&gt;(size));\n\n  struct timeval b;\n  gettimeofday(&amp;b, nullptr);\n  # \u6309\u5217\u904d\u5386\uff0c\u907f\u514d CPU cache \u7684\u5f71\u54cd\n  for (int col = 0; col &lt; size; ++col) {\n    for (int row = 0; row &lt; size; ++row) {\n      data&#91;row]&#91;col] = rand();\n    }\n  }\n\n  struct timeval e;\n  gettimeofday(&amp;e, nullptr);\n\n  std::cout &lt;&lt; \"Use time \"\n            &lt;&lt; e.tv_sec * 1000000 + e.tv_usec - b.tv_sec * 1000000 - b.tv_usec\n            &lt;&lt; \"us\" &lt;&lt; std::endl;\n}\n\n# numactl --cpubind=0 --membind=0 .\/numa_test 20000\nUse time 16465637us\n# numactl --cpubind=0 --membind=1 .\/numa_test 20000 \nUse time 21402436us\n<\/code><\/pre>\n\n\n\n<p>\u53ef\u4ee5\u770b\u51fa\uff0c\u6d4b\u8bd5\u7a0b\u5e8f\u4f7f\u7528\u8fdc\u7a0b\u5185\u5b58\u6bd4\u4f7f\u7528\u672c\u5730\u5185\u5b58\u6162\u4e86\u63a5\u8fd1 30%<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Linux \u7684 NUMA \u7b56\u7565<\/strong><\/h2>\n\n\n\n<p>Linux \u8bc6\u522b\u5230 NUMA \u67b6\u6784\u540e\uff0c\u9ed8\u8ba4\u7684\u5185\u5b58\u5206\u914d\u65b9\u6848\u662f\uff1a\u4f18\u5148\u4ece\u672c\u5730\u5206\u914d\u5185\u5b58\u3002\u5982\u679c\u672c\u5730\u5185\u5b58\u4e0d\u8db3\uff0c\u4f18\u5148\u6dd8\u6c70\u672c\u5730\u5185\u5b58\u4e2d\u65e0\u7528\u7684\u5185\u5b58\u3002\u4f7f\u5185\u5b58\u9875\u5c3d\u53ef\u80fd\u5730\u548c\u8c03\u7528\u7ebf\u7a0b\u5904\u5728\u540c\u4e00\u4e2a node\u3002<\/p>\n\n\n\n<p>\u8fd9\u79cd\u9ed8\u8ba4\u7b56\u7565\u5728\u4e0d\u9700\u8981\u5206\u914d\u5927\u91cf\u5185\u5b58\u7684\u5e94\u7528\u4e0a\u4e00\u822c\u6ca1\u4ec0\u4e48\u95ee\u9898\u3002\u4f46\u662f\u5bf9\u4e8e\u6570\u636e\u5e93\u8fd9\u79cd\u53ef\u80fd\u5206\u914d\u8d85\u8fc7\u4e00\u4e2a NUMA node \u7684\u5185\u5b58\u91cf\u7684\u5e94\u7528\u6765\u8bf4\uff0c\u53ef\u80fd\u4f1a\u5f15\u8d77\u4e00\u4e9b\u5947\u602a\u7684\u6027\u80fd\u95ee\u9898\u3002<\/p>\n\n\n\n<p>\u4e0b\u9762\u662f\u5728\u7f51\u4e0a\u770b\u5230\u7684\u7684\u4f8b\u5b50\uff1a\u7531\u4e8e Linux \u9ed8\u8ba4\u7684 NUMA \u5185\u5b58\u5206\u914d\u7b56\u7565\uff0c\u5bfc\u81f4 MySQL \u5728\u5185\u5b58\u6bd4\u8f83\u5145\u8db3\u7684\u60c5\u51b5\u4e0b\uff0c\u51fa\u73b0\u5927\u91cf\u5185\u5b58\u9875\u88ab\u6362\u51fa\uff0c\u9020\u6210\u6027\u80fd\u6296\u52a8\u7684\u95ee\u9898\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The MySQL \u201cswap insanity\u201d problem and the effects of the NUMA architecture<strong><a href=\"http:\/\/blog.jcole.us\/2010\/09\/28\/mysql-swap-insanity-and-the-numa-architecture\/\" target=\"_blank\" rel=\"noreferrer noopener\">4<\/a><\/strong><\/li>\n\n\n\n<li>A brief update on NUMA and MySQL<strong><a href=\"http:\/\/blog.jcole.us\/2012\/04\/16\/a-brief-update-on-numa-and-mysql\/\" target=\"_blank\" rel=\"noreferrer noopener\">5<\/a><\/strong><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\u53c2\u8003\u8d44\u6599<\/strong><\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>UMA\uff08Uniform Memory Access, \u4e00\u81f4\u6027\u5185\u5b58\u8bbf\u95ee\uff09\uff1a<a href=\"https:\/\/en.wikipedia.org\/wiki\/Uniform_memory_access\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/en.wikipedia.org\/wiki\/Uniform_memory_access<\/a><\/li>\n\n\n\n<li>NUMA\uff08Non-Uniform Memory Access, \u975e\u4e00\u81f4\u6027\u5185\u5b58\u8bbf\u95ee\uff09\uff1a<a href=\"https:\/\/en.wikipedia.org\/wiki\/Non-uniform_memory_access\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/en.wikipedia.org\/wiki\/Non-uniform_memory_access<\/a><\/li>\n\n\n\n<li>numactl\uff1a<a href=\"https:\/\/linux.die.net\/man\/8\/numactl\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/linux.die.net\/man\/8\/numactl<\/a><\/li>\n\n\n\n<li>The MySQL \u201cswap insanity\u201d problem and the effects of the NUMA architecture\uff1a<a href=\"http:\/\/blog.jcole.us\/2010\/09\/28\/mysql-swap-insanity-and-the-numa-architecture\/\" target=\"_blank\" rel=\"noreferrer noopener\">http:\/\/blog.jcole.us\/2010\/09\/28\/mysql-swap-insanity-and-the-numa-architecture\/<\/a><\/li>\n\n\n\n<li>A brief update on NUMA and MySQL\uff1a<a href=\"http:\/\/blog.jcole.us\/2012\/04\/16\/a-brief-update-on-numa-and-mysql\/\" target=\"_blank\" rel=\"noreferrer noopener\">http:\/\/blog.jcole.us\/2012\/04\/16\/a-brief-update-on-numa-and-mysql\/<\/a><\/li>\n\n\n\n<li>NUMA\u67b6\u6784\u7684CPU &#8212; \u4f60\u771f\u7684\u7528\u597d\u4e86\u4e48\uff1f\uff1a<a href=\"http:\/\/cenalulu.github.io\/linux\/numa\/\" target=\"_blank\" rel=\"noreferrer noopener\">http:\/\/cenalulu.github.io\/linux\/numa\/<\/a><\/li>\n\n\n\n<li>Thread and Memory Placement on NUMA Systems: Asymmetry Matters\uff1a<a href=\"https:\/\/www.usenix.org\/conference\/atc15\/technical-session\/presentation\/lepers\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/www.usenix.org\/conference\/atc15\/technical-session\/presentation\/lepers<\/a><\/li>\n\n\n\n<li>NUMA (Non-Uniform Memory Access): An Overview\uff1a<a href=\"https:\/\/queue.acm.org\/detail.cfm?id=2513149\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/queue.acm.org\/detail.cfm?id=2513149<\/a><\/li>\n\n\n\n<li>NUMA Memory Policy\uff1a<a href=\"https:\/\/www.kernel.org\/doc\/html\/latest\/admin-guide\/mm\/numa_memory_policy.html\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/www.kernel.org\/doc\/html\/latest\/admin-guide\/mm\/numa_memory_policy.html<\/a><\/li>\n\n\n\n<li>What is NUMA?\uff1a<a rel=\"noreferrer noopener\" href=\"https:\/\/www.kernel.org\/doc\/html\/latest\/vm\/numa.html\" target=\"_blank\">https:\/\/www.kernel.org\/doc\/html\/latest\/vm\/numa.ht<\/a><\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>\u6bcf\u4e2a\u7a0b\u5e8f\u5458\u90fd\u5e94\u8be5\u77e5\u9053\u7684 CPU \u77e5\u8bc6\uff1aNUMA &#8211; \u77e5\u4e4e (zhihu.com) \u4ec0\u4e48\u662f NUMA &#8230; <a title=\"\u00a0CPU \u77e5\u8bc6\uff1aNUMA\" class=\"read-more\" href=\"https:\/\/airy.cn\/WordPress\/?p=1380\" aria-label=\"\u9605\u8bfb \u00a0CPU \u77e5\u8bc6\uff1aNUMA\">\u9605\u8bfb\u66f4\u591a<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_kadence_starter_templates_imported_post":false,"footnotes":""},"categories":[2],"tags":[],"class_list":["post-1380","post","type-post","status-publish","format-standard","hentry","category-airy-tech"],"_links":{"self":[{"href":"https:\/\/airy.cn\/WordPress\/index.php?rest_route=\/wp\/v2\/posts\/1380","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/airy.cn\/WordPress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/airy.cn\/WordPress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/airy.cn\/WordPress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/airy.cn\/WordPress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1380"}],"version-history":[{"count":1,"href":"https:\/\/airy.cn\/WordPress\/index.php?rest_route=\/wp\/v2\/posts\/1380\/revisions"}],"predecessor-version":[{"id":1383,"href":"https:\/\/airy.cn\/WordPress\/index.php?rest_route=\/wp\/v2\/posts\/1380\/revisions\/1383"}],"wp:attachment":[{"href":"https:\/\/airy.cn\/WordPress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1380"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/airy.cn\/WordPress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1380"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/airy.cn\/WordPress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1380"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}