操屁眼的视频在线免费看,日本在线综合一区二区,久久在线观看免费视频,欧美日韩精品久久综

新聞資訊

    設置中沒有網絡適配器_漏油器恢復出廠沒網絡_高清網絡播器怎么設置

    在SPDK中使能E810網卡ADQ 特性

    --改善TCP/IP 存儲應用的性能

    楊子夜 | Intel 存儲軟件開發工程師

    最近Intel發布了最新的的以太網網卡控制器E810, 這款新的網卡不僅支持兩種不同協議的RDMA 協議(iWARP 和RoCE v2),并且針對基于TCP/IP協議的應用(包括各種使用網絡的應用)給出了基于ADQ( )特性的性能改善方案,可用于改善網絡應用的性能(諸如平均或者長尾延遲,以及等)。在這篇文章中我們將會簡要介紹如何在SPDK 中使能ADQ特性,以便于改善TCP/IP存儲應用的性能。

    ADQ簡介

    設置中沒有網絡適配器_漏油器恢復出廠沒網絡_高清網絡播器怎么設置

    Intel 網卡中的ADQ特性是一種智能的系統級方法,旨在提高網絡I/O性能。ADQ特性的目標是確保高優先級應用程序具有可預期的高性能,并顯著降低抖動。ADQ的核心技術是將隔離的硬件網卡隊列供某些應用程序進行專有使用。并且希望這些硬件網卡隊列可以最佳地連接到所需應用程序中的不同線程。顯而易見, 這種方法可以防止專有程序的網絡流量與其他應用程序競爭,并且該應用程序的性能(例如,延遲)可以變得可預測。此外開啟ADQ特性以后,我們仍然可以對專有應用程序在隊列上提供QoS控制。

    圖1 ADQ那部分的圖,給出了不使用ADQ的例子(也就是正常網卡的包處理)。如果把圖中不同顏色的汽車看成不同的應用,不同的車道看成不同的網卡隊列,我們可以看到同一個網卡隊列上可以同時處理不同應用的網絡包。這樣的處理方法是通用的,但是不利于某些專有應用的QoS 控制。圖1中使用了ADQ以后,我們可以看到某些網絡隊列可以直接分配給某些專有應用,于是這些應用的網絡包可以在特定分配的隊列上被處理,和其他應用程序隔離,繼而可以進行后續的QoS控制。

    圖1 ADQ 特性的開啟以及關閉

    漏油器恢復出廠沒網絡_設置中沒有網絡適配器_高清網絡播器怎么設置

    總結一下ADQ隔離隊列的思想,和DPDK/SPDK PMD的思想有些相似。基于DPDK 的可以去操縱分配給這個應用的物理隊列,這一點來講和ADQ的思想是完全相同的。唯一的區別是目前DPDK 只工作在層3以下,所以工作在TCP/IP層的應用想要通過DPDK PMD驅動來享受到隔離隊列的特性,必須使用基于DPDK的用戶態TCP/IP棧。所以從這一點看來,ADQ的特性通用性更好一些,不需要應用強制使用用戶態的解決方案。

    另外我們可以看到ADQ的特性,對于多核應用的支持還存在需要加強的地方。因為使用ADQ以后,我們可以分配一些特定的隊列給應用。比如給一個應用程序A 分配4個隊列,這個可以保證應用程序對這4個隊列的獨享 。但是如果這個應用是使用多CPU的,那么這個應用的多個線程(可能運行在不同的CPU core上)形成對這4個隊列的內部競爭。我們在SPDK 庫中的集成工作,就是為了避免內部競爭的出現。

    SPDK 應用使用ADQ的使用示例

    為了更好地解釋SPDK 庫中ADQ的集成, 圖2給出了SPDK NVMe-oF TCP應用使用ADQ的一個例子。首先在SPDK NVMe-oF TCP應用啟動之前,需要做一些配置工作(預計會在這個系列的下一篇文章出現),諸如分配一些網卡隊列,對應到不同的TC ( class)。于是監聽在以下三元組的的套接字(如圖2 init 中的綠色描述,需要調用函數使用 作為進行設置)。那么這個套接字所接收到的連接都會被分配在預先設置好的隊列中。比如我們預先分配了4個隊列,那么得到的 在APP的生命周期中,只會存在4個不同的值,比如789,790, 791和792。很顯然我們可以通過, 傳入 作為進行的獲取。那么在NVMe-oF層的 logic 模塊,對于新接收的連接位于哪個物理隊列上了如指掌。那么就可以利用的信息,把具有相同的連接交于同一個NVMe-oF的 group 進行處理,從而可以最優地利用ADQ 特性。

    設置中沒有網絡適配器_漏油器恢復出廠沒網絡_高清網絡播器怎么設置

    圖 2 SPDK NVMe-oF集成ADQ的特性

    SPDK 中的支持

    為了實現圖2中的使用需求,在SPDK SOCK庫中設置中沒有網絡適配器,我們做了以下的工作,使得使用SPDK庫的應用諸如NVMe-over TCP 可以更好地使用分配的隊列。

    設置中沒有網絡適配器_漏油器恢復出廠沒網絡_高清網絡播器怎么設置

    在SPDK 的 設計中(涉及到SPDK 以及SPDK 的介紹可參考SPDK 社區的相關文章[1]),每一個SPDK 都可以使用一個 group。這個 group中可以處理所有歸屬于這個 group處理的連接。比如在NVMe-oF (app/nvmf/)以及相關的庫(/event//nvmf/, lib/nvmf)實現中, 當NVMe-oF 啟動以后,每個線程上啟動一個NVMe-oF的SPDK ,然后這個SPDK 上會運行一個 group。這個 group可以處理不同上的 group,諸如RDMA, TCP或者Fibre 上的各個 group的連接。

    所以在沒有使用ADQ 之前, 每一個SPDK 上的TCP group 處理的TCP連接,可能位于不同的隊列上。而使用ADQ 之后,處理的TCP 連接可能分布在有限的幾個隊列上。舉個例子,如果SPDK的NVMe-oF TCP 應用使用了兩個CPU core,被分配了4個隊列。那么每個CPU core上運行的sock group能處理到4個不同的隊列。那么這兩個CPU 對于網卡隊列還是存在競爭關系。原則上,我們需要讓不同的CPU core去處理不同的隊列,才是效率最高的。也就是說, 假設一個CPU core i上處理的網卡隊列集合是 N(i), 那么任意的CPU 之間處理的網卡隊列的交集都是空集,也就是:For any CPU core i and j, N(i) ∩ N(j) = ? 。

    為了滿足這一實現,我們在SPDK的sock 中,維護了 (網卡隊列的在SPDK sock 庫中被抽象為)到sock group的映射, i.e.,

    。另外我們提供了 這個調用,可以針對一個spdk ,去尋找最佳的 group。這個其實就是利用這個 關系。因為每一個SPDK 都可以得到一個。如果得到的不是有效的,則認為ADQ 特性沒有被開啟,那么就不會得到一個被優化的 group;如果得到的是有效的,我們就去尋找是否存在這個這個所對應的 group。然后這個sock group的信息會被上層邏輯(諸如nvmf層)使用。

    如果在nvmf 層的邏輯中,通過查詢得到無效的,就會采用默認的算法, 比如使用的算法(如圖2所示)進行調度,尋找一個SPDK ;如果發現了有效的,我們就會找尋這個的創建者(意思是由哪個SPDK 創建),然后交由這個SPDK 處理。無論哪種方式設置中沒有網絡適配器,我們最終都會到一個SPDK 去處理這個連接,最后我們將會更新這個 和對應的的映射信息。此外, 在一個 被一個 group移除的時候,我們也要對和相應的映射進行維護。

網站首頁   |    關于我們   |    公司新聞   |    產品方案   |    用戶案例   |    售后服務   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

地址:北京市海淀區    電話:010-     郵箱:@126.com

備案號:冀ICP備2024067069號-3 北京科技有限公司版權所有