CINXE.COM
DOCA Core - NVIDIA Docs
<!DOCTYPE html> <html class="TopicPage"xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en" dir="ltr"> <head> <meta charset="UTF-8"> <meta property="og:url" content="https://docs.nvidia.com/doca/sdk/DOCA+Core/index.html"> <meta property="og:site_name" content="NVIDIA Docs"> <meta property="og:type" content="website"> <meta name="twitter:card" content="summary_large_image"> <meta name="title" content="DOCA Core"> <meta name="version" content="DOCA SDK 2.9.0"> <meta name="nv-pub-date" content="Tue Nov 19 17:24:26 EST 2024"> <meta name="docs_products" content="BlueField DPUs / SuperNICs & DOCA"> <meta name="docs_version" content="DOCA SDK 2.9.0"> <meta name="docs_books" content="DOCA Documentation v2.9.0"> <meta name="subcollection" content="Technical Documentation"> <meta property="mimetype" content="webpage"> <style>:root { } </style> <style>:root { --button-border-radius:0px; }</style> <style>:root { --font-1: "NVIDIA Sans"; --font-2: "Times"; } body { --font-1: "NVIDIA Sans"; --font-2: "Merriweather"; } </style><!-- OneTrust Cookies Consent Notice start for nvidia.com --> <script src="https://cdn.cookielaw.org/scripttemplates/otSDKStub.js" data-document-language="true" type="text/javascript" charset="UTF-8" data-domain-script="3e2b62ff-7ae7-4ac5-87c8-d5949ecafff5" ></script> <script type="text/javascript"> function OptanonWrapper() { var event = new Event('bannerLoaded'); window.dispatchEvent(event); } </script> <!-- OneTrust Cookies Consent Notice end for nvidia.com --> <script type="text/javascript" src="https://images.nvidia.com/aem-dam/Solutions/ot-js/ot-custom.js"></script><script src="https://assets.adobedtm.com/5d4962a43b79/c1061d2c5e7b/launch-191c2462b890.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/3.2.2/es5/tex-mml-svg.min.js"></script> <script src="https://js.hcaptcha.com/1/api.js"></script> <script src="https://tbyb.rivaspeech.com/tbyb.js" defer></script> <script src="https://t.contentsquare.net/uxa/c6af8848c2687.js"></script> <script src="https://unpkg.com/mermaid@9.2.2/dist/mermaid.min.js"></script> <script>mermaid.initialize({startOnLoad:true})</script> <link rel="preload" as="style" href="https://docscontent.nvidia.com/resource/00000183-6725-d7fd-a5bb-6727dc560000/styles/default/All.min.8d017581b5425d9458367c048c94a4a8.gz.css" /> <link data-cssvarsponyfill="true" class="Webpack-css" rel="stylesheet" href="https://docscontent.nvidia.com/resource/00000183-6725-d7fd-a5bb-6727dc560000/styles/default/All.min.8d017581b5425d9458367c048c94a4a8.gz.css"> <style>.Page-content { margin-top: 0; } .Page-search input { padding-left: 32px!important; } .Page-search button { line-height: 24px; }</style> <style>#onetrust-banner-sdk #onetrust-policy-text p#nv-gpc-text, #onetrust-banner-sdk #onetrust-policy-text p#nv-non-gpc-text { padding: 0 !important; } #onetrust-consent-sdk #ot-pc-title, #onetrust-consent-sdk #ot-pc-lst h3 { font-size: 16px !important; } #onetrust-consent-sdk .ot-always-active { font-size: 14px !important; } #onetrust-pc-sdk #ot-pc-lst .ot-host-item .ot-acc-hdr .ot-host-hdr .ot-host-expand { font-size: 12px !important; }One Trust Inline P Styling</style> <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=5"><title>DOCA Core - NVIDIA Docs</title><link rel="canonical" href="https://docs.nvidia.com/doca/sdk/DOCA+Core/index.html"><meta name="brightspot.contentId" content="00000193-4502-d86e-a5f3-fd0ffc970000"><link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png"><link rel="icon" type="image/png" href="/favicon-32x32.png"><link rel="icon" type="image/png" href="/favicon-16x16.png"><script type="application/ld+json">{"@context":"http://schema.org","@type":"WebPage","url":"https://docs.nvidia.com/doca/sdk/DOCA+Core/index.html","publisher":{"@type":"Organization","name":"NVIDIA Docs","logo":{"@type":"ImageObject","url":"https://docscontent.nvidia.com/bf/6f/f2d5da4743aebb3dff0e6a6129ec/nvidia-docshub-logo-2.svg"}},"name":"DOCA Core - NVIDIA Docs"}</script> <!-- this will add webcomponent polyfills based on browsers. As of 04/29/21 still needed for IE11 and Safari --> <script defer src="https://docscontent.nvidia.com/resource/00000183-6725-d7fd-a5bb-6727dc560000/webcomponents-loader/webcomponents-loader.2938a610ca02c611209b1a5ba2884385.gz.js"></script> <script> /** This allows us to load the IE polyfills via feature detection so that they do not load needlessly in the browsers that do not need them. It also ensures they are loaded non async so that they load before the rest of our JS. */ if (!window.CSS || !window.CSS.supports || !window.CSS.supports('--fake-var', 0)) { var script = document.createElement('script'); script.setAttribute('src', "https://docscontent.nvidia.com/resource/00000183-6725-d7fd-a5bb-6727dc560000/util/IEPolyfills.3af8d32fc874177c8b40f77d0ae336b5.gz.js"); script.setAttribute('type', 'text/javascript'); script.async = false; script.defer = true; document.head.appendChild(script); } </script> <script defer src="https://docscontent.nvidia.com/resource/00000183-6725-d7fd-a5bb-6727dc560000/styles/default/All.min.09629531d7098fb938880c46edb9dedf.gz.js"></script> <script> var link = document.createElement('link'); link.setAttribute('href', 'https://fonts.googleapis.com/css?family=Roboto+Mono&family=Roboto:300,400,700'); var relList = link.relList; if (relList && relList.supports('preload')) { link.setAttribute('as', 'style'); link.setAttribute('rel', 'preload'); link.setAttribute('onload', 'this.rel="stylesheet"'); link.setAttribute('crossorigin', 'anonymous'); } else { link.setAttribute('rel', 'stylesheet'); } document.head.appendChild(link); </script> <script defer src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js" integrity="sha384-nvAa0+6Qg9clwYCGGPpDQLVpLNn0fRaROjHqs13t4Ggj3Ez50XnGQqc/r8MhnRDZ" crossorigin="anonymous"></script> </head> <body class="Page-body"> <!-- Putting icons here, so we don't have to include in a bunch of -body hbs's --> <svg xmlns="http://www.w3.org/2000/svg" style="display:none" id="iconsMap"> <symbol id="back-to-top-icon" fill="#000000" height="20" width="15" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 490 490" xml:space="preserve"> <g id="SVGRepo_bgCarrier" stroke-width="0"></g> <g id="SVGRepo_tracerCarrier" stroke-linecap="round" stroke-linejoin="round"></g> <g id="SVGRepo_iconCarrier"> <polygon points="245,33.299 0,456.701 490,456.701"></polygon> </g> </symbol> <symbol id="mono-icon-facebook" viewBox="0 0 10 19"> <path fill-rule="evenodd" d="M2.707 18.25V10.2H0V7h2.707V4.469c0-1.336.375-2.373 1.125-3.112C4.582.62 5.578.25 6.82.25c1.008 0 1.828.047 2.461.14v2.848H7.594c-.633 0-1.067.14-1.301.422-.188.235-.281.61-.281 1.125V7H9l-.422 3.2H6.012v8.05H2.707z"></path> </symbol> <symbol id="action-icon-facebook" viewBox="0 0 7 12" xmlns="http://www.w3.org/2000/svg"> <g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g transform="translate(-112.000000, -395.000000)" fill="#FFFFFF"> <g transform="translate(100.000000, 386.000000)"> <g transform="translate(12.000000, 9.000000)"> <path d="M1.777125,12 L1.777125,6.48659606 L0,6.48659606 L0,4.05412254 L1.777125,4.05412254 L1.777125,3.10626869 C1.777125,1.47184919 2.99976923,0 4.50308654,0 L6.46153846,0 L6.46153846,2.43247352 L4.50308654,2.43247352 C4.28864423,2.43247352 4.03846154,2.69376172 4.03846154,3.08498454 L4.03846154,4.05412254 L6.46153846,4.05412254 L6.46153846,6.48659606 L4.03846154,6.48659606 L4.03846154,12" /> </g> </g> </g> </g> </symbol> <symbol id="mono-icon-instagram" viewBox="0 0 17 17"> <g> <path fill-rule="evenodd" d="M8.281 4.207c.727 0 1.4.182 2.022.545a4.055 4.055 0 0 1 1.476 1.477c.364.62.545 1.294.545 2.021 0 .727-.181 1.4-.545 2.021a4.055 4.055 0 0 1-1.476 1.477 3.934 3.934 0 0 1-2.022.545c-.726 0-1.4-.182-2.021-.545a4.055 4.055 0 0 1-1.477-1.477 3.934 3.934 0 0 1-.545-2.021c0-.727.182-1.4.545-2.021A4.055 4.055 0 0 1 6.26 4.752a3.934 3.934 0 0 1 2.021-.545zm0 6.68a2.54 2.54 0 0 0 1.864-.774 2.54 2.54 0 0 0 .773-1.863 2.54 2.54 0 0 0-.773-1.863 2.54 2.54 0 0 0-1.864-.774 2.54 2.54 0 0 0-1.863.774 2.54 2.54 0 0 0-.773 1.863c0 .727.257 1.348.773 1.863a2.54 2.54 0 0 0 1.863.774zM13.45 4.03c-.023.258-.123.48-.299.668a.856.856 0 0 1-.65.281.913.913 0 0 1-.668-.28.913.913 0 0 1-.281-.669c0-.258.094-.48.281-.668a.913.913 0 0 1 .668-.28c.258 0 .48.093.668.28.187.188.281.41.281.668zm2.672.95c.023.656.035 1.746.035 3.269 0 1.523-.017 2.62-.053 3.287-.035.668-.134 1.248-.298 1.74a4.098 4.098 0 0 1-.967 1.53 4.098 4.098 0 0 1-1.53.966c-.492.164-1.072.264-1.74.3-.668.034-1.763.052-3.287.052-1.523 0-2.619-.018-3.287-.053-.668-.035-1.248-.146-1.74-.334a3.747 3.747 0 0 1-1.53-.931 4.098 4.098 0 0 1-.966-1.53c-.164-.492-.264-1.072-.299-1.74C.424 10.87.406 9.773.406 8.25S.424 5.63.46 4.963c.035-.668.135-1.248.299-1.74.21-.586.533-1.096.967-1.53A4.098 4.098 0 0 1 3.254.727c.492-.164 1.072-.264 1.74-.3C5.662.394 6.758.376 8.281.376c1.524 0 2.62.018 3.287.053.668.035 1.248.135 1.74.299a4.098 4.098 0 0 1 2.496 2.496c.165.492.27 1.078.317 1.757zm-1.687 7.91c.14-.399.234-1.032.28-1.899.024-.515.036-1.242.036-2.18V7.689c0-.961-.012-1.688-.035-2.18-.047-.89-.14-1.524-.281-1.899a2.537 2.537 0 0 0-1.512-1.511c-.375-.14-1.008-.235-1.899-.282a51.292 51.292 0 0 0-2.18-.035H7.72c-.938 0-1.664.012-2.18.035-.867.047-1.5.141-1.898.282a2.537 2.537 0 0 0-1.512 1.511c-.14.375-.234 1.008-.281 1.899a51.292 51.292 0 0 0-.036 2.18v1.125c0 .937.012 1.664.036 2.18.047.866.14 1.5.28 1.898.306.726.81 1.23 1.513 1.511.398.141 1.03.235 1.898.282.516.023 1.242.035 2.18.035h1.125c.96 0 1.687-.012 2.18-.035.89-.047 1.523-.141 1.898-.282.726-.304 1.23-.808 1.512-1.511z"> </path> </g> </symbol> <symbol id="mono-icon-mailto" viewBox="0 0 512 512"> <g> <path d="M67,148.7c11,5.8,163.8,89.1,169.5,92.1c5.7,3,11.5,4.4,20.5,4.4c9,0,14.8-1.4,20.5-4.4c5.7-3,158.5-86.3,169.5-92.1 c4.1-2.1,11-5.9,12.5-10.2c2.6-7.6-0.2-10.5-11.3-10.5H257H65.8c-11.1,0-13.9,3-11.3,10.5C56,142.9,62.9,146.6,67,148.7z"> </path> <path d="M455.7,153.2c-8.2,4.2-81.8,56.6-130.5,88.1l82.2,92.5c2,2,2.9,4.4,1.8,5.6c-1.2,1.1-3.8,0.5-5.9-1.4l-98.6-83.2 c-14.9,9.6-25.4,16.2-27.2,17.2c-7.7,3.9-13.1,4.4-20.5,4.4c-7.4,0-12.8-0.5-20.5-4.4c-1.9-1-12.3-7.6-27.2-17.2l-98.6,83.2 c-2,2-4.7,2.6-5.9,1.4c-1.2-1.1-0.3-3.6,1.7-5.6l82.1-92.5c-48.7-31.5-123.1-83.9-131.3-88.1c-8.8-4.5-9.3,0.8-9.3,4.9 c0,4.1,0,205,0,205c0,9.3,13.7,20.9,23.5,20.9H257h185.5c9.8,0,21.5-11.7,21.5-20.9c0,0,0-201,0-205 C464,153.9,464.6,148.7,455.7,153.2z"></path> </g> </symbol> <svg id="action-icon-mailto" viewBox="0 0 20 14" xmlns="http://www.w3.org/2000/svg"> <g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"> <g transform="translate(-245.000000, -2697.000000)" stroke="#000000"> <g transform="translate(100.000000, 1138.000000)"> <g transform="translate(0.000000, 132.000000)"> <g transform="translate(0.000000, 1419.000000)"> <g transform="translate(140.000000, 0.000000)"> <g transform="translate(6.000000, 9.000000)"> <path d="M17.5909091,10.6363636 C17.5909091,11.3138182 17.0410909,11.8636364 16.3636364,11.8636364 L1.63636364,11.8636364 C0.958909091,11.8636364 0.409090909,11.3138182 0.409090909,10.6363636 L0.409090909,1.63636364 C0.409090909,0.958090909 0.958909091,0.409090909 1.63636364,0.409090909 L16.3636364,0.409090909 C17.0410909,0.409090909 17.5909091,0.958090909 17.5909091,1.63636364 L17.5909091,10.6363636 L17.5909091,10.6363636 Z" /> <polyline points="17.1818182 0.818181818 9 7.36363636 0.818181818 0.818181818" /> </g> </g> </g> </g> </g> </g> </g> </svg> <symbol id="mono-icon-print" viewBox="0 0 12 12"> <g fill-rule="evenodd"> <path fill-rule="nonzero" d="M9 10V7H3v3H1a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v3.132A2.868 2.868 0 0 1 9.132 10H9zm.5-4.5a1 1 0 1 0 0-2 1 1 0 0 0 0 2zM3 0h6v2H3z"> </path> <path d="M4 8h4v4H4z"></path> </g> </symbol> <symbol id="action-icon-print" viewBox="0 0 20 18" xmlns="http://www.w3.org/2000/svg"> <g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"> <g transform="translate(-280.000000, -2695.000000)" stroke="#000000" stroke-width="0.9"> <g transform="translate(100.000000, 1138.000000)"> <g transform="translate(0.000000, 132.000000)"> <g transform="translate(0.000000, 1419.000000)"> <g transform="translate(140.000000, 0.000000)"> <g transform="translate(35.000000, 0.000000)"> <g transform="translate(6.000000, 7.000000)"> <path d="M4.125,12.375 L1.875,12.375 C1.05,12.375 0.375,11.7 0.375,10.875 L0.375,6.375 C0.375,5.55 1.05,4.875 1.875,4.875 L16.125,4.875 C16.95075,4.875 17.625,5.55 17.625,6.375 L17.625,10.875 C17.625,11.7 16.95075,12.375 16.125,12.375 L13.875,12.375" /> <g transform="translate(4.125000, 0.375000)"> <polyline id="Stroke-2384" points="0 3 0 0 7.5 0 9.75 2.25 9.75 3" /> <polygon id="Stroke-2385" points="0 15.75 9.75 15.75 9.75 9.75 0 9.75" /> </g> <path d="M3.375,7.125 C3.375,7.539 3.03975,7.875 2.625,7.875 C2.211,7.875 1.875,7.539 1.875,7.125 C1.875,6.71025 2.211,6.375 2.625,6.375 C3.03975,6.375 3.375,6.71025 3.375,7.125 L3.375,7.125 Z" /> <line x1="5.625" y1="11.625" x2="12.375" y2="11.625" id="Stroke-2387" /> <line x1="5.625" y1="13.125" x2="12.375" y2="13.125" id="Stroke-2388" /> <line x1="5.625" y1="14.625" x2="12.375" y2="14.625" id="Stroke-2389" /> <polyline points="11.625 0.375 11.625 2.625 13.875 2.625" /> </g> </g> </g> </g> </g> </g> </g> </g> </symbol> <symbol id="mono-icon-copylink" viewBox="0 0 12 12"> <g fill-rule="evenodd"> <path d="M10.199 2.378c.222.205.4.548.465.897.062.332.016.614-.132.774L8.627 6.106c-.187.203-.512.232-.75-.014a.498.498 0 0 0-.706.028.499.499 0 0 0 .026.706 1.509 1.509 0 0 0 2.165-.04l1.903-2.06c.37-.398.506-.98.382-1.636-.105-.557-.392-1.097-.77-1.445L9.968.8C9.591.452 9.03.208 8.467.145 7.803.072 7.233.252 6.864.653L4.958 2.709a1.509 1.509 0 0 0 .126 2.161.5.5 0 1 0 .68-.734c-.264-.218-.26-.545-.071-.747L7.597 1.33c.147-.16.425-.228.76-.19.353.038.71.188.931.394l.91.843.001.001zM1.8 9.623c-.222-.205-.4-.549-.465-.897-.062-.332-.016-.614.132-.774l1.905-2.057c.187-.203.512-.232.75.014a.498.498 0 0 0 .706-.028.499.499 0 0 0-.026-.706 1.508 1.508 0 0 0-2.165.04L.734 7.275c-.37.399-.506.98-.382 1.637.105.557.392 1.097.77 1.445l.91.843c.376.35.937.594 1.5.656.664.073 1.234-.106 1.603-.507L7.04 9.291a1.508 1.508 0 0 0-.126-2.16.5.5 0 0 0-.68.734c.264.218.26.545.071.747l-1.904 2.057c-.147.16-.425.228-.76.191-.353-.038-.71-.188-.931-.394l-.91-.843z"> </path> <path d="M8.208 3.614a.5.5 0 0 0-.707.028L3.764 7.677a.5.5 0 0 0 .734.68L8.235 4.32a.5.5 0 0 0-.027-.707"> </path> </g> </symbol> <symbol id="mono-icon-linkedin" viewBox="0 0 14 14" xmlns="http://www.w3.org/2000/svg"> <path d="M9.245 7.318c-.704 0-1.273.57-1.273 1.273v4.454H4.79s.038-7.636 0-8.272h3.182v.945s.985-.919 2.507-.919c1.884 0 3.22 1.364 3.22 4.012v4.234h-3.182V8.591c0-.703-.57-1.273-1.272-1.273zM1.92 3.5h-.018C.94 3.5.318 2.748.318 1.921.318 1.075.96.386 1.94.386s1.583.712 1.603 1.557c0 .828-.622 1.557-1.622 1.557zm1.597 9.545H.336V4.773h3.181v8.272z" fill-rule="evenodd" /> </symbol> <symbol id="action-icon-linkedin" viewBox="0 0 14 14" xmlns="http://www.w3.org/2000/svg"> <g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g transform="translate(-214.000000, -394.000000)" fill="#FFFFFF"> <g transform="translate(100.000000, 386.000000)"> <g transform="translate(114.318373, 8.386273)"> <path d="M8.92627273,6.93190909 C8.22309091,6.93190909 7.65354545,7.50209091 7.65354545,8.20463636 L7.65354545,12.6591818 L4.47172727,12.6591818 C4.47172727,12.6591818 4.50927273,5.02281818 4.47172727,4.38645455 L7.65354545,4.38645455 L7.65354545,5.33145455 C7.65354545,5.33145455 8.63863636,4.41318182 10.1601818,4.41318182 C12.0444545,4.41318182 13.3808182,5.77690909 13.3808182,8.42481818 L13.3808182,12.6591818 L10.199,12.6591818 L10.199,8.20463636 C10.199,7.50209091 9.62945455,6.93190909 8.92627273,6.93190909 L8.92627273,6.93190909 Z M1.60172727,3.11372727 L1.58327273,3.11372727 C0.621727273,3.11372727 0,2.36154545 0,1.53490909 C0,0.689181818 0.640818182,1.77635684e-15 1.62081818,1.77635684e-15 C2.60145455,1.77635684e-15 3.20409091,0.711454545 3.22318182,1.55718182 C3.22318182,2.38445455 2.60145455,3.11372727 1.60172727,3.11372727 L1.60172727,3.11372727 Z M3.199,12.6591818 L0.0171818182,12.6591818 L0.0171818182,4.38645455 L3.199,4.38645455 L3.199,12.6591818 Z" /> </g> </g> </g> </g> </symbol> <symbol id="download" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"> <g fill="none" fill-rule="evenodd"> <g> <g> <g> <path d="M0 0H24V24H0z" transform="translate(-802.000000, -1914.000000) translate(0.000000, 1756.000000) translate(802.000000, 158.000000)" /> <path fill="#000" fill-rule="nonzero" d="M12 2C6.49 2 2 6.49 2 12s4.49 10 10 10 10-4.49 10-10S17.51 2 12 2zm-1 8V6h2v4h3l-4 4-4-4h3zm6 7H7v-2h10v2z" transform="translate(-802.000000, -1914.000000) translate(0.000000, 1756.000000) translate(802.000000, 158.000000)" /> </g> </g> </g> </g> </symbol> <symbol id="mono-icon-pinterest" viewBox="0 0 512 512"> <g> <path d="M256,32C132.3,32,32,132.3,32,256c0,91.7,55.2,170.5,134.1,205.2c-0.6-15.6-0.1-34.4,3.9-51.4 c4.3-18.2,28.8-122.1,28.8-122.1s-7.2-14.3-7.2-35.4c0-33.2,19.2-58,43.2-58c20.4,0,30.2,15.3,30.2,33.6 c0,20.5-13.1,51.1-19.8,79.5c-5.6,23.8,11.9,43.1,35.4,43.1c42.4,0,71-54.5,71-119.1c0-49.1-33.1-85.8-93.2-85.8 c-67.9,0-110.3,50.7-110.3,107.3c0,19.5,5.8,33.3,14.8,43.9c4.1,4.9,4.7,6.9,3.2,12.5c-1.1,4.1-3.5,14-4.6,18 c-1.5,5.7-6.1,7.7-11.2,5.6c-31.3-12.8-45.9-47-45.9-85.6c0-63.6,53.7-139.9,160.1-139.9c85.5,0,141.8,61.9,141.8,128.3 c0,87.9-48.9,153.5-120.9,153.5c-24.2,0-46.9-13.1-54.7-27.9c0,0-13,51.6-15.8,61.6c-4.7,17.3-14,34.5-22.5,48 c20.1,5.9,41.4,9.2,63.5,9.2c123.7,0,224-100.3,224-224C480,132.3,379.7,32,256,32z"></path> </g> </symbol> <symbol id="action-icon-pinterest" viewBox="0 0 30 30" xmlns="http://www.w3.org/2000/svg"> <g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g transform="translate(-135.000000, -526.000000)"> <g transform="translate(100.000000, 526.000000)"> <g transform="translate(35.000000, 0.000000)"> <circle fill="#BD081C" cx="15" cy="15" r="15" /> <path d="M10.125,13.6640625 C10.125,13.1015597 10.2226553,12.5716171 10.4179687,12.0742188 C10.6132822,11.5768204 10.8828108,11.143231 11.2265625,10.7734375 C11.5703142,10.403644 11.9661436,10.0833347 12.4140625,9.8125 C12.8619814,9.54166531 13.3437474,9.33854234 13.859375,9.203125 C14.3750026,9.06770766 14.901039,9 15.4375,9 C16.2604208,9 17.0260381,9.17317535 17.734375,9.51953125 C18.4427119,9.86588715 19.018227,10.3697884 19.4609375,11.03125 C19.903648,11.6927116 20.125,12.4401 20.125,13.2734375 C20.125,13.77344 20.0755213,14.2630184 19.9765625,14.7421875 C19.8776037,15.2213566 19.7213552,15.6822895 19.5078125,16.125 C19.2942698,16.5677105 19.0338557,16.9570296 18.7265625,17.2929688 C18.4192693,17.6289079 18.0416689,17.8971344 17.59375,18.0976562 C17.1458311,18.2981781 16.6536485,18.3984375 16.1171875,18.3984375 C15.7630191,18.3984375 15.4114601,18.315105 15.0625,18.1484375 C14.7135399,17.98177 14.4635424,17.7526056 14.3125,17.4609375 C14.2604164,17.6640635 14.1875005,17.9570293 14.09375,18.3398438 C13.9999995,18.7226582 13.9388022,18.9700515 13.9101562,19.0820312 C13.8815103,19.194011 13.8281254,19.378905 13.75,19.6367188 C13.6718746,19.8945325 13.604167,20.0794265 13.546875,20.1914062 C13.489583,20.303386 13.4062505,20.4661448 13.296875,20.6796875 C13.1874995,20.8932302 13.067709,21.0950511 12.9375,21.2851562 C12.807291,21.4752614 12.6458343,21.7005195 12.453125,21.9609375 L12.34375,22 L12.2734375,21.921875 C12.1953121,21.1041626 12.15625,20.6145841 12.15625,20.453125 C12.15625,19.9739559 12.212239,19.4362009 12.3242187,18.8398438 C12.4361985,18.2434866 12.6093738,17.4947962 12.84375,16.59375 C13.0781262,15.6927038 13.2135415,15.1640633 13.25,15.0078125 C13.0833325,14.6692691 13,14.2291694 13,13.6875 C13,13.2552062 13.1354153,12.8489602 13.40625,12.46875 C13.6770847,12.0885398 14.0208312,11.8984375 14.4375,11.8984375 C14.7552099,11.8984375 15.0026033,12.0039052 15.1796875,12.2148438 C15.3567717,12.4257823 15.4453125,12.6927067 15.4453125,13.015625 C15.4453125,13.3593767 15.3307303,13.8567676 15.1015625,14.5078125 C14.8723947,15.1588574 14.7578125,15.6458317 14.7578125,15.96875 C14.7578125,16.2968766 14.8749988,16.5690093 15.109375,16.7851562 C15.3437512,17.0013032 15.6276025,17.109375 15.9609375,17.109375 C16.2473973,17.109375 16.5130196,17.0442715 16.7578125,16.9140625 C17.0026054,16.7838535 17.2070304,16.606772 17.3710937,16.3828125 C17.5351571,16.158853 17.6809889,15.9114597 17.8085937,15.640625 C17.9361986,15.3697903 18.0351559,15.0820328 18.1054687,14.7773438 C18.1757816,14.4726547 18.2278644,14.1835951 18.2617187,13.9101562 C18.2955731,13.6367174 18.3125,13.3776054 18.3125,13.1328125 C18.3125,12.2317663 18.0273466,11.5299504 17.4570312,11.0273438 C16.8867159,10.5247371 16.1432337,10.2734375 15.2265625,10.2734375 C14.1848906,10.2734375 13.3151077,10.6106737 12.6171875,11.2851562 C11.9192673,11.9596388 11.5703125,12.815099 11.5703125,13.8515625 C11.5703125,14.0807303 11.6028643,14.3020823 11.6679687,14.515625 C11.7330732,14.7291677 11.803385,14.8984369 11.8789062,15.0234375 C11.9544275,15.1484381 12.0247393,15.2669265 12.0898437,15.3789062 C12.1549482,15.490886 12.1875,15.5703123 12.1875,15.6171875 C12.1875,15.7630216 12.1484379,15.9531238 12.0703125,16.1875 C11.9921871,16.4218762 11.8958339,16.5390625 11.78125,16.5390625 C11.7708333,16.5390625 11.7265629,16.5312501 11.6484375,16.515625 C11.3828112,16.4374996 11.1471364,16.2916677 10.9414062,16.078125 C10.7356761,15.8645823 10.5768235,15.618491 10.4648437,15.3398438 C10.352864,15.0611965 10.2682295,14.7799493 10.2109375,14.4960938 C10.1536455,14.2122382 10.125,13.9348972 10.125,13.6640625 Z" fill="#FFFFFF" /> </g> </g> </g> </g> </symbol> <symbol id="icon-fullscreen" xmlns="http://www.w3.org/2000/svg" fill="white" viewBox="0 0 1024 1024"> <path d="M290 236.4l43.9-43.9a8.01 8.01 0 0 0-4.7-13.6L169 160c-5.1-.6-9.5 3.7-8.9 8.9L179 329.1c.8 6.6 8.9 9.4 13.6 4.7l43.7-43.7L370 423.7c3.1 3.1 8.2 3.1 11.3 0l42.4-42.3c3.1-3.1 3.1-8.2 0-11.3L290 236.4zm352.7 187.3c3.1 3.1 8.2 3.1 11.3 0l133.7-133.6 43.7 43.7a8.01 8.01 0 0 0 13.6-4.7L863.9 169c.6-5.1-3.7-9.5-8.9-8.9L694.8 179c-6.6.8-9.4 8.9-4.7 13.6l43.9 43.9L600.3 370a8.03 8.03 0 0 0 0 11.3l42.4 42.4zM845 694.9c-.8-6.6-8.9-9.4-13.6-4.7l-43.7 43.7L654 600.3a8.03 8.03 0 0 0-11.3 0l-42.4 42.3a8.03 8.03 0 0 0 0 11.3L734 787.6l-43.9 43.9a8.01 8.01 0 0 0 4.7 13.6L855 864c5.1.6 9.5-3.7 8.9-8.9L845 694.9zm-463.7-94.6a8.03 8.03 0 0 0-11.3 0L236.3 733.9l-43.7-43.7a8.01 8.01 0 0 0-13.6 4.7L160.1 855c-.6 5.1 3.7 9.5 8.9 8.9L329.2 845c6.6-.8 9.4-8.9 4.7-13.6L290 787.6 423.7 654c3.1-3.1 3.1-8.2 0-11.3l-42.4-42.4z" /> </symbol> <symbol id="mono-icon-tumblr" viewBox="0 0 512 512"> <g> <path d="M321.2,396.3c-11.8,0-22.4-2.8-31.5-8.3c-6.9-4.1-11.5-9.6-14-16.4c-2.6-6.9-3.6-22.3-3.6-46.4V224h96v-64h-96V48h-61.9 c-2.7,21.5-7.5,44.7-14.5,58.6c-7,13.9-14,25.8-25.6,35.7c-11.6,9.9-25.6,17.9-41.9,23.3V224h48v140.4c0,19,2,33.5,5.9,43.5 c4,10,11.1,19.5,21.4,28.4c10.3,8.9,22.8,15.7,37.3,20.5c14.6,4.8,31.4,7.2,50.4,7.2c16.7,0,30.3-1.7,44.7-5.1 c14.4-3.4,30.5-9.3,48.2-17.6v-65.6C363.2,389.4,342.3,396.3,321.2,396.3z"></path> </g> </symbol> <symbol id="mono-icon-twitter" viewBox="0 0 19 16"> <g> <path fill-rule="evenodd" d="M16.48 4.594c.024.094.036.246.036.457 0 1.687-.41 3.316-1.23 4.887-.845 1.664-2.028 2.988-3.552 3.972-1.664 1.102-3.574 1.652-5.73 1.652-2.063 0-3.95-.55-5.66-1.652.258.024.55.035.879.035 1.71 0 3.246-.527 4.605-1.582-.82 0-1.54-.24-2.162-.72a3.671 3.671 0 0 1-1.283-1.811c.234.023.457.035.668.035.328 0 .656-.035.984-.105a3.72 3.72 0 0 1-2.11-1.301 3.54 3.54 0 0 1-.843-2.32v-.07a3.475 3.475 0 0 0 1.652.492A4.095 4.095 0 0 1 1.54 5.227a3.546 3.546 0 0 1-.457-1.776c0-.644.176-1.26.527-1.845a10.18 10.18 0 0 0 3.358 2.742 10.219 10.219 0 0 0 4.236 1.125 5.124 5.124 0 0 1-.07-.844c0-.656.164-1.272.492-1.846a3.613 3.613 0 0 1 1.336-1.353 3.565 3.565 0 0 1 1.828-.492c.54 0 1.037.105 1.494.316.457.21.861.492 1.213.844a7.51 7.51 0 0 0 2.356-.88c-.282.868-.82 1.548-1.618 2.04a7.93 7.93 0 0 0 2.11-.598 8.114 8.114 0 0 1-1.864 1.934z"> </path> </g> </symbol> <symbol id="action-icon-twitter" viewBox="0 0 30 30" xmlns="http://www.w3.org/2000/svg"> <g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g transform="translate(-170.000000, -526.000000)"> <g transform="translate(100.000000, 526.000000)"> <g transform="translate(70.000000, 0.000000)"> <circle fill="#1DA1F2" cx="15" cy="15" r="15" /> <g transform="translate(9.000000, 10.000000)" fill="#FFFFFF"> <path d="M10.5859761,1.45966124 C11.0943048,1.17128539 11.4846922,0.714562198 11.6684736,0.170424684 C11.1928015,0.43748706 10.6659497,0.631385646 10.1051245,0.735917217 C9.65605179,0.28301632 9.01621859,0 8.30813124,0 C6.94840338,0 5.84610995,1.04340456 5.84610995,2.33027296 C5.84610995,2.51295392 5.86788105,2.69077393 5.90984308,2.86132325 C3.86375508,2.76414545 2.04968726,1.83640698 0.835421925,0.42656027 C0.623504883,0.770733376 0.502095907,1.17103611 0.502095907,1.59809494 C0.502095907,2.40655275 0.936727752,3.119827 1.59732251,3.53774555 C1.19376715,3.52565545 0.814133655,3.42079151 0.482212224,3.2462537 C0.482036651,3.25597563 0.481992758,3.26573911 0.481992758,3.27554414 C0.481992758,4.40461806 1.33062658,5.34648241 2.45688577,5.56057271 C2.25027982,5.61379407 2.03278832,5.64225358 1.80827389,5.64225358 C1.64959947,5.64225358 1.49540217,5.62767068 1.34506749,5.60045757 C1.65837814,6.52628488 2.56758477,7.20000665 3.64490289,7.21886886 C2.80228245,7.84385631 1.74076594,8.21636429 0.587292878,8.21636429 C0.388587732,8.21636429 0.192603972,8.2053544 0,8.1838332 C1.08956436,8.84500785 2.38362778,9.23076923 3.7739493,9.23076923 C8.30238121,9.23076923 10.7786678,5.67993646 10.7786678,2.60049288 C10.7786678,2.49945124 10.7762537,2.3989497 10.7715571,2.29902981 C11.2525403,1.97047828 11.6699221,1.56003814 12,1.09272053 C11.5584769,1.27806049 11.0840338,1.40336542 10.5859761,1.45966124 Z" /> </g> </g> </g> </g> </g> </symbol> <symbol id="mono-icon-youtube" viewBox="0 0 512 512"> <g> <path fill-rule="evenodd" d="M508.6,148.8c0-45-33.1-81.2-74-81.2C379.2,65,322.7,64,265,64c-3,0-6,0-9,0s-6,0-9,0c-57.6,0-114.2,1-169.6,3.6 c-40.8,0-73.9,36.4-73.9,81.4C1,184.6-0.1,220.2,0,255.8C-0.1,291.4,1,327,3.4,362.7c0,45,33.1,81.5,73.9,81.5 c58.2,2.7,117.9,3.9,178.6,3.8c60.8,0.2,120.3-1,178.6-3.8c40.9,0,74-36.5,74-81.5c2.4-35.7,3.5-71.3,3.4-107 C512.1,220.1,511,184.5,508.6,148.8z M207,353.9V157.4l145,98.2L207,353.9z"></path> </g> </symbol> <symbol id="icon-magnify" viewBox="0 0 30 30" xmlns="http://www.w3.org/2000/svg"> <path d="M21.876 18.281l-.314.548L30 27.343 27.343 30l-8.437-8.516-.546.392c-2.083 1.3-4.245 1.951-6.486 1.951-3.28 0-6.08-1.171-8.398-3.515C1.16 17.968 0 15.156 0 11.874c0-3.28 1.159-6.08 3.476-8.398C5.794 1.16 8.595 0 11.876 0c3.282 0 6.079 1.159 8.398 3.476 2.318 2.318 3.477 5.119 3.477 8.4a11.786 11.786 0 0 1-1.875 6.405zm-3.36-13.046c-1.823-1.824-4.037-2.736-6.642-2.736-2.604 0-4.818.912-6.639 2.736-1.824 1.822-2.736 4.035-2.736 6.64 0 2.606.912 4.818 2.736 6.64 1.822 1.823 4.035 2.734 6.64 2.734 2.606 0 4.818-.91 6.64-2.733 1.876-1.875 2.813-4.088 2.813-6.642 0-2.55-.937-4.764-2.812-6.639z" fill-rule="evenodd" /> </symbol> <symbol id="burger-menu" viewBox="0 0 14 10"> <g> <path fill-rule="evenodd" d="M0 5.5v-1h14v1H0zM0 1V0h14v1H0zm0 9V9h14v1H0z"></path> </g> </symbol> <symbol id="close-x" viewBox="0 0 14 14" xmlns="http://www.w3.org/2000/svg"> <g> <path fill-rule="nonzero" d="M6.336 7L0 .664.664 0 7 6.336 13.336 0 14 .664 7.664 7 14 13.336l-.664.664L7 7.664.664 14 0 13.336 6.336 7z"> </path> </g> </symbol> <symbol id="share-more-arrow" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;"> <g> <g> <path d="M512,241.7L273.643,3.343v156.152c-71.41,3.744-138.015,33.337-188.958,84.28C30.075,298.384,0,370.991,0,448.222v60.436 l29.069-52.985c45.354-82.671,132.173-134.027,226.573-134.027c5.986,0,12.004,0.212,18.001,0.632v157.779L512,241.7z M255.642,290.666c-84.543,0-163.661,36.792-217.939,98.885c26.634-114.177,129.256-199.483,251.429-199.483h15.489V78.131 l163.568,163.568L304.621,405.267V294.531l-13.585-1.683C279.347,291.401,267.439,290.666,255.642,290.666z"> </path> </g> </g> </symbol> <symbol id="chevron" viewBox="0 0 100 100"> <g> <path d="M22.4566257,37.2056786 L-21.4456527,71.9511488 C-22.9248661,72.9681457 -24.9073712,72.5311671 -25.8758148,70.9765924 L-26.9788683,69.2027424 C-27.9450684,67.6481676 -27.5292733,65.5646602 -26.0500598,64.5484493 L20.154796,28.2208967 C21.5532435,27.2597011 23.3600078,27.2597011 24.759951,28.2208967 L71.0500598,64.4659264 C72.5292733,65.4829232 72.9450684,67.5672166 71.9788683,69.1217913 L70.8750669,70.8956413 C69.9073712,72.4502161 67.9241183,72.8848368 66.4449048,71.8694118 L22.4566257,37.2056786 Z" id="Transparent-Chevron" transform="translate(22.500000, 50.000000) rotate(90.000000) translate(-22.500000, -50.000000) "></path> </g> </symbol> <symbol id="chevron-down" viewBox="0 0 10 6" xmlns="http://www.w3.org/2000/svg"> <path d="M5.108 4.088L.965.158a.587.587 0 0 0-.8 0 .518.518 0 0 0 0 .758L5.13 5.625 9.845.905a.517.517 0 0 0-.021-.758.588.588 0 0 0-.8.02l-3.916 3.92z" fill-rule="evenodd" /> </symbol> <symbol id="chevron-up" viewBox="0 0 284.929 284.929" xmlns="http://www.w3.org/2000/svg"> <path d="M282.082 195.285L149.028 62.24c-1.901-1.903-4.088-2.856-6.562-2.856s-4.665.953-6.567 2.856L2.856 195.285C.95 197.191 0 199.378 0 201.853c0 2.474.953 4.664 2.856 6.566l14.272 14.271c1.903 1.903 4.093 2.854 6.567 2.854s4.664-.951 6.567-2.854l112.204-112.202 112.208 112.209c1.902 1.903 4.093 2.848 6.563 2.848 2.478 0 4.668-.951 6.57-2.848l14.274-14.277c1.902-1.902 2.847-4.093 2.847-6.566.001-2.476-.944-4.666-2.846-6.569z" /> </symbol> <symbol id="icon-arrow-down" viewBox="0 0 10 6" xmlns="http://www.w3.org/2000/svg"> <path d="M5.108 4.088L.965.158a.587.587 0 0 0-.8 0 .518.518 0 0 0 0 .758L5.13 5.625 9.845.905a.517.517 0 0 0-.021-.758.588.588 0 0 0-.8.02l-3.916 3.92z" fill="inherit" fill-rule="evenodd" /> </symbol> <symbol id="play-arrow" viewBox="0 0 30 30"> <g fill-rule="evenodd"> <path d="M9 9l12 6-12 6z"></path> </g> </symbol> <symbol id="play-icon" viewBox="0 0 50 50" xmlns="http://www.w3.org/2000/svg"> <g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g transform="translate(-341.000000, -11574.000000)" fill-rule="nonzero"> <g transform="translate(320.000000, 11422.000000)"> <g transform="translate(21.000000, 152.000000)"> <circle id="Oval" fill="#FFFFFF" cx="25" cy="25" r="24" /> <path d="M25,0 C11.2,0 0,11.2 0,25 C0,38.8 11.2,50 25,50 C38.8,50 50,38.8 50,25 C50,11.2 38.8,0 25,0 Z" fill="#EE0120" /> <polygon fill="#FFFFFF" points="18 36.25 18 13.75 33 25" /> </g> </g> </g> </g> </symbol> <symbol id="grid" viewBox="0 0 32 32"> <g> <path d="M6.4,5.7 C6.4,6.166669 6.166669,6.4 5.7,6.4 L0.7,6.4 C0.233331,6.4 0,6.166669 0,5.7 L0,0.7 C0,0.233331 0.233331,0 0.7,0 L5.7,0 C6.166669,0 6.4,0.233331 6.4,0.7 L6.4,5.7 Z M19.2,5.7 C19.2,6.166669 18.966669,6.4 18.5,6.4 L13.5,6.4 C13.033331,6.4 12.8,6.166669 12.8,5.7 L12.8,0.7 C12.8,0.233331 13.033331,0 13.5,0 L18.5,0 C18.966669,0 19.2,0.233331 19.2,0.7 L19.2,5.7 Z M32,5.7 C32,6.166669 31.766669,6.4 31.3,6.4 L26.3,6.4 C25.833331,6.4 25.6,6.166669 25.6,5.7 L25.6,0.7 C25.6,0.233331 25.833331,0 26.3,0 L31.3,0 C31.766669,0 32,0.233331 32,0.7 L32,5.7 Z M6.4,18.5 C6.4,18.966669 6.166669,19.2 5.7,19.2 L0.7,19.2 C0.233331,19.2 0,18.966669 0,18.5 L0,13.5 C0,13.033331 0.233331,12.8 0.7,12.8 L5.7,12.8 C6.166669,12.8 6.4,13.033331 6.4,13.5 L6.4,18.5 Z M19.2,18.5 C19.2,18.966669 18.966669,19.2 18.5,19.2 L13.5,19.2 C13.033331,19.2 12.8,18.966669 12.8,18.5 L12.8,13.5 C12.8,13.033331 13.033331,12.8 13.5,12.8 L18.5,12.8 C18.966669,12.8 19.2,13.033331 19.2,13.5 L19.2,18.5 Z M32,18.5 C32,18.966669 31.766669,19.2 31.3,19.2 L26.3,19.2 C25.833331,19.2 25.6,18.966669 25.6,18.5 L25.6,13.5 C25.6,13.033331 25.833331,12.8 26.3,12.8 L31.3,12.8 C31.766669,12.8 32,13.033331 32,13.5 L32,18.5 Z M6.4,31.3 C6.4,31.766669 6.166669,32 5.7,32 L0.7,32 C0.233331,32 0,31.766669 0,31.3 L0,26.3 C0,25.833331 0.233331,25.6 0.7,25.6 L5.7,25.6 C6.166669,25.6 6.4,25.833331 6.4,26.3 L6.4,31.3 Z M19.2,31.3 C19.2,31.766669 18.966669,32 18.5,32 L13.5,32 C13.033331,32 12.8,31.766669 12.8,31.3 L12.8,26.3 C12.8,25.833331 13.033331,25.6 13.5,25.6 L18.5,25.6 C18.966669,25.6 19.2,25.833331 19.2,26.3 L19.2,31.3 Z M32,31.3 C32,31.766669 31.766669,32 31.3,32 L26.3,32 C25.833331,32 25.6,31.766669 25.6,31.3 L25.6,26.3 C25.6,25.833331 25.833331,25.6 26.3,25.6 L31.3,25.6 C31.766669,25.6 32,25.833331 32,26.3 L32,31.3 Z"></path> </g> </symbol> <symbol id="filter" viewBox="0 0 16 12"> <path d="M0 2V0h16v2H0zm2.4 5V5h11.2v2H2.4zm2.4 5v-2h6.4v2H4.8z"></path> </symbol> <symbol id="icon-filter" viewBox="0 0 512 512"> <path fill="currentColor" d="M487.976 0H24.028C2.71 0-8.047 25.866 7.058 40.971L192 225.941V432c0 7.831 3.821 15.17 10.237 19.662l80 55.98C298.02 518.69 320 507.493 320 487.98V225.941l184.947-184.97C520.021 25.896 509.338 0 487.976 0z"> </path> </symbol> <symbol id="icon-radio-on" viewBox="0 0 24 24"> <path fill="currentColor" fill-rule="nonzero" d="M12 7c-2.76 0-5 2.24-5 5s2.24 5 5 5 5-2.24 5-5-2.24-5-5-5zm0-5C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z" /> </symbol> <symbol id="icon-radio-off" viewBox="0 0 24 24"> <path fill="currentColor" fill-rule="nonzero" d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z" /> </symbol> <symbol id="icon-pause" viewBox="0 0 13 16"> <rect width="4.636" height="16" rx="2.318" /> <rect width="4.636" height="16" x="7.727" rx="2.318" /> </symbol> <symbol id="icon-plus" viewBox="0 0 14 14" height="14px" width="14px"> <path d="M13, 6H8V1A1, 1, 0, 0, 0, 6, 1V6H1A1, 1, 0, 0, 0, 1, 8H6v5a1, 1, 0, 0, 0, 2, 0V8h5a1, 1, 0, 0, 0, 0-2Z" /> </symbol> <symbol id="icon-minus" viewBox="0 0 14 14" height="14px" width="14px"> <path d="M13, 8H1A1, 1, 0, 0, 1, 1, 6H13a1, 1, 0, 0, 1, 0, 2Z" /> </symbol> <symbol id="amazon-alexa" fill="none" viewBox="0 0 14 14"> <path clip-rule="evenodd" d="m52.4998 105c-28.9946 0-52.4998-23.5055-52.4998-52.5003 0-26.6214 19.8151-48.61142 45.5003-52.03433v10.57883c0 2.9832-1.8814 5.6636-4.7091 6.6127-14.8197 4.9787-25.4216 19.1433-25.0311 35.7287.4754 20.1911 16.923 36.0663 37.1187 35.8628 20.122-.2035 36.3714-16.5785 36.3714-36.7487 0-.4597-.0113-.9172-.0283-1.3721-.004-.102-.0072-.2048-.0113-.307-.0194-.4228-.0452-.8446-.0784-1.2639-.0097-.1335-.0234-.2666-.0355-.3998-.0259-.2928-.0558-.5837-.0889-.8739-.0372-.3297-.08-.6576-.1261-.9838-.0202-.1492-.0404-.2988-.063-.4467-4.4995-29.6389-43.1025-46.296896-43.3144-46.388077 2.2893-.304462 4.6239-.464423 6.9955-.464423 28.9951 0 52.5002 23.5048 52.5002 52.4997 0 28.9948-23.5051 52.5003-52.5002 52.5003z" fill="#5fcaf4" fill-rule="evenodd" transform="matrix(.133333 0 0 -.133333 0 14)" /> </symbol> <symbol id="apple" viewBox="0 0 511.86 511.86"> <rect fill="#822cbe" width="511.86" height="511.86" rx="113.87" /> <path fill="#ffffff" d="M240.44,448.26c-15.27-5.46-18.54-12.88-24.81-56.38-7.28-50.55-8.87-81.84-4.65-91.75,5.59-13.14,20.78-20.6,42-20.68,21.07-.09,36.39,7.44,42,20.68,4.24,9.89,2.65,41.2-4.64,91.75-4.95,35.32-7.67,44.25-14.5,50.25-9.38,8.31-22.69,10.61-35.32,6.14Zm-65.22-51.87c-52.73-25.94-86.51-69.82-98.79-128.2-3.07-15.07-3.59-51-.69-64.84,7.68-37.11,22.36-66.13,46.75-91.79,35.15-37.06,80.37-56.65,130.7-56.65,49.82,0,94.86,19.23,129.16,55.18,26.1,27.13,40.77,55.84,48.28,93.67,2.56,12.59,2.56,46.92.17,61.08a181.4,181.4,0,0,1-69.1,113c-13,9.79-44.7,26.89-49.82,26.89-1.88,0-2.05-1.94-1.19-9.81,1.53-12.63,3.07-15.25,10.23-18.26,11.44-4.77,30.89-18.63,42.83-30.61a163,163,0,0,0,42.82-75.41c4.44-17.57,3.93-56.64-1-74.73C390,138.36,343.1,93.66,285.61,81.72c-16.73-3.42-47.1-3.42-64,0-58.18,11.94-106.29,58.86-121,117.89-3.92,16-3.92,55.11,0,71.15,9.73,39.07,35,74.9,68.08,96.23a147.45,147.45,0,0,0,17.58,10.07c7.16,3.07,8.7,5.63,10.06,18.25.85,7.68.68,9.9-1.19,9.9-1.2,0-9.9-3.75-19.11-8.19ZM175.9,327c-17.75-14.16-33.44-39.28-39.93-63.91-3.92-14.88-3.92-43.17.17-58,10.75-40.06,40.27-71.12,81.22-85.71,14-4.94,45-6,62.27-2.25C339,130.33,381.15,189.79,373,248.77c-3.24,23.77-11.43,43.29-25.93,61.42-7.17,9.16-24.57,24.54-27.64,24.54-.51,0-1-5.8-1-12.87V309l8.88-10.58c33.44-40.06,31.05-96-5.46-132.74-14.16-14.29-30.54-22.69-51.7-26.56-13.65-2.53-16.55-2.53-30.88-.17-21.76,3.55-38.61,12-53.58,26.78C148.94,202,146.55,258.29,180,298.38L188.8,309v13c0,7.17-.57,13-1.27,13s-5.63-3.41-10.92-7.68Zm59.2-69.66c-15.18-7.07-23.37-20.39-23.54-37.76,0-15.61,8.7-29.23,23.71-37.2,9.56-5,26.45-5,36,0a46.34,46.34,0,0,1,22.18,26.85c9.9,33.65-25.76,63.13-58,48.07Z" transform="translate(-0.14 -0.14)" /> <circle fill="#ffffff" cx="255.74" cy="221.24" r="42.55" /> <path fill="#ffffff" d="M260,280.42a83.61,83.61,0,0,1,14.25,2.9,51.55,51.55,0,0,1,14.26,7.13c3.76,2.73,6.49,5.56,8.19,9s2.56,7.54,3.07,14.25c.34,6.72.34,16-1.19,33.44s-4.61,42.79-7,59.08-4.09,23.55-6.31,28.84a25.82,25.82,0,0,1-18.94,16.55,41,41,0,0,1-9.89.85,42.41,42.41,0,0,1-9.9-.85c-3.92-.86-9-2.39-12.8-5.46-3.92-3.07-6.48-7.51-8.53-13.31s-3.58-12.8-5.63-26.79-4.78-34.8-6.48-50.67-2.39-26.79-2.53-34.13.17-11,1-14.5a28.93,28.93,0,0,1,4.09-9.38,31.14,31.14,0,0,1,6.83-7,27.87,27.87,0,0,1,8-4.3A60.8,60.8,0,0,1,241.35,283c4.43-.85,9.55-1.7,12.18-2.05a13.34,13.34,0,0,1,5.56,0Z" transform="translate(-0.14 -0.14)" /> </symbol> <symbol id="google" fill="none" viewBox="0 0 14 14"> <path d="m0 0v2.12148.84795 2.12148h1.75v-2.12148-.84795-2.12148z" fill="#fab908" transform="translate(6.125 4.45453)" /> <path d="m.875 1.75c.48325 0 .875-.39175.875-.875 0-.483249-.39175-.875-.875-.875-.483249 0-.875.391751-.875.875 0 .48325.391751.875.875.875z" fill="#0066d9" transform="translate(0 5.64764)" /> <path d="m.875 1.75c.48325 0 .875-.39175.875-.875 0-.483249-.39175-.875-.875-.875-.483249 0-.875.391751-.875.875 0 .48325.391751.875.875.875z" fill="#0066d9" transform="translate(0 6.60236)" /> <path d="m1.75 0h-1.75v.954546h1.75z" fill="#0066d9" transform="translate(0 6.52264)" /> <path d="m.875 1.75c.48325 0 .875-.39175.875-.875 0-.483249-.39175-.875-.875-.875-.483249 0-.875.391751-.875.875 0 .48325.391751.875.875.875z" fill="#4285f4" transform="translate(12.25 6.60236)" /> <path d="m.875 1.75c.48325 0 .875-.39175.875-.875 0-.483249-.39175-.875-.875-.875-.483249 0-.875.391751-.875.875 0 .48325.391751.875.875.875z" fill="#4285f4" transform="translate(12.25 5.64764)" /> <path d="m1.75 0h-1.75v.954546h1.75z" fill="#4285f4" transform="matrix(-1 0 0 -1 14 7.47736)" /> <path d="m.875 1.75c.48325 0 .875-.39175.875-.875 0-.483249-.39175-.875-.875-.875-.483249 0-.875.391751-.875.875 0 .48325.391751.875.875.875z" fill="#ea4335" transform="translate(3.02274 8.51141)" /> <path d="m.875 1.75c.48325 0 .875-.39175.875-.875 0-.483249-.39175-.875-.875-.875-.483249 0-.875.391751-.875.875 0 .48325.391751.875.875.875z" fill="#ea4335" transform="translate(3.02274 9.46594)" /> <path d="m1.75 0h-1.75v.954546h1.75z" fill="#ea4335" transform="translate(3.02274 9.38641)" /> <path d="m.875 1.75c.48325 0 .875-.39175.875-.875 0-.483249-.39175-.875-.875-.875-.483249 0-.875.391751-.875.875 0 .48325.391751.875.875.875z" fill="#ea4335" transform="translate(3.02274 2.78406)" /> <path d="m.875 1.75c.48325 0 .875-.39175.875-.875 0-.483249-.39175-.875-.875-.875-.483249 0-.875.391751-.875.875 0 .48325.391751.875.875.875z" fill="#ea4335" transform="translate(3.02274 5.88641)" /> <path d="m1.75 0h-1.75v3.12216h1.75z" fill="#ea4335" transform="translate(3.02274 3.65906)" /> <path d="m.875 1.75c.48325 0 .875-.39175.875-.875 0-.483249-.39175-.875-.875-.875-.483249 0-.875.391751-.875.875 0 .48325.391751.875.875.875z" fill="#34a853" transform="translate(9.22726 3.73859)" /> <path d="m.875 1.75c.48325 0 .875-.39175.875-.875 0-.483249-.39175-.875-.875-.875-.483249 0-.875.391751-.875.875 0 .48325.391751.875.875.875z" fill="#34a853" transform="translate(9.22726 2.78406)" /> <path d="m1.75 0h-1.75v.954546h1.75z" fill="#34a853" transform="matrix(-1 0 0 -1 10.9773 4.61359)" /> <g fill="#fab908"> <path d="m.875 1.75c.48325 0 .875-.39175.875-.875 0-.483249-.39175-.875-.875-.875-.483249 0-.875.391751-.875.875 0 .48325.391751.875.875.875z" transform="translate(6.125 .954529)" /> <path d="m.875 1.75c.48325 0 .875-.39175.875-.875 0-.483249-.39175-.875-.875-.875-.483249 0-.875.391751-.875.875 0 .48325.391751.875.875.875z" transform="translate(6.125)" /> <path d="m1.75 0h-1.75v.954546h1.75z" transform="matrix(-1 0 0 -1 7.875 1.82953)" /> <path d="m.875 1.75c.48325 0 .875-.39175.875-.875 0-.483249-.39175-.875-.875-.875-.483249 0-.875.391751-.875.875 0 .48325.391751.875.875.875z" transform="translate(6.125 12.25)" /> <path d="m.875 1.75c.48325 0 .875-.39175.875-.875 0-.483249-.39175-.875-.875-.875-.483249 0-.875.391751-.875.875 0 .48325.391751.875.875.875z" transform="translate(6.125 11.2955)" /> <path d="m1.75 0h-1.75v.954546h1.75z" transform="matrix(-1 0 0 -1 7.875 13.125)" /> </g> <path d="m.875 1.75c.48325 0 .875-.39175.875-.875 0-.483249-.39175-.875-.875-.875-.483249 0-.875.391751-.875.875 0 .48325.391751.875.875.875z" fill="#34a853" transform="translate(9.22726 9.46594)" /> <path d="m.875 1.75c.48325 0 .875-.39175.875-.875 0-.483249-.39175-.875-.875-.875-.483249 0-.875.391751-.875.875 0 .48325.391751.875.875.875z" fill="#34a853" transform="translate(9.22726 6.36359)" /> <path d="m1.75 0h-1.75v3.10227h1.75z" fill="#34a853" transform="matrix(-1 0 0 -1 10.9773 10.3409)" /> <path d="m.875 1.75c.48325 0 .875-.39175.875-.875 0-.483249-.39175-.875-.875-.875-.483249 0-.875.391751-.875.875 0 .48325.391751.875.875.875z" fill="#fab908" transform="translate(6.125 3.57953)" /> <path d="m.875 1.75c.48325 0 .875-.39175.875-.875 0-.483249-.39175-.875-.875-.875-.483249 0-.875.391751-.875.875 0 .48325.391751.875.875.875z" fill="#fab908" transform="translate(6.125 8.67047)" /> </symbol> <symbol id="npr-one" viewBox="0 0 15 16"> <g clip-rule="evenodd" fill-rule="evenodd"> <path d="m-.00000001 3.99903 3.11681001 1.9192c.6747-1.24356 1.93544-2.08032 3.37935-2.08032v-3.83791c-2.77571 0-5.1993 1.60843-6.49616001 3.99903z" fill="#d61900" transform="translate(1.00378)" /> <path d="m3.78823 5.28599c-.12325-.40495-.18984-.83705-.18984-1.28579 0-.75804.19011-1.4688.52217-2.081-1.53085-.942623-2.25153-1.386398-3.11681-1.91919993-.638301 1.17671993-1.00375 2.54287993-1.00375 4.00019993 0 1.45723.365449 2.82349 1.00375 4.0002l1.97257-1.21466z" fill="#f30" transform="translate(0 4.00128)" /> <path d="m-.00000001 1.21467c1.29686001 2.3906 3.72045001 3.99903 6.49616001 3.99903v-3.83801c-1.15017 0-2.18402-.530854-2.89814-1.37539816h-1.62563l.00018-.00029136z" fill="#83aeed" transform="translate(1.00378 10.7867)" /> <path d="m6.49625 1.9192-3.1168-1.91919949c-.67471 1.24355949-1.93535 2.08022949-3.37944981 2.08022949v3.838c2.77589981 0 5.19938981-1.60843 6.49624981-3.99903z" fill="#3266cc" transform="translate(7.50012 10.0768)" /> <path d="m.522174 4.0002c0 .75815-.190114 1.46881-.52217447 2.08101l3.11681047 1.91919c.63839-1.17671 1.00375-2.54297 1.00375-4.0002 0-1.45732-.36536-2.82348-1.00375-4.00019993-.86528.53280193-1.58596.97657693-3.11681047 1.91919993.33206047.6122.52217447 1.32296.52217447 2.081z" fill="#3a3a3a" transform="translate(10.8795 4.00128)" /> <path d="m.00000019 3.83791c1.44409981 0 2.70473981.83676 3.37944981 2.08032l3.1168-1.9192c-1.29686-2.3906-3.72044-3.99903-6.49624981-3.99903z" fill="#191919" transform="translate(7.50012)" /> </g> </symbol> <symbol id="overcast" viewBox="0 0 365 365" fill="none"> <g xmlns="http://www.w3.org/2000/svg" id="surface1"> <path style=" stroke:none;fill-rule:nonzero;fill:rgb(96.099854%,49.398804%,12.5%);fill-opacity:1;" d="M 90.179688 274.820313 C 66.550781 251.195313 51.9375 218.554688 51.9375 182.5 C 51.9375 146.445313 66.550781 113.804688 90.179688 90.179688 L 101.789063 101.789063 C 81.136719 122.445313 68.359375 150.980469 68.359375 182.5 C 68.359375 214.019531 81.136719 242.554688 101.789063 263.210938 Z M 125.890625 239.109375 C 111.402344 224.621094 102.441406 204.609375 102.441406 182.5 C 102.441406 160.390625 111.402344 140.378906 125.890625 125.890625 L 137.503906 137.503906 C 125.988281 149.019531 118.863281 164.925781 118.863281 182.5 C 118.863281 200.074219 125.988281 215.980469 137.503906 227.496094 Z M 227.496094 227.496094 C 239.011719 215.980469 246.136719 200.074219 246.136719 182.5 C 246.136719 164.925781 239.011719 149.019531 227.496094 137.503906 L 239.109375 125.890625 C 253.597656 140.378906 262.558594 160.390625 262.558594 182.5 C 262.558594 204.609375 253.597656 224.621094 239.109375 239.109375 Z M 274.820313 274.820313 L 263.210938 263.210938 C 283.863281 242.554688 296.640625 214.019531 296.640625 182.5 C 296.640625 150.980469 283.863281 122.445313 263.210938 101.789063 L 274.820313 90.179688 C 298.449219 113.804688 313.0625 146.445313 313.0625 182.5 C 313.0625 218.554688 298.449219 251.195313 274.820313 274.820313 Z M 182.5 16.640625 C 90.898438 16.640625 16.640625 90.898438 16.640625 182.5 C 16.640625 255.765625 64.148438 317.933594 130.039063 339.886719 L 172.632813 212.101563 C 160.238281 207.972656 151.296875 196.28125 151.296875 182.5 C 151.296875 165.265625 165.265625 151.296875 182.5 151.296875 C 199.734375 151.296875 213.703125 165.265625 213.703125 182.5 C 213.703125 196.28125 204.761719 207.972656 192.367188 212.101563 L 234.960938 339.886719 C 300.851563 317.933594 348.359375 255.765625 348.359375 182.5 C 348.359375 90.898438 274.101563 16.640625 182.5 16.640625 Z M 202.902344 347.109375 C 195.519531 341.375 188.371094 335.058594 181.539063 328.164063 C 174.933594 334.996094 168.046875 341.269531 160.945313 346.96875 C 168 347.882813 175.195313 348.359375 182.5 348.359375 C 189.40625 348.359375 196.214844 347.933594 202.902344 347.109375 Z M 191.792969 316.824219 C 200.890625 327.066406 210.65625 336.113281 220.847656 343.898438 C 221.527344 343.734375 222.203125 343.570313 222.878906 343.402344 L 205.261719 299.355469 C 200.972656 305.472656 196.472656 311.300781 191.792969 316.824219 Z M 182.257813 305.34375 C 187.945313 298.007813 193.300781 290.164063 198.257813 281.84375 L 182.5 242.453125 L 166.550781 282.324219 C 171.425781 290.464844 176.679688 298.148438 182.257813 305.34375 Z M 143.78125 343.804688 C 153.617188 336.28125 163.054688 327.59375 171.875 317.78125 C 167.367188 312.621094 163.03125 307.179688 158.894531 301.46875 L 142.121094 343.402344 C 142.671875 343.539063 143.226563 343.671875 143.78125 343.804688 Z M 182.5 364.796875 C 81.820313 364.796875 0.207031 283.179688 0.207031 182.5 C 0.207031 81.820313 81.820313 0.203125 182.5 0.203125 C 283.179688 0.203125 364.796875 81.820313 364.796875 182.5 C 364.796875 283.179688 283.179688 364.796875 182.5 364.796875 " /> <path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 90.179688 274.820313 L 90.324219 274.675781 C 66.734375 251.085938 52.140625 218.496094 52.140625 182.5 C 52.140625 146.503906 66.730469 113.914063 90.324219 90.324219 L 90.179688 90.179688 L 90.03125 90.324219 L 101.644531 101.9375 L 101.789063 101.789063 L 101.644531 101.644531 C 80.953125 122.339844 68.15625 150.925781 68.15625 182.5 C 68.15625 214.074219 80.953125 242.660156 101.644531 263.355469 L 101.789063 263.210938 L 101.644531 263.0625 L 90.03125 274.675781 L 90.179688 274.820313 L 90.324219 274.675781 L 90.179688 274.820313 L 90.324219 274.96875 L 102.082031 263.210938 L 101.9375 263.0625 C 81.316406 242.445313 68.566406 213.964844 68.566406 182.5 C 68.566406 151.035156 81.316406 122.554688 101.9375 101.9375 L 102.082031 101.789063 L 90.179688 89.886719 L 90.03125 90.03125 C 66.367188 113.695313 51.730469 146.390625 51.730469 182.5 C 51.730469 218.609375 66.367188 251.304688 90.03125 274.96875 L 90.179688 275.113281 L 90.324219 274.96875 Z M 125.890625 239.109375 L 126.035156 238.964844 C 111.582031 224.515625 102.644531 204.550781 102.644531 182.5 C 102.644531 160.449219 111.582031 140.484375 126.035156 126.035156 L 125.890625 125.890625 L 125.742188 126.035156 L 137.355469 137.648438 L 137.503906 137.503906 L 137.355469 137.355469 C 125.804688 148.910156 118.660156 164.871094 118.660156 182.5 C 118.660156 200.128906 125.804688 216.089844 137.355469 227.644531 L 137.503906 227.496094 L 137.355469 227.351563 L 125.742188 238.964844 L 125.890625 239.109375 L 126.035156 238.964844 L 125.890625 239.109375 L 126.035156 239.257813 L 137.792969 227.496094 L 137.648438 227.351563 C 126.167969 215.871094 119.070313 200.015625 119.070313 182.5 C 119.070313 164.984375 126.167969 149.128906 137.648438 137.648438 L 137.792969 137.503906 L 125.890625 125.597656 L 125.742188 125.742188 C 111.21875 140.269531 102.234375 160.335938 102.234375 182.5 C 102.234375 204.664063 111.21875 224.730469 125.742188 239.257813 L 125.890625 239.402344 L 126.035156 239.257813 Z M 227.496094 227.496094 L 227.644531 227.644531 C 239.195313 216.089844 246.339844 200.128906 246.339844 182.5 C 246.339844 164.871094 239.195313 148.910156 227.644531 137.355469 L 227.496094 137.503906 L 227.644531 137.648438 L 239.257813 126.035156 L 239.109375 125.890625 L 238.964844 126.035156 C 253.417969 140.484375 262.355469 160.449219 262.355469 182.5 C 262.355469 204.550781 253.417969 224.515625 238.964844 238.964844 L 239.109375 239.109375 L 239.257813 238.964844 L 227.644531 227.351563 L 227.496094 227.496094 L 227.644531 227.644531 L 227.496094 227.496094 L 227.351563 227.644531 L 239.109375 239.402344 L 239.257813 239.257813 C 253.78125 224.730469 262.765625 204.664063 262.765625 182.5 C 262.765625 160.335938 253.78125 140.269531 239.257813 125.742188 L 239.109375 125.597656 L 227.207031 137.503906 L 227.351563 137.648438 C 238.832031 149.128906 245.929688 164.984375 245.929688 182.5 C 245.929688 200.015625 238.832031 215.871094 227.351563 227.351563 L 227.207031 227.496094 L 227.351563 227.644531 Z M 274.820313 274.820313 L 274.96875 274.675781 L 263.355469 263.0625 L 263.210938 263.210938 L 263.355469 263.355469 C 284.046875 242.660156 296.84375 214.074219 296.84375 182.5 C 296.84375 150.925781 284.046875 122.339844 263.355469 101.644531 L 263.210938 101.789063 L 263.355469 101.9375 L 274.96875 90.324219 L 274.820313 90.179688 L 274.675781 90.324219 C 298.265625 113.914063 312.855469 146.503906 312.855469 182.5 C 312.855469 218.496094 298.265625 251.085938 274.675781 274.675781 L 274.820313 274.820313 L 274.96875 274.675781 L 274.820313 274.820313 L 274.96875 274.96875 C 298.632813 251.304688 313.269531 218.609375 313.269531 182.5 C 313.269531 146.390625 298.632813 113.695313 274.96875 90.03125 L 274.820313 89.886719 L 262.917969 101.789063 L 263.0625 101.9375 C 283.683594 122.554688 296.433594 151.035156 296.433594 182.5 C 296.433594 213.964844 283.683594 242.445313 263.0625 263.0625 L 262.917969 263.210938 L 274.820313 275.113281 L 274.96875 274.96875 Z M 182.5 16.640625 L 182.5 16.433594 C 90.785156 16.433594 16.433594 90.785156 16.433594 182.5 C 16.433594 255.859375 64.003906 318.097656 129.972656 340.082031 L 130.167969 340.144531 L 172.894531 211.972656 L 172.699219 211.90625 C 160.382813 207.804688 151.503906 196.191406 151.503906 182.5 C 151.503906 173.941406 154.972656 166.191406 160.582031 160.582031 C 166.191406 154.972656 173.9375 151.503906 182.5 151.503906 C 191.058594 151.503906 198.808594 154.972656 204.417969 160.582031 C 210.027344 166.191406 213.496094 173.9375 213.496094 182.5 C 213.496094 196.191406 204.617188 207.804688 192.300781 211.90625 L 192.105469 211.972656 L 234.832031 340.144531 L 235.027344 340.082031 C 301 318.097656 348.566406 255.859375 348.566406 182.5 C 348.566406 90.785156 274.214844 16.433594 182.5 16.433594 L 182.5 16.84375 C 228.246094 16.84375 269.65625 35.386719 299.636719 65.363281 C 329.613281 95.34375 348.15625 136.753906 348.15625 182.5 C 348.15625 255.675781 300.703125 317.765625 234.898438 339.691406 L 234.960938 339.886719 L 235.15625 339.820313 L 192.5625 212.035156 L 192.367188 212.101563 L 192.433594 212.296875 C 204.910156 208.140625 213.90625 196.375 213.910156 182.5 C 213.90625 165.152344 199.847656 151.09375 182.5 151.089844 C 165.152344 151.09375 151.09375 165.152344 151.089844 182.5 C 151.09375 196.375 160.089844 208.140625 172.566406 212.296875 L 172.632813 212.101563 L 172.4375 212.035156 L 129.84375 339.820313 L 130.039063 339.886719 L 130.101563 339.691406 C 64.296875 317.765625 16.84375 255.675781 16.84375 182.5 C 16.84375 136.753906 35.386719 95.34375 65.363281 65.363281 C 95.34375 35.386719 136.753906 16.84375 182.5 16.84375 Z M 202.902344 347.109375 L 203.027344 346.949219 C 195.652344 341.21875 188.511719 334.90625 181.683594 328.019531 L 181.535156 327.867188 L 181.390625 328.019531 C 174.792969 334.847656 167.910156 341.113281 160.816406 346.808594 L 160.441406 347.109375 L 160.917969 347.171875 C 167.984375 348.089844 175.1875 348.566406 182.5 348.566406 C 189.414063 348.566406 196.230469 348.136719 202.925781 347.316406 L 203.417969 347.253906 L 203.027344 346.949219 L 202.902344 347.109375 L 202.875 346.90625 C 196.199219 347.726563 189.398438 348.15625 182.5 348.15625 C 175.203125 348.15625 168.019531 347.679688 160.972656 346.765625 L 160.945313 346.96875 L 161.074219 347.128906 C 168.179688 341.421875 175.078125 335.144531 181.6875 328.304688 L 181.539063 328.164063 L 181.394531 328.308594 C 188.230469 335.210938 195.386719 341.53125 202.773438 347.273438 L 202.902344 347.109375 L 202.875 346.90625 Z M 191.792969 316.824219 L 191.636719 316.964844 C 200.742188 327.210938 210.519531 336.269531 220.722656 344.058594 L 220.800781 344.117188 L 220.894531 344.097656 C 221.574219 343.9375 222.253906 343.769531 222.929688 343.601563 L 223.15625 343.542969 L 205.3125 298.929688 L 205.09375 299.238281 C 200.808594 305.347656 196.3125 311.171875 191.636719 316.695313 L 191.519531 316.832031 L 191.636719 316.964844 L 191.792969 316.824219 L 191.949219 316.960938 C 196.632813 311.429688 201.136719 305.59375 205.429688 299.472656 L 205.261719 299.355469 L 205.070313 299.433594 L 222.6875 343.476563 L 222.878906 343.402344 L 222.828125 343.203125 C 222.152344 343.371094 221.476563 343.535156 220.800781 343.695313 L 220.847656 343.898438 L 220.972656 343.734375 C 210.789063 335.957031 201.035156 326.917969 191.945313 316.691406 L 191.792969 316.824219 L 191.949219 316.960938 Z M 182.257813 305.34375 L 182.421875 305.46875 C 188.113281 298.128906 193.472656 290.273438 198.433594 281.945313 L 198.484375 281.859375 L 182.5 241.898438 L 166.320313 282.34375 L 166.375 282.429688 C 171.253906 290.578125 176.511719 298.269531 182.097656 305.46875 L 182.257813 305.679688 L 182.421875 305.46875 L 182.257813 305.34375 L 182.421875 305.21875 C 176.847656 298.03125 171.597656 290.351563 166.726563 282.21875 L 166.550781 282.324219 L 166.742188 282.402344 L 182.5 243.003906 L 198.066406 281.917969 L 198.257813 281.84375 L 198.078125 281.738281 C 193.128906 290.050781 187.777344 297.890625 182.097656 305.21875 L 182.257813 305.34375 L 182.421875 305.21875 Z M 143.78125 343.804688 L 143.90625 343.96875 C 153.75 336.4375 163.199219 327.738281 172.027344 317.917969 L 172.152344 317.785156 L 172.03125 317.648438 C 167.527344 312.492188 163.195313 307.054688 159.058594 301.351563 L 158.839844 301.046875 L 141.84375 343.542969 L 142.070313 343.601563 C 142.625 343.738281 143.179688 343.871094 143.734375 344.007813 L 143.828125 344.027344 L 143.90625 343.96875 L 143.78125 343.804688 L 143.828125 343.605469 C 143.273438 343.472656 142.722656 343.339844 142.171875 343.203125 L 142.121094 343.402344 L 142.3125 343.476563 L 159.085938 301.546875 L 158.894531 301.46875 L 158.726563 301.589844 C 162.871094 307.304688 167.207031 312.753906 171.722656 317.917969 L 171.875 317.78125 L 171.722656 317.644531 C 162.910156 327.445313 153.480469 336.128906 143.65625 343.644531 L 143.78125 343.804688 L 143.828125 343.605469 Z M 182.5 364.796875 L 182.5 364.589844 C 132.21875 364.589844 86.695313 344.210938 53.742188 311.257813 C 20.792969 278.304688 0.410156 232.78125 0.410156 182.5 C 0.410156 132.21875 20.792969 86.695313 53.742188 53.742188 C 86.695313 20.789063 132.21875 0.410156 182.5 0.410156 C 232.78125 0.410156 278.304688 20.789063 311.257813 53.742188 C 344.210938 86.695313 364.589844 132.21875 364.589844 182.5 C 364.589844 232.78125 344.210938 278.304688 311.257813 311.257813 C 278.304688 344.210938 232.78125 364.589844 182.5 364.589844 L 182.5 365 C 283.292969 365 365 283.292969 365 182.5 C 365 81.707031 283.292969 0 182.5 0 C 81.707031 0 0 81.707031 0 182.5 C 0 283.292969 81.707031 365 182.5 365 L 182.5 364.796875 " /> </g> </symbol> <symbol id="pandora" viewBox="0 0 180 200"> <g id="bg"> <rect fill="#FFFFFF" width="180" height="200" /> </g> <g id="icons"> <g> <path fill="#019FEE" d="M160.7,74.2c-0.9-8.8-3.4-17.1-8.8-24.4c-4.1-5.6-9.4-9.8-15.6-13c-6-3-12.3-5-19-5.9l0,0 c-3.9-0.6-7.8-0.9-11.8-0.9H43.8c-0.4,0-0.7,0.3-0.7,0.7l0,0c0,46.1,0,92.2,0,138.3v0.1c0,0.4,0.3,0.7,0.7,0.7l0,0 c12.3,0,24.7,0,37,0c3.3,0,6-2.7,6.1-5.9c0-0.3,0-0.6,0-0.7c0-8.6,0-17.1,0-25.5v-0.3c0-0.4,0.3-0.7,0.7-0.7c0,0,0,0,0.1,0 c3.1,0,6.4,0,9.6,0c2.4,0,4.9,0,7.3-0.3c7.8-0.6,15.7-2,23.1-5c2.3-0.9,4.6-2,6.9-3.1c9-4.9,15.8-11.7,20.6-20.8 c2.3-4.6,3.9-9.4,4.9-14.6c0.6-2.7,0.9-5.4,1-8.3c0-0.1,0-0.1,0-0.3s0-0.1,0-0.3v-7c0,0,0,0,0-0.1C160.9,76,160.8,75.1,160.7,74.2 z" /> </g> </g> </symbol> <symbol id="pocket-casts" viewBox="0 0 39 36" style="enable-background:new 0 0 39 36;"> <g> <path fill="#F44336" d="M18,36c9.9,0,18-8,18-18S28,0,18,0S0,8,0,18S8,36,18,36L18,36L18,36z" /> <path fill="#FFFFFF" d="M17.8,27.1c-4.8-0.2-8.7-4.1-8.7-9c0-5,4.1-9,9-9s8.9,3.9,9,8.7c0,0.2,0.1,0.3,0.3,0.3H30 c0.2,0,0.3-0.1,0.3-0.3C30.1,11.2,24.7,5.9,18,5.9c-6.8,0-12.3,5.5-12.3,12.3c0,6.7,5.3,12.1,11.9,12.3c0.2,0,0.3-0.1,0.3-0.3v-2.6 C18.1,27.2,17.9,27.1,17.8,27.1L17.8,27.1L17.8,27.1z M18.1,11c-3.9,0-7.1,3.2-7.1,7.1c0,3.8,3,6.9,6.8,7.1c0.2,0,0.3-0.1,0.3-0.3 v-2.1c0-0.2-0.1-0.3-0.3-0.3c-2.3-0.2-4.1-2.1-4.1-4.4c0-2.4,2-4.4,4.4-4.4c2.3,0,4.2,1.8,4.4,4.1c0,0.2,0.2,0.3,0.3,0.3h2.1 c0.2,0,0.3-0.2,0.3-0.3C25,14,21.9,11,18.1,11L18.1,11L18.1,11z" /> </g> </symbol> <symbol id="rss" viewBox="0 0 12 12"> <path d="m1.59148 8.7795c-.878186.0032-1.58780186.71645-1.58566708 1.5938.00213478.8773.71521308 1.5871 1.59340708 1.5861.87819-.0011 1.58954-.7126 1.58955-1.59-.0032-.879-.71739-1.58991-1.59729-1.5899zm-1.59147997-4.7118v2.32108c1.48808997.00154 2.91461997.59358 3.96575997 1.64589 1.05115 1.05231 1.64082 2.47873 1.63927 3.96533h2.32333c.00464-2.10318-.82881-4.12172-2.31634-5.60999-1.48753-1.48826-3.5068-2.32386-5.61201997-2.32231zm0-4.06189726v2.32108726c5.33125997.00952 9.65431997 4.31803 9.67666997 9.64411h2.32333c-.0096-6.61422-5.37938-11.97100707-11.99999997-11.9710001z" fill="#257BBC" /> </symbol> <symbol id="spotify" viewBox="0 0 170.1 170.1" style="enable-background:new 0 0 170.1 170.1;" xml:space="preserve"> <g> <g> <g> <path fill="#1ED760" d="M85,1.3C38.8,1.3,1.3,38.8,1.3,85c0,46.3,37.5,83.7,83.7,83.7c46.3,0,83.7-37.5,83.7-83.7 C168.8,38.8,131.3,1.3,85,1.3z M123.4,122.1c-1.5,2.5-4.7,3.2-7.2,1.7c-19.7-12-44.4-14.7-73.6-8.1c-2.8,0.6-5.6-1.1-6.2-3.9 c-0.6-2.8,1.1-5.6,3.9-6.2c31.9-7.3,59.3-4.2,81.3,9.3C124.2,116.4,124.9,119.6,123.4,122.1z M133.7,99.3c-1.9,3.1-5.9,4-9,2.2 c-22.5-13.8-56.8-17.8-83.4-9.8c-3.5,1-7.1-0.9-8.1-4.3c-1-3.5,0.9-7.1,4.4-8.1c30.4-9.2,68.2-4.8,94.1,11.1 C134.6,92.2,135.6,96.2,133.7,99.3z M134.6,75.5c-27-16-71.5-17.5-97.3-9.7c-4.1,1.3-8.5-1.1-9.8-5.2c-1.3-4.1,1.1-8.5,5.2-9.8 c29.6-9,78.8-7.2,109.8,11.2c3.7,2.2,4.9,7,2.7,10.7C143.1,76.5,138.3,77.7,134.6,75.5z" /> </g> </g> </g> </symbol> <symbol id="stitcher" viewBox="0 0 122.88 51.61" style="enable-background:new 0 0 122.88 51.61"> <g> <polygon fill="#3590C5" points="0,10.14 21.5,10.14 21.5,49.15 0,49.15 0,10.14" /> <polygon fill="#C53827" points="101.38,7.99 122.88,7.99 122.88,43.93 101.38,43.93 101.38,7.99" /> <polygon fill="#EC8B24" points="76.19,0 97.69,0 97.69,46.7 76.19,46.7 76.19,0" /> <polygon fill="#FBC618" points="51,6.76 72.5,6.76 72.5,51.61 51,51.61 51,6.76" /> <polygon fill="#612268" points="25.5,3.07 47,3.07 47,46.39 25.5,46.39 25.5,3.07" /> </g> </symbol> <symbol id="tuneIn" viewBox="56 56 200 88" fill="none"> <g id="Logos"> <g id="Logo__x2013__Horizontal_1A_12_"> <g id="Logo_2_"> <path fill="#1C203C" d="M95,96.8v4c0,0.4-0.4,0.8-0.8,0.8h-5c-0.2,0-0.4,0.2-0.4,0.4v21.2c0,0.4-0.4,0.8-0.8,0.8h-4 c-0.4,0-0.8-0.4-0.8-0.8V102c0-0.2-0.2-0.4-0.4-0.4h-5c-0.4,0-0.8-0.4-0.8-0.8v-4c0-0.4,0.4-0.8,0.8-0.8h16.4 C94.6,96,95,96.4,95,96.8z M117,96h-4c-0.4,0-0.8,0.4-0.8,0.8v18.8c0,1.8-1.4,3.2-3.9,3.2c-2.4,0-3.8-1.4-3.8-3.2V96.8 c0-0.4-0.4-0.8-0.8-0.8h-4c-0.4,0-0.8,0.4-0.8,0.8v18.8c0,4.8,4,8.8,9.4,8.8c5.5,0,9.5-4,9.5-8.8V96.8 C117.8,96.4,117.4,96,117,96z M139.6,96h-4c-0.4,0-0.8,0.4-0.8,0.8v15c0,0.2-0.3,0.3-0.4,0.1l-5.5-15.2c-0.1-0.4-0.4-0.7-1-0.7 h-4.8c-0.4,0-0.8,0.4-0.8,0.8v26.4c0,0.4,0.4,0.8,0.8,0.8h4c0.4,0,0.8-0.4,0.8-0.8v-13.8c0-0.2,0.3-0.3,0.4-0.1l5.4,14 c0.1,0.3,0.4,0.7,1.1,0.7h4.7c0.4,0,0.8-0.4,0.8-0.8V96.8C140.4,96.4,140,96,139.6,96z M160.3,118.4h-9.5c-0.2,0-0.4-0.2-0.4-0.4 v-4.8c0-0.2,0.2-0.4,0.4-0.4h9c0.4,0,0.8-0.4,0.8-0.8v-4c0-0.4-0.4-0.8-0.8-0.8h-9c-0.2,0-0.4-0.2-0.4-0.4V102 c0-0.2,0.2-0.4,0.4-0.4h9.3c0.4,0,0.8-0.4,0.8-0.8v-4c0-0.4-0.4-0.8-0.8-0.8h-14.5c-0.4,0-0.8,0.4-0.8,0.8v26.4 c0,0.4,0.4,0.8,0.8,0.8h14.7c0.4,0,0.8-0.4,0.8-0.8v-4C161.1,118.8,160.7,118.4,160.3,118.4z M256,59v62c0,1.7-1.3,3-3,3h-69v17 c0,1.7-1.3,3-3,3H59c-1.7,0-3-1.3-3-3V79c0-1.7,1.3-3,3-3h119V59c0-1.7,1.3-3,3-3h72C254.7,56,256,57.3,256,59z M178,82H62.5 c-0.3,0-0.5,0.2-0.5,0.5v55c0,0.3,0.2,0.5,0.5,0.5h115c0.3,0,0.5-0.2,0.5-0.5V82z M213.8,99.4c0-0.4-0.4-0.8-0.8-0.8h-3.4 c-0.2,0-0.4-0.2-0.4-0.4V81.8c0-0.2,0.2-0.4,0.4-0.4h3c0.4,0,0.8-0.4,0.8-0.8v-3.8c0-0.4-0.4-0.8-0.8-0.8h-12.4 c-0.4,0-0.8,0.4-0.8,0.8v3.8c0,0.4,0.4,0.8,0.8,0.8h3c0.2,0,0.4,0.2,0.4,0.4v16.4c0,0.2-0.2,0.4-0.4,0.4h-3.4 c-0.4,0-0.8,0.4-0.8,0.8v3.8c0,0.4,0.4,0.8,0.8,0.8H213c0.4,0,0.8-0.4,0.8-0.8V99.4z M236.2,76.8c0-0.4-0.4-0.8-0.8-0.8h-4 c-0.4,0-0.8,0.4-0.8,0.8v15c0,0.2-0.3,0.3-0.4,0.1l-5.5-15.2c-0.1-0.4-0.4-0.7-1-0.7H219c-0.4,0-0.8,0.4-0.8,0.8v26.4 c0,0.4,0.4,0.8,0.8,0.8h4c0.4,0,0.8-0.4,0.8-0.8V89.4c0-0.2,0.3-0.3,0.4-0.1l5.4,14c0.1,0.3,0.4,0.7,1.1,0.7h4.7 c0.4,0,0.8-0.4,0.8-0.8V76.8z" /> </g> </g> </g> </symbol> <symbol id="check" viewBox="0 0 22 16" xmlns="http://www.w3.org/2000/svg"> <path d="M1 7.5 7.5 14l13-13" stroke-width="2" fill="none" fill-rule="evenodd" /> </symbol> <symbol id="calloutbox-icon-check" viewBox="0 0 22 16"> <path d="M1 7.5 7.5 14l13-13" stroke="#000" stroke-width="2" fill="none" fill-rule="evenodd" /> </symbol> <symbol id="calloutbox-icon-alert" viewBox="0 0 24 21"> <path d="M12 8.923v5.385m0 1.538v1.539M12 2l10 17.69H2L12 2z" stroke="#000" stroke-width="1.5" fill="none" fill-rule="evenodd" /> </symbol> <symbol id="calloutbox-icon-info" viewBox="0 0 22 22"> <path d="M11 6.385V4.846m0 12.308v-9.23M21 11c0 5.523-4.477 10-10 10S1 16.523 1 11 5.477 1 11 1s10 4.477 10 10z" stroke="#000" stroke-width="1.5" fill="none" fill-rule="evenodd" /> </symbol> <symbol id="icon-arrow-right" viewBox="0 0 15 11"> <g stroke="#74B900" stroke-width="2" fill="none" fill-rule="evenodd"> <path d="M13.232 5.504H.696M8.893 9.504l4.34-4-4.34-4" /> </g> </symbol> <symbol id="caret-up" viewBox="0 0 25 25"> <path d="m15.792 16.01 1.468-1.52-5.223-5.11-5.323 5.11 1.485 1.528 3.843-3.73z" fill="#000" fill-rule="nonzero" /> </symbol> <symbol id="caret-right" viewBox="0 0 25 25"> <path d="m15.792 16.01 1.468-1.52-5.223-5.11-5.323 5.11 1.485 1.528 3.843-3.73z" fill-rule="nonzero" transform="translate(25, 0) rotate(90)" /> </symbol> </svg> <bsp-header class="Page-header"> <div class="Page-header-hamburger-menu"> <div class="Page-header-hamburger-menu-wrapper"> <div class="Page-header-hamburger-menu-content"> <bsp-search class="Page-search" > <form action="https://docs.nvidia.com/search/index.html" method="GET"> <input type="text" name="term" placeholder="Search all documentation"> <input type="hidden" name="facet.subcollection[]" value="Technical Documentation"> <input type="hidden" name="facet.mimetype[]" value="webpage"> <button type="submit" aria-label="Submit Search"><span class="sr-only">Submit Search</span><svg height="12px" width="12px" viewBox="0 0 12 12"><use xlink:href="#icon-magnify"></use></svg></button></form></bsp-search> <nav class="Navigation"> <ul class="Navigation-items"> <li class="Navigation-items-item"><div class="NavigationItem"> <div class="NavigationItem-text"> <a href="https://developer.nvidia.com/" target="_blank" data-cms-ai="0">NVIDIA Developer</a> </div> </div> </li> <li class="Navigation-items-item"><div class="NavigationItem"> <div class="NavigationItem-text"> <a href="https://developer.nvidia.com/blog/" target="_blank" data-cms-ai="0">Blog</a> </div> </div> </li> <li class="Navigation-items-item"><div class="NavigationItem"> <div class="NavigationItem-text"> <a href="https://forums.developer.nvidia.com/" target="_blank" data-cms-ai="0">Forums</a> </div> </div> </li> <li class="Navigation-items-item"><div class="NavigationItem"> <div class="NavigationItem-text"> <a class="Button" data-theme="secondary" data-size="small" style="--button-border-radius: 0px" href="https://docs.nvidia.com/login" rel="nofollow noopener" data-cms-ai="0">Join</a> </div> </div> </li> </ul> </nav> </div> </div> </div> <div class="Page-header-bar"> <div class="Page-header-bar-logo"> <a aria-label="home page" href="/" data-cms-ai="0" > <img class="PageLogo-image" src="https://docscontent.nvidia.com/bf/6f/f2d5da4743aebb3dff0e6a6129ec/nvidia-docshub-logo-2.svg" alt="NVIDIA Documentation Home" width="280" > </a> <bsp-search class="Page-search" > <form action="https://docs.nvidia.com/search/index.html" method="GET"> <input type="text" name="term" placeholder="Search all documentation"> <input type="hidden" name="facet.subcollection[]" value="Technical Documentation"> <input type="hidden" name="facet.mimetype[]" value="webpage"> <button type="submit" aria-label="Submit Search"><span class="sr-only">Submit Search</span><svg height="12px" width="12px" viewBox="0 0 12 12"><use xlink:href="#icon-magnify"></use></svg></button></form></bsp-search> </div> <div class="Page-header-navigation"> <nav class="Navigation"> <ul class="Navigation-items"> <li class="Navigation-items-item"><div class="NavigationItem"> <div class="NavigationItem-text"> <a href="https://developer.nvidia.com/" target="_blank" data-cms-ai="0">NVIDIA Developer</a> </div> </div> </li> <li class="Navigation-items-item"><div class="NavigationItem"> <div class="NavigationItem-text"> <a href="https://developer.nvidia.com/blog/" target="_blank" data-cms-ai="0">Blog</a> </div> </div> </li> <li class="Navigation-items-item"><div class="NavigationItem"> <div class="NavigationItem-text"> <a href="https://forums.developer.nvidia.com/" target="_blank" data-cms-ai="0">Forums</a> </div> </div> </li> <li class="Navigation-items-item"><div class="NavigationItem"> <div class="NavigationItem-text"> <a class="Button" data-theme="secondary" data-size="small" style="--button-border-radius: 0px" href="https://docs.nvidia.com/login" rel="nofollow noopener" data-cms-ai="0">Join</a> </div> </div> </li> </ul> </nav> </div> <div class="Page-header-end"><button class="Page-header-menu-trigger" aria-expanded="false"><svg class="burger-menu"><use xlink:href="#burger-menu"></use></svg><svg class="close-x"><use xlink:href="#close-x"></use></svg><span class="label">Menu</span></button></div> </div> </bsp-header> <bsp-backtotop> <a href="#" class="Page-BackToTop" data-cms-ai="0"> <svg> <use href="#back-to-top-icon"></use> </svg> </a> </bsp-backtotop> <div class="Page-content"> <div class="PageHeading"> <div class="PageHeading-content-wrapper"> <div class="PageHeading-content"> <div class="PageHeading-title">DOCA Documentation v2.9.0</div> <bsp-search class="Page-search" data-search-header> <form action="https://docs.nvidia.com/search/index.html" method="GET" id="searchForm" onsubmit="InbookSearch(event)"> <input type="text" name="term" placeholder="Search DOCA Documentation v2.9.0"> <input type="hidden" name="facet.docs_book[]" value="DOCA Documentation v2.9.0"> <input type="hidden" name="facet.docs_version[]" value="DOCA SDK 2.9.0"> <input type="hidden" name="facet.subcollection[]" value="Technical Documentation"> <input type="hidden" name="facet.mimetype[]" value="webpage"> <button type="submit" aria-label="Submit Search"><span class="sr-only">Submit Search</span><svg height="12px" width="12px" viewBox="0 0 12 12"><use xlink:href="#icon-magnify"></use></svg></button><div id="nvidia-in-book-search-page-widget"></div></form><script> document.addEventListener("DOMContentLoaded", () => { if (!document.querySelector('script[src="https://images.nvidia.com/search-in-book/nvidia-in-book-search-page-widget.js"]')) { var script = document.createElement('script'); script.src = 'https://images.nvidia.com/search-in-book/nvidia-in-book-search-page-widget.js'; document.head.appendChild(script); } }) </script> <script> window.addEventListener("load", () => { NvidiaInBookSearchPageWidget.mount({ apiUrl: 'https://api-prod.nvidia.com/search/graphql', site: 'https://docs.nvidia.com', language: 'en-us', path: '/en-us/search/', searchParam: '', widgetPlacementId: '', queryParam: 'q', facets: 'mimetype, subcollection', facetValues: [], inBookSearch: true, modalPosition: {} }); }); function InbookSearch(event) { event.preventDefault(); NvidiaInBookSearchPageWidget.unmount(); NvidiaInBookSearchPageWidget.mount({ apiUrl: 'https://api-prod.nvidia.com/search/graphql', site: 'https://docs.nvidia.com', language: 'en-us', path: '/en-us/search/', searchParam: '', widgetPlacementId: '', queryParam: 'q', facets: 'mimetype, subcollection', facetValues: [], inBookSearch: true, modalPosition: {} }); } </script> </bsp-search> </div> </div> </div> <div class="Page-twoColumn" data-aside-left> <main class="Page-main" data-module > <bsp-search class="Page-search" mobile-only> <form action="https://docs.nvidia.com/search/index.html" method="GET" id="searchFormMob" onsubmit="InbookSearchMob(event)"> <input type="text" name="term" placeholder="Search DOCA Documentation v2.9.0"> <input type="hidden" name="facet.docs_book[]" value="DOCA Documentation v2.9.0"> <input type="hidden" name="facet.docs_version[]" value="DOCA SDK 2.9.0"> <input type="hidden" name="facet.subcollection[]" value="Technical Documentation"> <input type="hidden" name="facet.mimetype[]" value="webpage"> <button type="submit" aria-label="Submit Search"><span class="sr-only">Submit Search</span><svg height="12px" width="12px" viewBox="0 0 12 12"><use xlink:href="#icon-magnify"></use></svg></button><div id="nvidia-in-book-search-page-widget"></div></form><script> document.addEventListener("DOMContentLoaded", () => { if (!document.querySelector('script[src="https://images.nvidia.com/search-in-book/nvidia-in-book-search-page-widget.js"]')) { var script = document.createElement('script'); script.src = 'https://images.nvidia.com/search-in-book/nvidia-in-book-search-page-widget.js'; document.head.appendChild(script); } }) </script> <script> window.addEventListener("load", () => { NvidiaInBookSearchPageWidget.mount({ apiUrl: 'https://api-prod.nvidia.com/search/graphql', site: 'https://docs.nvidia.com', language: 'en-us', path: '/en-us/search/', searchParam: '', widgetPlacementId: '', queryParam: 'q', facets: 'mimetype, subcollection', facetValues: [], inBookSearch: true, modalPosition: {} }); }); function InbookSearchMob(event) { event.preventDefault(); NvidiaInBookSearchPageWidget.unmount(); NvidiaInBookSearchPageWidget.mount({ apiUrl: 'https://api-prod.nvidia.com/search/graphql', site: 'https://docs.nvidia.com', language: 'en-us', path: '/en-us/search/', searchParam: '', widgetPlacementId: '', queryParam: 'q', facets: 'mimetype, subcollection', facetValues: [], inBookSearch: true, modalPosition: {} }); } </script></bsp-search> <div class="Page-breadcrumbs"><a class="Link" href="https://docs.nvidia.com/" data-cms-ai="0" >NVIDIA Docs Hub</a> <svg class="chevron"><use xlink:href="#chevron"></use></svg> <a class="Link" href="https://docs.nvidia.com/networking/index.html" data-cms-ai="0" >NVIDIA Networking</a> <svg class="chevron"><use xlink:href="#chevron"></use></svg> <a class="Link" href="https://docs.nvidia.com/networking/dpu-doca/index.html" data-cms-ai="0" >BlueField DPUs / SuperNICs & DOCA</a> <svg class="chevron"><use xlink:href="#chevron"></use></svg> <a class="Link" href="https://docs.nvidia.com/doca/sdk/index.html" data-cms-ai="0" >DOCA Documentation v2.9.0</a> <svg class="chevron"><use xlink:href="#chevron"></use></svg> <a class="Link" href="https://docs.nvidia.com/doca/sdk/DOCA+Core/index.html" data-cms-ai="0" >DOCA Core</a><hr class="breadcrumb-divider"/> </div> <div class="TopicPage-actions"> <span class="TopicPage-version">DOCA SDK 2.9.0<span class="TopicPage-separator"></span></span> <a class="Link" href="https://docs.nvidia.com/doca/sdk/doca-core.pdf" data-cms-ai="0" >Download PDF</a> </div> <div class="Page-toc"> <h4 class="Page-toc-heading">On This Page</h4> <ul> <li><a class="Link" href="#src-3169008654_id-.DOCACorev2.9.0LTS-Introduction" data-cms-ai="0" >Introduction</a></li> <li><a class="Link" href="#src-3169008654_id-.DOCACorev2.9.0LTS-Prerequisites" data-cms-ai="0" >Prerequisites</a></li> <li><a class="Link" href="#src-3169008654_id-.DOCACorev2.9.0LTS-ChangesFromPreviousReleases" data-cms-ai="0" >Changes From Previous Releases</a> <ul> <li><a class="Link" href="#src-3169008654_id-.DOCACorev2.9.0LTS-Changesin2.9.0" data-cms-ai="0" >Changes in 2.9.0</a> <ul> <li><a class="Link" href="#src-3169008654_id-.DOCACorev2.9.0LTS-Added" data-cms-ai="0" >Added</a></li> <li><a class="Link" href="#src-3169008654_id-.DOCACorev2.9.0LTS-Changed" data-cms-ai="0" >Changed</a></li> </ul></li> </ul></li> <li><a class="Link" href="#src-3169008654_id-.DOCACorev2.9.0LTS-Architecture" data-cms-ai="0" >Architecture</a> <ul> <li><a class="Link" href="#src-3169008654_id-.DOCACorev2.9.0LTS-General" data-cms-ai="0" >General</a> <ul> <li><a class="Link" href="#src-3169008654_id-.DOCACorev2.9.0LTS-doca_error_t" data-cms-ai="0" >doca_error_t</a></li> <li><a class="Link" href="#src-3169008654_safe-id-aWQtLkRPQ0FDb3JldjIuOS4wTFRTLUdlbmVyaWNTdHJ1Y3R1cmVzL0VudW0" data-cms-ai="0" >Generic Structures/Enum</a></li> </ul></li> <li><a class="Link" href="#src-3169008654_id-.DOCACorev2.9.0LTS-DOCADevice" data-cms-ai="0" >DOCA Device</a> <ul> <li><a class="Link" href="#src-3169008654_id-.DOCACorev2.9.0LTS-LocalDeviceandRepresentor" data-cms-ai="0" >Local Device and Representor</a></li> <li><a class="Link" href="#src-3169008654_id-.DOCACorev2.9.0LTS-ExpectedFlowExpectedFlow" data-cms-ai="0" >Expected Flow</a></li> <li><a class="Link" href="#src-3169008654_id-.DOCACorev2.9.0LTS-DOCAApplicationRestartDOCAApplicationRestart" data-cms-ai="0" >DOCA Application Restart</a></li> </ul></li> <li><a class="Link" href="#src-3169008654_id-.DOCACorev2.9.0LTS-DOCAMemorySubsystem" data-cms-ai="0" >DOCA Memory Subsystem</a> <ul> <li><a class="Link" href="#src-3169008654_id-.DOCACorev2.9.0LTS-RequirementsandConsiderations" data-cms-ai="0" >Requirements and Considerations</a></li> <li><a class="Link" href="#src-3169008654_id-.DOCACorev2.9.0LTS-doca_mmap" data-cms-ai="0" >doca_mmap</a></li> <li><a class="Link" href="#src-3169008654_id-.DOCACorev2.9.0LTS-Buffers" data-cms-ai="0" >Buffers</a></li> <li><a class="Link" href="#src-3169008654_id-.DOCACorev2.9.0LTS-InventoriesInventories" data-cms-ai="0" >Inventories</a></li> <li><a class="Link" href="#src-3169008654_id-.DOCACorev2.9.0LTS-ExampleFlow" data-cms-ai="0" >Example Flow</a></li> </ul></li> <li><a class="Link" href="#src-3169008654_id-.DOCACorev2.9.0LTS-DOCAExecutionModel" data-cms-ai="0" >DOCA Execution Model</a> <ul> <li><a class="Link" href="#src-3169008654_id-.DOCACorev2.9.0LTS-RequirementsandConsiderations.1" data-cms-ai="0" >Requirements and Considerations</a></li> <li><a class="Link" href="#src-3169008654_id-.DOCACorev2.9.0LTS-DOCAContextDOCAContext" data-cms-ai="0" >DOCA Context</a></li> <li><a class="Link" href="#src-3169008654_id-.DOCACorev2.9.0LTS-DOCATask" data-cms-ai="0" >DOCA Task</a></li> <li><a class="Link" href="#src-3169008654_id-.DOCACorev2.9.0LTS-DOCAProgressEngine" data-cms-ai="0" >DOCA Progress Engine</a></li> <li><a class="Link" href="#src-3169008654_id-.DOCACorev2.9.0LTS-DOCAEvent" data-cms-ai="0" >DOCA Event</a></li> <li><a class="Link" href="#src-3169008654_id-.DOCACorev2.9.0LTS-ErrorHandling" data-cms-ai="0" >Error Handling</a></li> <li><a class="Link" href="#src-3169008654_id-.DOCACorev2.9.0LTS-TaskandEventBatching" data-cms-ai="0" >Task and Event Batching</a></li> <li><a class="Link" href="#src-3169008654_id-.DOCACorev2.9.0LTS-DOCAGraphExecution" data-cms-ai="0" >DOCA Graph Execution</a></li> <li><a class="Link" href="#src-3169008654_id-.DOCACorev2.9.0LTS-AlternativeDataPath" data-cms-ai="0" >Alternative Data Path</a></li> </ul></li> <li><a class="Link" href="#src-3169008654_id-.DOCACorev2.9.0LTS-ObjectLifeCycle" data-cms-ai="0" >Object Life Cycle</a></li> <li><a class="Link" href="#src-3169008654_id-.DOCACorev2.9.0LTS-RDMABridge" data-cms-ai="0" >RDMA Bridge</a> <ul> <li><a class="Link" href="#src-3169008654_id-.DOCACorev2.9.0LTS-RequirementsandConsiderations.2" data-cms-ai="0" >Requirements and Considerations</a></li> <li><a class="Link" href="#src-3169008654_id-.DOCACorev2.9.0LTS-DOCACoreObjectstoRDMACoreObjectsMapping" data-cms-ai="0" >DOCA Core Objects to RDMA Core Objects Mapping</a></li> </ul></li> </ul></li> <li><a class="Link" href="#src-3169008654_id-.DOCACorev2.9.0LTS-DOCACoreSamples" data-cms-ai="0" >DOCA Core Samples</a> <ul> <li><a class="Link" href="#src-3169008654_id-.DOCACorev2.9.0LTS-ProgressEngineSamples" data-cms-ai="0" >Progress Engine Samples</a> <ul> <li><a class="Link" href="#src-3169008654_id-.DOCACorev2.9.0LTS-pe_common" data-cms-ai="0" >pe_common</a></li> <li><a class="Link" href="#src-3169008654_id-.DOCACorev2.9.0LTS-pe_polling" data-cms-ai="0" >pe_polling</a></li> <li><a class="Link" href="#src-3169008654_id-.DOCACorev2.9.0LTS-pe_async_stop" data-cms-ai="0" >pe_async_stop</a></li> <li><a class="Link" href="#src-3169008654_id-.DOCACorev2.9.0LTS-pe_event" data-cms-ai="0" >pe_event</a></li> <li><a class="Link" href="#src-3169008654_id-.DOCACorev2.9.0LTS-pe_multi_context" data-cms-ai="0" >pe_multi_context</a></li> <li><a class="Link" href="#src-3169008654_id-.DOCACorev2.9.0LTS-pe_reactive" data-cms-ai="0" >pe_reactive</a></li> <li><a class="Link" href="#src-3169008654_id-.DOCACorev2.9.0LTS-pe_single_task_cb" data-cms-ai="0" >pe_single_task_cb</a></li> <li><a class="Link" href="#src-3169008654_id-.DOCACorev2.9.0LTS-pe_task_error" data-cms-ai="0" >pe_task_error</a></li> <li><a class="Link" href="#src-3169008654_id-.DOCACorev2.9.0LTS-pe_task_resubmit" data-cms-ai="0" >pe_task_resubmit</a></li> <li><a class="Link" href="#src-3169008654_id-.DOCACorev2.9.0LTS-pe_task_try_submit" data-cms-ai="0" >pe_task_try_submit</a></li> </ul></li> <li><a class="Link" href="#src-3169008654_id-.DOCACorev2.9.0LTS-GraphSample" data-cms-ai="0" >Graph Sample</a></li> </ul></li> <li><a class="Link" href="#src-3169008654_id-.DOCACorev2.9.0LTS-BackwardCompatibilityofDOCACoredoca_buf" data-cms-ai="0" >Backward Compatibility of DOCA Core doca_buf</a> <ul> <li><a class="Link" href="#src-3169008654_id-.DOCACorev2.9.0LTS-DOCACoredoca_buf" data-cms-ai="0" >DOCA Core doca_buf</a></li> </ul></li> </ul> </div> <div class="Page-articleBody"> <bsp-book-content> <main class="RichTextArticleBody RichTextBody cookies"> <h1><a href="#" data-cms-ai="0">DOCA Core</a></h1> <div class="StepModule" data-module><span class="StepModule-anchor" id="c33de7dd-4ff9-40a5-acff-f16e967a6d06"></span> <div class="StepModule-body RichTextBody"> <p>This document provides guidelines on using DOCA Core objects as part of DOCA SDK programming.</p> </div> </div> <div class="StepModule" data-module><span class="StepModule-anchor" id="src-3169008654_id-.DOCACorev2.9.0LTS-Introduction"></span> <div class="StepModuleHeader"><h2 class="StepModuleHeader-title"><a class="StepModuleHeader-anchorLink" href="#src-3169008654_id-.DOCACorev2.9.0LTS-Introduction" data-cms-ai="0">Introduction</a></h2> <div class="StepModuleHeader-divider"></div></div> <div class="StepModule-body RichTextBody"> <div class="CallOutBox" data-option-Note> <div class="CallOutBox-icon"><svg><use xlink:href="#calloutbox-icon-check"></use></svg> </div><div class="CallOutBox-title">Note</div> <div class="CallOutBox-body"> <p> The DOCA Core library is supported at beta level. </p> </div> </div> <p> </p><p>DOCA Core objects provide a unified and holistic interface for application developers to interact with various DOCA libraries. The DOCA Core API and objects bring a standardized flow and building blocks for applications to build upon while hiding the internal details of dealing with hardware and other software components. DOCA Core is designed to give the right level of abstraction while maintaining performance.</p> <p>DOCA Core has the same API (header files) for both NVIDIA® BlueField® and CPU installations, but specific API calls may return <code class="InlineCodeBlock"><span>DOCA_ERROR_NOT_SUPPORTED</span></code> if the API is not implemented for that processor. However, this is not the case for Windows and Linux as DOCA Core does have API differences between Windows and Linux installations.</p> <p>DOCA Core exposes C-language API to application writers and users must include the right header file to use according to the DOCA Core facilities needed for their application.</p> <p>DOCA Core can be divided into the following software modules:</p><div class="Table-Rte"> <div class="Table-Rte-body"> <table class="wrapped confluenceTable"> <colgroup> <col> <col> </colgroup> <thead class=" "> <tr> <td class="confluenceTh" rowspan="1" colspan="1"> <p>DOCA Core Module</p> </td> <td class="confluenceTh" rowspan="1" colspan="1"> <p>Description</p> </td> </tr> </thead><tfoot class=" "></tfoot><tbody class=" "> <tr> <td class="confluenceTd" rowspan="1" colspan="1"> <p>General</p> </td> <td class="confluenceTd" rowspan="1" colspan="1"> <ul class=" "><li class=" "><p>DOCA Core enumerations and basic structures</p> </li><li class=" "><p> Header files – <code class="InlineCodeBlock"><span>doca_error.h</span></code>, <code class="InlineCodeBlock"><span>doca_types.h</span></code> </p> </li></ul> </td> </tr> <tr> <td class="confluenceTd" rowspan="1" colspan="1"> <p>Device handling</p> </td> <td class="confluenceTd" rowspan="1" colspan="1"> <ul class=" "><li class=" "><p>Queries device information (host-side and BlueField) and device capabilities (e.g., device's PCIe BDF address)</p> <ul class=" "><li class=" "><p>On BlueField</p> <ul class=" "><li class=" "><p>Gets local BlueField devices</p> </li><li class=" "><p>Gets representors list (representing host local devices)</p> </li></ul></li><li class=" "><p>On the host</p> <ul class=" "><li class=" "><p>Gets local devices</p> </li></ul></li><li class=" "><p>Queries device capabilities and library capabilities</p> </li></ul></li><li class=" "><p> Opens and uses the selected device representor </p> </li><li class=" "><p>Relevant entities – <code class="InlineCodeBlock"><span>doca_devinfo</span></code>, <code class="InlineCodeBlock"><span>doca_devinfo_rep</span></code>, <code class="InlineCodeBlock"><span>doca_dev</span></code>, <code class="InlineCodeBlock"><span>doca_dev_rep</span></code> </p> </li><li class=" "><p> Header files – <code class="InlineCodeBlock"><span>doca_dev.h</span></code> </p> </li></ul> <div class="CallOutBox" data-option-Info> <div class="CallOutBox-icon"><svg><use xlink:href="#calloutbox-icon-info"></use></svg> </div><div class="CallOutBox-title">Info</div> <div class="CallOutBox-body"> <p>There is a symmetry between device entities on host and its representor (on BlueField). The convention of adding <code class="InlineCodeBlock"><span>rep</span></code> to the API or the object hints that it is representor-specific.</p> </div> </div> <p> </p> </td> </tr> <tr> <td class="confluenceTd" rowspan="1" colspan="1"> <p>Memory management</p> </td> <td class="confluenceTd" rowspan="1" colspan="1"> <ul class=" "><li class=" "><p>Handles optimized memory pools to be used by applications and enables sharing resources between DOCA libraries (while hiding hardware-related technicalities)</p> </li><li class=" "><p>Data buffer services (e.g., linked list of buffers to support scatter-gather list)</p> </li><li class=" "><p>Maps host memory to BlueField for direct access</p> </li><li class=" "><p>Relevant entities – <code class="InlineCodeBlock"><span>doca_buf</span></code>, <code class="InlineCodeBlock"><span>doca_mmap</span></code>, <code class="InlineCodeBlock"><span>doca_buf_inventory</span></code>, <code class="InlineCodeBlock"><span>doca_buf_array</span></code>, <code class="InlineCodeBlock"><span>doca_bufpool</span></code></p> </li><li class=" "><p> Header files – <code class="InlineCodeBlock"><span>doca_buf.h</span></code>, <code class="InlineCodeBlock"><span>doca_buf_inventory.h</span></code>, <code class="InlineCodeBlock"><span>doca_mmap.h</span></code>, <code class="InlineCodeBlock"><span>doca_buf_array.h</span></code>, <code class="InlineCodeBlock"><span>doca_bufpool</span></code></p> </li></ul> </td> </tr> <tr> <td class="confluenceTd" rowspan="1" colspan="1"> <p>Progress engine and task execution</p> </td> <td class="confluenceTd" rowspan="1" colspan="1"> <ul class=" "><li class=" "><p>Enables submitting tasks to DOCA libraries and track task progress (supports both polling mode and event-driven mode)</p> </li><li class=" "><p>Relevant ent ities – <code class="InlineCodeBlock"><span>doca_ctx</span></code>, <code class="InlineCodeBlock"><span>doca_task</span></code>, <code class="InlineCodeBlock"><span>doca_event</span></code>, <code class="InlineCodeBlock"><span>doca_event_handle_t</span></code>, <code class="InlineCodeBlock"><span>doca_pe</span></code> </p> </li><li class=" "><p> Header files – <code class="InlineCodeBlock"><span>doca_ctx.h</span></code> </p> </li></ul> </td> </tr> <tr> <td class="confluenceTd" rowspan="1" colspan="1"> <p>Sync events</p> </td> <td class="confluenceTd" rowspan="1" colspan="1"> <ul class=" "><li class=" "><p>Sync events are used to synchronize different processors (e.g., synchronize BlueField and host)</p> </li><li class=" "><p>header files – <code class="InlineCodeBlock"><span>doca_dpa_sync_event.h</span></code>, <code class="InlineCodeBlock"><span>doca_sync_event.h</span></code></p> </li></ul> </td> </tr> </tbody> </table> </div> </div> <p>The following sections describe DOCA Core's architecture and subsystems along with some basic flows that help users get started using DOCA Core.</p> </div> </div> <div class="StepModule" data-module><span class="StepModule-anchor" id="src-3169008654_id-.DOCACorev2.9.0LTS-Prerequisites"></span> <div class="StepModuleHeader"><h2 class="StepModuleHeader-title"><a class="StepModuleHeader-anchorLink" href="#src-3169008654_id-.DOCACorev2.9.0LTS-Prerequisites" data-cms-ai="0">Prerequisites</a></h2> <div class="StepModuleHeader-divider"></div></div> <div class="StepModule-body RichTextBody"> <p>DOCA Core objects are supported on NVIDIA® BlueField® networking platforms (DPU or SuperNIC) and the host machine. Both must meet the following prerequisites:</p> <ul class=" "><li class=" "><p>DOCA version 2.0.2 or greater</p> </li><li class=" "><p>NVIDIA® BlueField® software 4.0.2 or greater</p> </li><li class=" "><p>NVIDIA® BlueField®-3 firmware version 32.37.1000 and higher</p> </li><li class=" "><p>NVIDIA® BlueField®-2 firmware version 24.37.1000 and higher</p> </li><li class=" "><p>Please refer to the <a class="Link" href="/doca/sdk/DOCA+Backward+Compatibility+Policy" data-cms-ai="0" >DOCA Backward Compatibility Policy</a></p> </li></ul> </div> </div> <div class="StepModule" data-module><span class="StepModule-anchor" id="src-3169008654_id-.DOCACorev2.9.0LTS-ChangesFromPreviousReleases"></span> <div class="StepModuleHeader"><h2 class="StepModuleHeader-title"><a class="StepModuleHeader-anchorLink" href="#src-3169008654_id-.DOCACorev2.9.0LTS-ChangesFromPreviousReleases" data-cms-ai="0">Changes From Previous Releases</a></h2> <div class="StepModuleHeader-divider"></div></div> <div class="StepModule-body RichTextBody"> <h2 id="src-3169008654_id-.DOCACorev2.9.0LTS-Changesin2.9.0"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-Changesin2.9.0" data-cms-ai="0">Changes in 2.9.0</a> </h2> <h3 id="src-3169008654_id-.DOCACorev2.9.0LTS-Added"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-Added" data-cms-ai="0">Added</a> </h3> <ul class="diff-block-target diff-block-context "><li class=" "><p><code class="InlineCodeBlock"><span>doca_error_t doca_buf_chain_list_tail(struct doca_buf *list1_head, struct doca_buf *list1_tail, struct doca_buf *list2)</span></code></p> </li><li class=" "><p><code class="InlineCodeBlock"><span>doca_error_t doca_dev_accelerate_resource_reclaim(struct doca_dev *dev)</span></code></p> </li><li class=" "><p><code class="InlineCodeBlock"><span>doca_error_t doca_devinfo_cap_is_accelerate_resource_reclaim_supported(const struct doca_devinfo *devinfo, uint8_t *is_accelerate_resource_reclaim);</span></code></p> </li><li class=" "><p><code class="InlineCodeBlock"><span>New doca_event_batch_events_number enum values: DOCA_EVENT_BATCH_EVENTS_NUMBER_1, DOCA_EVENT_BATCH_EVENTS_NUMBER_2</span></code></p> </li></ul> <h3 id="src-3169008654_id-.DOCACorev2.9.0LTS-Changed"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-Changed" data-cms-ai="0">Changed</a> </h3> <ul class="diff-block-target diff-block-context "><li class=" "><p><code class="InlineCodeBlock"><span>doca_error_t doca_devinfo_is_equal_pci_addr(const struct doca_devinfo *devinfo, const char *pci_addr_str, uint8_t *is_equal)</span></code>; Using <code class="InlineCodeBlock"><span>"Bus:Device.Function"</span></code> format (i.e., without a domain component) assumes that the user's intention is a zeroed domain (i.e. "0000").</p> </li><li class=" "><p><code class="InlineCodeBlock"><span>doca_error_t doca_devinfo_rep_is_equal_pci_addr(const struct doca_devinfo_rep *devinfo_rep, const char *pci_addr_str, uint8_t *is_equal)</span></code>; Using <code class="InlineCodeBlock"><span>"Bus:Device.Function"</span></code> format (i.e., without a domain component) assumes that the user's intention is a zeroed domain (i.e. "0000").</p> </li></ul><p> </p> </div> </div> <div class="StepModule" data-module><span class="StepModule-anchor" id="src-3169008654_id-.DOCACorev2.9.0LTS-Architecture"></span> <div class="StepModuleHeader"><h2 class="StepModuleHeader-title"><a class="StepModuleHeader-anchorLink" href="#src-3169008654_id-.DOCACorev2.9.0LTS-Architecture" data-cms-ai="0">Architecture</a></h2> <div class="StepModuleHeader-divider"></div></div> <div class="StepModule-body RichTextBody"> <p>The following sections describe the architecture for the various DOCA Core software modules. Please refer to the <a class="Link" href="/doca/sdk/NVIDIA+DOCA+Library+APIs" data-cms-ai="0" >NVIDIA DOCA Library APIs</a> for DOCA header documentation. </p> <h2 id="src-3169008654_id-.DOCACorev2.9.0LTS-General"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-General" data-cms-ai="0">General</a> </h2> <p>All core objects adhere to same flow that later helps in doing no allocations in the fast path.</p> <p>The flow is as follows:</p> <ol class=" "><li class=" "><p>Create the object instance (e.g., <code class="InlineCodeBlock"><span>doca_mmap_create</span></code>).</p> </li><li class=" "><p>Configure the instance (e.g., <code class="InlineCodeBlock"><span>doca_mmap_set_memory_range</span></code>).</p> </li><li class=" "><p>Start the instance (e.g., <code class="InlineCodeBlock"><span>doca_mmap_start</span></code>).</p> </li></ol><p>After the instance is started, it adheres to zero allocations and can be used safely in the data path. After the instance is complete, it must be stopped and destroyed (<code class="InlineCodeBlock"><span>doca_mmap_stop</span></code>, <code class="InlineCodeBlock"><span>doca_mmap_destroy</span></code>).</p> <p>There are core objects that can be reconfigured and restarted again (i.e., create → configure → start → stop → configure → start). Please read the header file to see if specific objects support this option.</p> <h3 id="src-3169008654_id-.DOCACorev2.9.0LTS-doca_error_t"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-doca_error_t" data-cms-ai="0">doca_error_t</a> </h3> <p>All DOCA APIs return the status in the form of <code class="InlineCodeBlock"><span>doca_error_t</span></code>.</p><bsp-code-block class="CodeBlock" data-module="standard" data-language="text/plain" data-noAnnotations data-iscollapsible > <div class="CodeBlock-wrapper"> <div class="CodeBlock-header"> <div class="CodeBlock-collapseButton"> <svg class="CodeBlock-chevron"> <use xlink:href="#chevron-down"></use> </svg> <button class="CodeBlock-collapse">Collapse Source</button> </div> </div> <div class="CodeBlock-copy"> <div class="CodeBlock-copy-message"> <div class="CodeBlock-copy-message-prompt">Copy</div> <div class="CodeBlock-copy-message-done">Copied!</div> </div> <div class="CodeBlock-copy-button"> <div class="CodeBlock-copy-icon"> <svg class="done"><use xlink:href="#check"></use></svg> </div> </div> </div> <pre id="play" class="language- " plain-text data-line=""> <div class="CodeBlock-lineNumbers"></div> <code><p><code class="keyword">typedef</code> <code class="keyword">enum</code> doca_error { DOCA_SUCCESS, DOCA_ERROR_UNKNOWN, DOCA_ERROR_NOT_PERMITTED, <code class="comments">/**< Operation not permitted */</code> DOCA_ERROR_IN_USE, <code class="comments">/**< Resource already in use */</code> DOCA_ERROR_NOT_SUPPORTED, <code class="comments">/**< Operation not supported */</code> DOCA_ERROR_AGAIN, <code class="comments">/**< Resource temporarily unavailable, try again */</code> DOCA_ERROR_INVALID_VALUE, <code class="comments">/**< Invalid input */</code> DOCA_ERROR_NO_MEMORY, <code class="comments">/**< Memory allocation failure */</code> DOCA_ERROR_INITIALIZATION, <code class="comments">/**< Resource initialization failure */</code> DOCA_ERROR_TIME_OUT, <code class="comments">/**< Timer expired waiting for resource */</code> DOCA_ERROR_SHUTDOWN, <code class="comments">/**< Shut down in process or completed */</code> DOCA_ERROR_CONNECTION_RESET, <code class="comments">/**< Connection reset by peer */</code> DOCA_ERROR_CONNECTION_ABORTED, <code class="comments">/**< Connection aborted */</code> DOCA_ERROR_CONNECTION_INPROGRESS, <code class="comments">/**< Connection in progress */</code> DOCA_ERROR_NOT_CONNECTED, <code class="comments">/**< Not Connected */</code> DOCA_ERROR_NO_LOCK, <code class="comments">/**< Unable to acquire required lock */</code> DOCA_ERROR_NOT_FOUND, <code class="comments">/**< Resource Not Found */</code> DOCA_ERROR_IO_FAILED, <code class="comments">/**< Input/Output Operation Failed */</code> DOCA_ERROR_BAD_STATE, <code class="comments">/**< Bad State */</code> DOCA_ERROR_UNSUPPORTED_VERSION, <code class="comments">/**< Unsupported version */</code> DOCA_ERROR_OPERATING_SYSTEM, <code class="comments">/**< Operating system call failure */</code> DOCA_ERROR_DRIVER, <code class="comments">/**< DOCA Driver call failure */</code> DOCA_ERROR_UNEXPECTED, <code class="comments">/**< An unexpected scenario was detected */</code> DOCA_ERROR_ALREADY_EXIST, <code class="comments">/**< Resource already exist */</code> DOCA_ERROR_FULL, <code class="comments">/**< No more space in resource */</code> DOCA_ERROR_EMPTY, <code class="comments">/**< No entry is available in resource */</code> DOCA_ERROR_IN_PROGRESS, <code class="comments">/**< Operation is in progress */</code> DOCA_ERROR_TOO_BIG, <code class="comments">/**< Requested operation too big to be contained */</code> } doca_error_t;</p></code> </pre> </div> </bsp-code-block> <p> </p> <p>See <code class="InlineCodeBlock"><span>doca_error.h</span></code> for more.</p><p> </p> <h3 id="src-3169008654_safe-id-aWQtLkRPQ0FDb3JldjIuOS4wTFRTLUdlbmVyaWNTdHJ1Y3R1cmVzL0VudW0"> <a href="#src-3169008654_safe-id-aWQtLkRPQ0FDb3JldjIuOS4wTFRTLUdlbmVyaWNTdHJ1Y3R1cmVzL0VudW0" data-cms-ai="0">Generic Structures/Enum</a> </h3> <p>The following types are common across all DOCA APIs.</p><bsp-code-block class="CodeBlock" data-module="standard" data-language="text/plain" data-noAnnotations > <div class="CodeBlock-wrapper"> <div class="CodeBlock-copy"> <div class="CodeBlock-copy-message"> <div class="CodeBlock-copy-message-prompt">Copy</div> <div class="CodeBlock-copy-message-done">Copied!</div> </div> <div class="CodeBlock-copy-button"> <div class="CodeBlock-copy-icon"> <svg class="done"><use xlink:href="#check"></use></svg> </div> </div> </div> <pre id="play" class="language- " plain-text data-line=""> <div class="CodeBlock-lineNumbers"></div> <code><p><code class="keyword">union</code> doca_data { <code class="keyword">void</code> *ptr; uint64_t u64; }; <code class="keyword">enum</code> doca_access_flags { DOCA_ACCESS_LOCAL_READ_ONLY = 0, DOCA_ACCESS_LOCAL_READ_WRITE = (1 << 0), DOCA_ACCESS_RDMA_READ = (1 << 1), DOCA_ACCESS_RDMA_WRITE = (1 << 2), DOCA_ACCESS_RDMA_ATOMIC = (1 << 3), DOCA_ACCESS_DPU_READ_ONLY = (1 << 4), DOCA_ACCESS_DPU_READ_WRITE = (1 << 5), }; <code class="keyword">enum</code> doca_pci_func_type { DOCA_PCI_FUNC_PF = 0, <code class="comments">/* physical function */</code> DOCA_PCI_FUNC_VF, <code class="comments">/* virtual function */</code> DOCA_PCI_FUNC_SF, <code class="comments">/* sub function */</code> };</p></code> </pre> </div> </bsp-code-block> <p> </p> <p>For more see <code class="InlineCodeBlock"><span>doca_types.h</span></code>.</p> <p> </p> <h2 id="src-3169008654_id-.DOCACorev2.9.0LTS-DOCADevice"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-DOCADevice" data-cms-ai="0"><span id="src-3169008654_id-.DOCACorev2.9.0LTS-DOCADevice" class="confluence-anchor-link"></span>DOCA Device</a> </h2> <h3 id="src-3169008654_id-.DOCACorev2.9.0LTS-LocalDeviceandRepresentor"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-LocalDeviceandRepresentor" data-cms-ai="0">Local Device and Representor</a> </h3> <h4 id="src-3169008654_id-.DOCACorev2.9.0LTS-Prerequisites.1"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-Prerequisites.1" data-cms-ai="0">Prerequisites</a> </h4> <p>For the representors model, BlueField must be operated in DPU mode. See <a class="Link" href="/doca/sdk/NVIDIA+BlueField+Modes+of+Operation" data-cms-ai="0" >NVIDIA BlueField Modes of Operation</a>.</p><p> </p> <h4 id="src-3169008654_id-.DOCACorev2.9.0LTS-TopologyTopology"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-TopologyTopology" data-cms-ai="0">Topology</a> </h4> <p class="p">The DOCA device represents an available processing unit backed by hardware or software implementation. The DOCA device exposes its properties to help an application in choosing the right device(s). DOCA Core supports two device types:</p> <ul class=" "><li class="p "><p>Local device – this is an actual device exposed in the local system (BlueField or host) and can perform DOCA library processing tasks.</p> </li><li class="p "><p>Representor device – this is a representation of a local device. The local device is usually on the host (except for SFs) and the representor is always on BlueField side (a proxy on BlueField for the host-side device).</p> </li></ul><p>The following figure provides an example topology:</p> <p></p><p></p><div class="Enhancement" data-align-inline has-width style="--image-width: 1000px"> <div class="Enhancement-item"> <figure class="Figure"> <picture> <source type="image/webp" width="1440" height="1124" srcset="https://docscontent.nvidia.com/dims4/default/1a02773/2147483647/strip/true/crop/4202x3280+0+0/resize/1440x1124!/format/webp/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca-device-diagram-version-1-modificationdate-1726579771127-api-v2.png 1x,https://docscontent.nvidia.com/dims4/default/9a6101e/2147483647/strip/true/crop/4202x3280+0+0/resize/2880x2248!/format/webp/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca-device-diagram-version-1-modificationdate-1726579771127-api-v2.png 2x"> <source type="image/png" width="1440" height="1124" srcset="https://docscontent.nvidia.com/dims4/default/0104cfc/2147483647/strip/true/crop/4202x3280+0+0/resize/1440x1124!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca-device-diagram-version-1-modificationdate-1726579771127-api-v2.png"> <img class="Image" alt="doca-device-diagram-version-1-modificationdate-1726579771127-api-v2.png" srcset="https://docscontent.nvidia.com/dims4/default/0104cfc/2147483647/strip/true/crop/4202x3280+0+0/resize/1440x1124!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca-device-diagram-version-1-modificationdate-1726579771127-api-v2.png 1x,https://docscontent.nvidia.com/dims4/default/04c511b/2147483647/strip/true/crop/4202x3280+0+0/resize/2880x2248!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca-device-diagram-version-1-modificationdate-1726579771127-api-v2.png 2x" width="1440" height="1124" src="https://docscontent.nvidia.com/dims4/default/0104cfc/2147483647/strip/true/crop/4202x3280+0+0/resize/1440x1124!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca-device-diagram-version-1-modificationdate-1726579771127-api-v2.png" loading="lazy"> </picture> </figure> </div> </div><p> </p><p>The diagram shows a BlueField device (on the right side of the figure) connected to a host (on the left side of the figure). The host topology consists of two physical functions (PF0 and PF1). Furthermore, PF0 has two child virtual functions, VF0 and VF1. PF1 has only one VF associated with it, VF0. Using the DOCA SDK API, the user gets these five devices as local devices on the host.</p> <p>The BlueField side has a representor-device per each host function in a 1-to-1 relation (e.g., <code class="InlineCodeBlock"><span>hpf0</span></code> is the representor device for the host's PF0 device and so on) as well as a representor for each SF function, such that both the SF and its representor reside in BlueField.</p> <p>If the user queries local devices on the BlueField (not representor devices), they get the two (in this example) BlueField DPU PFs, <code class="InlineCodeBlock"><span>p0</span></code> and <code class="InlineCodeBlock"><span>p1</span></code>. These two BlueField local devices are the parent devices for:</p> <ul class=" "><li class=" "><p>7 representor devices –</p> <ul class=" "><li class=" "><p>5 representor devices shown as arrows to/from the host (devices with the prefix <code class="InlineCodeBlock"><span>hpf*</span></code>) in the diagram</p> </li><li class=" "><p>2 representor devices for the SF devices, <code class="InlineCodeBlock"><span>pf0sf0</span></code> and <code class="InlineCodeBlock"><span>pf1sf0</span></code></p> </li></ul></li><li class=" "><p>2 local SF devices (not the SF representors), <code class="InlineCodeBlock"><span>p0s0</span></code> and <code class="InlineCodeBlock"><span>p1s0</span></code></p> </li></ul><p>In the diagram, the topology is split into two parts (note the dotted line), each part is represented by a BlueField physical device, <code class="InlineCodeBlock"><span>p0</span></code> and <code class="InlineCodeBlock"><span>p1</span></code>, each of which is responsible for creating all other local devices (host PFs, host VFs, and BlueField SFs). As such, the BlueField physical device can be referred to as the parent device of the other devices and would have access to the representor of every other function (via <code class="InlineCodeBlock"><span>doca_devinfo_rep_list_create</span></code>).</p><p> </p> <h4 id="src-3169008654_id-.DOCACorev2.9.0LTS-LocalDeviceandRepresentorMatching"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-LocalDeviceandRepresentorMatching" data-cms-ai="0">Local Device and Representor Matching</a> </h4> <p>Based on the topology diagram, the mmap export APIs can be used as follows:</p> <div class="Table-Rte"> <div class="Table-Rte-body"> <table class="wrapped confluenceTable"> <colgroup> <col> <col> <col> </colgroup> <thead class=" "> <tr> <td class="confluenceTh" rowspan="1" colspan="1"> <p> Device to Select on Host When Using doca_mmap_export_dpu() </p> </td> <td class="confluenceTh" rowspan="1" colspan="1"> <p>BlueField <b>Matching Representor</b></p> </td> <td class="confluenceTh" rowspan="1" colspan="1"> <p> Device to Select on BlueField When Using doca_mmap_create_from_export() </p> </td> </tr> </thead><tfoot class=" "></tfoot><tbody class=" "> <tr> <td class="confluenceTd" rowspan="1" colspan="1"> <p>pf0 – 0b:00.0</p> </td> <td class="confluenceTd" rowspan="1" colspan="1"> <p>hpf0 – 0b:00.0</p> </td> <td class="confluenceTd" rowspan="3" colspan="1"> <p>p0 – 03:00.0</p> </td> </tr> <tr> <td class="confluenceTd" rowspan="1" colspan="1"> <p>pf0vf0 – 0b:00.2</p> </td> <td class="confluenceTd" rowspan="1" colspan="1"> <p>hpf0vf0 – 0b:00.2</p> </td> </tr> <tr> <td class="confluenceTd" rowspan="1" colspan="1"> <p>pf0vf1 – 0b:00.3</p> </td> <td class="confluenceTd" rowspan="1" colspan="1"> <p>hpf0vf1 – 0b:00.3</p> </td> </tr> <tr> <td class="confluenceTd" rowspan="1" colspan="1"> <p>pf1 – 0b:00.1</p> </td> <td class="confluenceTd" rowspan="1" colspan="1"> <p>hpf1 – 0b:00.1</p> </td> <td class="confluenceTd" rowspan="2" colspan="1"> <p style="text-align:center;">p1 – 03:00.1</p> </td> </tr> <tr> <td class="confluenceTd" rowspan="1" colspan="1"> <p>pf1vf0 – 0b:00.4</p> </td> <td class="confluenceTd" rowspan="1" colspan="1"> <p>hpf1vf0 – 0b:00.4</p> </td> </tr> </tbody> </table> </div> </div> <h3 id="src-3169008654_id-.DOCACorev2.9.0LTS-ExpectedFlowExpectedFlow"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-ExpectedFlowExpectedFlow" data-cms-ai="0">Expected Flow</a> </h3> <h4 id="src-3169008654_id-.DOCACorev2.9.0LTS-DeviceDiscoveryDeviceDiscovery"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-DeviceDiscoveryDeviceDiscovery" data-cms-ai="0">Device Discovery</a> </h4> <p> To work with DOCA libraries or DOCA Core objects, application must open and use a device on BlueField or host. </p> <p> There are usually multiple devices available depending on the setup. See section "<a class="Link" href="#src-3169008654_id-.DOCACorev2.9.0LTS-Topology" data-cms-ai="0" >Topology</a>" for more information. </p> <p> An application can decide which device to select based on capabilities, the DOCA Core API, and every other library which provides a wide range of device capabilities. The flow is as follows: </p> <p></p><p></p><div class="Enhancement" data-align-inline has-width style="--image-width: 700px"> <div class="Enhancement-item"> <figure class="Figure"> <picture> <source type="image/webp" width="845" height="432" srcset="https://docscontent.nvidia.com/dims4/default/2e3d805/2147483647/strip/true/crop/845x432+0+0/resize/845x432!/format/webp/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdevice_discovery-version-1-modificationdate-1726579768240-api-v2.png 1x,https://docscontent.nvidia.com/dims4/default/d357479/2147483647/strip/true/crop/845x432+0+0/resize/1690x864!/format/webp/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdevice_discovery-version-1-modificationdate-1726579768240-api-v2.png 2x"> <source type="image/png" width="845" height="432" srcset="https://docscontent.nvidia.com/dims4/default/bebef55/2147483647/strip/true/crop/845x432+0+0/resize/845x432!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdevice_discovery-version-1-modificationdate-1726579768240-api-v2.png"> <img class="Image" alt="device_discovery-version-1-modificationdate-1726579768240-api-v2.png" srcset="https://docscontent.nvidia.com/dims4/default/bebef55/2147483647/strip/true/crop/845x432+0+0/resize/845x432!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdevice_discovery-version-1-modificationdate-1726579768240-api-v2.png 1x,https://docscontent.nvidia.com/dims4/default/2437902/2147483647/strip/true/crop/845x432+0+0/resize/1690x864!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdevice_discovery-version-1-modificationdate-1726579768240-api-v2.png 2x" width="845" height="432" src="https://docscontent.nvidia.com/dims4/default/bebef55/2147483647/strip/true/crop/845x432+0+0/resize/845x432!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdevice_discovery-version-1-modificationdate-1726579768240-api-v2.png" loading="lazy"> </picture> </figure> </div> </div><p> </p><ol class=" "><li class=" "><p class="auto-cursor-target"> The application gets a list of available devices. </p> </li><li class=" "><p class="auto-cursor-target"> Select a specific <code class="InlineCodeBlock"><span>doca_devinfo</span></code> to work with according to one of its properties and capabilities. This example looks for a specific PCIe address. </p> </li><li class=" "><p class="auto-cursor-target"> Once the <code class="InlineCodeBlock"><span>doca_devinfo</span></code> that suits the user's needs is found, open <code class="InlineCodeBlock"><span>doca_dev</span></code>. </p> </li><li class=" "><p class="auto-cursor-target"> After the user opens the right device, they can close the <code class="InlineCodeBlock"><span>doca_devinfo</span></code> list and continue working with <code class="InlineCodeBlock"><span>doca_dev</span></code>. The application eventually must close the <code class="InlineCodeBlock"><span>doca_dev</span></code>. </p> </li></ol> <h4 id="src-3169008654_id-.DOCACorev2.9.0LTS-RepresentorDeviceDiscoveryRepresentorDeviceDiscovery"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-RepresentorDeviceDiscoveryRepresentorDeviceDiscovery" data-cms-ai="0">Representor Device Discovery</a> </h4> <p> To work with DOCA libraries or DOCA Core objects, some applications must open and use a representor device on BlueField. Before they can open the representor device and use it, applications need tools to allow them to select the appropriate representor device with the necessary capabilities. The DOCA Core API provides a wide range of device capabilities to help the application select the right device pair (device and its BlueField representor). The flow is as follows: </p> <p></p><p></p><div class="Enhancement" data-align-inline has-width style="--image-width: 700px"> <div class="Enhancement-item"> <figure class="Figure"> <picture> <source type="image/webp" width="911" height="432" srcset="https://docscontent.nvidia.com/dims4/default/66187f3/2147483647/strip/true/crop/911x432+0+0/resize/911x432!/format/webp/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Frep_device_discovery-version-1-modificationdate-1726579784370-api-v2.png 1x,https://docscontent.nvidia.com/dims4/default/9f2d16e/2147483647/strip/true/crop/911x432+0+0/resize/1822x864!/format/webp/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Frep_device_discovery-version-1-modificationdate-1726579784370-api-v2.png 2x"> <source type="image/png" width="911" height="432" srcset="https://docscontent.nvidia.com/dims4/default/835ad92/2147483647/strip/true/crop/911x432+0+0/resize/911x432!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Frep_device_discovery-version-1-modificationdate-1726579784370-api-v2.png"> <img class="Image" alt="rep_device_discovery-version-1-modificationdate-1726579784370-api-v2.png" srcset="https://docscontent.nvidia.com/dims4/default/835ad92/2147483647/strip/true/crop/911x432+0+0/resize/911x432!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Frep_device_discovery-version-1-modificationdate-1726579784370-api-v2.png 1x,https://docscontent.nvidia.com/dims4/default/8c2f7fa/2147483647/strip/true/crop/911x432+0+0/resize/1822x864!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Frep_device_discovery-version-1-modificationdate-1726579784370-api-v2.png 2x" width="911" height="432" src="https://docscontent.nvidia.com/dims4/default/835ad92/2147483647/strip/true/crop/911x432+0+0/resize/911x432!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Frep_device_discovery-version-1-modificationdate-1726579784370-api-v2.png" loading="lazy"> </picture> </figure> </div> </div><p> </p><ol class=" "><li class=" "><p> The application "knows" which device it wants to use (e.g., by its PCIe BDF address). On the host, it can be done using DOCA Core API or OS services. </p> </li><li class=" "><p> On the BlueField side, the application gets a list of device representors for a specific BlueField local device. </p> </li><li class=" "><p> Select a specific <code class="InlineCodeBlock"><span>doca_devinfo_rep</span></code> to work with according to one of its properties. This example looks for a specific PCIe address. </p> </li><li class=" "><p> Once the <code class="InlineCodeBlock"><span>doca_devinfo_rep</span></code> that suits the user's needs is found, open <code class="InlineCodeBlock"><span>doca_dev_rep</span></code>. </p> </li><li class=" "><p> After the user opens the right device representor, they can close the <code class="InlineCodeBlock"><span>doca_devinfo_rep</span></code> list and continue working with <code class="InlineCodeBlock"><span>doca_dev_rep</span></code>. The application eventually must close <code class="InlineCodeBlock"><span>doca_dev_rep</span></code> too. </p> </li></ol><p> As mentioned previously, the DOCA Core API can identify devices and their representors that have a unique property (e.g., the BDF address, the same BDF for the device, and its BlueField representor). </p> <p> </p> <div class="CallOutBox" data-option-Note> <div class="CallOutBox-icon"><svg><use xlink:href="#calloutbox-icon-check"></use></svg> </div><div class="CallOutBox-title">Note</div> <div class="CallOutBox-body"> <p> Regarding representor device property caching, the function <code class="InlineCodeBlock"><span>doca_devinfo_rep_create_list</span></code> provides a snapshot of the DOCA representor device properties when it is called. If any representor's properties are changed dynamically (e.g., BDF address changes after bus reset), t he device properties that the function returns would not reflect this change. One should create the list again to get the updated properties of the representors. </p> </div> </div> <p> </p> <h3 id="src-3169008654_id-.DOCACorev2.9.0LTS-DOCAApplicationRestartDOCAApplicationRestart"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-DOCAApplicationRestartDOCAApplicationRestart" data-cms-ai="0">DOCA Application Restart</a> </h3> <p style="text-align:left;">Restarting a DOCA application can be done gracefully or non-gracefully. Each method has its own steps and considerations to ensure proper resource management and minimize downtime.</p> <p style="text-align:left;">In a graceful restart, the application follows a structured process to ensure that all resources are properly managed and released before restarting. The application should first gracefully free all associated resources including those tied to the DOCA device (e.g., DOCA Flow switch ports and their components). After freeing the resources, the application calls <code class="InlineCodeBlock"><span>doca_dev_close</span></code> to close the DOCA device instance and then terminates. In a non-graceful restart, the application crashes unexpectedly without freeing the associated resources. The application is then started again.</p> <p style="text-align:left;">The <code class="InlineCodeBlock"><span>doca_dev_accelerate_resource_reclaim</span></code> API can be useful in both scenarios to optimize the reclaim process for resources associated with the device. By retaining critical resources in the cache, this API ensures that they can be quickly reclaimed when needed, minimizing downtime and speeding up the recovery process, especially in non-graceful restart scenarios.</p> <p style="text-align:left;">For a graceful restart, users should call the <code class="InlineCodeBlock"><span>doca_dev_accelerate_resource_reclaim</span></code> API before initiating the device resource cleanup. After calling the API, users can proceed with freeing all associated resources, closing the DOCA device instance with <code class="InlineCodeBlock"><span>doca_dev_close</span></code>, and terminating the application. This ensures that resources are properly managed and released before the application restarts.</p> <p style="text-align:left;">For a non-graceful restart, where the application crashes unexpectedly, the <code class="InlineCodeBlock"><span>doca_dev_accelerate_resource_reclaim</span></code> API can be called periodically (e.g., every 5 seconds) to ensure readiness. This periodic invocation enables continuous retention of critical resources in the cache so that when the application restarts, these resources can be quickly reclaimed, minimizing downtime and speeding up the recovery process.</p> <p style="text-align:left;">After restarting the application, whether gracefully or non-gracefully, the application should call <code class="InlineCodeBlock"><span>doca_dev_open</span></code> to create a new DOCA device instance.</p> <div class="CallOutBox" data-option-Tip> <div class="CallOutBox-icon"><svg><use xlink:href="#calloutbox-icon-check"></use></svg> </div><div class="CallOutBox-title">Tip</div> <div class="CallOutBox-body"> <p>Immediately after the return of <code class="InlineCodeBlock"><span>doca_dev_open</span></code>, it is recommended to call the <code class="InlineCodeBlock"><span>doca_dev_accelerate_resource_reclaim</span></code> API to extend the retention period of the resources associated with the device in the cache.</p> </div> </div> <p> </p> <p style="text-align:left;">Afterwards, the application should allocate the necessary resources associated with the DOCA device. This ensures that the application can resume its operations with the required resources in place, leveraging the retained resources in the cache for a faster and more efficient restart process.</p> <p> </p> <div class="CallOutBox" data-option-Note> <div class="CallOutBox-icon"><svg><use xlink:href="#calloutbox-icon-check"></use></svg> </div><div class="CallOutBox-title">Note</div> <div class="CallOutBox-body"> <p>Using this API is not without cost, as it may lead to a lack or shortage of system resources, potentially causing overall system performance degradation. Only use the API for the specified use-cases above. If you are unsure about a specific application use-case, please contact NVIDIA Enterprise Support for questions.</p> </div> </div> <p> </p> <h2 id="src-3169008654_id-.DOCACorev2.9.0LTS-DOCAMemorySubsystem"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-DOCAMemorySubsystem" data-cms-ai="0"><span id="src-3169008654_id-.DOCACorev2.9.0LTS-DOCAMemorySubsystem" class="confluence-anchor-link"></span>DOCA Memory Subsystem</a> </h2> <p>DOCA memory subsystem is designed to optimize performance while keeping a minimal memory footprint (to facilitate scalability) as main design goal.</p> <p>DOCA memory has the following main components:</p> <ul class=" "><li class=" "><p><code class="InlineCodeBlock"><span>doca_buf</span></code> – this is the data buffer descriptor.<i class=" "> </i>This is not the actual data buffer, rather, it is a descriptor that holds metadata on the "pointed" data buffer.</p> </li><li class=" "><p><code class="InlineCodeBlock"><span>doca_mmap</span></code> – this is the data buffers pool which <code class="InlineCodeBlock"><span>doca_buf</span></code> points at. The application provides the memory as a single memory region, as well as permissions for certain devices to access it.</p> </li></ul><p>As the <code class="InlineCodeBlock"><span>doca_mmap</span></code> serves as the memory pool for data buffers, there is also an entity called <code class="InlineCodeBlock"><span>doca_buf_inventory</span></code><i class=" "> </i>which serves as a pool of <code class="InlineCodeBlock"><span>doca_buf</span></code> with same characteristics (see more in sections "<a class="Link" href="#src-3169008654_id-.DOCACorev2.9.0LTS-Buffers" data-cms-ai="0" >DOCA Core Buffers</a>" and "<a class="Link" href="#src-3169008654_id-.DOCACorev2.9.0LTS-Inventories" data-cms-ai="0" >DOCA Core Inventories</a>"). As all DOCA entities, memory subsystem objects are opaque and can be instantiated by DOCA SDK only.</p> <p>The following diagram shows the various modules within the DOCA memory subsystem.</p> <p></p><p></p><div class="Enhancement" data-align-inline has-height style="--image-height: 400px"> <div class="Enhancement-item"> <figure class="Figure"> <picture> <source type="image/webp" width="1440" height="750" srcset="https://docscontent.nvidia.com/dims4/default/9709c74/2147483647/strip/true/crop/4076x2122+0+0/resize/1440x750!/format/webp/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fmmap_memrange_doca-version-1-modificationdate-1726579776367-api-v2.png 1x,https://docscontent.nvidia.com/dims4/default/56935a2/2147483647/strip/true/crop/4076x2122+0+0/resize/2880x1500!/format/webp/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fmmap_memrange_doca-version-1-modificationdate-1726579776367-api-v2.png 2x"> <source type="image/png" width="1440" height="750" srcset="https://docscontent.nvidia.com/dims4/default/dc49211/2147483647/strip/true/crop/4076x2122+0+0/resize/1440x750!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fmmap_memrange_doca-version-1-modificationdate-1726579776367-api-v2.png"> <img class="Image" alt="mmap_memrange_doca-version-1-modificationdate-1726579776367-api-v2.png" srcset="https://docscontent.nvidia.com/dims4/default/dc49211/2147483647/strip/true/crop/4076x2122+0+0/resize/1440x750!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fmmap_memrange_doca-version-1-modificationdate-1726579776367-api-v2.png 1x,https://docscontent.nvidia.com/dims4/default/f2341cd/2147483647/strip/true/crop/4076x2122+0+0/resize/2880x1500!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fmmap_memrange_doca-version-1-modificationdate-1726579776367-api-v2.png 2x" width="1440" height="750" src="https://docscontent.nvidia.com/dims4/default/dc49211/2147483647/strip/true/crop/4076x2122+0+0/resize/1440x750!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fmmap_memrange_doca-version-1-modificationdate-1726579776367-api-v2.png" loading="lazy"> </picture> </figure> </div> </div><p> </p><p>In the diagram, you may see two <code class="InlineCodeBlock"><span>doca_buf_inventory</span></code>s. Each <code class="InlineCodeBlock"><span>doca_buf</span></code> points to a portion of the memory buffer which is part of a <code class="InlineCodeBlock"><span>doca_mmap</span></code>. The mmap is populated with one continuous memory buffer <code class="InlineCodeBlock"><span>memrange</span></code> and is mapped to two devices, <code class="InlineCodeBlock"><span>dev1</span></code> and <code class="InlineCodeBlock"><span>dev2</span></code>.</p> <h3 id="src-3169008654_id-.DOCACorev2.9.0LTS-RequirementsandConsiderations"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-RequirementsandConsiderations" data-cms-ai="0">Requirements and Considerations</a> </h3> <ul class=" "><li class=" "><p>The DOCA memory subsystem mandates the usage of pools as opposed to dynamic allocation</p> <ul class=" "><li class=" "><p>Pool for <code class="InlineCodeBlock"><span>doca_buf</span></code><i class=" "> </i>→ <code class="InlineCodeBlock"><span>doca_buf_inventory</span></code></p> </li><li class=" "><p>Pool for data memory → <code class="InlineCodeBlock"><span>doca_mmap</span></code></p> </li></ul></li><li class=" "><p>The memory buffer in the mmap can be mapped to one device or more</p> </li><li class=" "><p>Devices in the mmap are restricted by access permissions defining how they can access the memory buffer</p> </li><li class=" "><p><code class="InlineCodeBlock"><span>doca_buf</span></code><i class=" "> </i>points to a specific memory buffer (or part of it) and holds the metadata for that buffer</p> </li><li class=" "><p>The internals of mapping and working with the device (e.g., memory registrations) is hidden from the application</p> </li><li class=" "><p>As best practice, the application should start the <code class="InlineCodeBlock"><span>doca_mmap</span></code> in the initialization phase as the start operation is time consuming. <code class="InlineCodeBlock"><span>doca_mmap</span></code> should not be started as part of the data path unless necessary.</p> </li><li class=" "><p>The host-mapped memory buffer can be accessed by BlueField</p> </li></ul> <h3 id="src-3169008654_id-.DOCACorev2.9.0LTS-doca_mmap"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-doca_mmap" data-cms-ai="0">doca_mmap</a> </h3> <p><code class="InlineCodeBlock"><span>doca_mmap</span></code> is more than just a data buffer as it hides a lot of details (e.g., RDMA technicalities, device handling, etc.) from the application developer while giving the right level of abstraction to the software using it. <code class="InlineCodeBlock"><span>doca_mmap</span></code> is the best way to share memory between the host and BlueField so BlueField can have direct access to the host-side memory or vice versa.</p> <p>DOCA SDK supports several types of mmap that help with different use cases: local mmap and mmap from export.</p> <h4 id="src-3169008654_id-.DOCACorev2.9.0LTS-Localmmap"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-Localmmap" data-cms-ai="0">Local mmap</a> </h4> <p>This is the basic type of mmap which maps local buffers to the local device(s).</p> <ol class=" "><li class=" "><p>The application creates the <code class="InlineCodeBlock"><span>doca_mmap</span></code>.</p> </li><li class=" "><p>The application sets the memory range of the mmap using <code class="InlineCodeBlock"><span>doca_mmap_set_memrange</span></code>. The memory range is memory that the application allocates and manages (usually holding the pool of data sent to the device's processing units).</p> </li><li class=" "><p>The application adds devices, g ranting the devices access to the memory region. </p> </li><li class=" "><p class="auto-cursor-target">The application can specify the access permission for the devices to that memory range using <code class="InlineCodeBlock"><span>doca_mmap_set_permissions</span></code>.</p> <ul class=" "><li class=" "><p class="auto-cursor-target">If the mmap is used only locally, then <code class="InlineCodeBlock"><span>DOCA_ACCESS_LOCAL_*</span></code> must be specified</p> </li><li class=" "><p class="auto-cursor-target">If the mmap is created on the host but shared with BlueField (see step 6), then <code class="InlineCodeBlock"><span>DOCA_ACCESS_PCI_*</span></code> must be specified</p> </li><li class=" "><p>If the mmap is created on BlueField but shared with the host (see step 6), then <code class="InlineCodeBlock"><span>DOCA_ACCESS_PCI_*</span></code> must be specified</p> </li><li class=" "><p class="auto-cursor-target">If the mmap is shared with a remote RDMA target, then <code class="InlineCodeBlock"><span>DOCA_ACCESS_RDMA_*</span></code> must be specified</p> </li></ul></li><li class=" "><p class="auto-cursor-target">The application starts the mmap.</p> <div class="CallOutBox" data-option-Note> <div class="CallOutBox-icon"><svg><use xlink:href="#calloutbox-icon-check"></use></svg> </div><div class="CallOutBox-title">Note</div> <div class="CallOutBox-body"> <p>From this point no more changes can be made to the mmap.</p> </div> </div> <p> </p> </li><li class=" "><p class="auto-cursor-target">To share the mmap with BlueField/host or the RDMA remote target, call <code class="InlineCodeBlock"><span>doca_mmap_export_pci</span></code> or <code class="InlineCodeBlock"><span>doca_mmap_export_rdma</span></code> respectively. If appropriate access has not been provided, the export fails.</p> <div class="CallOutBox" data-option-Warning> <div class="CallOutBox-icon"><svg><use xlink:href="#calloutbox-icon-info"></use></svg> </div><div class="CallOutBox-title">Warning</div> <div class="CallOutBox-body"> <p>The exported data contains sensitive information. Make sure to pass this data through a secure channel!</p> </div> </div> <p> </p> </li><li class=" "><p>The generated blob from the previous step can be shared out of band using a socket. If shared with a BlueField, it is recommended to use the DOCA Comm Channel instead. See the <a class="Link" href="/doca/sdk/NVIDIA+DOCA+DMA+Copy+Application+Guide" data-cms-ai="0" >DMA Copy application</a> for the exact flow.</p> </li></ol> <h4 id="src-3169008654_id-.DOCACorev2.9.0LTS-mmapfromExport"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-mmapfromExport" data-cms-ai="0">mmap from Export</a> </h4> <p>This mmap is used to access the host memory (from BlueField) or the remote RDMA target's memory.</p> <ol class=" "><li class=" "><p>The application receives a blob from the other side. The blob contains data returned from step 6 in the former bullet.</p> </li><li class=" "><p class="auto-cursor-target">The application calls <code class="InlineCodeBlock"><span>doca_mmap_create_from_export</span></code> and receives a new mmap that represents memory defined by the other side.</p> </li></ol><p></p><p></p><div class="Enhancement" data-align-inline has-height style="--image-height: 400px"> <div class="Enhancement-item"> <figure class="Figure"> <picture> <source type="image/webp" width="1440" height="728" srcset="https://docscontent.nvidia.com/dims4/default/7b791d1/2147483647/strip/true/crop/4011x2028+0+0/resize/1440x728!/format/webp/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fmmap_export_diagram-version-1-modificationdate-1726579775913-api-v2.png 1x,https://docscontent.nvidia.com/dims4/default/b82f72c/2147483647/strip/true/crop/4011x2028+0+0/resize/2880x1456!/format/webp/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fmmap_export_diagram-version-1-modificationdate-1726579775913-api-v2.png 2x"> <source type="image/png" width="1440" height="728" srcset="https://docscontent.nvidia.com/dims4/default/9eb8ddd/2147483647/strip/true/crop/4011x2028+0+0/resize/1440x728!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fmmap_export_diagram-version-1-modificationdate-1726579775913-api-v2.png"> <img class="Image" alt="mmap_export_diagram-version-1-modificationdate-1726579775913-api-v2.png" srcset="https://docscontent.nvidia.com/dims4/default/9eb8ddd/2147483647/strip/true/crop/4011x2028+0+0/resize/1440x728!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fmmap_export_diagram-version-1-modificationdate-1726579775913-api-v2.png 1x,https://docscontent.nvidia.com/dims4/default/eb6703c/2147483647/strip/true/crop/4011x2028+0+0/resize/2880x1456!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fmmap_export_diagram-version-1-modificationdate-1726579775913-api-v2.png 2x" width="1440" height="728" src="https://docscontent.nvidia.com/dims4/default/9eb8ddd/2147483647/strip/true/crop/4011x2028+0+0/resize/1440x728!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fmmap_export_diagram-version-1-modificationdate-1726579775913-api-v2.png" loading="lazy"> </picture> </figure> </div> </div><p> </p><p class="auto-cursor-target">Now the application can create <code class="InlineCodeBlock"><span>doca_buf</span></code> to point to this imported mmap and have direct access to the other machine's memory.</p> <p> </p> <div class="CallOutBox" data-option-Note> <div class="CallOutBox-icon"><svg><use xlink:href="#calloutbox-icon-check"></use></svg> </div><div class="CallOutBox-title">Note</div> <div class="CallOutBox-body"> <p>BlueField can access memory exported to BlueField if the exporter is a host on the same machine. Or it can access memory exported through RDMA which can be on the same machine, a remote host, or on a remote BlueField.</p> </div> </div> <p> </p> <div class="CallOutBox" data-option-Note> <div class="CallOutBox-icon"><svg><use xlink:href="#calloutbox-icon-check"></use></svg> </div><div class="CallOutBox-title">Note</div> <div class="CallOutBox-body"> <p>The host can only access memory exported through RDMA. This can be memory on a remote host, remote BlueField, or BlueField on same machine.</p> </div> </div> <p> </p> <h3 id="src-3169008654_id-.DOCACorev2.9.0LTS-Buffers"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-Buffers" data-cms-ai="0"><span id="src-3169008654_id-.DOCACorev2.9.0LTS-Buffers" class="confluence-anchor-link"></span>Buffers</a> </h3> <p>The DOCA buffer object is used to reference memory that is accessible by BlueField hardware. The buffer can be utilized across different BlueField accelerators. The buffer may reference CPU, GPU, host, or even RDMA memory. However, this is abstracted so once a buffer is created, it can be handled in a similar way regardless of how it got created. This section covers usage of the DOCA buffer after it is allocated.</p> <p>The DOCA buffer has an address and length describing a memory region. Each buffer can also point to data within the region using the data address and data length. This distinguishes three sections of the buffer: The headroom, the dataroom, and the tailroom.</p> <p></p><p></p><div class="Enhancement" data-align-inline has-width style="--image-width: 650px"> <div class="Enhancement-item"> <figure class="Figure"> <picture> <source type="image/webp" width="1440" height="553" srcset="https://docscontent.nvidia.com/dims4/default/d17c229/2147483647/strip/true/crop/2285x877+0+0/resize/1440x553!/format/webp/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca-buf-version-1-modificationdate-1726579770050-api-v2.png 1x,https://docscontent.nvidia.com/dims4/default/78956d7/2147483647/strip/true/crop/2285x877+0+0/resize/2880x1106!/format/webp/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca-buf-version-1-modificationdate-1726579770050-api-v2.png 2x"> <source type="image/png" width="1440" height="553" srcset="https://docscontent.nvidia.com/dims4/default/5b8d9bf/2147483647/strip/true/crop/2285x877+0+0/resize/1440x553!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca-buf-version-1-modificationdate-1726579770050-api-v2.png"> <img class="Image" alt="doca-buf-version-1-modificationdate-1726579770050-api-v2.png" srcset="https://docscontent.nvidia.com/dims4/default/5b8d9bf/2147483647/strip/true/crop/2285x877+0+0/resize/1440x553!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca-buf-version-1-modificationdate-1726579770050-api-v2.png 1x,https://docscontent.nvidia.com/dims4/default/cd3c8ce/2147483647/strip/true/crop/2285x877+0+0/resize/2880x1106!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca-buf-version-1-modificationdate-1726579770050-api-v2.png 2x" width="1440" height="553" src="https://docscontent.nvidia.com/dims4/default/5b8d9bf/2147483647/strip/true/crop/2285x877+0+0/resize/1440x553!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca-buf-version-1-modificationdate-1726579770050-api-v2.png" loading="lazy"> </picture> </figure> </div> </div><p> </p><ul class=" "><li class=" "><p>Headroom – memory region starting from the buffer's address up to the buffer's data address</p> </li><li class=" "><p>Dataroom – memory region starting from the buffer's data address with a length indicated by the buffer's data length</p> </li><li class=" "><p>Tailroom – memory region starting from the end of the dataroom to the end of the buffer</p> </li><li class=" "><p>Buffer length – the total length of the headroom, the dataroom, and the tailroom</p> </li></ul> <h4 id="src-3169008654_id-.DOCACorev2.9.0LTS-BufferConsiderations"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-BufferConsiderations" data-cms-ai="0">Buffer Considerations</a> </h4> <ul class=" "><li class=" "><p>There are multiple ways to create the buffer but, once created, it behaves in the same way (see section "<a class="Link" href="#src-3169008654_id-.DOCACorev2.9.0LTS-Inventories" data-cms-ai="0" >Inventories</a>").</p> </li><li class=" "><p>The buffer may reference memory that is not accessible by the CPU (e.g., RDMA memory)</p> </li><li class=" "><p>The buffer is a thread-unsafe object</p> </li><li class=" "><p>The buffer can be used to represent non-continuous memory regions (<a class="Link" href="#src-3169008654_safe-id-aWQtLkRPQ0FDb3JldjIuOS4wTFRTLVNjYXR0ZXIvR2F0aGVyTGlzdA" data-cms-ai="0" >scatter/gather list</a>)</p> </li><li class=" "><p>The buffer does not own nor manage the data it references. Freeing a buffer does not affect the underlying memory.</p> </li></ul> <h4 id="src-3169008654_id-.DOCACorev2.9.0LTS-Headroom"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-Headroom" data-cms-ai="0">Headroom</a> </h4> <p>The headroom is considered user space. For example, this can be used by the user to hold relevant information regarding the buffer or data coupled with the data in the buffer's dataroom.</p> <p>This section is ignored and remains untouched by DOCA libraries in all operations.</p><p> </p> <h4 id="src-3169008654_id-.DOCACorev2.9.0LTS-Dataroom"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-Dataroom" data-cms-ai="0">Dataroom</a> </h4> <p>The dataroom is the content of the buffer, holding either data on which the user may want to perform different operations using DOCA libraries or the result of such operations.</p><p> </p> <h4 id="src-3169008654_id-.DOCACorev2.9.0LTS-Tailroom"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-Tailroom" data-cms-ai="0">Tailroom</a> </h4> <p>The tailroom is considered as free writing space in the buffer by DOCA libraries (i.e., a memory region that may be written over in different operations where the buffer is used as output).</p><p> </p> <h4 id="src-3169008654_id-.DOCACorev2.9.0LTS-BufferasSource"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-BufferasSource" data-cms-ai="0">Buffer as Source</a> </h4> <p>When using <code class="InlineCodeBlock"><span>doca_buf</span></code> as a source buffer, the source data is considered as the data section only (the dataroom).</p><p> </p> <h4 id="src-3169008654_id-.DOCACorev2.9.0LTS-BufferasDestination"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-BufferasDestination" data-cms-ai="0">Buffer as Destination</a> </h4> <p>When using <code class="InlineCodeBlock"><span>doca_buf</span></code> as a destination buffer, data is written to the tailroom (i.e., appended after existing data, if any).</p> <p>When DOCA libraries append data to the buffer, the data length is increased accordingly.</p><p> </p> <h4 id="src-3169008654_safe-id-aWQtLkRPQ0FDb3JldjIuOS4wTFRTLVNjYXR0ZXIvR2F0aGVyTGlzdFNjYXR0ZXIvR2F0aGVyTGlzdA"> <a href="#src-3169008654_safe-id-aWQtLkRPQ0FDb3JldjIuOS4wTFRTLVNjYXR0ZXIvR2F0aGVyTGlzdFNjYXR0ZXIvR2F0aGVyTGlzdA" data-cms-ai="0">Scatter/Gather List</a> </h4> <p>To execute operations on non-continuous memory regions, it is possible to create a buffer list. The list would be represented by a single <code class="InlineCodeBlock"><span>doca_buf</span></code> which represents the head of the list.</p> <p>To create a list of buffers, the user must first allocate each buffer individually and then chain them. Once they are chained, they can be unchained as well:</p> <ul class=" "><li class=" "><p>The chaining operation, <code class="InlineCodeBlock"><span>doca_buf_chain_list()</span></code>, receives two lists (heads) and appends the second list to the end of the first list</p> </li><li class=" "><p>The unchaining operation, <code class="InlineCodeBlock"><span>doca_buf_unchain_list()</span></code>, receives the list (head) and an element in the list, and separates them</p> </li><li class=" "><p>Once the list is created, it can be traversed using <code class="InlineCodeBlock"><span>doca_buf_get_next_in_list()</span></code>. <code class="InlineCodeBlock"><span>NULL</span></code> is returned once the last element is reached.</p> </li><li class=" "><p>The chaining operation, <code class="InlineCodeBlock"><span>doca_buf_chain_list_tail()</span></code>, appends a list head to a list tail. The application is responsible to maintain the list tail.</p> </li></ul><p>Passing the list to another library is same as passing a single buffer; the application sends the head of the list. DOCA libraries that support this feature can then treat the memory regions that comprise the list as one contiguous.</p> <p>When using the buffer list as a source, the data of each buffer (in the dataroom) is gathered and used as continuous data for the given operation.</p> <p>When using the buffer list as destination, data is scattered in the tailroom of the buffers in the list until it is all written (some buffers may not be written to).</p><p> </p> <h4 id="src-3169008654_id-.DOCACorev2.9.0LTS-BufferUseCases"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-BufferUseCases" data-cms-ai="0">Buffer Use Cases</a> </h4> <p>The DOCA buffer is widely used by the DOCA acceleration libraries (e.g., DMA, compress, SHA). In these instances, the buffer can be provided as a source or as a destination.</p> <p>Buffer use-case considerations:</p> <ul class=" "><li class=" "><p>If the application wishes to use a linked list buffer and concatenate several <code class="InlineCodeBlock"><span>doca_buf</span></code>s to a scatter/gather list, the application is expected to ensure the library indeed supports a linked list buffer. For example, to check linked-list support for DMA memcpy task, the application may call <code class="InlineCodeBlock"><span>doca_dma_cap_task_memcpy_get_max_buf_list_len()</span></code>.</p> </li><li class=" "><p>Operations made on the buffer's data are not atomic unless stated otherwise</p> </li><li class=" "><p class="auto-cursor-target">Once a buffer has been passed to the library as part of the task, ownership of the buffer moves to the library until that task is complete</p> <div class="CallOutBox" data-option-Note> <div class="CallOutBox-icon"><svg><use xlink:href="#calloutbox-icon-check"></use></svg> </div><div class="CallOutBox-title">Note</div> <div class="CallOutBox-body"> <p>When using <code class="InlineCodeBlock"><span>doca_buf</span></code> as an input to some processing library (e.g., <code class="InlineCodeBlock"><span>doca_dma</span></code>), <code class="InlineCodeBlock"><span>doca_buf</span></code> must remain valid and unmodified until processing is complete.</p> </div> </div> <p> </p> </li><li class=" "><p>Writing to an in-flight buffer may result in anomalous behavior. Similarly, there are no guarantees for data validity when reading from an in-flight buffer.</p> </li></ul><p> </p> <h3 id="src-3169008654_id-.DOCACorev2.9.0LTS-InventoriesInventories"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-InventoriesInventories" data-cms-ai="0">Inventories</a> </h3> <p>The inventory is the object responsible for allocating DOCA buffers. The most basic inventory allows allocations to be done without having to allocate any system memory. Other inventories involve enforcing that buffer addresses do not overlap.</p> <h4 id="src-3169008654_id-.DOCACorev2.9.0LTS-InventoryConsiderations"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-InventoryConsiderations" data-cms-ai="0">Inventory Considerations</a> </h4> <ul class=" "><li class=" "><p>All inventories adhere to zero allocation after start.</p> </li><li class=" "><p>Allocation of a DOCA buffer requires a data source and an inventory.</p> <ul class=" "><li class=" "><p>The data source defines where the data resides, what can access it, and with what permissions.</p> </li><li class=" "><p>The data source must be created by the application. For creation of mmaps, see <code class="InlineCodeBlock"><span>doca_mmap</span></code>.</p> </li></ul></li><li class=" "><p>The inventory describes the allocation pattern of the buffers, such as, random access or pool, variable-size or fixed-size buffers, and continuous or non-continuous memory.</p> </li><li class=" "><p>Some inventories require providing the data source, <code class="InlineCodeBlock"><span>doca_mmap</span></code>, when allocating the buffers, others require it on creation of the inventory.</p> </li><li class=" "><p>All inventory types are thread-unsafe.</p> </li></ul> <h4 id="src-3169008654_id-.DOCACorev2.9.0LTS-InventoryTypesInventoryTypes"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-InventoryTypesInventoryTypes" data-cms-ai="0"><span id="src-3169008654_id-.DOCACorev2.9.0LTS-InventoryTypes" class="confluence-anchor-link"></span>Inventory Types</a> </h4> <div class="Table-Rte"> <div class="Table-Rte-body"> <table class="wrapped confluenceTable"> <colgroup> <col> <col> <col> <col> </colgroup> <thead class=" "> <tr> <td class="confluenceTh" rowspan="1" colspan="1"> <p>Inventory Type</p> </td> <td class="confluenceTh" rowspan="1" colspan="1"> <p>Characteristics</p> </td> <td class="confluenceTh" rowspan="1" colspan="1"> <p>When to Use</p> </td> <td class="confluenceTh" rowspan="1" colspan="1"> <p>Notes</p> </td> </tr> </thead><tfoot class=" "></tfoot><tbody class=" "> <tr> <td class="confluenceTd" rowspan="1" colspan="1"> <p><code class="InlineCodeBlock"><span>doca_buf_inventory</span></code></p> </td> <td class="confluenceTd" rowspan="1" colspan="1"> <p>Multiple mmaps, flexible address, flexible buffer size.</p> </td> <td class="confluenceTd" rowspan="1" colspan="1"> <p>When multiple sizes or mmaps are used.</p> </td> <td class="confluenceTd" rowspan="1" colspan="1"> <p>Most common use case.</p> </td> </tr> <tr> <td class="confluenceTd" rowspan="1" colspan="1"> <p><code class="InlineCodeBlock"><span>doca_buf_array</span></code></p> </td> <td class="confluenceTd" rowspan="1" colspan="1"> <p>Single mmap, fixed buffer size. User receives an array of pointers to DOCA buffers.</p><p></p><p>In case of DPA, mmap and buffer size can be unconfigured and later can be set from the DPA.</p><p></p> </td> <td class="confluenceTd" rowspan="1" colspan="1"> <p>Use for creating DOCA buffers on GPU or DPA.</p> </td> <td class="confluenceTd" rowspan="1" colspan="1"> <p><code class="InlineCodeBlock"><span>doca_buf_arr</span></code> can be configured on the CPU and created on the GPU or DPA</p> </td> </tr> <tr> <td class="confluenceTd" rowspan="1" colspan="1"> <p><code class="InlineCodeBlock"><span>doca_bufpool</span></code></p> </td> <td class="confluenceTd" rowspan="1" colspan="1"> <p>Single mmap, fixed buffer size, address not controlled by the user.</p> </td> <td class="confluenceTd" rowspan="1" colspan="1"> <p>Use as a pool of buffers of the same characteristics when buffer address is not important.</p> </td> <td class="confluenceTd" rowspan="1" colspan="1"> <p>Slightly faster than <code class="InlineCodeBlock"><span>doca_buf_inventory</span></code>.</p> </td> </tr> </tbody> </table> </div> </div> <h3 id="src-3169008654_id-.DOCACorev2.9.0LTS-ExampleFlow"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-ExampleFlow" data-cms-ai="0">Example Flow</a> </h3> <p>The following is a simplified example of the steps expected for exporting the host mmap to BlueField to be used by DOCA for direct access to the host memory (e.g., for DMA):</p> <ol class=" "><li><p>Create mmap on the host (see section "<a class="Link" href="#src-3169008654_id-.DOCACorev2.9.0LTS-ExpectedFlow" data-cms-ai="0" >Expected Flow</a>" for information on how to choose the <code class="InlineCodeBlock"><span>doca_dev</span></code> to add to mmap if exporting to BlueField). This example adds a single <code class="InlineCodeBlock"><span>doca_dev</span></code> to the mmap and exports it so the BlueField/RDMA endpoint can use it.</p><p></p><p></p> <p></p><div class="Enhancement" data-align-inline has-height style="--image-height: 400px"> <div class="Enhancement-item"> <figure class="Figure"> <picture> <source type="image/webp" width="1246" height="476" srcset="https://docscontent.nvidia.com/dims4/default/a0e21cc/2147483647/strip/true/crop/1246x476+0+0/resize/1246x476!/format/webp/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fmmap_init-version-1-modificationdate-1726579781293-api-v2.png 1x,https://docscontent.nvidia.com/dims4/default/65035fe/2147483647/strip/true/crop/1246x476+0+0/resize/2492x952!/format/webp/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fmmap_init-version-1-modificationdate-1726579781293-api-v2.png 2x"> <source type="image/png" width="1246" height="476" srcset="https://docscontent.nvidia.com/dims4/default/695f5ba/2147483647/strip/true/crop/1246x476+0+0/resize/1246x476!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fmmap_init-version-1-modificationdate-1726579781293-api-v2.png"> <img class="Image" alt="mmap_init-version-1-modificationdate-1726579781293-api-v2.png" srcset="https://docscontent.nvidia.com/dims4/default/695f5ba/2147483647/strip/true/crop/1246x476+0+0/resize/1246x476!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fmmap_init-version-1-modificationdate-1726579781293-api-v2.png 1x,https://docscontent.nvidia.com/dims4/default/4d670f2/2147483647/strip/true/crop/1246x476+0+0/resize/2492x952!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fmmap_init-version-1-modificationdate-1726579781293-api-v2.png 2x" width="1246" height="476" src="https://docscontent.nvidia.com/dims4/default/695f5ba/2147483647/strip/true/crop/1246x476+0+0/resize/1246x476!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fmmap_init-version-1-modificationdate-1726579781293-api-v2.png" loading="lazy"> </picture> </figure> </div> </div><p> </p><p></p><p></p><p></p><p></p> </li><li><p>Import to the BlueField/RDMA endpoint (e.g., use the mmap descriptor output parameter as input to <code class="InlineCodeBlock"><span>doca_mmap_create_from_export</span></code>). </p><p></p><p></p><div class="Enhancement" data-align-inline has-width style="--image-width: 700px"> <div class="Enhancement-item"> <figure class="Figure"> <picture> <source type="image/webp" width="786" height="872" srcset="https://docscontent.nvidia.com/dims4/default/92f7830/2147483647/strip/true/crop/786x872+0+0/resize/786x872!/format/webp/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Ffrom_export_buf_flow-version-1-modificationdate-1726579780907-api-v2.png 1x,https://docscontent.nvidia.com/dims4/default/8164e47/2147483647/strip/true/crop/786x872+0+0/resize/1572x1744!/format/webp/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Ffrom_export_buf_flow-version-1-modificationdate-1726579780907-api-v2.png 2x"> <source type="image/png" width="786" height="872" srcset="https://docscontent.nvidia.com/dims4/default/f94b3bc/2147483647/strip/true/crop/786x872+0+0/resize/786x872!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Ffrom_export_buf_flow-version-1-modificationdate-1726579780907-api-v2.png"> <img class="Image" alt="from_export_buf_flow-version-1-modificationdate-1726579780907-api-v2.png" srcset="https://docscontent.nvidia.com/dims4/default/f94b3bc/2147483647/strip/true/crop/786x872+0+0/resize/786x872!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Ffrom_export_buf_flow-version-1-modificationdate-1726579780907-api-v2.png 1x,https://docscontent.nvidia.com/dims4/default/58ffa9a/2147483647/strip/true/crop/786x872+0+0/resize/1572x1744!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Ffrom_export_buf_flow-version-1-modificationdate-1726579780907-api-v2.png 2x" width="786" height="872" src="https://docscontent.nvidia.com/dims4/default/f94b3bc/2147483647/strip/true/crop/786x872+0+0/resize/786x872!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Ffrom_export_buf_flow-version-1-modificationdate-1726579780907-api-v2.png" loading="lazy"> </picture> </figure> </div> </div><p> </p><p></p> <p></p> </li></ol><p> </p> <h2 id="src-3169008654_id-.DOCACorev2.9.0LTS-DOCAExecutionModel"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-DOCAExecutionModel" data-cms-ai="0"><span id="src-3169008654_id-.DOCACorev2.9.0LTS-DOCAExecutionModel" class="confluence-anchor-link"></span>DOCA Execution Model</a> </h2> <p> The execution model is based on hardware processing on data and application threads. DOCA does not create an internal thread for processing data. </p> <p>The workload is made up of tasks and events. Some tasks transform source data to destination data. The basic transformation is a DMA operation on the data which simply copies data from one memory location to another. Other operations allow users to receive packets from the network or involve calculating the SHA value of the source data and writing it to the destination.</p> <p>For instance, a transform workload can be broken into three steps:</p> <ol class=" "><li class=" "><p>Read source data (<code class="InlineCodeBlock"><span>doca_buf</span></code> see memory subsystem).</p> </li><li class=" "><p>Apply an operation on the read data (handled by a dedicated hardware accelerator).</p> </li><li class=" "><p>Write the result of the operation to the destination (<code class="InlineCodeBlock"><span>doca_buf</span></code> see memory subsystem).</p> </li></ol><p>Each such operation is referred to as a task (<code class="InlineCodeBlock"><span>doca_task</span></code>).</p> <p>Tasks describe operations that an application would like to submit to DOCA (hardware or BlueField). To do so, the application requires a means of communicating with the hardware/BlueField. This is where the <code class="InlineCodeBlock"><span>doca_pe</span></code> comes into play. The progress engine (PE) is a per-thread object used to queue tasks to offload to DOCA and eventually receive their completion status.</p> <p><code class="InlineCodeBlock"><span>doca_pe</span></code> introduces three main operations:</p> <ol class=" "><li class=" "><p>Submission of tasks.</p> </li><li class=" "><p>Checking progress/status of submitted tasks.</p> </li><li class=" "><p>Receiving a notification on task completion (in the form of a callback).</p> </li></ol><p>A workload can be split into many different tasks that can be executed on different threads; each thread represented by a different PE. Each task must be associated to some context, where the context defines the type of task to be done.</p> <p>A context can be obtained from some libraries within the DOCA SDK. For example, to submit DMA tasks, a DMA context can be acquired from <code class="InlineCodeBlock"><span>doca_dma.h</span></code>, whereas SHA context can be obtained using <code class="InlineCodeBlock"><span>doca_sha.h</span></code>. Each such context may allow submission of several task types.</p> <p>A task is considered asynchronous in that once an application submits a task, the DOCA execution engine (hardware or BlueField) would start processing it, and the application can continue to do some other processing until the hardware finishes. To keep track of which task has finished, there are two modes of operation: <a class="Link" href="#src-3169008654_id-.DOCACorev2.9.0LTS-PollingMode" data-cms-ai="0" >polling mode</a> and <a class="Link" href="#src-3169008654_NVIDIADOCACoreProgrammingGuide-Event-drivenMode" data-cms-ai="0" >event-driven mode</a>.</p> <h3 id="src-3169008654_id-.DOCACorev2.9.0LTS-RequirementsandConsiderations.1"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-RequirementsandConsiderations.1" data-cms-ai="0">Requirements and Considerations</a> </h3> <ul class=" "><li class=" "><p>The task submission/execution flow/API is optimized for performance (latency)</p> </li><li class=" "><p>DOCA does not manage internal (operating system) threads. Rather, progress is managed by application resources (calling DOCA API in polling mode or waiting on DOCA notification in event-driven mode).</p> </li><li class=" "><p>The basic object for executing the task is a <code class="InlineCodeBlock"><span>doca_task</span></code>. Each task is allocated from a specific DOCA library context.</p> </li><li class=" "><p><code class="InlineCodeBlock"><span>doca_pe</span></code> represents a logical thread of execution for the application and tasks submitted to the progress engine (PE)</p> <div class="CallOutBox" data-option-Note> <div class="CallOutBox-icon"><svg><use xlink:href="#calloutbox-icon-check"></use></svg> </div><div class="CallOutBox-title">Note</div> <div class="CallOutBox-body"> <p>PE is not thread safe and it is expected that each PE is managed by a single application thread (to submit a task and manage the PE).</p> </div> </div> <p> </p> </li><li class=" "><p>Execution-related elements (e.g., <code class="InlineCodeBlock"><span>doca_pe</span></code>, <code class="InlineCodeBlock"><span>doca_ctx</span></code>, <code class="InlineCodeBlock"><span>doca_task</span></code>) are opaque and the application performs minimal initialization/configuration before using these elements</p> </li><li class=" "><p>A task submitted to PE can fail (even after the submission succeeds). In some cases, it is possible to recover from the error. In other cases, the only option is to reinitialize the relevant objects.</p> </li><li class=" "><p>PE does not guarantee order (i.e., tasks submitted in certain order might finish out-of-order). If the application requires order, it must impose it (e.g., submit a dependent task once the previous task is done).</p> </li><li class=" "><p>A PE can either work in polling mode or event-driven mode, but not in both at same time</p> </li><li class=" "><p>All DOCA contexts support polling mode (i.e., can be added to a PE that supports polling mode)</p> </li></ul> <h3 id="src-3169008654_id-.DOCACorev2.9.0LTS-DOCAContextDOCAContext"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-DOCAContextDOCAContext" data-cms-ai="0">DOCA Context</a> </h3> <p>DOCA Context (<code class="InlineCodeBlock"><span>struct doca_ctx</span></code>) defines and provides (implements) task/event handling. A context is an instance of a specific DOCA library (i.e., when the library provides a DOCA Context, its functionality is defined by the list of tasks/events it can handle). When more than one type of task is supported by the context, it means that the supported task types have a certain degree of similarity to implement and utilize common functionality.</p> <p>The following list defines the relationship between task contexts:</p> <ul class=" "><li class=" "><p>Each context utilizes at least one DOCA Device functionality/accelerated processing capabilities</p> </li><li class=" "><p>For each task type there is one and only context type supporting it</p> </li><li class=" "><p>A context virtually contains an inventory per supported task type</p> </li><li class=" "><p>A context virtually defines all parameters of processing/execution per task type (e.g., size of inventory, device to accelerate processing)</p> </li></ul><p>Each context needs an instance of progress engine (PE) as a runtime for its tasks (i.e., a context must be associated with a PE to execute tasks).</p> <p>The following diagram shows the high-level (domain model) relations between various DOCA Core entities.</p> <p></p><p></p><div class="Enhancement" data-align-inline has-width style="--image-width: 450px"> <div class="Enhancement-item"> <figure class="Figure"> <picture> <source type="image/webp" width="560" height="195" srcset="https://docscontent.nvidia.com/dims4/default/5bfa5e5/2147483647/strip/true/crop/560x195+0+0/resize/560x195!/format/webp/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fexecution_env_classes-version-1-modificationdate-1726579780407-api-v2.png 1x,https://docscontent.nvidia.com/dims4/default/a224eb8/2147483647/strip/true/crop/560x195+0+0/resize/1120x390!/format/webp/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fexecution_env_classes-version-1-modificationdate-1726579780407-api-v2.png 2x"> <source type="image/png" width="560" height="195" srcset="https://docscontent.nvidia.com/dims4/default/f210798/2147483647/strip/true/crop/560x195+0+0/resize/560x195!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fexecution_env_classes-version-1-modificationdate-1726579780407-api-v2.png"> <img class="Image" alt="execution_env_classes-version-1-modificationdate-1726579780407-api-v2.png" srcset="https://docscontent.nvidia.com/dims4/default/f210798/2147483647/strip/true/crop/560x195+0+0/resize/560x195!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fexecution_env_classes-version-1-modificationdate-1726579780407-api-v2.png 1x,https://docscontent.nvidia.com/dims4/default/abca7d9/2147483647/strip/true/crop/560x195+0+0/resize/1120x390!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fexecution_env_classes-version-1-modificationdate-1726579780407-api-v2.png 2x" width="560" height="195" src="https://docscontent.nvidia.com/dims4/default/f210798/2147483647/strip/true/crop/560x195+0+0/resize/560x195!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fexecution_env_classes-version-1-modificationdate-1726579780407-api-v2.png" loading="lazy"> </picture> </figure> </div> </div><p> </p><ol class=" "><li class=" "><p><code class="InlineCodeBlock"><span>doca_task</span></code> is associated to a relevant <code class="InlineCodeBlock"><span>doca_ctx</span></code> that executes the task (with the help of the relevant <code class="InlineCodeBlock"><span>doca_dev</span></code>).</p> </li><li class=" "><p><code class="InlineCodeBlock"><span>doca_task</span></code>, after it is initialized, is submitted to <code class="InlineCodeBlock"><span>doca_pe</span></code> for execution.</p> </li><li class=" "><p><code class="InlineCodeBlock"><span>doca_ctx</span></code>s are connected to the <code class="InlineCodeBlock"><span>doca_pe</span></code>. Once a <code class="InlineCodeBlock"><span>doca_task</span></code> is queued to <code class="InlineCodeBlock"><span>doca_pe</span></code>, it is executed by the <code class="InlineCodeBlock"><span>doca_ctx</span></code> that is associated with that task in this PE.</p> </li></ol><p>The following diagram describes the initialization sequence of a context:</p> <p></p><p></p><div class="Enhancement" data-align-inline has-height style="--image-height: 250px"> <div class="Enhancement-item"> <figure class="Figure"> <picture> <source type="image/webp" width="1440" height="330" srcset="https://docscontent.nvidia.com/dims4/default/863f6ba/2147483647/strip/true/crop/1471x337+0+0/resize/1440x330!/format/webp/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fctx_init-version-1-modificationdate-1726579781640-api-v2.png 1x,https://docscontent.nvidia.com/dims4/default/9085c98/2147483647/strip/true/crop/1471x337+0+0/resize/2880x660!/format/webp/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fctx_init-version-1-modificationdate-1726579781640-api-v2.png 2x"> <source type="image/png" width="1440" height="330" srcset="https://docscontent.nvidia.com/dims4/default/08ce39f/2147483647/strip/true/crop/1471x337+0+0/resize/1440x330!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fctx_init-version-1-modificationdate-1726579781640-api-v2.png"> <img class="Image" alt="ctx_init-version-1-modificationdate-1726579781640-api-v2.png" srcset="https://docscontent.nvidia.com/dims4/default/08ce39f/2147483647/strip/true/crop/1471x337+0+0/resize/1440x330!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fctx_init-version-1-modificationdate-1726579781640-api-v2.png 1x,https://docscontent.nvidia.com/dims4/default/789161a/2147483647/strip/true/crop/1471x337+0+0/resize/2880x660!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fctx_init-version-1-modificationdate-1726579781640-api-v2.png 2x" width="1440" height="330" src="https://docscontent.nvidia.com/dims4/default/08ce39f/2147483647/strip/true/crop/1471x337+0+0/resize/1440x330!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fctx_init-version-1-modificationdate-1726579781640-api-v2.png" loading="lazy"> </picture> </figure> </div> </div><p> </p><p>After the context is started, it can be used to enable the submission of tasks to a PE based on the types of tasks that the context supports. See section "<a class="Link" href="#src-3169008654_id-.DOCACorev2.9.0LTS-DOCAProgressEngine" data-cms-ai="0" >DOCA Progress Engine</a>" for more information.</p> <div class="CallOutBox" data-option-Note> <div class="CallOutBox-icon"><svg><use xlink:href="#calloutbox-icon-check"></use></svg> </div><div class="CallOutBox-title">Note</div> <div class="CallOutBox-body"> <p>Context is a thread-unsafe object which can be connected to a single PE only.</p> </div> </div> <p> </p> <h4 id="src-3169008654_id-.DOCACorev2.9.0LTS-ConfigurationPhaseConfigurationPhase"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-ConfigurationPhaseConfigurationPhase" data-cms-ai="0"><span id="src-3169008654_id-.DOCACorev2.9.0LTS-ConfigurationPhase" class="confluence-anchor-link"></span>Configuration Phase</a> </h4> <p>A DOCA context must be configured before attempting to start it using <code class="InlineCodeBlock"><span>doca_ctx_start()</span></code>. Some configurations are mandatory (e.g., providing <code class="InlineCodeBlock"><span>doca_dev</span></code>) while others are not.</p> <ul class=" "><li class=" "><p>Configurations can be useful to allow certain tasks/events, to enable features which are disabled by default, and to optimize performance depending on a specific workload.</p> </li><li class=" "><p>Configurations are provided using setter functions. Refer to context documentation for a list of mandatory and optional configurations and their corresponding APIs.</p> </li><li class=" "><p>Configurations are provided after creating the context and before starting it. Once the context is started, it can no longer be configured unless it is stopped again.</p> </li></ul><p>Examples of common configurations:</p> <ul class=" "><li class=" "><p>Providing a device – usually done as part of the create API</p> </li><li class=" "><p>Enabling tasks or registering to events – all tasks are disabled by default</p> </li></ul> <h4 id="src-3169008654_id-.DOCACorev2.9.0LTS-ExecutionPhaseExecutionPhase"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-ExecutionPhaseExecutionPhase" data-cms-ai="0"><span id="src-3169008654_id-.DOCACorev2.9.0LTS-ExecutionPhase" class="confluence-anchor-link"></span>Execution Phase</a> </h4> <p>Once context configuration is complete, the context can be used to execute tasks. The context executes the tasks by offloading the workload to hardware, while software polls the tasks (i.e., waits) until they are complete.</p> <p>In this phase, an application uses the context to allocate and submit asynchronous tasks, and then polls tasks (waits) until completion.</p> <p>The application must build an event loop to poll the tasks (wait), utilizing one of the following modes:</p> <ul class=" "><li class=" "><p><a class="Link" href="#src-3169008654_id-.DOCACorev2.9.0LTS-PollingMode" data-cms-ai="0" >Polling Mode</a></p> </li><li class=" "><p><a class="Link" href="#src-3169008654_id-.DOCACorev2.9.0LTS-Notification-drivenMode" data-cms-ai="0" >Notification-driven Mode</a></p> </li></ul><p>In this phase, the context and all core objects perform zero allocations by utilizing memory pools. It is recommended that the application utilizes same approach for its own logic.</p><p> </p> <h4 id="src-3169008654_id-.DOCACorev2.9.0LTS-StateMachineStateMachine"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-StateMachineStateMachine" data-cms-ai="0"><span id="src-3169008654_id-.DOCACorev2.9.0LTS-StateMachine" class="confluence-anchor-link"></span>State Machine</a> </h4> <div class="Table-Rte"> <div class="Table-Rte-body"> <table class="wrapped confluenceTable"> <colgroup> <col> <col> </colgroup> <thead class=" "> <tr> <td class="confluenceTh" rowspan="1" colspan="1"> <p>State</p> </td> <td class="confluenceTh" rowspan="1" colspan="1"> <p>Description</p> </td> </tr> </thead><tfoot class=" "></tfoot><tbody class=" "> <tr> <td class="confluenceTd" rowspan="1" colspan="1"> <p>Idle</p> </td> <td class="confluenceTd" rowspan="1" colspan="1"> <ul class=" "><li class="auto-cursor-target "><p>0 in-flight tasks</p> </li><li class=" "><p>On init (right after <code class="InlineCodeBlock"><span>doca_<t>_create(ctx)</t></span></code>): All configuration APIs enabled</p> </li><li class=" "><p>On reconf (on transition from stopping state): Some configuration APIs enabled</p> </li></ul> </td> </tr> <tr> <td class="confluenceTd" rowspan="1" colspan="1"> <p>Starting</p> </td> <td class="confluenceTd" rowspan="1" colspan="1"> <p>This state is mandatory for CTXs where transition to running state is conditioned by one or more async op completions/external events.</p> <p>For example, when a client connects to comm channel, it enters running state. Waiting for state change can be terminated by a voluntary (user) <code class="InlineCodeBlock"><span>doca_ctx_stop()</span></code> call or involuntary context state change due to internal error.</p> </td> </tr> <tr> <td class="confluenceTd" rowspan="1" colspan="1"> <p>Running</p> </td> <td class="confluenceTd" rowspan="1" colspan="1"> <ul class=" "><li class=" "><p>Task allocation/submission enabled (disabled in all other states)</p> </li><li class=" "><p>All configuration APIs are disabled</p> </li></ul> </td> </tr> <tr> <td class="confluenceTd" rowspan="1" colspan="1"> <p>Stopping</p> </td> <td class="confluenceTd" rowspan="1" colspan="1"> <ul class=" "><li class=" "><p>Preparation before stopped state</p> </li><li class=" "><p>Clean all in-flight tasks that may not complete in near future</p> </li><li class=" "><p>Procedures relying on external entity actions should be terminated by CTX logic</p> </li></ul> </td> </tr> </tbody> </table> </div> </div> <p> The following diagram describes DOCA Context state transitions: </p> <p></p><p></p><div class="Enhancement" data-align-inline has-width style="--image-width: 350px"> <div class="Enhancement-item"> <figure class="Figure"> <picture> <source type="image/webp" width="422" height="721" srcset="https://docscontent.nvidia.com/dims4/default/f46ae5f/2147483647/strip/true/crop/422x721+0+0/resize/422x721!/format/webp/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca-ctx-4-states-version-1-modificationdate-1726579780057-api-v2.png 1x,https://docscontent.nvidia.com/dims4/default/b059b4e/2147483647/strip/true/crop/422x721+0+0/resize/844x1442!/format/webp/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca-ctx-4-states-version-1-modificationdate-1726579780057-api-v2.png 2x"> <source type="image/png" width="422" height="721" srcset="https://docscontent.nvidia.com/dims4/default/4fd514b/2147483647/strip/true/crop/422x721+0+0/resize/422x721!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca-ctx-4-states-version-1-modificationdate-1726579780057-api-v2.png"> <img class="Image" alt="doca-ctx-4-states-version-1-modificationdate-1726579780057-api-v2.png" srcset="https://docscontent.nvidia.com/dims4/default/4fd514b/2147483647/strip/true/crop/422x721+0+0/resize/422x721!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca-ctx-4-states-version-1-modificationdate-1726579780057-api-v2.png 1x,https://docscontent.nvidia.com/dims4/default/cdacfd7/2147483647/strip/true/crop/422x721+0+0/resize/844x1442!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca-ctx-4-states-version-1-modificationdate-1726579780057-api-v2.png 2x" width="422" height="721" src="https://docscontent.nvidia.com/dims4/default/4fd514b/2147483647/strip/true/crop/422x721+0+0/resize/422x721!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca-ctx-4-states-version-1-modificationdate-1726579780057-api-v2.png" loading="lazy"> </picture> </figure> </div> </div><p> <br> </p><h4 id="src-3169008654_id-.DOCACorev2.9.0LTS-InternalError"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-InternalError" data-cms-ai="0">Internal Error</a> </h4> <p>DOCA Context states can encounter internal errors at any time. If the state is starting or running, an internal error can cause an involuntary transition to stopping state.</p> <p>For instance, an involuntary transition from running to stopping can happen when a task execution fails. This results in a completion with error for the failed task and all subsequent task completions.</p> <p>After stopping, the state may become idle. However, <code class="InlineCodeBlock"><span>doca_ctx_start()</span></code> may fail if there is a configuration issue or if an error event prevented proper transition to starting or running state.</p> <p> </p> <h3 id="src-3169008654_id-.DOCACorev2.9.0LTS-DOCATask"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-DOCATask" data-cms-ai="0"><span id="src-3169008654_id-.DOCACorev2.9.0LTS-DOCATask" class="confluence-anchor-link"></span>DOCA Task</a> </h3> <p>A task is a unit of (functional/processing) workload offload-able to hardware. The majority of tasks utilize NVIDIA® BlueField® and NVIDIA® ConnectX® hardware to provide accelerated processing of the workload defined by the task. Tasks are asynchronous operations (e.g., tasks submitted for processing via non-blocking <code class="InlineCodeBlock"><span>doca_task_submit()</span></code> API).</p> <p>Upon task completion, the preset completion callback is executed in context of <code class="InlineCodeBlock"><span>doca_pe_progress()</span></code> call. The completion callback is a basic/generic property of the task, similar to user data. Most tasks are IO operations executed/accelerated by NVIDIA device hardware.</p> <h4 id="src-3169008654_id-.DOCACorev2.9.0LTS-TaskProperties"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-TaskProperties" data-cms-ai="0">Task Properties</a> </h4> <p>Task properties share generic properties which are common to all task types and type-specific properties. Since task structure is opaque (i.e., its content not exposed to the user), the access to task properties provided by set/get APIs.</p> <p>The following are generic task properties:</p> <ul class=" "><li class=" "><p>Setting completion callback – it has separate callbacks for successful completion and completion with failure.</p> </li><li class=" "><p>Getting/setting user data – used in completion callback as some structure associated with specific task object.</p> </li><li class=" "><p>Getting task status – intended to retrieve error code on completion with failure.</p> </li></ul><p>For each task there is only one owner: a context object. There is a <code class="InlineCodeBlock"><span>doca_task_get_ctx()</span></code> API to get generic context object.</p> <p>The following are generic task APIs:</p> <ul class=" "><li class=" "><p>Allocating and freeing from CTX (internal/virtual) inventory</p> </li><li class=" "><p>Configuring via setters (or init API)</p> </li><li class=" "><p>Submit-able (i.e., implements <code class="InlineCodeBlock"><span>doca_task_submit(task)</span></code>)</p> </li></ul><p>Upon completion, there is a set of getters to access the results of the task execution.</p><p> </p> <h4 id="src-3169008654_id-.DOCACorev2.9.0LTS-TaskLifecycle"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-TaskLifecycle" data-cms-ai="0">Task Lifecycle</a> </h4> <p>This section describes the lifecycle of DOCA Task. Each DOCA Task object lifecycle:</p> <ul class=" "><li class=" "><p>starts on the event of entering <i class=" ">Running</i> state by the DOCA Context owning the task i.e., once <i class=" ">Running</i> state entered application can obtain the task from CTX by calling <code class="InlineCodeBlock"><span>doca_<ctx name>_task_<task name>_alloc_init(ctx, ... &task)</task></ctx></span></code>.</p> </li><li class=" "><p>ends on the event of entering <i class=" ">Stopped</i> state by the DOCA Context owning the task i.e., application can no longer allocate tasks once the related DOCA Context left the <i class=" ">Running</i> state.</p> </li></ul><p>From application perspective DOCA Context provides a virtual task inventory The diagram below shows the how ownership if the DOCA Task passed from DOCA Context virtual inventory to application and than from application back to CTX, pay attention to the colors used in activation bars for application (APP) participant & DOCA Context (CTX) participant and DOCA Context Task virtual inventory (Task).</p> <p></p><p></p><div class="Enhancement" data-align-inline has-width style="--image-width: 300px"> <div class="Enhancement-item"> <figure class="Figure"> <picture> <source type="image/webp" width="1258" height="1311" srcset="https://docscontent.nvidia.com/dims4/default/e104365/2147483647/strip/true/crop/1258x1311+0+0/resize/1258x1311!/format/webp/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca_task_lifecycle_legend-version-1-modificationdate-1726579784007-api-v2.png 1x,https://docscontent.nvidia.com/dims4/default/a9bb5fc/2147483647/strip/true/crop/1258x1311+0+0/resize/2516x2622!/format/webp/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca_task_lifecycle_legend-version-1-modificationdate-1726579784007-api-v2.png 2x"> <source type="image/png" width="1258" height="1311" srcset="https://docscontent.nvidia.com/dims4/default/33a1e80/2147483647/strip/true/crop/1258x1311+0+0/resize/1258x1311!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca_task_lifecycle_legend-version-1-modificationdate-1726579784007-api-v2.png"> <img class="Image" alt="doca_task_lifecycle_legend-version-1-modificationdate-1726579784007-api-v2.png" srcset="https://docscontent.nvidia.com/dims4/default/33a1e80/2147483647/strip/true/crop/1258x1311+0+0/resize/1258x1311!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca_task_lifecycle_legend-version-1-modificationdate-1726579784007-api-v2.png 1x,https://docscontent.nvidia.com/dims4/default/140a45d/2147483647/strip/true/crop/1258x1311+0+0/resize/2516x2622!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca_task_lifecycle_legend-version-1-modificationdate-1726579784007-api-v2.png 2x" width="1258" height="1311" src="https://docscontent.nvidia.com/dims4/default/33a1e80/2147483647/strip/true/crop/1258x1311+0+0/resize/1258x1311!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca_task_lifecycle_legend-version-1-modificationdate-1726579784007-api-v2.png" loading="lazy"> </picture> </figure> </div> </div><p> </p><p>The diagram below shows the lifecycle of DOCA Task staring from its allocation to its submission.</p> <p></p><p></p><div class="Enhancement" data-align-inline has-width style="--image-width: 450px"> <div class="Enhancement-item"> <figure class="Figure"> <picture> <source type="image/webp" width="532" height="453" srcset="https://docscontent.nvidia.com/dims4/default/1c3b313/2147483647/strip/true/crop/532x453+0+0/resize/532x453!/format/webp/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca_task_lifecycle_alloc_init_submit-version-1-modificationdate-1726579782697-api-v2.png 1x,https://docscontent.nvidia.com/dims4/default/cb49c83/2147483647/strip/true/crop/532x453+0+0/resize/1064x906!/format/webp/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca_task_lifecycle_alloc_init_submit-version-1-modificationdate-1726579782697-api-v2.png 2x"> <source type="image/png" width="532" height="453" srcset="https://docscontent.nvidia.com/dims4/default/11679eb/2147483647/strip/true/crop/532x453+0+0/resize/532x453!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca_task_lifecycle_alloc_init_submit-version-1-modificationdate-1726579782697-api-v2.png"> <img class="Image" alt="doca_task_lifecycle_alloc_init_submit-version-1-modificationdate-1726579782697-api-v2.png" srcset="https://docscontent.nvidia.com/dims4/default/11679eb/2147483647/strip/true/crop/532x453+0+0/resize/532x453!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca_task_lifecycle_alloc_init_submit-version-1-modificationdate-1726579782697-api-v2.png 1x,https://docscontent.nvidia.com/dims4/default/b6143ab/2147483647/strip/true/crop/532x453+0+0/resize/1064x906!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca_task_lifecycle_alloc_init_submit-version-1-modificationdate-1726579782697-api-v2.png 2x" width="532" height="453" src="https://docscontent.nvidia.com/dims4/default/11679eb/2147483647/strip/true/crop/532x453+0+0/resize/532x453!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca_task_lifecycle_alloc_init_submit-version-1-modificationdate-1726579782697-api-v2.png" loading="lazy"> </picture> </figure> </div> </div><p> </p><p>The diagram above displays following ownership transitions during DOCA Task object lifecycle:</p> <ul class=" "><li class=" "><p>starting from allocation task ownership passed from context to application</p> </li><li class=" "><p>application may modify task attributes via API templated as <code class="InlineCodeBlock"><span>doca_<ctx name>_task_<task name>_set_<parameter name>(task, param)</parameter></task></ctx></span></code>; on return from the task modification call the ownership of the task object returns to application.</p> </li><li class=" "><p>submit the task for processing in the PE, once all required modifications/settings of the task object completed. On task submission the ownership of the object passed to the related context.</p> </li></ul><p>The next two diagrams below shows the lifecycle of DOCA Task on its completion.</p> <p></p><p></p><div class="Enhancement" data-align-inline has-width style="--image-width: 450px"> <div class="Enhancement-item"> <figure class="Figure"> <picture> <source type="image/webp" width="523" height="497" srcset="https://docscontent.nvidia.com/dims4/default/71ce443/2147483647/strip/true/crop/523x497+0+0/resize/523x497!/format/webp/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca_task_lifecycle_complet_free-version-1-modificationdate-1726579783327-api-v2.png 1x,https://docscontent.nvidia.com/dims4/default/f88dd19/2147483647/strip/true/crop/523x497+0+0/resize/1046x994!/format/webp/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca_task_lifecycle_complet_free-version-1-modificationdate-1726579783327-api-v2.png 2x"> <source type="image/png" width="523" height="497" srcset="https://docscontent.nvidia.com/dims4/default/ec091e1/2147483647/strip/true/crop/523x497+0+0/resize/523x497!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca_task_lifecycle_complet_free-version-1-modificationdate-1726579783327-api-v2.png"> <img class="Image" alt="doca_task_lifecycle_complet_free-version-1-modificationdate-1726579783327-api-v2.png" srcset="https://docscontent.nvidia.com/dims4/default/ec091e1/2147483647/strip/true/crop/523x497+0+0/resize/523x497!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca_task_lifecycle_complet_free-version-1-modificationdate-1726579783327-api-v2.png 1x,https://docscontent.nvidia.com/dims4/default/47b2a9f/2147483647/strip/true/crop/523x497+0+0/resize/1046x994!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca_task_lifecycle_complet_free-version-1-modificationdate-1726579783327-api-v2.png 2x" width="523" height="497" src="https://docscontent.nvidia.com/dims4/default/ec091e1/2147483647/strip/true/crop/523x497+0+0/resize/523x497!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca_task_lifecycle_complet_free-version-1-modificationdate-1726579783327-api-v2.png" loading="lazy"> </picture> </figure> </div> </div><p> </p><p>The diagram above displays following ownership transitions during <i class=" ">DOCA Task</i> object lifecycle:</p> <ul class=" "><li class=" "><p>on <i class=" ">DOCA Task</i> completion the appropriate handler provided by application invoked; on handler invocation the <i class=" ">DOCA Task</i> ownership passed to application.</p> </li><li class=" "><p>after <i class=" ">DOCA Task </i>completion application may access task attributes & result fields utilizing appropriate APIs; application remains owner of the task object.</p> </li><li class=" "><p>application may call <code class="InlineCodeBlock"><span>doca_task_free()</span></code> when task is no longer needed; on return from the call task ownership passed to <i class=" ">DOCA Context</i> while task became uninitialized & pre-allocated till the context enters Idle state.</p> </li></ul><p></p><p></p><div class="Enhancement" data-align-inline has-width style="--image-width: 450px"> <div class="Enhancement-item"> <figure class="Figure"> <picture> <source type="image/webp" width="513" height="574" srcset="https://docscontent.nvidia.com/dims4/default/f5a2657/2147483647/strip/true/crop/513x574+0+0/resize/513x574!/format/webp/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca_task_lifecycle_complet_reuse-version-1-modificationdate-1726579783667-api-v2.png 1x,https://docscontent.nvidia.com/dims4/default/2b16fb6/2147483647/strip/true/crop/513x574+0+0/resize/1026x1148!/format/webp/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca_task_lifecycle_complet_reuse-version-1-modificationdate-1726579783667-api-v2.png 2x"> <source type="image/png" width="513" height="574" srcset="https://docscontent.nvidia.com/dims4/default/21ee7a0/2147483647/strip/true/crop/513x574+0+0/resize/513x574!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca_task_lifecycle_complet_reuse-version-1-modificationdate-1726579783667-api-v2.png"> <img class="Image" alt="doca_task_lifecycle_complet_reuse-version-1-modificationdate-1726579783667-api-v2.png" srcset="https://docscontent.nvidia.com/dims4/default/21ee7a0/2147483647/strip/true/crop/513x574+0+0/resize/513x574!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca_task_lifecycle_complet_reuse-version-1-modificationdate-1726579783667-api-v2.png 1x,https://docscontent.nvidia.com/dims4/default/40afee1/2147483647/strip/true/crop/513x574+0+0/resize/1026x1148!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca_task_lifecycle_complet_reuse-version-1-modificationdate-1726579783667-api-v2.png 2x" width="513" height="574" src="https://docscontent.nvidia.com/dims4/default/21ee7a0/2147483647/strip/true/crop/513x574+0+0/resize/513x574!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca_task_lifecycle_complet_reuse-version-1-modificationdate-1726579783667-api-v2.png" loading="lazy"> </picture> </figure> </div> </div><p> </p><p>The diagram above displays similar to the previous diagram ownership transitions during <i class=" ">DOCA Task</i> object lifecycle with the only difference that instead of <code class="InlineCodeBlock"><span>doca_task_free(task)</span></code> <code class="InlineCodeBlock"><span>doca_task_submit(task)</span></code> was called:</p> <ul class=" "><li class=" "><p><i class=" ">DOCA Task</i> result (related attributes) can be accessed right after enter successful task completion callback, similar to the previous case</p> </li><li class=" "><p>lifecycle of the <i class=" ">DOCA Task</i> results ends on exit from the task completion callback scope.</p> </li><li class=" "><p>On <code class="InlineCodeBlock"><span>doca_task_free()</span></code> or <code class="InlineCodeBlock"><span>doca_<ctx name>_task_<task name>_set_<parameter name>(task, param)</parameter></task></ctx></span></code> call all task results should be considered invalidated regardless of scope.</p> </li></ul><p>The diagram below shows the lifecycle of <i class=" ">DOCA Task</i> set-able parameters while API to set such a parameter templated as <code class="InlineCodeBlock"><span>doca_<ctx name>_task_<task name>_set_<parameter name>(task, param)</parameter></task></ctx></span></code> .</p> <p></p><p></p><div class="Enhancement" data-align-inline > <div class="Enhancement-item"> <figure class="Figure"> <picture> <source type="image/webp" width="452" height="453" srcset="https://docscontent.nvidia.com/dims4/default/5040b24/2147483647/strip/true/crop/452x453+0+0/resize/452x453!/format/webp/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca_task_lifecycle_args-version-1-modificationdate-1726579783007-api-v2.png 1x,https://docscontent.nvidia.com/dims4/default/18bb7b3/2147483647/strip/true/crop/452x453+0+0/resize/904x906!/format/webp/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca_task_lifecycle_args-version-1-modificationdate-1726579783007-api-v2.png 2x"> <source type="image/png" width="452" height="453" srcset="https://docscontent.nvidia.com/dims4/default/5e7b421/2147483647/strip/true/crop/452x453+0+0/resize/452x453!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca_task_lifecycle_args-version-1-modificationdate-1726579783007-api-v2.png"> <img class="Image" alt="doca_task_lifecycle_args-version-1-modificationdate-1726579783007-api-v2.png" srcset="https://docscontent.nvidia.com/dims4/default/5e7b421/2147483647/strip/true/crop/452x453+0+0/resize/452x453!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca_task_lifecycle_args-version-1-modificationdate-1726579783007-api-v2.png 1x,https://docscontent.nvidia.com/dims4/default/8c3f965/2147483647/strip/true/crop/452x453+0+0/resize/904x906!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca_task_lifecycle_args-version-1-modificationdate-1726579783007-api-v2.png 2x" width="452" height="453" src="https://docscontent.nvidia.com/dims4/default/5e7b421/2147483647/strip/true/crop/452x453+0+0/resize/452x453!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca_task_lifecycle_args-version-1-modificationdate-1726579783007-api-v2.png" loading="lazy"> </picture> </figure> </div> </div><p> </p><p><b>Green activation</b> of <b>param</b> participant describes the time slice when all <i class=" ">DOCA Task</i> parameters owned by DOCA library. On <code class="InlineCodeBlock"><span>doca_task_submit()</span></code> call the ownership on all task arguments passed from application to the DOCA Context the related Task object belongs to. The ownership of task arguments passed back to application on task completion. The application should not modify and/or destroy/free Task argument related objects if it doesn’t own the argument.<span id="src-3169008654_id-.DOCACorev2.9.0LTS-ProgressEngine"></span></p> <p> </p> <h3 id="src-3169008654_id-.DOCACorev2.9.0LTS-DOCAProgressEngine"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-DOCAProgressEngine" data-cms-ai="0"><span id="src-3169008654_id-.DOCACorev2.9.0LTS-DOCAProgressEngine" class="confluence-anchor-link"></span>DOCA Progress Engine</a> </h3> <p><span id="src-3169008654_id-.DOCACorev2.9.0LTS-WorkQ"></span>The progress engine (PE) enables asynchronous processing and handling of multiple tasks and events of different types in a single-threaded execution environment. It is an event loop for all context-based DOCA libraries, with I/O completion being the most common event type.</p> <p>PE is designed to be thread unsafe (i.e., it can only be used in one thread at a time) but a single OS thread can use multiple PEs. The user can assign different priorities to different contexts by adding them to different PEs and adjusting the polling frequency for each PE accordingly. Another way to view the PE is as a queue of workload units that are scheduled for execution.</p> <p>There are no explicit APIs to add and/or schedule a workload to/on a PE but a workload can be added by:</p> <ul class=" "><li class=" "><p>Adding a DOCA context to PE</p> </li><li class=" "><p>Registering a DOCA event to probe (by the PE) and executing the associated handler if the probe is positive</p> </li></ul><p>PE is responsible for scheduling workloads (i.e., picking the next workload to execute). The order of workload execution is independent of task submission order, event registration order, or order of context associations with a given PE object. Multiple task completion callbacks may be executed in an order different from the order of related task submissions.</p> <p>The following diagram describes the initialization flow of the PE:</p> <p></p><p></p><div class="Enhancement" data-align-inline has-width style="--image-width: 850px"> <div class="Enhancement-item"> <figure class="Figure"> <picture> <source type="image/webp" width="1099" height="269" srcset="https://docscontent.nvidia.com/dims4/default/e19998f/2147483647/strip/true/crop/1099x269+0+0/resize/1099x269!/format/webp/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fworkq_init-version-1-modificationdate-1726579782007-api-v2.png 1x,https://docscontent.nvidia.com/dims4/default/d22b2a4/2147483647/strip/true/crop/1099x269+0+0/resize/2198x538!/format/webp/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fworkq_init-version-1-modificationdate-1726579782007-api-v2.png 2x"> <source type="image/png" width="1099" height="269" srcset="https://docscontent.nvidia.com/dims4/default/7a6f266/2147483647/strip/true/crop/1099x269+0+0/resize/1099x269!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fworkq_init-version-1-modificationdate-1726579782007-api-v2.png"> <img class="Image" alt="workq_init-version-1-modificationdate-1726579782007-api-v2.png" srcset="https://docscontent.nvidia.com/dims4/default/7a6f266/2147483647/strip/true/crop/1099x269+0+0/resize/1099x269!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fworkq_init-version-1-modificationdate-1726579782007-api-v2.png 1x,https://docscontent.nvidia.com/dims4/default/02b42ee/2147483647/strip/true/crop/1099x269+0+0/resize/2198x538!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fworkq_init-version-1-modificationdate-1726579782007-api-v2.png 2x" width="1099" height="269" src="https://docscontent.nvidia.com/dims4/default/7a6f266/2147483647/strip/true/crop/1099x269+0+0/resize/1099x269!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fworkq_init-version-1-modificationdate-1726579782007-api-v2.png" loading="lazy"> </picture> </figure> </div> </div><p> </p><p>After a PE is created and connected to contexts, it can start progressing tasks which are submitted to the contexts. Refer to context documentation to find details such as what tasks can be submitted using the context.</p> <p>Note that the PE can be connected to multiple contexts. Such contexts can be of the same type or of different types. This allows submitting different task types to the same PE and waiting for any of them to finish from the same place/thread.</p> <p>After initializing the PE, an application can define an event loop using one of these modes:</p> <ul class=" "><li class=" "><p><a class="Link" href="#src-3169008654_id-.DOCACorev2.9.0LTS-PollingMode" data-cms-ai="0" >Polling mode</a></p> </li><li class=" "><p><a class="Link" href="#src-3169008654_safe-id-aWQtLkRPQ0FDb3JldjIuOS4wTFRTLUJsb2NraW5nKE5vdGlmaWNhdGlvbi1kcml2ZW4pTW9kZQ" data-cms-ai="0" >Blocking (notification-driven) mode</a></p> </li></ul> <h4 id="src-3169008654_id-.DOCACorev2.9.0LTS-PEasEventLoopModeofOperation"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-PEasEventLoopModeofOperation" data-cms-ai="0">PE as Event Loop Mode of Operation</a> </h4> <p>All completion handlers for both tasks and events are executed in the context of <code class="InlineCodeBlock"><span>doca_pe_progress()</span></code>. <code class="InlineCodeBlock"><span>doca_pe_progress()</span></code> loops for every workload (i.e., for each workload unit) scheduled for execution:</p> <p> Run the selected workload unit. For the following cases: </p> <ul class=" "><li class=" "><p>Task completion, execute associated handler and break the loop and return status <code class="InlineCodeBlock"><span>made some progress</span></code> </p> </li><li class=" "><p>Positive probe of event, execute associated handler and break the loop and return status <code class="InlineCodeBlock"><span>made some progress</span></code> </p> </li><li class=" "><p>Considerable progress is made to contribute to future task completion or positive event probe, break the loop and return status <code class="InlineCodeBlock"><span>made some progress</span></code> </p> </li></ul><p>Otherwise, reach the end of the loop and return status <code class="InlineCodeBlock"><span>no progress</span></code>.</p><p> </p> <h4 id="src-3169008654_id-.DOCACorev2.9.0LTS-PollingModePollingMode"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-PollingModePollingMode" data-cms-ai="0"><span id="src-3169008654_id-.DOCACorev2.9.0LTS-PollingMode" class="confluence-anchor-link"></span>Polling Mode</a> </h4> <p>In this mode, the application submits a task and then does busy-wait to find out when the task has completed.</p> <p>The following diagram demonstrates this sequence:</p> <p></p><p></p><div class="Enhancement" data-align-inline has-width style="--image-width: 500px"> <div class="Enhancement-item"> <figure class="Figure"> <picture> <source type="image/webp" width="547" height="607" srcset="https://docscontent.nvidia.com/dims4/default/900283f/2147483647/strip/true/crop/547x607+0+0/resize/547x607!/format/webp/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca-core-pe-poll-version-1-modificationdate-1726579779620-api-v2.png 1x,https://docscontent.nvidia.com/dims4/default/993d958/2147483647/strip/true/crop/547x607+0+0/resize/1094x1214!/format/webp/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca-core-pe-poll-version-1-modificationdate-1726579779620-api-v2.png 2x"> <source type="image/png" width="547" height="607" srcset="https://docscontent.nvidia.com/dims4/default/9629482/2147483647/strip/true/crop/547x607+0+0/resize/547x607!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca-core-pe-poll-version-1-modificationdate-1726579779620-api-v2.png"> <img class="Image" alt="doca-core-pe-poll-version-1-modificationdate-1726579779620-api-v2.png" srcset="https://docscontent.nvidia.com/dims4/default/9629482/2147483647/strip/true/crop/547x607+0+0/resize/547x607!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca-core-pe-poll-version-1-modificationdate-1726579779620-api-v2.png 1x,https://docscontent.nvidia.com/dims4/default/af51247/2147483647/strip/true/crop/547x607+0+0/resize/1094x1214!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca-core-pe-poll-version-1-modificationdate-1726579779620-api-v2.png 2x" width="547" height="607" src="https://docscontent.nvidia.com/dims4/default/9629482/2147483647/strip/true/crop/547x607+0+0/resize/547x607!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca-core-pe-poll-version-1-modificationdate-1726579779620-api-v2.png" loading="lazy"> </picture> </figure> </div> </div><p> </p><ol class=" "><li class=" "><p>The application submits all tasks (one or more) and tracks the number of task completions to know if all tasks are done.</p> </li><li class=" "><p>The application waits for a task to complete by consecutive polls on <code class="InlineCodeBlock"><span>doca_pe_progress()</span></code>.</p> <ol class=" "><li class=" "><p>If <code class="InlineCodeBlock"><span>doca_pe_progress()</span></code> returns 1, it means progress is being made (i.e., some task completed or some event handled).</p> </li><li class=" "><p>Each time a task is completed or an event is handled, its preset completion or event handling callback is executed accordingly.</p> </li><li class=" "><p>If a task is completed with an error, preset task completion with error callback is executed (see section "<a class="Link" href="#src-3169008654_id-.DOCACorev2.9.0LTS-ErrorHandling" data-cms-ai="0" >Error Handling</a>").</p> </li></ol></li><li class=" "><p>The application may add code to completion callbacks or event handlers for tracking the amount of completed and pending workloads.</p> </li></ol> <div class="CallOutBox" data-option-Note> <div class="CallOutBox-icon"><svg><use xlink:href="#calloutbox-icon-check"></use></svg> </div><div class="CallOutBox-title">Note</div> <div class="CallOutBox-body"> <p>In this mode, the application is always using the CPU even when it is doing nothing (busy-wait).</p> </div> </div> <p> <br> </p> <h4 id="src-3169008654_safe-id-aWQtLkRPQ0FDb3JldjIuOS4wTFRTLUJsb2NraW5nKE5vdGlmaWNhdGlvbi1kcml2ZW4pTW9kZUJsb2NraW5nTW9kZS1Ob3RpZmljYXRpb25Ecml2ZW4"> <a href="#src-3169008654_safe-id-aWQtLkRPQ0FDb3JldjIuOS4wTFRTLUJsb2NraW5nKE5vdGlmaWNhdGlvbi1kcml2ZW4pTW9kZUJsb2NraW5nTW9kZS1Ob3RpZmljYXRpb25Ecml2ZW4" data-cms-ai="0"><span id="src-3169008654_safe-id-aWQtLkRPQ0FDb3JldjIuOS4wTFRTLUJsb2NraW5nKE5vdGlmaWNhdGlvbi1kcml2ZW4pTW9kZQ" class="confluence-anchor-link"></span>Blocking Mode - Notification Driven</a> </h4> <p>In this mode, the application submits a task and then waits for a notification to be received before querying the status.</p> <p>The following diagram demonstrates this sequence:</p> <p></p><p></p><div class="Enhancement" data-align-inline has-width style="--image-width: 600px"> <div class="Enhancement-item"> <figure class="Figure"> <picture> <source type="image/webp" width="747" height="841" srcset="https://docscontent.nvidia.com/dims4/default/4beacb6/2147483647/strip/true/crop/747x841+0+0/resize/747x841!/format/webp/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca-core-pe-wait-notify-version-1-modificationdate-1726579779177-api-v2.png 1x,https://docscontent.nvidia.com/dims4/default/2a2aa3e/2147483647/strip/true/crop/747x841+0+0/resize/1494x1682!/format/webp/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca-core-pe-wait-notify-version-1-modificationdate-1726579779177-api-v2.png 2x"> <source type="image/png" width="747" height="841" srcset="https://docscontent.nvidia.com/dims4/default/788ad90/2147483647/strip/true/crop/747x841+0+0/resize/747x841!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca-core-pe-wait-notify-version-1-modificationdate-1726579779177-api-v2.png"> <img class="Image" alt="doca-core-pe-wait-notify-version-1-modificationdate-1726579779177-api-v2.png" srcset="https://docscontent.nvidia.com/dims4/default/788ad90/2147483647/strip/true/crop/747x841+0+0/resize/747x841!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca-core-pe-wait-notify-version-1-modificationdate-1726579779177-api-v2.png 1x,https://docscontent.nvidia.com/dims4/default/7720daa/2147483647/strip/true/crop/747x841+0+0/resize/1494x1682!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca-core-pe-wait-notify-version-1-modificationdate-1726579779177-api-v2.png 2x" width="747" height="841" src="https://docscontent.nvidia.com/dims4/default/788ad90/2147483647/strip/true/crop/747x841+0+0/resize/747x841!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca-core-pe-wait-notify-version-1-modificationdate-1726579779177-api-v2.png" loading="lazy"> </picture> </figure> </div> </div><p> </p><ol class=" "><li class=" "><p>The application gets a notification handle from the <code class="InlineCodeBlock"><span>doca_pe</span></code> representing a Linux file descriptor which is used to signal the application that some work has finished.</p> </li><li class=" "><p>The application then arms the PE with <code class="InlineCodeBlock"><span>doca_pe_request_notification()</span></code>.</p> <div class="CallOutBox" data-option-Note> <div class="CallOutBox-icon"><svg><use xlink:href="#calloutbox-icon-check"></use></svg> </div><div class="CallOutBox-title">Note</div> <div class="CallOutBox-body"> <p>This must be done every time an application is interested in receiving a notification from the PE.</p> </div> </div> <p> </p> <div class="CallOutBox" data-option-Note> <div class="CallOutBox-icon"><svg><use xlink:href="#calloutbox-icon-check"></use></svg> </div><div class="CallOutBox-title">Note</div> <div class="CallOutBox-body"> <p>After <code class="InlineCodeBlock"><span>doca_pe_request_notification()</span></code>, no calls to <code class="InlineCodeBlock"><span>doca_pe_progress()</span></code> are allowed. In other words, <code class="InlineCodeBlock"><span>doca_pe_request_notification()</span></code> should be followed by <code class="InlineCodeBlock"><span>doca_pe_clear_notification</span></code> before any calls to <code class="InlineCodeBlock"><span>doca_pe_progress()</span></code>.</p> </div> </div> <p> </p> </li><li class=" "><p>The application submits a task.</p> </li><li class=" "><p>The application waits (e.g., Linux epoll/select) for a signal to be received on the <code class="InlineCodeBlock"><span>pe-fd</span></code>.</p> </li><li class=" "><p>The application clears the notifications received, notifying the PE that a signal has been received and allowing it to perform notification handling.</p> </li><li class=" "><p>The application attempts to handle received notifications via (multiple) calls to <code class="InlineCodeBlock"><span>doca_pe_progress()</span></code>.</p> <div class="CallOutBox" data-option-Note> <div class="CallOutBox-icon"><svg><use xlink:href="#calloutbox-icon-check"></use></svg> </div><div class="CallOutBox-title">Note</div> <div class="CallOutBox-body"> <p>There is no guarantee that the call to <code class="InlineCodeBlock"><span>doca_pe_progress()</span></code> would execute any task completion/event handler, but the PE can continue the operation.</p> </div> </div> <p> </p> </li><li class=" "><p>The application handles its internal state changes caused by task completions and event handlers called in the previous step.</p> </li><li class=" "><p>Repeat steps 2-7 until all tasks are completed and all expected events are handled.</p> </li></ol> <h4 id="src-3169008654_id-.DOCACorev2.9.0LTS-ProgressEngineversusEpoll"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-ProgressEngineversusEpoll" data-cms-ai="0">Progress Engine versus Epoll</a> </h4> <p>The epoll mechanism in Linux and the DOCA PE handles high concurrency in event-driven architectures. Epoll, like a post office, tracks "mailboxes" (file descriptors) and notifies the "postman" (the <code class="InlineCodeBlock"><span>epoll_wait</span></code> function) when a "letter" (event) arrives. DOCA PE, like a restaurant, uses a single "waiter" to handle "orders" (workload units) from "customers" (DOCA contexts). When an order is ready, it is placed on a "tray" (task completion handler/event handler execution) and delivered in the order received. Both systems efficiently manage resources while waiting for events or tasks to complete.</p> <p> </p> <h3 id="src-3169008654_id-.DOCACorev2.9.0LTS-DOCAEvent"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-DOCAEvent" data-cms-ai="0"><span id="src-3169008654_id-.DOCACorev2.9.0LTS-DOCAEvent" class="confluence-anchor-link"></span>DOCA Event</a> </h3> <p>An event is a type of occurrence that can be detected or verified by the DOCA software, which can then trigger a handler (a callback function) to perform an action. Events are associated with a specific source object, which is the entity whose state or attribute change defines the event's occurrence. For example, a context state change event is caused by the change of state of a context object.</p> <p>To register an event, the user must call the <code class="InlineCodeBlock"><span>doca_<event_type>_reg(pe, ...)</event_type></span></code> function, passing a pointer to the user handler function and an opaque argument for the handler. The user must also associate the event handler with a PE, which is responsible for running the workloads that involve event detection and handler execution.</p> <p>Once an event is registered, it is periodically checked by the <code class="InlineCodeBlock"><span>doca_pe_progress()</span></code> function, which runs in the same execution context as the PE to which the event is bound. If the event condition is met, the handler function is invoked. Events are not thread-safe objects and should only be accessed by the PE to which they are bound.</p> <p></p><p></p><div class="Enhancement" data-align-inline has-width style="--image-width: 500px"> <div class="Enhancement-item"> <figure class="Figure"> <picture> <source type="image/webp" width="622" height="547" srcset="https://docscontent.nvidia.com/dims4/default/cd58915/2147483647/strip/true/crop/622x547+0+0/resize/622x547!/format/webp/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca-core-event-simple-version-1-modificationdate-1726579778287-api-v2.png 1x,https://docscontent.nvidia.com/dims4/default/534bf10/2147483647/strip/true/crop/622x547+0+0/resize/1244x1094!/format/webp/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca-core-event-simple-version-1-modificationdate-1726579778287-api-v2.png 2x"> <source type="image/png" width="622" height="547" srcset="https://docscontent.nvidia.com/dims4/default/c296bd1/2147483647/strip/true/crop/622x547+0+0/resize/622x547!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca-core-event-simple-version-1-modificationdate-1726579778287-api-v2.png"> <img class="Image" alt="doca-core-event-simple-version-1-modificationdate-1726579778287-api-v2.png" srcset="https://docscontent.nvidia.com/dims4/default/c296bd1/2147483647/strip/true/crop/622x547+0+0/resize/622x547!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca-core-event-simple-version-1-modificationdate-1726579778287-api-v2.png 1x,https://docscontent.nvidia.com/dims4/default/feacd99/2147483647/strip/true/crop/622x547+0+0/resize/1244x1094!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca-core-event-simple-version-1-modificationdate-1726579778287-api-v2.png 2x" width="622" height="547" src="https://docscontent.nvidia.com/dims4/default/c296bd1/2147483647/strip/true/crop/622x547+0+0/resize/622x547!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fdoca-core-event-simple-version-1-modificationdate-1726579778287-api-v2.png" loading="lazy"> </picture> </figure> </div> </div><p> <br> </p><h3 id="src-3169008654_id-.DOCACorev2.9.0LTS-ErrorHandling"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-ErrorHandling" data-cms-ai="0"><span id="src-3169008654_id-.DOCACorev2.9.0LTS-ErrorHandling" class="confluence-anchor-link"></span>Error Handling</a> </h3> <p>After a task is submitted successfully, consequent calls to <code class="InlineCodeBlock"><span>doca_pe_progress()</span></code> may fail (i.e., task failure completion callback is called).</p> <p>Once a task fails, the context may transition to stopping state, in this state, the application has to progress all in-flight tasks until completion before destroying or restarting the context.</p> <p>The following diagram shows how an application may handle an error from <code class="InlineCodeBlock"><span>doca_pe_progress()</span></code>:</p> <p></p><p></p><div class="Enhancement" data-align-inline has-width style="--image-width: 550px"> <div class="Enhancement-item"> <figure class="Figure"> <picture> <source type="image/webp" width="672" height="729" srcset="https://docscontent.nvidia.com/dims4/default/ec06c4c/2147483647/strip/true/crop/672x729+0+0/resize/672x729!/format/webp/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fworkq_error-version-1-modificationdate-1726579782363-api-v2.png 1x,https://docscontent.nvidia.com/dims4/default/ba0e139/2147483647/strip/true/crop/672x729+0+0/resize/1344x1458!/format/webp/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fworkq_error-version-1-modificationdate-1726579782363-api-v2.png 2x"> <source type="image/png" width="672" height="729" srcset="https://docscontent.nvidia.com/dims4/default/fb70d39/2147483647/strip/true/crop/672x729+0+0/resize/672x729!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fworkq_error-version-1-modificationdate-1726579782363-api-v2.png"> <img class="Image" alt="workq_error-version-1-modificationdate-1726579782363-api-v2.png" srcset="https://docscontent.nvidia.com/dims4/default/fb70d39/2147483647/strip/true/crop/672x729+0+0/resize/672x729!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fworkq_error-version-1-modificationdate-1726579782363-api-v2.png 1x,https://docscontent.nvidia.com/dims4/default/92c63ff/2147483647/strip/true/crop/672x729+0+0/resize/1344x1458!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fworkq_error-version-1-modificationdate-1726579782363-api-v2.png 2x" width="672" height="729" src="https://docscontent.nvidia.com/dims4/default/fb70d39/2147483647/strip/true/crop/672x729+0+0/resize/672x729!/quality/90/?url=https%3A%2F%2Fk3-prod-nvidia-docs.s3.us-west-2.amazonaws.com%2Fbrightspot%2Fconfluence%2F00000193-44fd-ddc9-adbf-e6ffd7010000%2Fdoca%2Fsdk%2Fimages%2Fdownload%2Fattachments%2F3169008654%2Fworkq_error-version-1-modificationdate-1726579782363-api-v2.png" loading="lazy"> </picture> </figure> </div> </div><p> </p><ol class=" "><li class=" "><p>Application runs event loop.</p> </li><li class=" "><p>Any of the following may happen:</p> <ul class=" "><li class=" "><p>[Optional] Task fails, and the task failed completion handler is called</p> <ul class=" "><li class=" "><p>This may be caused by bad task parameters or another fatal error</p> </li><li class=" "><p>Handler releases the task and all associated resources</p> </li></ul></li><li class=" "><p>[Optional] Context transitions to stopping state, and the context state changed handler is called</p> <ul class=" "><li class=" "><p>This may be caused by failure of a task or another fatal error</p> </li><li class=" "><p>In this state, all in-flight tasks are guaranteed to fail</p> </li><li class=" "><p>Handler releases tasks that are not in-flight if such tasks exist</p> </li></ul></li><li class=" "><p>[Optional] Context transitions to idle state, and the context state changed handler is called</p> <ul class=" "><li class=" "><p>This may happen due to encountering an error and the context does not have any resources that must be freed by the application</p> </li><li class=" "><p>In this case, the application may decide to recover the context by calling start again or it may decide to destroy the context and possibly exit the application</p> </li></ul></li></ul></li></ol> <h3 id="src-3169008654_id-.DOCACorev2.9.0LTS-TaskandEventBatching"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-TaskandEventBatching" data-cms-ai="0"><span id="src-3169008654_id-.DOCACorev2.9.0LTS-TaskandEventBatching" class="confluence-anchor-link"></span>Task and Event Batching</a> </h3> <p>DOCA Batching is an approach for grouping multiple tasks or events of the same type and handling them as a single unit. DOCA offers two options of achieving this as described in the following subsections.</p> <h4 id="src-3169008654_safe-id-aWQtLkRPQ0FDb3JldjIuOS4wTFRTLUJhdGNoVGFzay9FdmVudA"> <a href="#src-3169008654_safe-id-aWQtLkRPQ0FDb3JldjIuOS4wTFRTLUJhdGNoVGFzay9FdmVudA" data-cms-ai="0">Batch Task/Event</a> </h4> <p>In this batching option, a library (e.g., <code class="InlineCodeBlock"><span>doca_eth_txq</span></code>) offers a task that represents a batched operation (e.g., sending multiple packets), the task is considered a batch task and has a task type that is separate from the non-batched operation (e.g., sending a single packet).</p> <p>To submit the batch task, the user is required to build the batch and then submit it at once, similar to submitting a regular task.</p> <p style="text-align:left;">The completion of the batch is based on the completion of all items in the batch and is handled as the completion of a single unit. This allows for multiple DOCA Task initialization/submission and multiple DOCA Task/Event completion handling in a single API call (see <a class="Link" href="/doca/sdk/DOCA+Ethernet" data-cms-ai="0" >DOCA Ethernet</a> for example).</p><p> </p> <h4 id="src-3169008654_id-.DOCACorev2.9.0LTS-IterativeBatch"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-IterativeBatch" data-cms-ai="0">Iterative Batch</a> </h4> <p>In this batching option, it is possible to utilize existing task types to build a batch operation, where each task within the batch is submitted individually and each task receives its own completion.</p> <p>Furthermore, the batch is built iteratively, where the user is not required to have information for the entire batch ahead of time.</p> <p>To utilize this option, the user can submit each task in the batch using an extended submit API <code class="InlineCodeBlock"><span>doca_task_submit_ex</span></code> while providing additional submit flags.</p> <p>The extended submit API is similar to a regular submit API (<code class="InlineCodeBlock"><span>doca_task_submit</span></code>) but with the ability to receive submit flags. These flags are used as hints to the library that executes the tasks. They can have implications on the current task but may also have implications on previously submitted flags, as described in the following table:</p><div class="Table-Rte"> <div class="Table-Rte-body"> <table class="wrapped confluenceTable"> <colgroup> <col> <col> <col> <col> <col> <col> <col> </colgroup> <thead class=" "> <tr> <td class="confluenceTh" rowspan="1" colspan="1"> <p class="auto-cursor-target">Submit Flag<sup class=" "> <a class="Link" href="#src-3169008654_footnote1" id="src-3169008654_footnote-marker1-0"class="footnote-marker" data-cms-ai="0" >1</a></sup></p> </td> <td class="confluenceTh" rowspan="1" colspan="2"> <p>Effect on Current Task</p> </td> <td class="confluenceTh" rowspan="1" colspan="2"> <p class="auto-cursor-target">Effect on Previous Tasks<sup class=" "> <a class="Link" href="#src-3169008654_footnote2" id="src-3169008654_footnote-marker2-0"class="footnote-marker" data-cms-ai="0" >2</a></sup></p> </td> <td class="confluenceTh" rowspan="2" colspan="1"> <p>Default Behavior of doca_task_submit</p> </td> <td class="confluenceTh" rowspan="2" colspan="1"> <p>Comments</p> </td> </tr> </thead><tfoot class=" "></tfoot><tbody class=" "> <tr> <td rowspan="1" colspan="1"> </td> <td class="confluenceTh" rowspan="1" colspan="1"> <p>Flag Provided</p> </td> <td class="confluenceTh" rowspan="1" colspan="1"> <p>Flag not Provided</p> </td> <td class="confluenceTh" rowspan="1" colspan="1"> <p>Flag Provided</p> </td> <td class="confluenceTh" rowspan="1" colspan="1"> <p>Flag not Provided</p> </td> </tr> <tr> <td class="confluenceTd" rowspan="1" colspan="1"> <p><code class="InlineCodeBlock"><span>DOCA_TASK_SUBMIT_FLAG_FLUSH</span></code></p> </td> <td class="confluenceTd" rowspan="1" colspan="1"> <p>Task is submitted for hardware execution immediately, and is considered "flushed".</p> <p></p><p></p><p></p> </td> <td class="confluenceTd" rowspan="1" colspan="1"> <p>Task may not be submitted for hardware execution, and is considered "unflushed".</p> </td> <td class="confluenceTd" rowspan="1" colspan="1"> <p>All previous tasks which are considered unflushed become flushed.</p> </td> <td class="confluenceTd" rowspan="1" colspan="1"> <p>None</p> </td> <td class="confluenceTd" rowspan="1" colspan="1"> <p>Flag is provided</p> </td> <td class="confluenceTd" rowspan="1" colspan="1"> <p>As long as the task is unflushed, it never completes.</p> <p>The flag allows batching such that multiple tasks are flushed at once, instead of individually.</p> </td> </tr> <tr> <td class="confluenceTd" rowspan="1" colspan="1"> <p><code class="InlineCodeBlock"><span>DOCA_TASK_SUBMIT_FLAG_OPTIMIZE_REPORTS</span></code></p> </td> <td class="confluenceTd" rowspan="1" colspan="1"> <p>The user does not receive task completion after hardware has completed execution of the task, and the completion is considered "unreported".</p> </td> <td class="confluenceTd" rowspan="1" colspan="1"> <p>The user receives task completion after hardware has completed execution of the task, and the completion is considered "reported".</p> </td> <td class="confluenceTd" rowspan="1" colspan="1"> <p>None</p> </td> <td class="confluenceTd" rowspan="1" colspan="1"> <p>Once the hardware completes execution of this task, all previous<sup class=" "> <a class="Link" href="#src-3169008654_footnote3" id="src-3169008654_footnote-marker3-0"class="footnote-marker" data-cms-ai="0" >3</a> </sup>unreported completions become reported.</p> </td> <td class="confluenceTd" rowspan="1" colspan="1"> <p>Flag is not provided</p> </td> <td class="confluenceTd" rowspan="1" colspan="1"> <p>As long as the task is unreported, the user would never know that it has been completed.</p> <p>The completion of a task is reported through a completion callback using the progress engine.</p> <p>The library does not guarantee any order of execution/completion of tasks.</p> <p>The flag allows batching, such that multiple task completions are reported using a single hardware completion, instead of receiving a completion for every task.</p> </td> </tr> </tbody> </table> </div> </div> <p></p> <ol class="display-footnotes "><li class=" "><p>Note that these flags are hints which may allow internal optimizations. However, on a task-by-task basis, the library may decide to ignore user flags and revert to default submit behavior. <a class="Link" href="#src-3169008654_footnote-marker1-0" class="footnote-display pdf" data-cms-ai="0" > </a></p> </li><li class=" "><p>"Previous tasks" only refers to tasks submitted to the same library instance (doca_ctx). The flags do not allow optimizations across different library instances. <a class="Link" href="#src-3169008654_footnote-marker2-0" class="footnote-display pdf" data-cms-ai="0" > </a></p> </li><li class=" "><p>"previous" refers to tasks that have been submitted before this one. <a class="Link" href="#src-3169008654_footnote-marker3-0" class="footnote-display pdf" data-cms-ai="0" > </a></p> </li></ol><p></p> <p> </p> <h3 id="src-3169008654_id-.DOCACorev2.9.0LTS-DOCAGraphExecution"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-DOCAGraphExecution" data-cms-ai="0"><span id="src-3169008654_id-.DOCACorev2.9.0LTS-DOCAGraphExecution" class="confluence-anchor-link"></span>DOCA Graph Execution</a> </h3> <p>DOCA Graph facilitates running a set of actions (tasks, user callbacks, graphs) in a specific order and dependencies. DOCA Graph runs on a DOCA progress engine.</p> <p>DOCA Graph creates graph instances that are submitted to the progress engine (<code class="InlineCodeBlock"><span>doca_graph_instance_submit</span></code>).</p> <h4 id="src-3169008654_id-.DOCACorev2.9.0LTS-Nodes"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-Nodes" data-cms-ai="0">Nodes</a> </h4> <p>DOCA Graph is comprised of <a class="Link" href="#src-3169008654_id-.DOCACorev2.9.0LTS-ContextNode" data-cms-ai="0" >context</a>, <a class="Link" href="#src-3169008654_id-.DOCACorev2.9.0LTS-UserNode" data-cms-ai="0" >user</a>, and <a class="Link" href="#src-3169008654_id-.DOCACorev2.9.0LTS-Sub-graphNode" data-cms-ai="0" >sub-graph</a> nodes. Each of these types can be in any of the following positions in the network:</p> <ul class=" "><li class=" "><p>Root nodes – a root node does not have a parent. The graph can have one or more root nodes. All roots begin running when the graph instance is submitted.</p> </li><li class=" "><p>Edge nodes – an edge node is a node that does not have child nodes connected to it. The graph instance is completed when all edge nodes are completed.</p> </li><li class=" "><p>Intermediate node – a node connected to parent and child nodes</p> </li></ul> <h4 id="src-3169008654_id-.DOCACorev2.9.0LTS-ContextNodeContextNode"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-ContextNodeContextNode" data-cms-ai="0"><span id="src-3169008654_id-.DOCACorev2.9.0LTS-ContextNode" class="confluence-anchor-link"></span>Context Node</a> </h4> <p>A context node runs a specific DOCA task and uses a specific DOCA context (<code class="InlineCodeBlock"><span>doca_ctx</span></code>). The context must be connected to the progress engine before the graph is started.</p> <p>The task lifespan must be longer or equal to the life span of the graph instance.</p><p> </p> <h4 id="src-3169008654_id-.DOCACorev2.9.0LTS-UserNodeUserNode"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-UserNodeUserNode" data-cms-ai="0">User Node</a> </h4> <p>A user node runs a user callback to facilitate performing actions during the run time of the graph instance (e.g., adjust next node task data, compare results).</p><p> </p> <h4 id="src-3169008654_id-.DOCACorev2.9.0LTS-Sub-graphNodeSub-graphNode"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-Sub-graphNodeSub-graphNode" data-cms-ai="0">Sub-graph Node</a> </h4> <p>A sub-graph node runs an instance of another graph.</p> <p> </p> <h4 id="src-3169008654_id-.DOCACorev2.9.0LTS-UsingDOCAGraph"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-UsingDOCAGraph" data-cms-ai="0">Using DOCA Graph</a> </h4> <ol class=" "><li class=" "><p>Create the graph using <code class="InlineCodeBlock"><span>doca_graph_create</span></code>.</p> </li><li class=" "><p>Create the graph nodes (e.g., <code class="InlineCodeBlock"><span>doca_graph_node_create_from_ctx</span></code>).</p> </li><li class=" "><p class="auto-cursor-target">Define dependencies using <code class="InlineCodeBlock"><span>doca_graph_add_dependency</span></code>.</p> <div class="CallOutBox" data-option-Note> <div class="CallOutBox-icon"><svg><use xlink:href="#calloutbox-icon-check"></use></svg> </div><div class="CallOutBox-title">Note</div> <div class="CallOutBox-body"> <p>DOCA graph does not support circle dependencies (e.g., A => B => A).</p> </div> </div> <p> </p> </li><li class=" "><p>Start the graph using <code class="InlineCodeBlock"><span>doca_graph_start</span></code>.</p> </li><li class=" "><p>Create the graph instance using <code class="InlineCodeBlock"><span>doca_graph_instance_create</span></code>.</p> </li><li class=" "><p>Set the nodes data (e.g., <code class="InlineCodeBlock"><span>doca_graph_instance_set_ctx_node_data</span></code>).</p> </li><li class=" "><p>Submit the graph instance to the pe using <code class="InlineCodeBlock"><span>doca_graph_instance_submit</span></code>.</p> </li><li class=" "><p>Call <code class="InlineCodeBlock"><span>doca_pe_progress</span></code> until the graph callback is invoked.</p> <ul class=" "><li class=" "><p>Progress engine can run graph instances and standalone tasks simultaneously.</p> </li></ul></li></ol> <h4 id="src-3169008654_id-.DOCACorev2.9.0LTS-DOCAGraphLimitations"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-DOCAGraphLimitations" data-cms-ai="0">DOCA Graph Limitations</a> </h4> <ul class=" "><li class=" "><p>DOCA Graph does not support circle dependencies</p> </li><li class=" "><p>DOCA Graph must contain at least one context node. A graph containing a sub-graph with at least one context node is a valid configuration.</p> </li></ul> <h4 id="src-3169008654_id-.DOCACorev2.9.0LTS-DOCAGraphSample"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-DOCAGraphSample" data-cms-ai="0">DOCA Graph Sample</a> </h4> <p>The graph sample is based on the DOCA DMA library. The sample copies 2 buffers using DMA.</p> <p>The graph ends with a user callback node that compares source and destinations.</p> <h4 id="src-3169008654_id-.DOCACorev2.9.0LTS-RunningDOCAGraphSample"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-RunningDOCAGraphSample" data-cms-ai="0">Running DOCA Graph Sample</a> </h4> <ol class="ol "><li class="li "><p>Refer to the following documents:</p> <ul class=" "><li class="li "><p> <a class="Link" href="https://confluence.nvidia.com/display/NMAR/NVIDIA+DOCA+Installation+Guide+for+Linux" data-cms-ai="0" >NVIDIA DOCA Installation Guide for Linux</a> for details on how to install BlueField-related software. </p> </li><li class="li "><p> <a class="Link" href="https://confluence.nvidia.com/display/NMAR/NVIDIA+DOCA+Troubleshooting+Guide" data-cms-ai="0" >NVIDIA DOCA Troubleshooting Guide</a> for any issue you may encounter with the installation, compilation, or execution of DOCA samples. </p> </li></ul></li><li class=" "><p>To build a given sample:</p><bsp-code-block class="CodeBlock" data-module="standard" data-language="text/plain" data-noAnnotations > <div class="CodeBlock-wrapper"> <div class="CodeBlock-copy"> <div class="CodeBlock-copy-message"> <div class="CodeBlock-copy-message-prompt">Copy</div> <div class="CodeBlock-copy-message-done">Copied!</div> </div> <div class="CodeBlock-copy-button"> <div class="CodeBlock-copy-icon"> <svg class="done"><use xlink:href="#check"></use></svg> </div> </div> </div> <pre id="play" class="language- " plain-text data-line=""> <div class="CodeBlock-lineNumbers"></div> <code><p>cd /opt/mellanox/doca/samples/doca_common/graph/ meson build ninja -C build</p></code> </pre> </div> </bsp-code-block> <p> </p> </li><li class=" "><p class="auto-cursor-target">Sample (e.g., <code class="InlineCodeBlock"><span>doca_graph</span></code>) usage:</p><bsp-code-block class="CodeBlock" data-module="standard" data-language="text/plain" data-noAnnotations > <div class="CodeBlock-wrapper"> <div class="CodeBlock-copy"> <div class="CodeBlock-copy-message"> <div class="CodeBlock-copy-message-prompt">Copy</div> <div class="CodeBlock-copy-message-done">Copied!</div> </div> <div class="CodeBlock-copy-button"> <div class="CodeBlock-copy-icon"> <svg class="done"><use xlink:href="#check"></use></svg> </div> </div> </div> <pre id="play" class="language- " plain-text data-line=""> <div class="CodeBlock-lineNumbers"></div> <code><p>./build/doca_graph</p></code> </pre> </div> </bsp-code-block> <p> </p> <p class="auto-cursor-target">No parameters required.</p> </li></ol> <p> </p> <h3 id="src-3169008654_id-.DOCACorev2.9.0LTS-AlternativeDataPath"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-AlternativeDataPath" data-cms-ai="0"><span id="src-3169008654_id-.DOCACorev2.9.0LTS-AlternativeDataPath" class="confluence-anchor-link"></span>Alternative Data Path</a> </h3> <p><a class="Link" href="#src-3169008654_id-.DOCACorev2.9.0LTS-ProgressEngine" data-cms-ai="0" >DOCA Progress Engine</a> utilizes the CPU to offload data path operations to hardware. However, some libraries support utilization of DPA and/or GPU.</p> <p>Considerations:</p> <ul class=" "><li class=" "><p>Not all contexts support alternative datapath</p> </li><li class=" "><p>Configuration phase is always done on CPU</p> </li><li class=" "><p>Datapath operations are always offloaded to hardware. The unit that offloads the operation itself can be either CPU/DPA/GPU.</p> </li><li class=" "><p>The default mode of operation is CPU</p> </li><li class=" "><p>Each mode of operation introduces a different set of APIs to be used in execution path. The used APIs are mutually exclusive for specific context instance.</p> </li></ul> <h4 id="src-3169008654_id-.DOCACorev2.9.0LTS-DPADPA"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-DPADPA" data-cms-ai="0"><span id="src-3169008654_id-.DOCACorev2.9.0LTS-DPA" class="confluence-anchor-link"></span>DPA</a> </h4> <p>Users must first refer to the programming guide of the relevant context (e.g., <a class="Link" href="/doca/sdk/DOCA+RDMA" data-cms-ai="0" >DOCA RDMA</a>) to check if datapath on DPA is supported. Additionally, the guide provides what operations can be used.</p> <p>To set the datapath mode to DPA, acquire a <a class="Link" href="/doca/sdk/DOCA+DPA" data-cms-ai="0" >DOCA DPA</a> instance, then use the <code class="InlineCodeBlock"><span>doca_ctx_set_datapath_on_dpa()</span></code> API.</p> <p>After the context has been started with this mode, it becomes possible to get a DPA handle, using an API defined by the relevant context (e.g., <code class="InlineCodeBlock"><span>doca_rdma_get_dpa_handle()</span></code>). This handle can then be used to access DPA data path APIs within DPA code.</p><p> </p> <h4 id="src-3169008654_id-.DOCACorev2.9.0LTS-GPU"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-GPU" data-cms-ai="0">GPU</a> </h4> <p>Users must first refer to the programming guide of the relevant context (E.g., <a class="Link" href="/doca/sdk/DOCA+Ethernet" data-cms-ai="0" >DOCA Ethernet</a>) to check if datapath on GPU is supported. Additionally, the guide provides what operations can be used.</p> <p>To set the data path mode to GPU, acquire a <a class="Link" href="/doca/sdk/DOCA+GPUNetIO" data-cms-ai="0" >DOCA GPU</a> instance, then use the <code class="InlineCodeBlock"><span>doca_ctx_set_datapath_on_gpu()</span></code> API.</p> <p>After the context has been started with this mode, it becomes possible to get a GPU handle, using an API defined by the relevant context (e.g., <code class="InlineCodeBlock"><span>doca_eth_rxq_get_gpu_handle()</span></code>). This handle can then be used to access GPU data path APIs within GPU code.</p> <p> </p><p> </p> <h2 id="src-3169008654_id-.DOCACorev2.9.0LTS-ObjectLifeCycle"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-ObjectLifeCycle" data-cms-ai="0">Object Life Cycle</a> </h2> <p>Most DOCA Core objects share the same handling model in which:</p> <ol class=" "><li class=" "><p>The object is allocated by DOCA so it is opaque for the application (e.g., <code class="InlineCodeBlock"><span>doca_buf_inventory_create</span></code>, <code class="InlineCodeBlock"><span>doca_mmap_create</span></code>).</p> </li><li class=" "><p>The application initializes the object and sets the desired properties (e.g., <code class="InlineCodeBlock"><span>doca_mmap_set_memrange</span></code>).</p> </li><li class=" "><p>The object is started, and no configuration or attribute change is allowed (e.g., <code class="InlineCodeBlock"><span>doca_buf_inventory_start</span></code>, <code class="InlineCodeBlock"><span>doca_mmap_start</span></code>).</p> </li><li class=" "><p>The object is used.</p> </li><li class=" "><p>The object is stopped and deleted (e.g., <code class="InlineCodeBlock"><span>doca_buf_inventory_stop</span></code> → <code class="InlineCodeBlock"><span>doca_buf_inventory_destroy</span></code>, <code class="InlineCodeBlock"><span>doca_mmap_stop</span></code> → <code class="InlineCodeBlock"><span>doca_mmap_destroy</span></code>).</p> </li></ol><p>The following procedure describes the mmap export mechanism between two machines (remote machines or host-BlueField):</p> <ol class=" "><li class=" "><p>Memory is allocated on Machine1.</p> </li><li class=" "><p>Mmap is created and is provided memory from step 1.</p> </li><li class=" "><p>Mmap is exported to the Machine2 pinning the memory.</p> </li><li class=" "><p>On the Machine2, an imported mmap is created and holds a reference to actual memory residing on Machine1.</p> </li><li class=" "><p>Imported mmap can be used by Machine2 to allocate buffers.</p> </li><li class=" "><p>Imported mmap is destroyed.</p> </li><li class=" "><p>Exported mmap is destroyed.</p> </li><li class=" "><p>Original memory is destroyed.</p> </li></ol> <h2 id="src-3169008654_id-.DOCACorev2.9.0LTS-RDMABridge"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-RDMABridge" data-cms-ai="0">RDMA Bridge</a> </h2> <p>The DOCA Core library provides building blocks for applications to use while abstracting many details relying on the RDMA driver. While this takes away complexity, it adds flexibility especially for applications already based on rdma-core. The RDMA bridge allows interoperability between DOCA SDK and rdma-core such that existing applications can convert DOCA-based objects to rdma-core-based objects.</p> <h3 id="src-3169008654_id-.DOCACorev2.9.0LTS-RequirementsandConsiderations.2"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-RequirementsandConsiderations.2" data-cms-ai="0">Requirements and Considerations</a> </h3> <ul class=" "><li class=" "><p>This library enables applications already using rdma-core to port their existing application or extend it using DOCA SDK.</p> </li><li class=" "><p>Bridge allows converting DOCA objects to equivalent rdma-core objects.</p> </li></ul> <h3 id="src-3169008654_id-.DOCACorev2.9.0LTS-DOCACoreObjectstoRDMACoreObjectsMapping"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-DOCACoreObjectstoRDMACoreObjectsMapping" data-cms-ai="0">DOCA Core Objects to RDMA Core Objects Mapping</a> </h3> <p>The RDMA bridge allows translating a DOCA Core object to a matching RDMA Core object. The following table shows how the one object maps to the other.</p> <div class="Table-Rte"> <div class="Table-Rte-body"> <table class="wrapped confluenceTable"> <colgroup> <col> <col> <col> <col> </colgroup> <thead class=" "> <tr> <td class="confluenceTh" rowspan="1" colspan="1"> <p>RDMA Core Object</p> </td> <td class="confluenceTh" rowspan="1" colspan="1"> <p>DOCA Equivalent</p> </td> <td class="confluenceTh" rowspan="1" colspan="1"> <p>RDMA Object to DOCA Object</p> </td> <td class="confluenceTh" rowspan="1" colspan="1"> <p>DOCA Object to RDMA Object</p> </td> </tr> </thead><tfoot class=" "></tfoot><tbody class=" "> <tr> <td class="confluenceTd" rowspan="1" colspan="1"> <p><code class="InlineCodeBlock"><span>ibv_pd</span></code></p> </td> <td class="confluenceTd" rowspan="1" colspan="1"> <p><code class="InlineCodeBlock"><span>doca_dev</span></code></p> </td> <td class="confluenceTd" rowspan="1" colspan="1"> <p><code class="InlineCodeBlock"><span>doca_rdma_bridge_open_dev_from_pd</span></code></p> </td> <td class="confluenceTd" rowspan="1" colspan="1"> <p><code class="InlineCodeBlock"><span>doca_rdma_bridge_get_dev_pd</span></code></p> </td> </tr> <tr> <td class="confluenceTd" rowspan="1" colspan="1"> <p><code class="InlineCodeBlock"><span>ibv_mr</span></code></p> </td> <td class="confluenceTd" rowspan="1" colspan="1"> <p><code class="InlineCodeBlock"><span>doca_buf</span></code></p> </td> <td class="confluenceTd" rowspan="1" colspan="1"> <p><code class="InlineCodeBlock"><span>-</span></code></p> </td> <td class="confluenceTd" rowspan="1" colspan="1"> <p><code class="InlineCodeBlock"><span>doca_rdma_bridge_get_buf_mkey</span></code></p> </td> </tr> </tbody> </table> </div> </div> </div> </div> <div class="StepModule" data-module><span class="StepModule-anchor" id="src-3169008654_id-.DOCACorev2.9.0LTS-DOCACoreSamples"></span> <div class="StepModuleHeader"><h2 class="StepModuleHeader-title"><a class="StepModuleHeader-anchorLink" href="#src-3169008654_id-.DOCACorev2.9.0LTS-DOCACoreSamples" data-cms-ai="0">DOCA Core Samples</a></h2> <div class="StepModuleHeader-divider"></div></div> <div class="StepModule-body RichTextBody"> <div class="CallOutBox" data-option-Info> <div class="CallOutBox-icon"><svg><use xlink:href="#calloutbox-icon-info"></use></svg> </div><div class="CallOutBox-title">Info</div> <div class="CallOutBox-body"> <p>All the DOCA samples described in this section are governed under the BSD-3 software license agreement.</p> </div> </div> <p> </p><h2 id="src-3169008654_id-.DOCACorev2.9.0LTS-ProgressEngineSamples"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-ProgressEngineSamples" data-cms-ai="0">Progress Engine Samples</a> </h2> <p>All progress engine (PE) samples use DOCA DMA because of its simplicity. PE samples should be used to understand the PE not DOCA DMA.</p> <h3 id="src-3169008654_id-.DOCACorev2.9.0LTS-pe_common"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-pe_common" data-cms-ai="0">pe_common</a> </h3> <p><code class="InlineCodeBlock"><span>pe_common.c</span></code> and <code class="InlineCodeBlock"><span>pe_common.h</span></code> contain code that is used in most or all PE samples.</p> <p>Users can find core code (e.g., create MMAP) and common code that uses PE (e.g., <code class="InlineCodeBlock"><span>poll_for_completion</span></code>).</p> <p>Struct <code class="InlineCodeBlock"><span>pe_sample_state_base</span></code> (defined in <code class="InlineCodeBlock"><span>pe_common.h</span></code>) is the base state for all PE samples, containing common members that are used by most or all PE samples.</p><p> </p> <h3 id="src-3169008654_id-.DOCACorev2.9.0LTS-pe_polling"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-pe_polling" data-cms-ai="0">pe_polling</a> </h3> <p>The polling sample is the most basic sample for using PE. Start with this sample to learn how to use DOCA PE.</p> <div class="CallOutBox" data-option-Info> <div class="CallOutBox-icon"><svg><use xlink:href="#calloutbox-icon-info"></use></svg> </div><div class="CallOutBox-title">Info</div> <div class="CallOutBox-body"> <p>You can diff between <code class="InlineCodeBlock"><span>pe_polling_sample.c</span></code> and any other <code class="InlineCodeBlock"><span>pe_x_sample.c</span></code> to see the unique features that the other sample demonstrates.</p> </div> </div> <p> </p> <p>The sample demonstrates the following functions:</p> <ul class=" "><li class=" "><p>How to create a PE</p> </li><li class=" "><p>How to connect a context to the PE</p> </li><li class=" "><p>How to allocate tasks</p> </li><li class=" "><p>How to submit tasks</p> </li><li class=" "><p>How to run the PE</p> </li><li class=" "><p class="auto-cursor-target">How to cleanup (e.g., destroy context, destroy PE)</p> <div class="CallOutBox" data-option-Note> <div class="CallOutBox-icon"><svg><use xlink:href="#calloutbox-icon-check"></use></svg> </div><div class="CallOutBox-title">Note</div> <div class="CallOutBox-body"> <p>Pay attention to the order of destruction (e.g., all contexts must be destroyed before the PE).</p> </div> </div> <p> </p> </li></ul><p>The sample performs the following:</p> <ol class=" "><li class=" "><p>Uses one DMA context.</p> </li><li class=" "><p class="auto-cursor-target">Allocates and submits 16 DMA tasks.</p> <div class="CallOutBox" data-option-Info> <div class="CallOutBox-icon"><svg><use xlink:href="#calloutbox-icon-info"></use></svg> </div><div class="CallOutBox-title">Info</div> <div class="CallOutBox-body"> <p>Task completion callback checks that the copied content is valid.</p> </div> </div> <p> </p> </li><li class=" "><p>Polls until all tasks are completed.</p> </li></ol> <h3 id="src-3169008654_id-.DOCACorev2.9.0LTS-pe_async_stop"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-pe_async_stop" data-cms-ai="0">pe_async_stop</a> </h3> <p>A context can be stopped while it still processes tasks. This stop is asynchronous because the context must complete/abort all tasks.</p> <p>The sample demonstrates the following functions:</p> <ul class=" "><li class=" "><p>How to asynchronously stop a context</p> </li><li class=" "><p>How to implement a context state changed callback (with regards to context moving from stopping to idle)</p> </li><li class=" "><p>How to implement task error callback (check if this is a real error or if the task is flushed)</p> </li></ul><p>The sample performs the following:</p> <ol class=" "><li class=" "><p>Submits 16 tasks and stops the context after half of the tasks are completed.</p> </li><li class=" "><p>Polls until all tasks are complete (half are completed successfully, half are flushed).</p> </li></ol><p>The difference between <code class="InlineCodeBlock"><span>pe_polling_sample.c</span></code> and <code class="InlineCodeBlock"><span>pe_async_stop_sample.c</span></code> is to learn how to use PE APIs for event-driven mode.</p><p> </p> <h3 id="src-3169008654_id-.DOCACorev2.9.0LTS-pe_event"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-pe_event" data-cms-ai="0">pe_event</a> </h3> <p>Event-driven mode reduces CPU utilization (wait for event until a task is complete) but may increase latency or reduce performance.</p> <p>The sample demonstrates the following functions:</p> <ul class=" "><li class=" "><p>How to run the PE in event-driven mode</p> </li></ul><p>The sample performs the following:</p> <ol class=" "><li class=" "><p>Runs 16 DMA tasks.</p> </li><li class=" "><p>Waits for event.</p> </li></ol><p>The difference between <code class="InlineCodeBlock"><span>pe_polling_sample.c</span></code> and <code class="InlineCodeBlock"><span>pe_event_sample.c</span></code> is to learn how to use PE APIs for event-driven mode.</p><p> </p> <h3 id="src-3169008654_id-.DOCACorev2.9.0LTS-pe_multi_context"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-pe_multi_context" data-cms-ai="0">pe_multi_context</a> </h3> <p>A PE can host more than one instance of a specific context. This facilitates running a single PE with multiple BlueField devices.</p> <p>The sample demonstrates the following functions:</p> <ul class=" "><li class=" "><p>How to run a single PE with multiple instances of a specific context</p> </li></ul><p>The sample performs the following:</p> <ol class=" "><li class=" "><p>Connects 4 instances of DOCA DMA context to the PE.</p> </li><li class=" "><p>Allocates and submits 4 tasks to every context instance.</p> </li><li class=" "><p>Polls until all tasks are complete.</p> </li></ol><p>The difference between <code class="InlineCodeBlock"><span>pe_polling_sample.c</span></code> and <code class="InlineCodeBlock"><span>pe_multi_context_sample.c</span></code> is to learn how to use PE with multiple instances of a context.</p><p> </p> <h3 id="src-3169008654_id-.DOCACorev2.9.0LTS-pe_reactive"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-pe_reactive" data-cms-ai="0">pe_reactive</a> </h3> <p>PE and contexts can be maintained in callbacks (task completion and state changed).</p> <p>The sample demonstrates the following functions:</p> <ul class=" "><li class=" "><p>How to maintain the context and PE in the callbacks instead of the program's main function</p> </li></ul><p>The user must make sure to:</p> <ul class=" "><li class=" "><p>Review the task completion callback and the state changed callbacks</p> </li><li class=" "><p>Review the difference between <code class="InlineCodeBlock"><span>poll_to_completion</span></code> and the polling loop in main</p> </li></ul><p>The sample performs the following:</p> <ol class=" "><li class=" "><p>Runs 16 DMA tasks.</p> </li><li class=" "><p>Stops the DMA context in the completion callback after all tasks are complete.</p> </li></ol><p>The difference between <code class="InlineCodeBlock"><span>pe_polling_sample.c</span></code> and <code class="InlineCodeBlock"><span>pe_reactive_sample.c</span></code> is to learn how to use PE in reactive model.</p><p> </p> <h3 id="src-3169008654_id-.DOCACorev2.9.0LTS-pe_single_task_cb"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-pe_single_task_cb" data-cms-ai="0">pe_single_task_cb</a> </h3> <p>A DOCA task can invoke a success or error callback. Both callbacks share the same structure (same input parameters).</p> <p>DOCA recommends using 2 callbacks:</p> <ul class=" "><li class=" "><p>Success callback – does not need to check the task status, thereby improving performance</p> </li><li class=" "><p>Error callback – may need to run a different flow than success callback</p> </li></ul><p>The sample demonstrates the following functions:</p> <ul class=" "><li class=" "><p>How to use a single callback instead of two callbacks</p> </li></ul><p>The sample performs the following:</p> <ol class=" "><li class=" "><p>Runs 16 DMA tasks.</p> </li><li class=" "><p>Handles completion with a single callback.</p> </li></ol><p>The difference between <code class="InlineCodeBlock"><span>pe_polling_sample.c</span></code> and <code class="InlineCodeBlock"><span>pe_single_task_comp_cb_sample.c</span></code> is to learn how to use PE with a single completion callback.</p><p> </p> <h3 id="src-3169008654_id-.DOCACorev2.9.0LTS-pe_task_error"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-pe_task_error" data-cms-ai="0">pe_task_error</a> </h3> <p>Task execution may fail causing the associated context (e.g., DMA) to move to stopping state due to this fatal error.</p> <p>The sample demonstrates the following functions:</p> <ul class=" "><li class=" "><p>How to mitigate a task error during runtime</p> </li></ul><p>The user must make sure to:</p> <ul class=" "><li class=" "><p>Review the state changed callback and the error callback to see how the sample mitigates context error</p> </li></ul><p>The sample performs the following:</p> <ol class=" "><li class=" "><p>Submits 255 tasks.</p> </li><li class=" "><p>Allocates the second task with invalid parameters that cause hardware to fail.</p> </li><li class=" "><p>Mitigates the failure and polls until all submitted tasks are flushed.</p> </li></ol><p>The difference between <code class="InlineCodeBlock"><span>pe_polling_sample.c</span></code> and <code class="InlineCodeBlock"><span>pe_task_error_sample.c</span></code> is to learn how to mitigate context error.</p><p> </p> <h3 id="src-3169008654_id-.DOCACorev2.9.0LTS-pe_task_resubmit"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-pe_task_resubmit" data-cms-ai="0">pe_task_resubmit</a> </h3> <p>A task can be freed or reused after it is completed:</p> <ul class=" "><li class=" "><p>Task resubmit can improve performance because the program does not free and allocate the task.</p> </li><li class=" "><p>Task resubmit can reduce memory usage (using a smaller task pool).</p> </li><li class=" "><p>Task members (e.g., source or destination buffer) can be set, so resubmission can be used if the source or destination are changed every iteration.</p> </li></ul><p>The sample demonstrates the following functions:</p> <ul class=" "><li class=" "><p>How to re-submit a task in the completion callback</p> </li><li class=" "><p>How to replace buffers in a DMA task (similar to other task types)</p> </li></ul><p>The sample performs the following:</p> <ol class=" "><li class=" "><p>Allocates a set of 4 tasks and 16 buffer pairs.</p> </li><li class=" "><p>Uses the tasks to copy all sources to destinations by resubmitting the tasks.</p> </li></ol><p>The difference between <code class="InlineCodeBlock"><span>pe_polling_sample.c</span></code> and <code class="InlineCodeBlock"><span>pe_task_resubmit_sample.c</span></code> is to learn how to use task resubmission.</p><p> </p> <h3 id="src-3169008654_id-.DOCACorev2.9.0LTS-pe_task_try_submit"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-pe_task_try_submit" data-cms-ai="0">pe_task_try_submit</a> </h3> <p><code class="InlineCodeBlock"><span>doca_task_submit</span></code> does not validate task inputs (to increase performance). Developers can use <code class="InlineCodeBlock"><span>doca_task_try_submit</span></code> to validate the tasks during development.</p> <div class="CallOutBox" data-option-Note> <div class="CallOutBox-icon"><svg><use xlink:href="#calloutbox-icon-check"></use></svg> </div><div class="CallOutBox-title">Note</div> <div class="CallOutBox-body"> <p>Task validation impacts performance and should not be used in production.</p> </div> </div> <p> </p> <p>The sample demonstrates the following functions:</p> <ul class=" "><li class=" "><p>How to use <code class="InlineCodeBlock"><span>doca_task_try_submit</span></code> instead of <code class="InlineCodeBlock"><span>doca_task_submit</span></code></p> </li></ul><p>The sample performs the following:</p> <ol class=" "><li class=" "><p>Allocates and tries to submit tasks using <code class="InlineCodeBlock"><span>doca_task_try_submit</span></code>.</p> </li></ol><p>The difference between <code class="InlineCodeBlock"><span>pe_polling_sample.c</span></code> and <code class="InlineCodeBlock"><span>pe_task_try_submit_sample.c</span></code> is to learn how to use <code class="InlineCodeBlock"><span>doca_task_try_submit</span></code>.</p> <p> </p> <h2 id="src-3169008654_id-.DOCACorev2.9.0LTS-GraphSample"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-GraphSample" data-cms-ai="0">Graph Sample</a> </h2> <p>The graph sample demonstrates how to use DOCA graph with PE. The sample can be used to learn how to build and use DOCA graph.</p> <p>The sample uses two nodes of DOCA DMA and one user node.</p> <p>The graph runs both DMA nodes (copying a source buffer to two destinations). Once both nodes are complete, the graph runs the user node that compares the buffers.</p> <p>The sample runs 10 instances of the graph in parallel.</p><p> </p> </div> </div> <div class="StepModule" data-module><span class="StepModule-anchor" id="src-3169008654_id-.DOCACorev2.9.0LTS-BackwardCompatibilityofDOCACoredoca_buf"></span> <div class="StepModuleHeader"><h2 class="StepModuleHeader-title"><a class="StepModuleHeader-anchorLink" href="#src-3169008654_id-.DOCACorev2.9.0LTS-BackwardCompatibilityofDOCACoredoca_buf" data-cms-ai="0">Backward Compatibility of DOCA Core doca_buf</a></h2> <div class="StepModuleHeader-divider"></div></div> <div class="StepModule-body RichTextBody"> <p>This section lists changes to the DOCA SDK which impacts backward compatibility.</p> <h2 id="src-3169008654_id-.DOCACorev2.9.0LTS-DOCACoredoca_buf"> <a href="#src-3169008654_id-.DOCACorev2.9.0LTS-DOCACoredoca_buf" data-cms-ai="0">DOCA Core doca_buf</a> </h2> <p>Up to DOCA 2.0.2, the data length of the buffer is ignored when using the buffer as an output parameter, and the new data was written over the data that was there beforehand. From now on, new data is appended after existing data (if any) while<b> </b>updating the data length accordingly.</p> <p>Because of this change, it is recommended that a destination buffer is allocated without a data section (data length 0), for ease of use.</p> <p>In cases where the data length is 0 in a destination buffer, this change would go unnoticed (as appending the data and writing to the data section has the same result).</p> <p>Reusing buffers requires resetting the data length when wishing to write to the same data address (instead of appending the data), overwriting the existing data. A new function, <code class="InlineCodeBlock"><span>doca_buf_reset_data_len()</span></code>, has been added specifically for this need.</p> <p></p> <p></p><p></p><p></p><p> </p> </div> </div> </main> </bsp-book-content> </div> <bsp-copyright class='Page-copyright'> <span class="Page-copyright-text">© Copyright 2024, NVIDIA.</span> <span class="Page-copyright-update">Last updated on Nov 19, 2024.</span> </bsp-copyright> </main> <aside class="Page-aside"> <bsp-book class="Book"> <div class="Book-container"> <div class="Book-header"> <div class="Book-title">Topics</div> <div class="Book-toggle"> <div class="Book-toggle-icon"> <div></div> <div></div> <div></div> </div> </div> </div> <ul class="Book-items"> <li class="Book-items-item"><bsp-chapter class="Chapter" > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/index.html" data-cms-ai="0">DOCA Documentation v2.9.0</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li class="Book-items-item"><bsp-chapter class="Chapter" data-has-chapters > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/DOCA+SDK+v2-9-0/index.html" data-cms-ai="0">DOCA SDK v2.9.0</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> <ul class="Chapter-chapters"> <li><bsp-chapter class="Chapter" data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+Overview/index.html" data-cms-ai="0">NVIDIA DOCA Overview</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-has-chapters data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+Release+Notes/index.html" data-cms-ai="0">NVIDIA DOCA Release Notes</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> <ul class="Chapter-chapters"> <li><bsp-chapter class="Chapter" data-level=2 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/General+Support/index.html" data-cms-ai="0">General Support</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=2 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/Changes+and+New+Features/index.html" data-cms-ai="0">Changes and New Features</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=2 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/Bug+Fixes+in+This+Version/index.html" data-cms-ai="0">Bug Fixes in This Version</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=2 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/Known+Issues/index.html" data-cms-ai="0">Known Issues</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> </ul> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/BlueField+and+DOCA+User+Types/index.html" data-cms-ai="0">BlueField and DOCA User Types</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+EULA/index.html" data-cms-ai="0">NVIDIA DOCA EULA</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> </ul> </bsp-chapter> </li> <li class="Book-items-item"><bsp-chapter class="Chapter" data-has-chapters > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/Quick+Start+for+BlueField+Developers/index.html" data-cms-ai="0">Quick Start for BlueField Developers</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> <ul class="Chapter-chapters"> <li><bsp-chapter class="Chapter" data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+Developer+Quick+Start+Guide/index.html" data-cms-ai="0">NVIDIA DOCA Developer Quick Start Guide</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> </ul> </bsp-chapter> </li> <li class="Book-items-item"><bsp-chapter class="Chapter" data-has-chapters > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/Installation+and+Setup/index.html" data-cms-ai="0">Installation and Setup</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> <ul class="Chapter-chapters"> <li><bsp-chapter class="Chapter" data-has-chapters data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+Profiles/index.html" data-cms-ai="0">NVIDIA DOCA Profiles</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> <ul class="Chapter-chapters"> <li><bsp-chapter class="Chapter" data-level=2 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+MLNX_OFED+to+DOCA-OFED+Transition+Guide/index.html" data-cms-ai="0">NVIDIA MLNX_OFED to DOCA-OFED Transition Guide</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> </ul> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+Installation+Guide+for+Linux/index.html" data-cms-ai="0">NVIDIA DOCA Installation Guide for Linux</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+Developer+Guide/index.html" data-cms-ai="0">NVIDIA DOCA Developer Guide</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> </ul> </bsp-chapter> </li> <li class="Book-items-item"><bsp-chapter class="Chapter" data-has-chapters > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/DOCA+Programming+Guide/index.html" data-cms-ai="0">DOCA Programming Guide</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> <ul class="Chapter-chapters"> <li><bsp-chapter class="Chapter" data-has-chapters data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/DOCA+Programming+Overview/index.html" data-cms-ai="0">DOCA Programming Overview</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> <ul class="Chapter-chapters"> <li><bsp-chapter class="Chapter" data-level=2 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/Hardware+Overview/index.html" data-cms-ai="0">Hardware Overview</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=2 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/DOCA+SDK+Architecture/index.html" data-cms-ai="0">DOCA SDK Architecture</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> </ul> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/DOCA+Backward+Compatibility+Policy/index.html" data-cms-ai="0">DOCA Backward Compatibility Policy</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-has-chapters data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/DOCA+Development+Best+Practices/index.html" data-cms-ai="0">DOCA Development Best Practices</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> <ul class="Chapter-chapters"> <li><bsp-chapter class="Chapter" data-level=2 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/Capability+Checking/index.html" data-cms-ai="0">Capability Checking</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=2 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/Debuggability/index.html" data-cms-ai="0">Debuggability</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> </ul> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-has-chapters data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/DOCA+Libraries/index.html" data-cms-ai="0">DOCA Libraries</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> <ul class="Chapter-chapters"> <li><bsp-chapter class="Chapter" data-has-chapters data-level=2 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/DOCA+Common/index.html" data-cms-ai="0">DOCA Common</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> <ul class="Chapter-chapters"> <li><bsp-chapter class="Chapter" data-has-chapters data-level=3 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/DOCA+Core/index.html" data-cms-ai="0">DOCA Core</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> <ul class="Chapter-chapters"> <li><bsp-chapter class="Chapter" data-level=4 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/Sync+Event/index.html" data-cms-ai="0">Sync Event</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=4 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/Mmap+Advise/index.html" data-cms-ai="0">Mmap Advise</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> </ul> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=3 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/DOCA+Log/index.html" data-cms-ai="0">DOCA Log</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> </ul> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-has-chapters data-level=2 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/DOCA+Flow/index.html" data-cms-ai="0">DOCA Flow</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> <ul class="Chapter-chapters"> <li><bsp-chapter class="Chapter" data-level=3 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/DOCA+Flow+Connection+Tracking/index.html" data-cms-ai="0">DOCA Flow Connection Tracking</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=3 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/DOCA+Flow+Tune+Server/index.html" data-cms-ai="0">DOCA Flow Tune Server</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> </ul> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-has-chapters data-level=2 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/DPA+Subsystem/index.html" data-cms-ai="0">DPA Subsystem</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> <ul class="Chapter-chapters"> <li><bsp-chapter class="Chapter" data-level=3 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/DPA+Development/index.html" data-cms-ai="0">DPA Development</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=3 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/DOCA+DPA/index.html" data-cms-ai="0">DOCA DPA</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=3 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/DOCA+PCC/index.html" data-cms-ai="0">DOCA PCC</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> </ul> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=2 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/DOCA+DMA/index.html" data-cms-ai="0">DOCA DMA</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=2 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/DOCA+Comch/index.html" data-cms-ai="0">DOCA Comch</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=2 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/DOCA+UROM/index.html" data-cms-ai="0">DOCA UROM</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=2 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/DOCA+RDMA/index.html" data-cms-ai="0">DOCA RDMA</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=2 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/DOCA+Ethernet/index.html" data-cms-ai="0">DOCA Ethernet</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=2 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/DOCA+GPUNetIO/index.html" data-cms-ai="0">DOCA GPUNetIO</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=2 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/DOCA+App+Shield/index.html" data-cms-ai="0">DOCA App Shield</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=2 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/DOCA+Compress/index.html" data-cms-ai="0">DOCA Compress</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=2 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/DOCA+SHA/index.html" data-cms-ai="0">DOCA SHA</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=2 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/DOCA+Erasure+Coding/index.html" data-cms-ai="0">DOCA Erasure Coding</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=2 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/DOCA+AES-GCM/index.html" data-cms-ai="0">DOCA AES-GCM</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=2 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/DOCA+Rivermax/index.html" data-cms-ai="0">DOCA Rivermax</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=2 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/DOCA+Telemetry+Exporter/index.html" data-cms-ai="0">DOCA Telemetry Exporter</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=2 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/DOCA+Telemetry/index.html" data-cms-ai="0">DOCA Telemetry</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-has-chapters data-level=2 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/DOCA+Device+Emulation/index.html" data-cms-ai="0">DOCA Device Emulation</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> <ul class="Chapter-chapters"> <li><bsp-chapter class="Chapter" data-has-chapters data-level=3 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/DOCA+DevEmu+PCI/index.html" data-cms-ai="0">DOCA DevEmu PCI</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> <ul class="Chapter-chapters"> <li><bsp-chapter class="Chapter" data-level=4 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/DOCA+DevEmu+PCI+Generic/index.html" data-cms-ai="0">DOCA DevEmu PCI Generic</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> </ul> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-has-chapters data-level=3 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/DOCA+DevEmu+Virtio/index.html" data-cms-ai="0">DOCA DevEmu Virtio</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> <ul class="Chapter-chapters"> <li><bsp-chapter class="Chapter" data-level=4 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/DOCA+DevEmu+Virtio-FS/index.html" data-cms-ai="0">DOCA DevEmu Virtio-FS</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> </ul> </bsp-chapter> </li> </ul> </bsp-chapter> </li> </ul> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-has-chapters data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/DOCA+Utils/index.html" data-cms-ai="0">DOCA Utils</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> <ul class="Chapter-chapters"> <li><bsp-chapter class="Chapter" data-level=2 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/DOCA+Arg+Parser/index.html" data-cms-ai="0">DOCA Arg Parser</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> </ul> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-has-chapters data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/DOCA+Drivers/index.html" data-cms-ai="0">DOCA Drivers</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> <ul class="Chapter-chapters"> <li><bsp-chapter class="Chapter" data-level=2 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/DOCA+UCX/index.html" data-cms-ai="0">DOCA UCX</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-has-chapters data-level=2 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/MLX+Drivers+(MLNX_OFED)/index.html" data-cms-ai="0">MLX Drivers (MLNX_OFED)</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> <ul class="Chapter-chapters"> <li><bsp-chapter class="Chapter" data-has-chapters data-level=3 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/InfiniBand+Network/index.html" data-cms-ai="0">InfiniBand Network</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> <ul class="Chapter-chapters"> <li><bsp-chapter class="Chapter" data-level=4 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/InfiniBand+Interface/index.html" data-cms-ai="0">InfiniBand Interface</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=4 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+SM/index.html" data-cms-ai="0">NVIDIA SM</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=4 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/QoS+-+Quality+of+Service/index.html" data-cms-ai="0">QoS - Quality of Service</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=4 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/IP+over+InfiniBand+(IPoIB)/index.html" data-cms-ai="0">IP over InfiniBand (IPoIB)</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=4 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/Advanced+Transport/index.html" data-cms-ai="0">Advanced Transport</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=4 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/Optimized+Memory+Access/index.html" data-cms-ai="0">Optimized Memory Access</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=4 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+PeerDirect/index.html" data-cms-ai="0">NVIDIA PeerDirect</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=4 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/CPU+Overhead+Distribution/index.html" data-cms-ai="0">CPU Overhead Distribution</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=4 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/Out-of-Order+(OOO)+Data+Placement/index.html" data-cms-ai="0">Out-of-Order (OOO) Data Placement</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=4 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/IB+Router/index.html" data-cms-ai="0">IB Router</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=4 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/MAD+Congestion+Control/index.html" data-cms-ai="0">MAD Congestion Control</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> </ul> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-has-chapters data-level=3 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/DPU/index.html" data-cms-ai="0">DPU</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> <ul class="Chapter-chapters"> <li><bsp-chapter class="Chapter" data-level=4 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/QoS+Configuration/index.html" data-cms-ai="0">QoS Configuration</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=4 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/Shared+RQ+Mode/index.html" data-cms-ai="0">Shared RQ Mode</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> </ul> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-has-chapters data-level=3 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/Storage+Protocols/index.html" data-cms-ai="0">Storage Protocols</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> <ul class="Chapter-chapters"> <li><bsp-chapter class="Chapter" data-level=4 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/SRP+-+SCSI+RDMA+Protocol/index.html" data-cms-ai="0">SRP - SCSI RDMA Protocol</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=4 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/iSCSI+Extensions+for+RDMA+(iSER)/index.html" data-cms-ai="0">iSCSI Extensions for RDMA (iSER)</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=4 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/Lustre/index.html" data-cms-ai="0">Lustre</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=4 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVME-oF+-+NVM+Express+over+Fabrics/index.html" data-cms-ai="0">NVME-oF - NVM Express over Fabrics</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> </ul> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-has-chapters data-level=3 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/Virtualization/index.html" data-cms-ai="0">Virtualization</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> <ul class="Chapter-chapters"> <li><bsp-chapter class="Chapter" data-has-chapters data-level=4 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/Single+Root+IO+Virtualization+(SR-IOV)/index.html" data-cms-ai="0">Single Root IO Virtualization (SR-IOV)</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> <ul class="Chapter-chapters"> <li><bsp-chapter class="Chapter" data-level=5 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/SR-IOV+Live+Migration/index.html" data-cms-ai="0">SR-IOV Live Migration</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> </ul> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=4 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/Enabling+Paravirtualization/index.html" data-cms-ai="0">Enabling Paravirtualization</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=4 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/VXLAN+Hardware+Stateless+Offloads/index.html" data-cms-ai="0">VXLAN Hardware Stateless Offloads</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=4 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/Q-in-Q+Encapsulation+per+VF+in+Linux+(VST)/index.html" data-cms-ai="0">Q-in-Q Encapsulation per VF in Linux (VST)</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=4 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/802-1Q+Double-Tagging/index.html" data-cms-ai="0">802.1Q Double-Tagging</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=4 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/Scalable+Functions/index.html" data-cms-ai="0">Scalable Functions</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> </ul> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-has-chapters data-level=3 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/Resiliency/index.html" data-cms-ai="0">Resiliency</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> <ul class="Chapter-chapters"> <li><bsp-chapter class="Chapter" data-level=4 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/Reset+Flow/index.html" data-cms-ai="0">Reset Flow</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> </ul> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-has-chapters data-level=3 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/Docker+Containers/index.html" data-cms-ai="0">Docker Containers</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> <ul class="Chapter-chapters"> <li><bsp-chapter class="Chapter" data-level=4 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/Docker+Using+SR-IOV/index.html" data-cms-ai="0">Docker Using SR-IOV</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=4 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/Kubernetes+Using+SR-IOV/index.html" data-cms-ai="0">Kubernetes Using SR-IOV</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=4 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/Kubernetes+with+Shared+HCA/index.html" data-cms-ai="0">Kubernetes with Shared HCA</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> </ul> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=3 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/HPC-X/index.html" data-cms-ai="0">HPC-X</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=3 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/Fast+Driver+Unload/index.html" data-cms-ai="0">Fast Driver Unload</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> </ul> </bsp-chapter> </li> </ul> </bsp-chapter> </li> </ul> </bsp-chapter> </li> <li class="Book-items-item"><bsp-chapter class="Chapter" data-has-chapters > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/DOCA+Reference+Applications/index.html" data-cms-ai="0">DOCA Reference Applications</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> <ul class="Chapter-chapters"> <li><bsp-chapter class="Chapter" data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+App+Shield+Agent+Application+Guide/index.html" data-cms-ai="0">NVIDIA DOCA App Shield Agent Application Guide</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+DMA+Copy+Application+Guide/index.html" data-cms-ai="0">NVIDIA DOCA DMA Copy Application Guide</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+DPA+All-to-all+Application+Guide/index.html" data-cms-ai="0">NVIDIA DOCA DPA All-to-all Application Guide</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+East-West+Overlay+Encryption+Application/index.html" data-cms-ai="0">NVIDIA DOCA East-West Overlay Encryption Application</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+Eth+L2+Forwarding+Application+Guide/index.html" data-cms-ai="0">NVIDIA DOCA Eth L2 Forwarding Application Guide</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+File+Compression+Application+Guide/index.html" data-cms-ai="0">NVIDIA DOCA File Compression Application Guide</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+File+Integrity+Application+Guide/index.html" data-cms-ai="0">NVIDIA DOCA File Integrity Application Guide</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+GPU+Packet+Processing+Application+Guide/index.html" data-cms-ai="0">NVIDIA DOCA GPU Packet Processing Application Guide</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+IPsec+Security+Gateway+Application+Guide/index.html" data-cms-ai="0">NVIDIA DOCA IPsec Security Gateway Application Guide</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+NVMe+Emulation+App+Guide/index.html" data-cms-ai="0">NVIDIA DOCA NVMe Emulation App Guide</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+PCC+Application+Guide/index.html" data-cms-ai="0">NVIDIA DOCA PCC Application Guide</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+PSP+Gateway+Application+Guide/index.html" data-cms-ai="0">NVIDIA DOCA PSP Gateway Application Guide</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+Secure+Channel+Application+Guide/index.html" data-cms-ai="0">NVIDIA DOCA Secure Channel Application Guide</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+Simple+Forward+VNF+Application+Guide/index.html" data-cms-ai="0">NVIDIA DOCA Simple Forward VNF Application Guide</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-has-chapters data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+Storage+Zero+Copy/index.html" data-cms-ai="0">NVIDIA DOCA Storage Zero Copy</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> <ul class="Chapter-chapters"> <li><bsp-chapter class="Chapter" data-level=2 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+Storage+Zero+Copy+Comch+to+RDMA+Application+Guide/index.html" data-cms-ai="0">NVIDIA DOCA Storage Zero Copy Comch to RDMA Application Guide</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=2 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+Storage+Zero+Copy+Initiator+Comch+Application+Guide/index.html" data-cms-ai="0">NVIDIA DOCA Storage Zero Copy Initiator Comch Application Guide</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=2 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+Storage+Zero+Copy+Target+RDMA+Application+Guide/index.html" data-cms-ai="0">NVIDIA DOCA Storage Zero Copy Target RDMA Application Guide</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> </ul> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+Switch+Application+Guide/index.html" data-cms-ai="0">NVIDIA DOCA Switch Application Guide</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+UPF+Application+Guide/index.html" data-cms-ai="0">NVIDIA DOCA UPF Application Guide</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+UROM+RDMO+Application+Guide/index.html" data-cms-ai="0">NVIDIA DOCA UROM RDMO Application Guide</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+YARA+Inspection+Application+Guide/index.html" data-cms-ai="0">NVIDIA DOCA YARA Inspection Application Guide</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> </ul> </bsp-chapter> </li> <li class="Book-items-item"><bsp-chapter class="Chapter" data-has-chapters > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/DOCA+Tools/index.html" data-cms-ai="0">DOCA Tools</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> <ul class="Chapter-chapters"> <li><bsp-chapter class="Chapter" data-has-chapters data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+Bench/index.html" data-cms-ai="0">NVIDIA DOCA Bench</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> <ul class="Chapter-chapters"> <li><bsp-chapter class="Chapter" data-level=2 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/DOCA+Bench+Sample+Invocations/index.html" data-cms-ai="0">DOCA Bench Sample Invocations</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> </ul> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+Capabilities+Print+Tool/index.html" data-cms-ai="0">NVIDIA DOCA Capabilities Print Tool</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+Comm+Channel+Admin+Tool/index.html" data-cms-ai="0">NVIDIA DOCA Comm Channel Admin Tool</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-has-chapters data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DPA+Tools/index.html" data-cms-ai="0">NVIDIA DPA Tools</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> <ul class="Chapter-chapters"> <li><bsp-chapter class="Chapter" data-level=2 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+DPACC+Compiler/index.html" data-cms-ai="0">NVIDIA DOCA DPACC Compiler</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=2 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+DPA+Execution+Unit+Management+Tool/index.html" data-cms-ai="0">NVIDIA DOCA DPA Execution Unit Management Tool</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=2 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+DPA+GDB+Server+Tool/index.html" data-cms-ai="0">NVIDIA DOCA DPA GDB Server Tool</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=2 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+DPA+PS+Tool/index.html" data-cms-ai="0">NVIDIA DOCA DPA PS Tool</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=2 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+DPA+Statistics+Tool/index.html" data-cms-ai="0">NVIDIA DOCA DPA Statistics Tool</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> </ul> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+Flow+Tune+Tool/index.html" data-cms-ai="0">NVIDIA DOCA Flow Tune Tool</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+PCC+Counter+Tool/index.html" data-cms-ai="0">NVIDIA DOCA PCC Counter Tool</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+Socket+Relay/index.html" data-cms-ai="0">NVIDIA DOCA Socket Relay</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> </ul> </bsp-chapter> </li> <li class="Book-items-item"><bsp-chapter class="Chapter" data-has-chapters > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/DOCA+Services/index.html" data-cms-ai="0">DOCA Services</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> <ul class="Chapter-chapters"> <li><bsp-chapter class="Chapter" data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+BlueField+Container+Deployment+Guide/index.html" data-cms-ai="0">NVIDIA BlueField Container Deployment Guide</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+BlueMan+Service+Guide/index.html" data-cms-ai="0">NVIDIA DOCA BlueMan Service Guide</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+Firefly+Service+Guide/index.html" data-cms-ai="0">NVIDIA DOCA Firefly Service Guide</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+Flow+Inspector+Service+Guide/index.html" data-cms-ai="0">NVIDIA DOCA Flow Inspector Service Guide</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-has-chapters data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+HBN+Service+Guide/index.html" data-cms-ai="0">NVIDIA DOCA HBN Service Guide</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> <ul class="Chapter-chapters"> <li><bsp-chapter class="Chapter" data-level=2 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/HBN+Service+Release+Notes/index.html" data-cms-ai="0">HBN Service Release Notes</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=2 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/HBN+Service+Deployment/index.html" data-cms-ai="0">HBN Service Deployment</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=2 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/HBN+Service+Configuration/index.html" data-cms-ai="0">HBN Service Configuration</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=2 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/HBN+Service+Troubleshooting/index.html" data-cms-ai="0">HBN Service Troubleshooting</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> </ul> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+Management+Service+Guide/index.html" data-cms-ai="0">NVIDIA DOCA Management Service Guide</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-has-chapters data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+SNAP+Services/index.html" data-cms-ai="0">NVIDIA DOCA SNAP Services</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> <ul class="Chapter-chapters"> <li><bsp-chapter class="Chapter" data-has-chapters data-level=2 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+SNAP+Virtio-fs+Service+Guide/index.html" data-cms-ai="0">NVIDIA DOCA SNAP Virtio-fs Service Guide</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> <ul class="Chapter-chapters"> <li><bsp-chapter class="Chapter" data-level=3 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/SNAP+Virtio-fs+Release+Notes/index.html" data-cms-ai="0">SNAP Virtio-fs Release Notes</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> </ul> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-has-chapters data-level=2 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+SNAP-4+Service+Guide/index.html" data-cms-ai="0">NVIDIA DOCA SNAP-4 Service Guide</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> <ul class="Chapter-chapters"> <li><bsp-chapter class="Chapter" data-level=3 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/SNAP-4+Service+Release+Notes/index.html" data-cms-ai="0">SNAP-4 Service Release Notes</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> </ul> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-has-chapters data-level=2 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+SNAP-3+User+Guide/index.html" data-cms-ai="0">NVIDIA DOCA SNAP-3 User Guide</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> <ul class="Chapter-chapters"> <li><bsp-chapter class="Chapter" data-level=3 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/SNAP-3+Release+Notes/index.html" data-cms-ai="0">SNAP-3 Release Notes</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> </ul> </bsp-chapter> </li> </ul> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+Telemetry+Service+Guide/index.html" data-cms-ai="0">NVIDIA DOCA Telemetry Service Guide</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+UROM+Service+Guide/index.html" data-cms-ai="0">NVIDIA DOCA UROM Service Guide</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-has-chapters data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+Virtio-net+Service+Guide/index.html" data-cms-ai="0">NVIDIA DOCA Virtio-net Service Guide</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> <ul class="Chapter-chapters"> <li><bsp-chapter class="Chapter" data-level=2 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/Virtio-net+Service+Guide+Release+Notes/index.html" data-cms-ai="0">Virtio-net Service Guide Release Notes</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> </ul> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-has-chapters data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+OpenvSwitch+Acceleration+-+OVS+in+DOCA/index.html" data-cms-ai="0">NVIDIA OpenvSwitch Acceleration - OVS in DOCA</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> <ul class="Chapter-chapters"> <li><bsp-chapter class="Chapter" data-level=2 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/OVS-Kernel+Hardware+Acceleration/index.html" data-cms-ai="0">OVS-Kernel Hardware Acceleration</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=2 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/OVS-DPDK+Hardware+Acceleration/index.html" data-cms-ai="0">OVS-DPDK Hardware Acceleration</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=2 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/OVS-DOCA+Hardware+Acceleration/index.html" data-cms-ai="0">OVS-DOCA Hardware Acceleration</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=2 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/OVS+Metrics/index.html" data-cms-ai="0">OVS Metrics</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=2 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/OVS+Inside+BlueField/index.html" data-cms-ai="0">OVS Inside BlueField</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=2 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/Virtual+Switch+on+BlueField/index.html" data-cms-ai="0">Virtual Switch on BlueField</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> </ul> </bsp-chapter> </li> </ul> </bsp-chapter> </li> <li class="Book-items-item"><bsp-chapter class="Chapter" data-has-chapters > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/API+References/index.html" data-cms-ai="0">API References</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> <ul class="Chapter-chapters"> <li><bsp-chapter class="Chapter" data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+Driver+APIs/index.html" data-cms-ai="0">NVIDIA DOCA Driver APIs</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+Library+APIs/index.html" data-cms-ai="0">NVIDIA DOCA Library APIs</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> </ul> </bsp-chapter> </li> <li class="Book-items-item"><bsp-chapter class="Chapter" data-has-chapters > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/Miscellaneous+(Runtime)/index.html" data-cms-ai="0">Miscellaneous (Runtime)</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> <ul class="Chapter-chapters"> <li><bsp-chapter class="Chapter" data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+Glossary/index.html" data-cms-ai="0">NVIDIA DOCA Glossary</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+Crypto+Acceleration/index.html" data-cms-ai="0">NVIDIA DOCA Crypto Acceleration</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+Services+Fluent+Logger/index.html" data-cms-ai="0">NVIDIA DOCA Services Fluent Logger</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+DPU+CLI/index.html" data-cms-ai="0">NVIDIA DOCA DPU CLI</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/fTPM+over+OP-TEE/index.html" data-cms-ai="0">fTPM over OP-TEE</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+Emulated+Devices/index.html" data-cms-ai="0">NVIDIA DOCA Emulated Devices</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+BlueField+Modes+of+Operation/index.html" data-cms-ai="0">NVIDIA BlueField Modes of Operation</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-has-chapters data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/DOCA+Switching/index.html" data-cms-ai="0">DOCA Switching</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> <ul class="Chapter-chapters"> <li><bsp-chapter class="Chapter" data-level=2 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/DPU+Kernel+Representors+Model/index.html" data-cms-ai="0">DPU Kernel Representors Model</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=2 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/VirtIO+Acceleration+through+Hardware+vDPA/index.html" data-cms-ai="0">Virtio Acceleration through Hardware vDPA</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=2 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/Bridge+Offload/index.html" data-cms-ai="0">Bridge Offload</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=2 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/Link+Aggregation/index.html" data-cms-ai="0">Link Aggregation</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-has-chapters data-level=2 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/Controlling+Host+PF+and+VF+Parameters/index.html" data-cms-ai="0">Controlling Host PF and VF Parameters</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> <ul class="Chapter-chapters"> <li><bsp-chapter class="Chapter" data-level=3 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/Configuring+Uplink+MTU/index.html" data-cms-ai="0">Configuring Uplink MTU</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> </ul> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=2 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/DPDK+on+BlueField/index.html" data-cms-ai="0">DPDK on BlueField</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> </ul> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+with+OpenSSL/index.html" data-cms-ai="0">NVIDIA DOCA with OpenSSL</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+BlueField+DPU+Scalable+Function+User+Guide/index.html" data-cms-ai="0">NVIDIA BlueField DPU Scalable Function User Guide</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+TLS+Offload+Guide/index.html" data-cms-ai="0">NVIDIA TLS Offload Guide</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-has-chapters data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+Troubleshooting+Guide/index.html" data-cms-ai="0">NVIDIA DOCA Troubleshooting Guide</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> <ul class="Chapter-chapters"> <li><bsp-chapter class="Chapter" data-level=2 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+BlueField+Reset+and+Reboot+Procedures/index.html" data-cms-ai="0">NVIDIA BlueField Reset and Reboot Procedures</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> </ul> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/BlueField+SR-IOV/index.html" data-cms-ai="0">BlueField SR-IOV</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+Virtual+Functions+User+Guide/index.html" data-cms-ai="0">NVIDIA DOCA Virtual Functions User Guide</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> </ul> </bsp-chapter> </li> <li class="Book-items-item"><bsp-chapter class="Chapter" data-has-chapters > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/Archives/index.html" data-cms-ai="0">Archives</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> <ul class="Chapter-chapters"> <li><bsp-chapter class="Chapter" data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+LTS+Versions/index.html" data-cms-ai="0">NVIDIA DOCA LTS Versions</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> <li><bsp-chapter class="Chapter" data-level=1 > <div class="Chapter-header"> <div class="Chapter-title"> <a class="Link" href="https://docs.nvidia.com/doca/sdk/NVIDIA+DOCA+Documentation+Archives/index.html" data-cms-ai="0">NVIDIA DOCA Documentation Archives</a> </div> <div class="Chapter-icon"> <svg class="Chapter-iconCollapsed"> <use xlink:href="#icon-plus"></use> </svg> <svg class="Chapter-iconExpanded"> <use xlink:href="#icon-minus"></use> </svg> </div> <div class="Chapter-icon-sub"> <svg class="Chapter-iconExpanded sub"> <use xlink:href="#chevron-up"></use> </svg> <svg class="Chapter-iconCollapsed sub"> <use xlink:href="#chevron-down"></use> </svg> </div> </div> </bsp-chapter> </li> </ul> </bsp-chapter> </li> </ul> <span class="Book-resizer"></span> </div> </bsp-book> </aside> </div> </div> <footer class="Page-footer-wrapper"> <div class="Page-footer"> <div class="Page-footer-container"> <div class="Page-footer-columns"> <div class="Page-footer-column"></div> <div class="Page-footer-column"> <div class="Page-footer-navigation" data-no-content> <nav class="FooterNavigation"> <ul class="FooterNavigation-items" data-column-count="3"> <li class="FooterNavigation-items-item"> <div class="FooterNavigationItem"> <div class="FooterNavigationItem-text"> <span>Corporate Info</span> </div> <ul class="FooterNavigationItem-items"> <li class="FooterNavigationItem-items-item"><a class="NavigationLink" href="https://www.nvidia.com/en-us/" target="_blank" data-cms-ai="0"><span class="NavigationLink-text">NVIDIA.com Home</span></a> </li> <li class="FooterNavigationItem-items-item"><a class="NavigationLink" href="https://www.nvidia.com/en-us/about-nvidia/" target="_blank" data-cms-ai="0"><span class="NavigationLink-text">About NVIDIA</span></a> </li> </ul> </div> </li> <li class="FooterNavigation-items-item"> <div class="FooterNavigationItem"> <div class="FooterNavigationItem-text"> <span>NVIDIA Developer</span> </div> <ul class="FooterNavigationItem-items"> <li class="FooterNavigationItem-items-item"><a class="NavigationLink" href="https://developer.nvidia.com/" target="_blank" data-cms-ai="0"><span class="NavigationLink-text">Developer Home</span></a> </li> <li class="FooterNavigationItem-items-item"><a class="NavigationLink" href="https://blogs.nvidia.com/" target="_blank" data-cms-ai="0"><span class="NavigationLink-text">Blog</span></a> </li> </ul> </div> </li> <li class="FooterNavigation-items-item"> <div class="FooterNavigationItem"> <div class="FooterNavigationItem-text"> <span>Resources</span> </div> <ul class="FooterNavigationItem-items"> <li class="FooterNavigationItem-items-item"><a class="NavigationLink" href="https://www.nvidia.com/en-us/contact/" target="_blank" data-cms-ai="0"><span class="NavigationLink-text">Contact Us</span></a> </li> <li class="FooterNavigationItem-items-item"><a class="NavigationLink" href="https://developer.nvidia.com/developer-program" target="_blank" data-cms-ai="0"><span class="NavigationLink-text">Developer Program</span></a> </li> </ul> </div> </li> </ul> </nav> </div> </div> </div> </div> </div> <div class="Page-footer-bottom"> <div class="Page-footer-disclaimer"><p><a class="Link" href="https://www.nvidia.com/en-us/about-nvidia/privacy-policy/" target="_blank" rel="noopener" data-cms-ai="0" >Privacy Policy </a>| <a class="Link" href="https://www.nvidia.com/en-us/about-nvidia/privacy-center/" target="_blank" rel="noopener" data-cms-ai="0" >Manage My Privacy</a> | <a class="Link" href="https://www.nvidia.com/en-us/preferences/start/" target="_blank" rel="noopener" data-cms-ai="0" >Do Not Sell or Share My Data</a> | <a class="Link" href="https://www.nvidia.com/en-us/about-nvidia/terms-of-service/" target="_blank" rel="noopener" data-cms-ai="0" >Terms of Service</a> | <a class="Link" href="https://www.nvidia.com/en-us/about-nvidia/accessibility/" target="_blank" rel="noopener" data-cms-ai="0" >Accessibility</a> | <a class="Link" href="https://www.nvidia.com/en-us/about-nvidia/company-policies/" target="_blank" rel="noopener" data-cms-ai="0" >Corporate Policies</a> | <a class="Link" href="https://www.nvidia.com/en-us/product-security/" target="_blank" rel="noopener" data-cms-ai="0" >Product Security</a> | <a class="Link" href="https://www.nvidia.com/en-us/contact/" target="_blank" rel="noopener" data-cms-ai="0" >Contact</a></p><p>Copyright © 2024 NVIDIA Corporation</p></div> </div> </footer> <script>_satellite.pageBottom();</script> <script></script><div id="chatbot"></div></script> <script src="https://d4j85rjepgcta.cloudfront.net/nvidiadocs/chatbot.js"></script> <script> const tables = document.querySelectorAll('.Page-twoColumn table'); const className = 'table-wrapper' tables.forEach(tbl => { const parent = tbl.parentNode; if(!parent.classList.contains(className)){ const wrapper = document.createElement('div'); wrapper.classList.add(className) parent.insertBefore( wrapper, tbl ); wrapper.appendChild(tbl); } }) </script> <bsp-modal class="Modal"> <div class="Modal-wrapper"> <div class="Modal-close"><button>Close</button></div> <div class="Modal-content"> content here </div> </div> </bsp-modal> <span data-bsp-pv="75918a10-b479-3fb1-bb84-6a57df4b0241"></span><span data-bsp-pv="00000193-4502-d86e-a5f3-fd0ffc970000"></span><script data-bsp-site="00000183-66b2-dbb3-afcb-6ebe6f520000" data-bsp-contentid="00000193-4502-d86e-a5f3-fd0ffc970000"></script><script data-bsp-site="00000183-66b2-dbb3-afcb-6ebe6f520000" data-bsp-contentid="00000193-4502-d86e-a5f3-fd0ffc970000" src="https://docscontent.nvidia.com/resource/00000183-6725-d7fd-a5bb-6727dc560000/_resource/analytics/bsp-analytics.min.3d492319d8b084de04ab3a208c32f0b5.gz.js"></script></body> </html>