{"id":1415,"date":"2024-02-03T21:47:29","date_gmt":"2024-02-03T21:47:29","guid":{"rendered":"https:\/\/mvermeulen.org\/perf\/?page_id=1415"},"modified":"2024-02-04T00:21:25","modified_gmt":"2024-02-04T00:21:25","slug":"faiss","status":"publish","type":"page","link":"https:\/\/mvermeulen.org\/perf\/workloads\/phoronix\/faiss\/","title":{"rendered":"faiss"},"content":{"rendered":"\n<p>Faiss has difficulty installing on my AMD and Intel systems with the following error.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>-- Found SWIG: \/usr\/bin\/swig4.0 (found version \"4.0.2\") found components: python\nCMake Error at \/usr\/local\/cmake-3.24.2-linux-x86_64\/share\/cmake-3.24\/Modules\/FindPackageHandleStandardArgs.cmake:230 (message):\n  Could NOT find Python (missing: Python_INCLUDE_DIRS Python_LIBRARIES\n  Python_NumPy_INCLUDE_DIRS Development NumPy Development.Module\n  Development.Embed)\nCall Stack (most recent call first):\n  \/usr\/local\/cmake-3.24.2-linux-x86_64\/share\/cmake-3.24\/Modules\/FindPackageHandleStandardArgs.cmake:594 (_FPHSA_FAILURE_MESSAGE)\n  \/usr\/local\/cmake-3.24.2-linux-x86_64\/share\/cmake-3.24\/Modules\/FindPython.cmake:561 (find_package_handle_standard_args)\n  faiss\/python\/CMakeLists.txt:122 (find_package)\n\n\n-- Configuring incomplete, errors occurred!\nSee also \"\/home\/mev\/.phoronix-test-suite\/installed-tests\/pts\/faiss-1.0.1\/faiss-1.7.4\/build\/CMakeFiles\/CMakeOutput.log\".\nmake: Nothing to be done for 'faiss'.\nmake: *** No rule to make target 'demo_sift1M'.  Stop.<\/code><\/pre>\n\n\n\n<p>It does run on my 7950x and so numbers below are running on 7950x. There are two separate test cases, the sift1M appears to run in parallel and the polysemous_sift1m appears to run mostly sequentially.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1280\" height=\"960\" src=\"https:\/\/mvermeulen.org\/perf\/wp-content\/uploads\/sites\/7\/2024\/02\/systemtime-25.png\" alt=\"\" class=\"wp-image-1470\" srcset=\"https:\/\/mvermeulen.org\/perf\/wp-content\/uploads\/sites\/7\/2024\/02\/systemtime-25.png 1280w, https:\/\/mvermeulen.org\/perf\/wp-content\/uploads\/sites\/7\/2024\/02\/systemtime-25-1024x768.png 1024w, https:\/\/mvermeulen.org\/perf\/wp-content\/uploads\/sites\/7\/2024\/02\/systemtime-25-768x576.png 768w\" sizes=\"auto, (max-width: 1280px) 100vw, 1280px\" \/><\/figure>\n\n\n\n<p>Topdown profile suggests the first workload is mostly backend bound and the second workload has high amounts of branch mis-prediction. There is also a increasing retirement rate at end of the second runs.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1280\" height=\"960\" src=\"https:\/\/mvermeulen.org\/perf\/wp-content\/uploads\/sites\/7\/2024\/02\/amdtopdown-25.png\" alt=\"\" class=\"wp-image-1472\" srcset=\"https:\/\/mvermeulen.org\/perf\/wp-content\/uploads\/sites\/7\/2024\/02\/amdtopdown-25.png 1280w, https:\/\/mvermeulen.org\/perf\/wp-content\/uploads\/sites\/7\/2024\/02\/amdtopdown-25-1024x768.png 1024w, https:\/\/mvermeulen.org\/perf\/wp-content\/uploads\/sites\/7\/2024\/02\/amdtopdown-25-768x576.png 768w\" sizes=\"auto, (max-width: 1280px) 100vw, 1280px\" \/><\/figure>\n\n\n\n<p>AMD metrics are a composite of the two workloads (and probably useful separating these out). This has a fair amount of both floating point and branch instructions. The L2 access is moderate with a reasonable amount of misses. The backend stalls are more from memory than cpu. Speculation summary is only 1% which seems low compared to the chart above. Perhaps some of the on-cpu also plays a factor here?  In any case useful to separate out since the workloads are different.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>elapsed              869.631\non_cpu               0.363          # 11.63 \/ 32 cores\nutime                7824.815\nstime                2286.367\nnvcsw                345115         # 0.36%\nnivcsw               95899855       # 99.64%\ninblock              32             # 0.04\/sec\nonblock              45312          # 52.10\/sec\ncpu-clock            10112254056407 # 10112.254 seconds\ntask-clock           10112344576263 # 10112.345 seconds\npage faults          5412507        # 535.238\/sec\ncontext switches     96249164       # 9517.987\/sec\ncpu migrations       18452          # 1.825\/sec\nmajor page faults    91             # 0.009\/sec\nminor page faults    5412416        # 535.229\/sec\nalignment faults     0              # 0.000\/sec\nemulation faults     0              # 0.000\/sec\nbranches             4484265783595  # 148.633 branches per 1000 inst\nbranch misses        376658179764   # 8.40% branch miss\nconditional          3031234199466  # 100.471 conditional branches per 1000 inst\nindirect             24800777321    # 0.822 indirect branches per 1000 inst\ncpu-cycles           55108837758302 # 1.94 GHz\ninstructions         31810485809678 # 0.58 IPC low\nslots                109890768993654 #\nretiring             11452160474280 # 10.4% (11.8%) low\n-- ucode             87545229664    #     0.1%\n-- fastpath          11364615244616 #    10.3%\nfrontend             23175513915315 # 21.1% (23.9%)\n-- latency           19277081880546 #    17.5%\n-- bandwidth         3898432034769  #     3.5%\nbackend              61367037088759 # 55.8% (63.2%)\n-- cpu               11100116100320 #    10.1%\n-- memory            50266920988439 #    45.7%\nspeculation          1062297792803  #  1.0% ( 1.1%)\n-- branch mispredict 1061377780753  #     1.0%\n-- pipeline restart  920012050      #     0.0%\nsmt-contention       12833670979854 # 11.7% ( 0.0%)\ncpu-cycles           55493401749010 # 1.95 GHz\ninstructions         31934426546886 # 0.58 IPC low\ninstructions         10611812357394 # 24.240 l2 access per 1000 inst\nl2 hit from l1       140728666702   # 37.90% l2 miss\nl2 miss from l1      7684990404     #\nl2 hit from l2 pf    26683890472    #\nl3 hit from l2 pf    36223074555    #\nl3 miss from l2 pf   53590562992    #\ninstructions         10607128804634 # 148.187 float per 1000 inst\nfloat 512            62             # 0.000 AVX-512 per 1000 inst\nfloat 256            988            # 0.000 AVX-256 per 1000 inst\nfloat 128            1571838885481  # 148.187 AVX-128 per 1000 inst\nfloat MMX            0              # 0.000 MMX per 1000 inst\nfloat scalar         4              # 0.000 scalar per 1000 inst\ninstructions         2600738        #\nopcache              995459         # 382.760 opcache per 1000 inst\nopcache miss         531806         # 53.4% opcache miss rate\nl1 dTLB miss         5466           # 2.102 L1 dTLB per 1000 inst\nl2 dTLB miss         1442           # 0.554 L2 dTLB per 1000 inst\ninstructions         2673428        #\nicache               1336023        # 499.742 icache per 1000 inst\nicache miss          112389         #  8.4% icache miss rate\nl1 iTLB miss         10             # 0.004 L1 iTLB per 1000 inst\nl2 iTLB miss         0              # 0.000 L2 iTLB per 1000 inst\ntlb flush            19             # 0.007 TLB flush per 1000 inst\n<\/code><\/pre>\n\n\n\n<p>Process tree overview has demo_sift1M and python processes about equal amounts of user time, though demo_sift1M has a lot more system time.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>760 processes\n\t189 demo_sift1M          451914.12 154385.23\n\t238 python3              41545.00   489.77\n\t 70 vulkaninfo               4.13     2.79\n\t  6 vulkani:disk$0           0.36     0.24\n\t  6 clinfo                   0.20     0.14\n\t  2 llvmpipe-0               0.12     0.08\n\t  2 llvmpipe-1               0.12     0.08\n\t  2 llvmpipe-10              0.12     0.08\n\t  2 llvmpipe-11              0.12     0.08\n\t  2 llvmpipe-12              0.12     0.08\n\t  2 llvmpipe-13              0.12     0.08\n\t  2 llvmpipe-14              0.12     0.08\n\t  2 llvmpipe-15              0.12     0.08\n\t  2 llvmpipe-16              0.12     0.08\n\t  2 llvmpipe-17              0.12     0.08\n\t  2 llvmpipe-18              0.12     0.08\n\t  2 llvmpipe-19              0.12     0.08\n\t  2 llvmpipe-2               0.12     0.08\n\t  2 llvmpipe-20              0.12     0.08\n\t  2 llvmpipe-21              0.12     0.08\n\t  2 llvmpipe-22              0.12     0.08\n\t  2 llvmpipe-23              0.12     0.08\n\t  2 llvmpipe-24              0.12     0.08\n\t  2 llvmpipe-25              0.12     0.08\n\t  2 llvmpipe-26              0.12     0.08\n\t  2 llvmpipe-27              0.12     0.08\n\t  2 llvmpipe-28              0.12     0.08\n\t  2 llvmpipe-29              0.12     0.08\n\t  2 llvmpipe-3               0.12     0.08\n\t  2 llvmpipe-30              0.12     0.08\n\t  2 llvmpipe-31              0.12     0.08\n\t  2 llvmpipe-4               0.12     0.08\n\t  2 llvmpipe-5               0.12     0.08\n\t  2 llvmpipe-6               0.12     0.08\n\t  2 llvmpipe-7               0.12     0.08\n\t  2 llvmpipe-8               0.12     0.08\n\t  2 llvmpipe-9               0.12     0.08\n\t  6 php                      0.05     0.25\n\t  6 glxinfo:gdrv0            0.05     0.06\n\t  6 glxinfo:gl0              0.05     0.06\n\t  2 glxinfo                  0.03     0.02\n\t  2 glxinfo:cs0              0.03     0.02\n\t  2 glxinfo:disk$0           0.03     0.02\n\t  2 glxinfo:sh0              0.03     0.02\n\t  2 glxinfo:shlo0            0.03     0.02\n\t 72 sh                       0.00     0.00\n\t 13 gcc                      0.00     0.00\n\t  8 stat                     0.00     0.00\n\t  8 systemd-detect-          0.00     0.00\n\t  6 faiss                    0.00     0.00\n\t  6 gsettings                0.00     0.00\n\t  5 dconf worker             0.00     0.00\n\t  5 gmain                    0.00     0.00\n\t  5 phoronix-test-s          0.00     0.00\n\t  2 cc                       0.00     0.00\n\t  2 lscpu                    0.00     0.00\n\t  2 uname                    0.00     0.00\n\t  2 which                    0.00     0.00\n\t  2 xset                     0.00     0.00\n\t  1 date                     0.00     0.00\n\t  1 dirname                  0.00     0.00\n\t  1 dmesg                    0.00     0.00\n\t  1 dmidecode                0.00     0.00\n\t  1 grep                     0.00     0.00\n\t  1 ifconfig                 0.00     0.00\n\t  1 ip                       0.00     0.00\n\t  1 lsmod                    0.00     0.00\n\t  1 lspci                    0.00     0.00\n\t  1 mktemp                   0.00     0.00\n\t  1 ps                       0.00     0.00\n\t  1 python                   0.00     0.00\n\t  1 readlink                 0.00     0.00\n\t  1 realpath                 0.00     0.00\n\t  1 sed                      0.00     0.00\n\t  1 sort                     0.00     0.00\n\t  1 stty                     0.00     0.00\n\t  1 systemctl                0.00     0.00\n\t  1 template.sh              0.00     0.00\n\t  1 wc                       0.00     0.00\n\t  1 xrandr                   0.00     0.00\n0 processes running\n80 maximum processes\n<\/code><\/pre>\n\n\n\n<p>Computation block for the initial workload<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>      312167) faiss            cpu=31 start=4.86  finish=107.25\n        312168) demo_sift1M      cpu=7 start=4.87  finish=107.23\n          312169) demo_sift1M      cpu=25 start=4.87  finish=107.22\n          312170) demo_sift1M      cpu=10 start=4.87  finish=107.23\n          312171) demo_sift1M      cpu=29 start=4.87  finish=107.23\n          312172) demo_sift1M      cpu=30 start=4.87  finish=107.23\n          312173) demo_sift1M      cpu=15 start=4.87  finish=107.23\n          312174) demo_sift1M      cpu=4 start=4.87  finish=107.23\n          312175) demo_sift1M      cpu=9 start=4.87  finish=107.23\n          312176) demo_sift1M      cpu=20 start=4.87  finish=107.23\n          312177) demo_sift1M      cpu=5 start=4.87  finish=107.23\n          312178) demo_sift1M      cpu=10 start=4.87  finish=107.23\n          312179) demo_sift1M      cpu=16 start=4.87  finish=107.23\n          312180) demo_sift1M      cpu=28 start=4.87  finish=107.22\n          312181) demo_sift1M      cpu=2 start=4.87  finish=107.22\n          312182) demo_sift1M      cpu=18 start=4.87  finish=107.22\n          312183) demo_sift1M      cpu=27 start=4.87  finish=107.22\n          312184) demo_sift1M      cpu=23 start=4.87  finish=107.22\n          312185) demo_sift1M      cpu=12 start=4.87  finish=107.22\n          312186) demo_sift1M      cpu=26 start=4.87  finish=107.22\n          312187) demo_sift1M      cpu=31 start=4.87  finish=107.22\n          312188) demo_sift1M      cpu=1 start=4.87  finish=107.22\n          312189) demo_sift1M      cpu=31 start=4.87  finish=107.22\n          312190) demo_sift1M      cpu=0 start=4.87  finish=107.22\n          312191) demo_sift1M      cpu=14 start=4.87  finish=107.22\n          312192) demo_sift1M      cpu=24 start=4.87  finish=107.22\n          312193) demo_sift1M      cpu=13 start=4.87  finish=107.22\n          312194) demo_sift1M      cpu=15 start=4.87  finish=107.22\n          312195) demo_sift1M      cpu=29 start=4.87  finish=107.22\n          312196) demo_sift1M      cpu=3 start=4.87  finish=107.22\n          312197) demo_sift1M      cpu=11 start=4.87  finish=107.22\n          312198) demo_sift1M      cpu=8 start=4.87  finish=107.22\n          312199) demo_sift1M      cpu=24 start=4.87  finish=107.22\n          312200) demo_sift1M      cpu=4 start=4.91  finish=107.23\n          312201) demo_sift1M      cpu=15 start=4.91  finish=107.23\n          312202) demo_sift1M      cpu=23 start=4.91  finish=107.23\n          312203) demo_sift1M      cpu=17 start=4.91  finish=107.23\n          312204) demo_sift1M      cpu=2 start=4.91  finish=107.23\n          312205) demo_sift1M      cpu=19 start=4.91  finish=107.23\n          312206) demo_sift1M      cpu=6 start=4.91  finish=107.23\n          312207) demo_sift1M      cpu=21 start=4.91  finish=107.23\n          312208) demo_sift1M      cpu=16 start=4.91  finish=107.23\n          312209) demo_sift1M      cpu=22 start=4.91  finish=107.23\n          312210) demo_sift1M      cpu=1 start=4.91  finish=107.23\n          312211) demo_sift1M      cpu=3 start=4.91  finish=107.23\n          312212) demo_sift1M      cpu=18 start=4.91  finish=107.23\n          312213) demo_sift1M      cpu=31 start=4.91  finish=107.23\n          312214) demo_sift1M      cpu=20 start=4.91  finish=107.23\n          312215) demo_sift1M      cpu=5 start=4.91  finish=107.23\n          312216) demo_sift1M      cpu=0 start=4.91  finish=107.23\n          312217) demo_sift1M      cpu=17 start=4.91  finish=107.23\n          312218) demo_sift1M      cpu=4 start=4.91  finish=107.23\n          312219) demo_sift1M      cpu=7 start=4.91  finish=107.23\n          312220) demo_sift1M      cpu=3 start=4.91  finish=107.23\n          312221) demo_sift1M      cpu=5 start=4.91  finish=107.23\n          312222) demo_sift1M      cpu=22 start=4.91  finish=107.23\n          312223) demo_sift1M      cpu=23 start=4.91  finish=107.23\n          312224) demo_sift1M      cpu=20 start=4.91  finish=107.23\n          312225) demo_sift1M      cpu=15 start=4.91  finish=107.23\n          312226) demo_sift1M      cpu=31 start=4.91  finish=107.23\n          312227) demo_sift1M      cpu=21 start=4.91  finish=107.23\n          312228) demo_sift1M      cpu=1 start=4.91  finish=107.23\n          312229) demo_sift1M      cpu=18 start=4.91  finish=107.23\n          312230) demo_sift1M      cpu=2 start=4.91  finish=107.23\n<\/code><\/pre>\n\n\n\n<p>Computation blocks for the second workload<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>      312381) faiss            cpu=13 start=338.65 finish=516.02\n        312382) python3          cpu=29 start=338.66 finish=516.02\n          312383) python3          cpu=21 start=338.67 finish=516.02\n          312384) python3          cpu=31 start=338.67 finish=516.02\n          312385) python3          cpu=4 start=338.67 finish=516.02\n          312386) python3          cpu=24 start=338.67 finish=516.02\n          312387) python3          cpu=0 start=338.67 finish=516.02\n          312388) python3          cpu=9 start=338.67 finish=516.02\n          312389) python3          cpu=2 start=338.67 finish=516.02\n          312390) python3          cpu=26 start=338.67 finish=516.02\n          312391) python3          cpu=19 start=338.67 finish=516.02\n          312392) python3          cpu=27 start=338.67 finish=516.02\n          312393) python3          cpu=6 start=338.67 finish=516.02\n          312394) python3          cpu=12 start=338.67 finish=516.02\n          312395) python3          cpu=7 start=338.67 finish=516.02\n          312396) python3          cpu=14 start=338.67 finish=516.02\n          312397) python3          cpu=1 start=338.67 finish=516.02\n          312398) python3          cpu=13 start=338.67 finish=516.02\n          312399) python3          cpu=18 start=338.67 finish=516.02\n          312400) python3          cpu=15 start=338.67 finish=516.02\n          312401) python3          cpu=22 start=338.67 finish=516.02\n          312402) python3          cpu=8 start=338.67 finish=516.02\n          312403) python3          cpu=23 start=338.67 finish=516.02\n          312404) python3          cpu=25 start=338.67 finish=516.02\n          312405) python3          cpu=3 start=338.67 finish=516.02\n          312406) python3          cpu=10 start=338.67 finish=516.02\n          312407) python3          cpu=5 start=338.67 finish=516.02\n          312408) python3          cpu=11 start=338.67 finish=516.02\n          312409) python3          cpu=20 start=338.67 finish=516.02\n          312410) python3          cpu=28 start=338.67 finish=516.02\n          312411) python3          cpu=16 start=338.67 finish=516.02\n          312412) python3          cpu=30 start=338.67 finish=516.02\n          312413) python3          cpu=17 start=338.67 finish=516.02\n          312414) python3          cpu=23 start=338.88 finish=516.02\n          312415) python3          cpu=14 start=338.88 finish=516.02\n          312416) python3          cpu=16 start=338.88 finish=516.02\n          312417) python3          cpu=15 start=338.88 finish=516.02\n          312418) python3          cpu=18 start=338.88 finish=516.02\n          312419) python3          cpu=24 start=338.88 finish=516.02\n          312420) python3          cpu=3 start=338.88 finish=516.02\n          312421) python3          cpu=9 start=338.88 finish=516.02\n          312422) python3          cpu=5 start=338.88 finish=516.02\n          312423) python3          cpu=10 start=338.88 finish=516.02\n          312424) python3          cpu=6 start=338.88 finish=516.02\n          312425) python3          cpu=27 start=338.88 finish=516.02\n          312426) python3          cpu=17 start=338.88 finish=516.02\n          312427) python3          cpu=28 start=338.88 finish=516.02\n          312428) python3          cpu=4 start=338.88 finish=516.02\n          312429) python3          cpu=29 start=338.88 finish=339.21\n          312430) python3          cpu=2 start=338.88 finish=339.21\n          312431) python3          cpu=30 start=338.88 finish=339.21\n          312432) python3          cpu=16 start=338.88 finish=339.21\n          312433) python3          cpu=31 start=338.88 finish=339.21\n          312434) python3          cpu=4 start=338.88 finish=339.21\n          312435) python3          cpu=8 start=338.88 finish=339.21\n          312436) python3          cpu=22 start=338.88 finish=339.21\n          312437) python3          cpu=9 start=338.88 finish=339.21\n          312438) python3          cpu=1 start=338.88 finish=339.21\n          312439) python3          cpu=10 start=338.88 finish=339.21\n          312440) python3          cpu=3 start=338.88 finish=339.21\n          312441) python3          cpu=11 start=338.88 finish=339.21\n          312442) python3          cpu=4 start=338.88 finish=339.21\n          312443) python3          cpu=12 start=338.88 finish=339.21\n          312444) python3          cpu=21 start=338.88 finish=339.21\n          312445) python3          cpu=13 start=340.83 finish=516.02\n          312446) python3          cpu=19 start=340.83 finish=516.02\n          312447) python3          cpu=30 start=340.83 finish=516.02\n          312448) python3          cpu=0 start=340.83 finish=516.02\n          312449) python3          cpu=31 start=340.83 finish=516.02\n          312450) python3          cpu=7 start=340.83 finish=516.02\n          312451) python3          cpu=8 start=340.83 finish=516.02\n          312452) python3          cpu=2 start=340.83 finish=516.02\n          312453) python3          cpu=25 start=340.83 finish=516.02\n          312454) python3          cpu=21 start=340.83 finish=516.02\n          312455) python3          cpu=26 start=340.83 finish=516.02\n          312456) python3          cpu=22 start=340.83 finish=516.02\n          312457) python3          cpu=11 start=340.83 finish=516.02\n          312458) python3          cpu=1 start=340.83 finish=516.02\n          312459) python3          cpu=12 start=340.83 finish=516.02\n          312460) python3          cpu=20 start=340.83 finish=516.02\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Faiss has difficulty installing on my AMD and Intel systems with the following error. It does run on my 7950x and so numbers below are running on 7950x. There are two separate test cases, the sift1M appears to run in <span class=\"excerpt-dots\">&hellip;<\/span> <a class=\"more-link\" href=\"https:\/\/mvermeulen.org\/perf\/workloads\/phoronix\/faiss\/\"><span class=\"more-msg\">Continue reading &rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":58,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1415","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/mvermeulen.org\/perf\/wp-json\/wp\/v2\/pages\/1415","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mvermeulen.org\/perf\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/mvermeulen.org\/perf\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/mvermeulen.org\/perf\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mvermeulen.org\/perf\/wp-json\/wp\/v2\/comments?post=1415"}],"version-history":[{"count":3,"href":"https:\/\/mvermeulen.org\/perf\/wp-json\/wp\/v2\/pages\/1415\/revisions"}],"predecessor-version":[{"id":1473,"href":"https:\/\/mvermeulen.org\/perf\/wp-json\/wp\/v2\/pages\/1415\/revisions\/1473"}],"up":[{"embeddable":true,"href":"https:\/\/mvermeulen.org\/perf\/wp-json\/wp\/v2\/pages\/58"}],"wp:attachment":[{"href":"https:\/\/mvermeulen.org\/perf\/wp-json\/wp\/v2\/media?parent=1415"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}