{"id":2908,"date":"2024-04-20T09:48:10","date_gmt":"2024-04-20T08:48:10","guid":{"rendered":"https:\/\/blogs.qub.ac.uk\/dipsa\/?p=2908"},"modified":"2024-07-26T22:03:42","modified_gmt":"2024-07-26T21:03:42","slug":"an-evaluation-of-bandwidth-of-different-storage-types-hdd-vs-ssd-vs-lustrefs-for-different-block-sizes-and-different-read-methods-mmap-vs-pread-vs-read","status":"publish","type":"post","link":"https:\/\/blogs.qub.ac.uk\/dipsa\/an-evaluation-of-bandwidth-of-different-storage-types-hdd-vs-ssd-vs-lustrefs-for-different-block-sizes-and-different-read-methods-mmap-vs-pread-vs-read\/","title":{"rendered":"An Evaluation of Bandwidth of Different Storage Types (HDD vs. SSD vs. LustreFS) for Different Block Sizes and Different Parallel Read Methods (mmap vs pread vs read)"},"content":{"rendered":"\n<p>Short URL of this post: <a href=\"https:\/\/blogs.qub.ac.uk\/DIPSA\/HDD-vs-SSD-vs-LustreFS-2024\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/blogs.qub.ac.uk\/DIPSA\/HDD-vs-SSD-vs-LustreFS-2024<\/a><\/p>\n\n\n\n<p>We evaluate read bandwidth of three storage types:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>HDD<\/strong>: A 6TB Hitachi HUS726060AL 7200RPM SATA v3.1<\/li>\n\n\n\n<li><strong>SSD<\/strong>: A 4TB Samsung MZQL23T8HCLS-00A07 PCIe4 NVMe v1.4<\/li>\n\n\n\n<li><strong>LustreFS<\/strong>: A parallel file system with total 2PB with a SSD pool <\/li>\n<\/ul>\n\n\n\n<p>and for three <strong>parallel<\/strong> read methods:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>mmap<\/strong>: <a href=\"https:\/\/man7.org\/linux\/man-pages\/man2\/mmap.2.html\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/man7.org\/linux\/man-pages\/man2\/mmap.2.html<\/a><\/li>\n\n\n\n<li><strong>pread<\/strong>: <a href=\"https:\/\/man7.org\/linux\/man-pages\/man2\/pread.2.html\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/man7.org\/linux\/man-pages\/man2\/pread.2.html<\/a><\/li>\n\n\n\n<li><strong>read<\/strong>: <a href=\"https:\/\/man7.org\/linux\/man-pages\/man2\/read.2.html\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/man7.org\/linux\/man-pages\/man2\/read.2.html<\/a><\/li>\n<\/ul>\n\n\n\n<p>and for two block sizes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>4 KB<\/strong> blocks<\/li>\n\n\n\n<li><strong>4 MB<\/strong> blocks<\/li>\n<\/ul>\n\n\n\n<p>The <strong>source code<\/strong> is available on ParaGrapher repository:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/github.com\/DIPSA-QUB\/ParaGrapher\/blob\/main\/test\/read_bandwidth.c\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/github.com\/DIPSA-QUB\/ParaGrapher\/blob\/main\/test\/read_bandwidth.c<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/DIPSA-QUB\/ParaGrapher\/blob\/main\/test\/read_bandwidth_mam.c\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/github.com\/DIPSA-QUB\/ParaGrapher\/blob\/main\/test\/read_bandwidth_mam.c<\/a> : this file is similar to previous one, but repeats each evaluation for a user-defined number of rounds and identifies Min, Average, and Max. values.<\/li>\n<\/ul>\n\n\n\n<p class=\"has-text-align-justify\">The OS cache of storage contents have been dropped after each evaluation <br>(<code>sudo sh -c 'echo 3 &gt;\/proc\/sys\/vm\/drop_caches'<\/code>). <br>The flushcache.c file (<a href=\"https:\/\/github.com\/DIPSA-QUB\/ParaGrapher\/blob\/main\/test\/flushcache.c\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/github.com\/DIPSA-QUB\/ParaGrapher\/blob\/main\/test\/flushcache.c<\/a>) can be used with the same functionality for users without sudo access, however, it usually takes more time to be finished.<\/p>\n\n\n\n<p class=\"has-text-align-justify\">For LustreFS, we have repeated the evaluation of <em>read<\/em> and <em>pread<\/em> using O_DIRECT flag as this flag prevents client-side caching.<\/p>\n\n\n\n<p class=\"has-text-align-justify\">For HDD and SSD experiments, we have used a machine with Intel W-2295 3.00GHz CPU, 18 cores, 36 hyper-threads, 24MB L3 cache, 256 GB DDR4 2933Mhz memory, running Debian 12 Linux 6.1. For LustreFS, we have used a machine with 2TB 3.2GHz DDR4 memory, 2 AMD 7702 CPUs, in total, 128 cores, 256 threads.<\/p>\n\n\n\n<p class=\"has-text-align-justify\">The results of the evaluation using <strong>read_bandwidth.c<\/strong> are in the following table. The values are<strong> Bandwidth in MB\/s<\/strong>. Also, 1-2 digits close to each number with a white background are  are percentage of load imbalance between parallel threads.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-content\/uploads\/sites\/14\/2024\/04\/hdd-ssd-lustre.png\" target=\"_blank\" rel=\"noreferrer noopener\"><img decoding=\"async\" src=\"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-content\/uploads\/sites\/14\/2024\/04\/hdd-ssd-lustre-1024x515.png\" alt=\"\" class=\"wp-image-2981\" \/><\/a><\/figure>\n\n\n\n<p><strong>Please click on the image to expand.<\/strong><br><br><\/p>\n\n\n\n<h2 class=\"wp-block-heading has-medium-font-size\">C vs. Java<\/h2>\n\n\n\n<p><a href=\"https:\/\/github.com\/DIPSA-QUB\/ParaGrapher\/blob\/main\/doc\/storage-eval.md#c-vs-java\"><\/a>We measure the bandwidth of SSD and HDD in C (<code>mmap<\/code> and <code>pread<\/code>) vs. Java (<code>mmap<\/code> and <code>read<\/code>). We use a machine with Intel W-2295 3.00GHz CPU, 18 cores, 36 hyper-threads, 24MB L3 cache, 256 GB DDR4 2933Mhz memory, running Debian 12 Linux 6.1 and the following codes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/github.com\/DIPSA-QUB\/ParaGrapher\/blob\/main\/test\/read_bandwidth.c\">https:\/\/github.com\/DIPSA-QUB\/ParaGrapher\/blob\/main\/test\/read_bandwidth.c<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/DIPSA-QUB\/ParaGrapher\/blob\/main\/test\/ReadBandwidth.java\">https:\/\/github.com\/DIPSA-QUB\/ParaGrapher\/blob\/main\/test\/ReadBandwidth.java<\/a> : this is a Java-based evaluation of read bandwidth and the script (<a href=\"https:\/\/github.com\/DIPSA-QUB\/ParaGrapher\/blob\/main\/test\/java-read-bandwidth.sh\">https:\/\/github.com\/DIPSA-QUB\/ParaGrapher\/blob\/main\/test\/java-read-bandwidth.sh<\/a>) can be used to create changes in evaluation parameters.<\/li>\n<\/ul>\n\n\n\n<p>The results are in the following.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1024\" height=\"505\" src=\"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-content\/uploads\/sites\/14\/2024\/07\/cjava.pdf-1024x505.png\" alt=\"\" class=\"wp-image-3206\" srcset=\"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-content\/uploads\/sites\/14\/2024\/07\/cjava.pdf-1024x505.png 1024w, https:\/\/blogs.qub.ac.uk\/dipsa\/wp-content\/uploads\/sites\/14\/2024\/07\/cjava.pdf-300x148.png 300w, https:\/\/blogs.qub.ac.uk\/dipsa\/wp-content\/uploads\/sites\/14\/2024\/07\/cjava.pdf-768x379.png 768w, https:\/\/blogs.qub.ac.uk\/dipsa\/wp-content\/uploads\/sites\/14\/2024\/07\/cjava.pdf-1536x757.png 1536w, https:\/\/blogs.qub.ac.uk\/dipsa\/wp-content\/uploads\/sites\/14\/2024\/07\/cjava.pdf-2048x1009.png 2048w, https:\/\/blogs.qub.ac.uk\/dipsa\/wp-content\/uploads\/sites\/14\/2024\/07\/cjava.pdf-500x246.png 500w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><br>For similar comparisons you may refer to:<br>&#8211; <a href=\"https:\/\/github.com\/david-slatinek\/c-read-vs.-mmap\/tree\/main\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/github.com\/david-slatinek\/c-read-vs.-mmap\/tree\/main<\/a><br>&#8211; <a href=\"https:\/\/eklausmeier.goip.de\/blog\/2016\/02-03-performance-comparison-mmap-versus-read-versus-fread\/\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/eklausmeier.goip.de\/blog\/2016\/02-03-performance-comparison-mmap-versus-read-versus-fread\/<\/a><\/p>\n\n\n\n<p class=\"has-medium-font-size\"><strong><a href=\"https:\/\/blogs.qub.ac.uk\/dipsa\/technical-posts\/\" target=\"_blank\" rel=\"noreferrer noopener\">Technical Posts<\/a><\/strong><\/p>\n\n\n<ul class=\"wp-block-latest-posts__list has-dates wp-block-latest-posts\"><li><div class=\"wp-block-latest-posts__featured-image alignleft\"><img decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-content\/uploads\/sites\/14\/2024\/08\/cones2-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail wp-post-image\" alt=\"\" style=\"max-width:75px;max-height:75px;\" \/><\/div><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/blogs.qub.ac.uk\/dipsa\/random-vertex-relabelling-in-laganlighter\/\">Random Vertex Relabelling in LaganLighter<\/a><time datetime=\"2024-08-21T12:37:52+01:00\" class=\"wp-block-latest-posts__post-date\">21 August 2024<\/time><\/li>\n<li><div class=\"wp-block-latest-posts__featured-image alignleft\"><img decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-content\/uploads\/sites\/14\/2024\/08\/trees-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail wp-post-image\" alt=\"\" style=\"max-width:75px;max-height:75px;\" \/><\/div><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/blogs.qub.ac.uk\/dipsa\/minimum-spanning-forest-of-ms-biographs\/\">Minimum Spanning Forest of MS-BioGraphs<\/a><time datetime=\"2024-08-09T14:11:36+01:00\" class=\"wp-block-latest-posts__post-date\">9 August 2024<\/time><\/li>\n<li><div class=\"wp-block-latest-posts__featured-image alignleft\"><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-content\/uploads\/sites\/14\/2024\/08\/affinity-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail wp-post-image\" alt=\"\" style=\"max-width:75px;max-height:75px;\" \/><\/div><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/blogs.qub.ac.uk\/dipsa\/topology-based-thread-affinity-setting-thread-pinning-in-openmp\/\">Topology-Based Thread Affinity Setting (Thread Pinning) in OpenMP<\/a><time datetime=\"2024-08-03T18:07:31+01:00\" class=\"wp-block-latest-posts__post-date\">3 August 2024<\/time><\/li>\n<li><div class=\"wp-block-latest-posts__featured-image alignleft\"><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-content\/uploads\/sites\/14\/2024\/04\/hedera-helix-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail wp-post-image\" alt=\"\" style=\"max-width:75px;max-height:75px;\" \/><\/div><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/blogs.qub.ac.uk\/dipsa\/an-incomplete-list-of-publicly-available-graph-datasets-generators\/\">An (Incomplete) List of Publicly Available Graph Datasets\/Generators<\/a><time datetime=\"2024-06-21T13:25:49+01:00\" class=\"wp-block-latest-posts__post-date\">21 June 2024<\/time><\/li>\n<li><div class=\"wp-block-latest-posts__featured-image alignleft\"><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-content\/uploads\/sites\/14\/2024\/04\/passerine-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail wp-post-image\" alt=\"\" style=\"max-width:75px;max-height:75px;\" \/><\/div><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/blogs.qub.ac.uk\/dipsa\/an-evaluation-of-bandwidth-of-different-storage-types-hdd-vs-ssd-vs-lustrefs-for-different-block-sizes-and-different-read-methods-mmap-vs-pread-vs-read\/\">An Evaluation of Bandwidth of Different Storage Types (HDD vs. SSD vs. LustreFS) for Different Block Sizes and Different Parallel Read Methods (mmap vs pread vs read)<\/a><time datetime=\"2024-04-20T09:48:10+01:00\" class=\"wp-block-latest-posts__post-date\">20 April 2024<\/time><\/li>\n<li><div class=\"wp-block-latest-posts__featured-image alignleft\"><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-content\/uploads\/sites\/14\/2023\/11\/ni2-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail wp-post-image\" alt=\"\" style=\"max-width:75px;max-height:75px;\" \/><\/div><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/blogs.qub.ac.uk\/dipsa\/simd-bit-twiddling-hacks\/\">SIMD Bit Twiddling Hacks<\/a><time datetime=\"2023-11-25T14:13:51+00:00\" class=\"wp-block-latest-posts__post-date\">25 November 2023<\/time><\/li>\n<li><div class=\"wp-block-latest-posts__featured-image alignleft\"><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-content\/uploads\/sites\/14\/2022\/12\/cactus-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail wp-post-image\" alt=\"\" style=\"max-width:75px;max-height:75px;\" \/><\/div><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/blogs.qub.ac.uk\/dipsa\/laganlighter-source-code\/\">LaganLighter Source Code<\/a><time datetime=\"2022-11-14T13:17:17+00:00\" class=\"wp-block-latest-posts__post-date\">14 November 2022<\/time><\/li>\n<\/ul>\n\n\n<p class=\"has-medium-font-size\"><br><strong><a href=\"https:\/\/blogs.qub.ac.uk\/DIPSA\/ParaGrapher\">ParaGrapher<\/a><\/strong><\/p>\n\n\n<ul class=\"wp-block-latest-posts__list has-dates wp-block-latest-posts\"><li><div class=\"wp-block-latest-posts__featured-image alignleft\"><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-content\/uploads\/sites\/14\/2025\/11\/1-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail wp-post-image\" alt=\"\" style=\"max-width:75px;max-height:75px;\" \/><\/div><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/blogs.qub.ac.uk\/dipsa\/paragrapher-a-parallel-and-distributed-graph-loading-library-for-large-scale-compressed-graphs-bigdata25\/\">ParaGrapher: A Parallel and Distributed Graph Loading Library for Large-Scale Compressed Graphs &#8211; BigData&#8217;25 (Short Paper)<\/a><time datetime=\"2025-11-08T12:02:51+00:00\" class=\"wp-block-latest-posts__post-date\">8 November 2025<\/time><\/li>\n<li><div class=\"wp-block-latest-posts__featured-image alignleft\"><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-content\/uploads\/sites\/14\/2024\/12\/1-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail wp-post-image\" alt=\"\" style=\"max-width:75px;max-height:75px;\" \/><\/div><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/blogs.qub.ac.uk\/dipsa\/accelerating-loading-webgraphs-in-paragrapher\/\">Accelerating Loading WebGraphs in ParaGrapher<\/a><time datetime=\"2024-12-02T05:51:29+00:00\" class=\"wp-block-latest-posts__post-date\">2 December 2024<\/time><\/li>\n<li><div class=\"wp-block-latest-posts__featured-image alignleft\"><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-content\/uploads\/sites\/14\/2024\/05\/fern-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail wp-post-image\" alt=\"\" style=\"max-width:75px;max-height:75px;\" \/><\/div><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/blogs.qub.ac.uk\/dipsa\/selective-parallel-loading-of-large-scale-compressed-graphs-with-paragrapher\/\">Selective Parallel Loading of Large-Scale Compressed Graphs with ParaGrapher &#8211; arXiv Version<\/a><time datetime=\"2024-05-01T05:44:14+01:00\" class=\"wp-block-latest-posts__post-date\">1 May 2024<\/time><\/li>\n<li><div class=\"wp-block-latest-posts__featured-image alignleft\"><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-content\/uploads\/sites\/14\/2024\/04\/passerine-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail wp-post-image\" alt=\"\" style=\"max-width:75px;max-height:75px;\" \/><\/div><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/blogs.qub.ac.uk\/dipsa\/an-evaluation-of-bandwidth-of-different-storage-types-hdd-vs-ssd-vs-lustrefs-for-different-block-sizes-and-different-read-methods-mmap-vs-pread-vs-read\/\">An Evaluation of Bandwidth of Different Storage Types (HDD vs. SSD vs. LustreFS) for Different Block Sizes and Different Parallel Read Methods (mmap vs pread vs read)<\/a><time datetime=\"2024-04-20T09:48:10+01:00\" class=\"wp-block-latest-posts__post-date\">20 April 2024<\/time><\/li>\n<li><div class=\"wp-block-latest-posts__featured-image alignleft\"><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-content\/uploads\/sites\/14\/2024\/02\/loriini-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail wp-post-image\" alt=\"\" style=\"max-width:75px;max-height:75px;\" \/><\/div><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/blogs.qub.ac.uk\/dipsa\/paragrapher-integrated-to-laganlighter\/\">ParaGrapher Integrated to LaganLighter<\/a><time datetime=\"2024-02-16T08:29:26+00:00\" class=\"wp-block-latest-posts__post-date\">16 February 2024<\/time><\/li>\n<li><div class=\"wp-block-latest-posts__featured-image alignleft\"><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-content\/uploads\/sites\/14\/2024\/02\/poplar2-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail wp-post-image\" alt=\"\" style=\"max-width:75px;max-height:75px;\" \/><\/div><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/blogs.qub.ac.uk\/dipsa\/paragrapher-source-code-for-webgraph-types\/\">ParaGrapher Source Code For WebGraph Types<\/a><time datetime=\"2024-02-16T08:13:13+00:00\" class=\"wp-block-latest-posts__post-date\">16 February 2024<\/time><\/li>\n<\/ul>","protected":false},"excerpt":{"rendered":"<p>Short URL of this post: https:\/\/blogs.qub.ac.uk\/DIPSA\/HDD-vs-SSD-vs-LustreFS-2024 We evaluate read bandwidth of three storage types: and for three parallel read methods: and for two block sizes: The source code is available on ParaGrapher repository: The OS cache of storage contents have been dropped after each evaluation (sudo sh -c &#8216;echo 3 &gt;\/proc\/sys\/vm\/drop_caches&#8217;). The flushcache.c file (https:\/\/github.com\/DIPSA-QUB\/ParaGrapher\/blob\/main\/test\/flushcache.c) [&hellip;]<\/p>\n","protected":false},"author":1315,"featured_media":3036,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[119,127],"tags":[38,122,19,123],"class_list":{"0":"post-2908","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-paragrapher","8":"category-technical-posts","9":"tag-high-performance-computing","10":"tag-parallel-io","11":"tag-source-code","12":"tag-storage","13":"czr-hentry"},"jetpack_featured_media_url":"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-content\/uploads\/sites\/14\/2024\/04\/passerine.jpg","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-json\/wp\/v2\/posts\/2908","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-json\/wp\/v2\/users\/1315"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-json\/wp\/v2\/comments?post=2908"}],"version-history":[{"count":26,"href":"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-json\/wp\/v2\/posts\/2908\/revisions"}],"predecessor-version":[{"id":3208,"href":"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-json\/wp\/v2\/posts\/2908\/revisions\/3208"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-json\/wp\/v2\/media\/3036"}],"wp:attachment":[{"href":"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-json\/wp\/v2\/media?parent=2908"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-json\/wp\/v2\/categories?post=2908"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-json\/wp\/v2\/tags?post=2908"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}