{"id":4673,"date":"2014-04-22T10:31:22","date_gmt":"2014-04-22T08:31:22","guid":{"rendered":"http:\/\/blog.zhaw.ch\/icclab\/?p=4673"},"modified":"2014-04-24T11:23:26","modified_gmt":"2014-04-24T09:23:26","slug":"kiara-infiniband-functionality-overview","status":"publish","type":"post","link":"https:\/\/blog.zhaw.ch\/icclab\/kiara-infiniband-functionality-overview\/","title":{"rendered":"KIARA InfiniBand Functionality Overview"},"content":{"rendered":"<p style=\"text-align: justify\">This blog post gives an overview of the InfiniBand functionality that is offered by the transport stack of <a title=\"ICCLab - KIARA\" href=\"http:\/\/blog.zhaw.ch\/icclab\/fi-ppp-fi-ware-kiara\/\" target=\"_blank\">KIARA<\/a>. KIARA is a new and advanced middleware and a part of the <a title=\"FI-WARE Main-Page\" href=\"http:\/\/www.fi-ware.org\/\" target=\"_blank\">FI-WARE<\/a> project which is in turn part of the very large European <a title=\"FI-PPP Main-Page\" href=\"https:\/\/www.fi-ppp.eu\/\" target=\"_blank\">FI-PPP<\/a> programme. Several team members of the ICCLab are currently working on the implementation of this middleware.<\/p>\n<p style=\"text-align: justify\"><!--more--><\/p>\n<p dir=\"ltr\" style=\"text-align: justify\">In an earlier <a title=\"InfiniBand: An Introduction + Simple IB verbs program with RDMA Write\" href=\"http:\/\/blog.zhaw.ch\/icclab\/infiniband-an-introduction-simple-ib-verbs-program-with-rdma-write\/\">blog-post<\/a>\u00a0I gave an introduction to the InfiniBand technology and also described the structure and function of a simple InfiniBand application. It is advised to read that blog post or at least have a basic understanding of the technology to get something out of this blog post. When first researching the InfiniBand technology it quickly became clear that although general\u00a0information is available, tutorials or basic examples on how to write InfiniBand applications are quite rare &#8211; even though there is some very good material like the <a title=\"The Geek in the Corner - InfiniBand Tutorials\" href=\"http:\/\/thegeekinthecorner.wordpress.com\/2013\/02\/02\/rdma-tutorial-pdfs\/\">tutorials<\/a> from \u201cThe Geek in the Corner\u201d. The problem with these tutorials for me was, that they make use of the so called RDMA Connection Manager (CM) which does not work on the systems that are available to me. The RDMA CM is event driven and for example takes care of connecting two queue pairs with each other and readying them for sending and receiving. Since the RDMA CM is not available for me I extracted the information of how to connect queue pairs &#8211; via TCP &#8211; and ready them for sending and receiving from the source code of the \u2018ib_rdma_bw\u2019 application. More on this can be found in the blog post mentioned earlier.<\/p>\n<h1>Requirements for InfiniBand Application \/ Functionality<\/h1>\n<p dir=\"ltr\" style=\"text-align: justify\">In a next step that application had to be improved and expanded as well as integrated into the transport stack of the KIARA middleware. That meant offering all transport functionality over a generic API with the following functions:<\/p>\n<ul>\n<li>bind \/ unbind<\/li>\n<li>connect \/ disconnect<\/li>\n<li>send \/ receive<\/li>\n<li>register_callback \/ callback<\/li>\n<li>get_context \/ set_context<\/li>\n<li>get_session \/ set_session<\/li>\n<li>get_configuration \/ set_configuration<\/li>\n<\/ul>\n<p style=\"text-align: justify\"><span style=\"text-align: justify\">Bind, unbind, register_callback and callback are primarily used by a server while connect and disconnect are primarily used by a client. Send and receive are used by both client and server. The context, session and configuration getters and setters are important but more complimentary to the other functions of the KIARA API.<\/span><\/p>\n<p dir=\"ltr\" style=\"text-align: justify\">Other requirements were that a server has to be able to handle multiple connections and that use should be made of the RDMA write or read functionality that the InfiniBand technology offers to provide high throughput and low latency.<\/p>\n<h1>KIARA InfiniBand: High Level Workflow<\/h1>\n<p dir=\"ltr\" style=\"text-align: justify\">These requirements led to the following concept \/ sequence-diagram about how the flow of sending and receiving should look like:<\/p>\n<p dir=\"ltr\" style=\"text-align: justify\"><a href=\"http:\/\/blog.zhaw.ch\/icclab\/files\/2014\/04\/kiara-infiniband-application-workflow.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-4699\" alt=\"kiara infiniband application workflow\" src=\"http:\/\/blog.zhaw.ch\/icclab\/files\/2014\/04\/kiara-infiniband-application-workflow-894x1024.png\" width=\"584\" height=\"668\" srcset=\"https:\/\/blog.zhaw.ch\/icclab\/files\/2014\/04\/kiara-infiniband-application-workflow-894x1024.png 894w, https:\/\/blog.zhaw.ch\/icclab\/files\/2014\/04\/kiara-infiniband-application-workflow-262x300.png 262w\" sizes=\"auto, (max-width: 584px) 100vw, 584px\" \/><\/a><\/p>\n<p dir=\"ltr\">It includes the following steps:<\/p>\n<ol>\n<li style=\"text-align: justify\">With the bind()-Function the server starts to listen for incoming client-requests \/ connections.<\/li>\n<li style=\"text-align: justify\">With the connect()-Function the client establishes an initial TCP connection and over it exchanges the information necessary to later send or receive over InfiniBand ( Local Identifier (LID), Queue Pair Number (QPN) and Packet Sequence Number (PSN) ).<\/li>\n<li style=\"text-align: justify\">The client-side user then passes the data he wants to send to the server to the send()-Function. This function itself does not send the data, but rather the information of where the data lies in memory. This information is sent to the server via InfiniBand. As soon as the server receives such a message, he will perform an RDMA-read to get the client&#8217;s data.<\/li>\n<li style=\"text-align: justify\">When the server-side user executes the callback()- or the recv()-Function the application checks if the RDMA-read has already finished and if so returns the data to the user.<\/li>\n<li style=\"text-align: justify\">When the server-side user has processed the client-data and computed a result\/answer he passes this data to the send()-Function to send it back to the client. What follows is a repetition of steps 3 and 4 with the server being the initiating peer.<\/li>\n<li style=\"text-align: justify\">At the end the client finishes with the disconnect()-Function and the server with the unbind()-Function.<\/li>\n<\/ol>\n<h1>KIARA InfiniBand: Detailed Workflow<\/h1>\n<p dir=\"ltr\" style=\"text-align: justify\">The following depiction of the workflow goes a little further beneath the surface and shows what internal functions are called and what they do.<\/p>\n<p><a href=\"http:\/\/blog.zhaw.ch\/icclab\/files\/2014\/04\/detailed-kiara-infiniband-application.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-4713\" alt=\"detailed kiara infiniband application\" src=\"http:\/\/blog.zhaw.ch\/icclab\/files\/2014\/04\/detailed-kiara-infiniband-application-602x1024.png\" width=\"584\" height=\"993\" srcset=\"https:\/\/blog.zhaw.ch\/icclab\/files\/2014\/04\/detailed-kiara-infiniband-application-602x1024.png 602w, https:\/\/blog.zhaw.ch\/icclab\/files\/2014\/04\/detailed-kiara-infiniband-application-176x300.png 176w, https:\/\/blog.zhaw.ch\/icclab\/files\/2014\/04\/detailed-kiara-infiniband-application.png 1655w\" sizes=\"auto, (max-width: 584px) 100vw, 584px\" \/><\/a><\/p>\n<p style=\"text-align: justify\">This should give you an idea of how data is transferred within the InfiniBand part of the KIARA transport stack. The code of the actual implementation of the library as well as an example implementation of a client and a server can be found at the end of this blog. A more detailed explanation of that code will follow in a later blog-post.<\/p>\n<h1>Source Code<\/h1>\n<ul>\n<li><a title=\"KT_InfiniBand.hpp\" href=\"https:\/\/drive.google.com\/file\/d\/0BwIlDCK5qxPSSGZ5WjhUZnRfdDQ\/edit?usp=sharing\" target=\"_blank\">KT_InfiniBand.hpp<\/a><\/li>\n<li><a title=\"KT_InfiniBand.cpp\" href=\"https:\/\/drive.google.com\/file\/d\/0BwIlDCK5qxPSRlBFY1lYVVRSSzQ\/edit?usp=sharing\" target=\"_blank\">KT_InfiniBand.cpp<\/a><\/li>\n<li><a title=\"KT_InfiniBand_Example_Client\" href=\"https:\/\/drive.google.com\/file\/d\/0BwIlDCK5qxPSWV9fblZiNWtDUDA\/edit?usp=sharing\" target=\"_blank\">KT_InfiniBand_Example_Client.cpp<\/a><\/li>\n<li><a title=\"KT_InfiniBand_Example_Server.cpp\" href=\"https:\/\/drive.google.com\/file\/d\/0BwIlDCK5qxPSRWZCbzZKLVlPc2s\/edit?usp=sharing\" target=\"_blank\">KT_InfiniBand_Example_Server.cpp<\/a><\/li>\n<\/ul>\n<h1>Related Blog Post<\/h1>\n<ul>\n<li>Previous:\u00a0<a href=\"http:\/\/blog.zhaw.ch\/icclab\/infiniband-an-introduction-simple-ib-verbs-program-with-rdma-write\/\">Introduction to InfiniBand + Simple IB verbs program with RDMA-Write<\/a><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<div class=\"pt-sm\">Schlagw\u00f6rter: <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/fi-ppp\/\">FI PPP<\/a>, <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/fi-ware\/\">FI-WARE<\/a>, <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/infiniband\/\">InfiniBand<\/a>, <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/kiara\/\">KIARA<\/a>, <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/rdma\/\">RDMA<\/a><br><\/div>","protected":false},"excerpt":{"rendered":"<p>This blog post gives an overview of the InfiniBand functionality that is offered by the transport stack of KIARA. KIARA is a new and advanced middleware and a part of the FI-WARE project which is in turn part of the very large European FI-PPP programme. Several team members of the ICCLab are currently working on [&hellip;]<\/p>\n","protected":false},"author":80,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[5],"tags":[140,141,187,205,278],"features":[],"class_list":["post-4673","post","type-post","status-publish","format-standard","hentry","category-articles","tag-fi-ppp","tag-fi-ware","tag-infiniband","tag-kiara","tag-rdma"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>KIARA InfiniBand Functionality Overview - Service Engineering (ICCLab &amp; SPLab)<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.zhaw.ch\/icclab\/kiara-infiniband-functionality-overview\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"KIARA InfiniBand Functionality Overview\" \/>\n<meta property=\"og:description\" content=\"This blog post gives an overview of the InfiniBand functionality that is offered by the transport stack of KIARA. KIARA is a new and advanced middleware and a part of the FI-WARE project which is in turn part of the very large European FI-PPP programme. Several team members of the ICCLab are currently working on [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.zhaw.ch\/icclab\/kiara-infiniband-functionality-overview\/\" \/>\n<meta property=\"og:site_name\" content=\"Service Engineering (ICCLab &amp; SPLab)\" \/>\n<meta property=\"article:published_time\" content=\"2014-04-22T08:31:22+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2014-04-24T09:23:26+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/blog.zhaw.ch\/icclab\/files\/2014\/04\/kiara-infiniband-application-workflow-894x1024.png\" \/>\n<meta name=\"author\" content=\"Sandro Brunner\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Sandro Brunner\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/kiara-infiniband-functionality-overview\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/kiara-infiniband-functionality-overview\/\"},\"author\":{\"name\":\"Sandro Brunner\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/99f82e9c9e266cab97fb4fdcec230d05\"},\"headline\":\"KIARA InfiniBand Functionality Overview\",\"datePublished\":\"2014-04-22T08:31:22+00:00\",\"dateModified\":\"2014-04-24T09:23:26+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/kiara-infiniband-functionality-overview\/\"},\"wordCount\":785,\"commentCount\":1,\"image\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/kiara-infiniband-functionality-overview\/#primaryimage\"},\"thumbnailUrl\":\"http:\/\/blog.zhaw.ch\/icclab\/files\/2014\/04\/kiara-infiniband-application-workflow-894x1024.png\",\"keywords\":[\"FI PPP\",\"FI-WARE\",\"InfiniBand\",\"KIARA\",\"RDMA\"],\"articleSection\":[\"Articles\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/blog.zhaw.ch\/icclab\/kiara-infiniband-functionality-overview\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/kiara-infiniband-functionality-overview\/\",\"url\":\"https:\/\/blog.zhaw.ch\/icclab\/kiara-infiniband-functionality-overview\/\",\"name\":\"KIARA InfiniBand Functionality Overview - Service Engineering (ICCLab &amp; SPLab)\",\"isPartOf\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/kiara-infiniband-functionality-overview\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/kiara-infiniband-functionality-overview\/#primaryimage\"},\"thumbnailUrl\":\"http:\/\/blog.zhaw.ch\/icclab\/files\/2014\/04\/kiara-infiniband-application-workflow-894x1024.png\",\"datePublished\":\"2014-04-22T08:31:22+00:00\",\"dateModified\":\"2014-04-24T09:23:26+00:00\",\"author\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/99f82e9c9e266cab97fb4fdcec230d05\"},\"breadcrumb\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/kiara-infiniband-functionality-overview\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.zhaw.ch\/icclab\/kiara-infiniband-functionality-overview\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/kiara-infiniband-functionality-overview\/#primaryimage\",\"url\":\"https:\/\/blog.zhaw.ch\/icclab\/files\/2014\/04\/kiara-infiniband-application-workflow.png\",\"contentUrl\":\"https:\/\/blog.zhaw.ch\/icclab\/files\/2014\/04\/kiara-infiniband-application-workflow.png\",\"width\":2155,\"height\":2467},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/kiara-infiniband-functionality-overview\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"https:\/\/blog.zhaw.ch\/icclab\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"KIARA InfiniBand Functionality Overview\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#website\",\"url\":\"https:\/\/blog.zhaw.ch\/icclab\/\",\"name\":\"Service Engineering (ICCLab &amp; SPLab)\",\"description\":\"A Blog of the ZHAW Zurich University of Applied Sciences\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blog.zhaw.ch\/icclab\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/99f82e9c9e266cab97fb4fdcec230d05\",\"name\":\"Sandro Brunner\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/files\/2014\/03\/IMG_0234.jpg\",\"url\":\"https:\/\/blog.zhaw.ch\/icclab\/files\/2014\/03\/IMG_0234.jpg\",\"contentUrl\":\"https:\/\/blog.zhaw.ch\/icclab\/files\/2014\/03\/IMG_0234.jpg\",\"caption\":\"Sandro Brunner\"},\"url\":\"https:\/\/blog.zhaw.ch\/icclab\/author\/brnr\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"KIARA InfiniBand Functionality Overview - Service Engineering (ICCLab &amp; SPLab)","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.zhaw.ch\/icclab\/kiara-infiniband-functionality-overview\/","og_locale":"en_US","og_type":"article","og_title":"KIARA InfiniBand Functionality Overview","og_description":"This blog post gives an overview of the InfiniBand functionality that is offered by the transport stack of KIARA. KIARA is a new and advanced middleware and a part of the FI-WARE project which is in turn part of the very large European FI-PPP programme. Several team members of the ICCLab are currently working on [&hellip;]","og_url":"https:\/\/blog.zhaw.ch\/icclab\/kiara-infiniband-functionality-overview\/","og_site_name":"Service Engineering (ICCLab &amp; SPLab)","article_published_time":"2014-04-22T08:31:22+00:00","article_modified_time":"2014-04-24T09:23:26+00:00","og_image":[{"url":"http:\/\/blog.zhaw.ch\/icclab\/files\/2014\/04\/kiara-infiniband-application-workflow-894x1024.png","type":"","width":"","height":""}],"author":"Sandro Brunner","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Sandro Brunner","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blog.zhaw.ch\/icclab\/kiara-infiniband-functionality-overview\/#article","isPartOf":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/kiara-infiniband-functionality-overview\/"},"author":{"name":"Sandro Brunner","@id":"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/99f82e9c9e266cab97fb4fdcec230d05"},"headline":"KIARA InfiniBand Functionality Overview","datePublished":"2014-04-22T08:31:22+00:00","dateModified":"2014-04-24T09:23:26+00:00","mainEntityOfPage":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/kiara-infiniband-functionality-overview\/"},"wordCount":785,"commentCount":1,"image":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/kiara-infiniband-functionality-overview\/#primaryimage"},"thumbnailUrl":"http:\/\/blog.zhaw.ch\/icclab\/files\/2014\/04\/kiara-infiniband-application-workflow-894x1024.png","keywords":["FI PPP","FI-WARE","InfiniBand","KIARA","RDMA"],"articleSection":["Articles"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blog.zhaw.ch\/icclab\/kiara-infiniband-functionality-overview\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blog.zhaw.ch\/icclab\/kiara-infiniband-functionality-overview\/","url":"https:\/\/blog.zhaw.ch\/icclab\/kiara-infiniband-functionality-overview\/","name":"KIARA InfiniBand Functionality Overview - Service Engineering (ICCLab &amp; SPLab)","isPartOf":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/kiara-infiniband-functionality-overview\/#primaryimage"},"image":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/kiara-infiniband-functionality-overview\/#primaryimage"},"thumbnailUrl":"http:\/\/blog.zhaw.ch\/icclab\/files\/2014\/04\/kiara-infiniband-application-workflow-894x1024.png","datePublished":"2014-04-22T08:31:22+00:00","dateModified":"2014-04-24T09:23:26+00:00","author":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/99f82e9c9e266cab97fb4fdcec230d05"},"breadcrumb":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/kiara-infiniband-functionality-overview\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.zhaw.ch\/icclab\/kiara-infiniband-functionality-overview\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blog.zhaw.ch\/icclab\/kiara-infiniband-functionality-overview\/#primaryimage","url":"https:\/\/blog.zhaw.ch\/icclab\/files\/2014\/04\/kiara-infiniband-application-workflow.png","contentUrl":"https:\/\/blog.zhaw.ch\/icclab\/files\/2014\/04\/kiara-infiniband-application-workflow.png","width":2155,"height":2467},{"@type":"BreadcrumbList","@id":"https:\/\/blog.zhaw.ch\/icclab\/kiara-infiniband-functionality-overview\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"https:\/\/blog.zhaw.ch\/icclab\/"},{"@type":"ListItem","position":2,"name":"KIARA InfiniBand Functionality Overview"}]},{"@type":"WebSite","@id":"https:\/\/blog.zhaw.ch\/icclab\/#website","url":"https:\/\/blog.zhaw.ch\/icclab\/","name":"Service Engineering (ICCLab &amp; SPLab)","description":"A Blog of the ZHAW Zurich University of Applied Sciences","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.zhaw.ch\/icclab\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/99f82e9c9e266cab97fb4fdcec230d05","name":"Sandro Brunner","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blog.zhaw.ch\/icclab\/files\/2014\/03\/IMG_0234.jpg","url":"https:\/\/blog.zhaw.ch\/icclab\/files\/2014\/03\/IMG_0234.jpg","contentUrl":"https:\/\/blog.zhaw.ch\/icclab\/files\/2014\/03\/IMG_0234.jpg","caption":"Sandro Brunner"},"url":"https:\/\/blog.zhaw.ch\/icclab\/author\/brnr\/"}]}},"_links":{"self":[{"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/posts\/4673","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/users\/80"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/comments?post=4673"}],"version-history":[{"count":45,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/posts\/4673\/revisions"}],"predecessor-version":[{"id":4767,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/posts\/4673\/revisions\/4767"}],"wp:attachment":[{"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/media?parent=4673"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/categories?post=4673"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/tags?post=4673"},{"taxonomy":"features","embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/features?post=4673"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}