chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何在Arm平臺(tái)上進(jìn)行SPDK NVMe over TCP優(yōu)化呢?

Arm社區(qū) ? 來(lái)源:Arm社區(qū) ? 2024-04-01 09:53 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

什么是 SPDK?

隨著存儲(chǔ)介質(zhì)在 I/O 性能方面不斷演進(jìn),存儲(chǔ)軟件占用的總事務(wù)時(shí)間百分比變得越來(lái)越大。提高存儲(chǔ)軟件棧的性能和效率至關(guān)重要。存儲(chǔ)性能開(kāi)發(fā)套件 (SPDK) 是一個(gè)開(kāi)源軟件框架,它提供了一組庫(kù)和工具,用于根據(jù)特定需求編寫(xiě)高性能、可擴(kuò)展的用戶模式存儲(chǔ)應(yīng)用。SPDK 全面釋放現(xiàn)代存儲(chǔ)硬件的潛力,例如非易失性存儲(chǔ)器 (NVM) 設(shè)備、固態(tài)硬盤(pán) (SSD) 和網(wǎng)絡(luò)存儲(chǔ)設(shè)備。

SPDK?的工作原理是什么?

傳統(tǒng)的內(nèi)核 I/O 棧由于上下文切換、數(shù)據(jù)復(fù)制、中斷和資源同步等原因帶來(lái)了開(kāi)銷(xiāo)。SPDK?大幅減少了 I/O 處理期間的開(kāi)銷(xiāo),其方法如下:

使用存儲(chǔ)應(yīng)用的用戶模式,而非內(nèi)核模式。設(shè)備綁定 UIO 或 VFIO 驅(qū)動(dòng)程序后,SPDK 運(yùn)行用戶空間中的設(shè)備,從而消除了成本高昂的上下文切換。應(yīng)用利用?SPDK 庫(kù),直接通過(guò)用戶空間驅(qū)動(dòng)程序與設(shè)備通信。

以輪詢模式而不是中斷模式運(yùn)行。在初始化期間,SPDK 會(huì)在每個(gè)核心上創(chuàng)建一個(gè)線程,稱為 ?Reactor(圖 1)。用戶在此 Reactor 上注冊(cè)輪詢器來(lái)輪詢硬件是否完成,而不是等待中斷。這樣就降低了中斷處理開(kāi)銷(xiāo)和延遲。

使用無(wú)共享線程模型。每個(gè) SPDK 線程都獨(dú)立運(yùn)行自己的一組數(shù)據(jù)結(jié)構(gòu)和資源,從而避免了同步開(kāi)銷(xiāo)。每個(gè) Reactor 上會(huì)創(chuàng)建一個(gè)事件環(huán),以進(jìn)行必要的線程通信。

be747c1a-edb2-11ee-a297-92fbcf53809c.png

圖 1:SPDK 線程模型

SPDK 框架

如圖 2 所示,SPDK 包含多層。

be9214b4-edb2-11ee-a297-92fbcf53809c.png

圖 2:SPDK 架構(gòu)

硬件驅(qū)動(dòng)程序:快速非易失性存儲(chǔ)器 (NVMe) 驅(qū)動(dòng)程序是 SPDK 的基礎(chǔ)組件。這是一個(gè) C 庫(kù),用于與 NVMe 設(shè)備之間進(jìn)行直接零拷貝數(shù)據(jù)傳輸。virtio 驅(qū)動(dòng)程序允許與 virtio 設(shè)備進(jìn)行通信。

塊存儲(chǔ):SPDK 提供豐富的后端存儲(chǔ)設(shè)備支持,包括以 NVMe SSD、Linux 異步 I/O (AIO) 作為支持的 NVMe 塊設(shè)備,以便讓 SPDK 能夠與 HDD?和?ceph RBD 等內(nèi)核設(shè)備交互,從而將 ceph 作為 SPDK 的后端設(shè)備。

塊存儲(chǔ)服務(wù):SPDK 塊存儲(chǔ)服務(wù)層為附加客戶功能提供靈活的 API,這些功能包括?RAID?和塊層壓縮。

塊存儲(chǔ)協(xié)議:塊存儲(chǔ)協(xié)議使得 SPDK 能夠通過(guò)不同的傳輸協(xié)議將其后端存儲(chǔ)提供給遠(yuǎn)程客戶端、虛擬機(jī)或其他進(jìn)程。iSCSI target 是在 TCP/IP 連接上實(shí)現(xiàn)了傳輸塊級(jí) SCSI 數(shù)據(jù)的既定規(guī)范。NVMe over Fabrics (NVMe-oF) target 是 NVMe-oF 規(guī)范在用戶空間的一個(gè)實(shí)現(xiàn),即在網(wǎng)絡(luò)上呈現(xiàn)一個(gè)快設(shè)備。Vhost target 使得 SPDK 能夠?yàn)榛?Qemu 的虛擬機(jī)或 Kata 容器提供后端存儲(chǔ)。Vfio-user 允許 SPDK 將虛擬的 NVMe 設(shè)備提供給虛擬機(jī),后者利用現(xiàn)有的 NVMe 驅(qū)動(dòng)程序與設(shè)備進(jìn)行通信。

文件存儲(chǔ)服務(wù):SPDK 在其塊分配器 Blobstore 上還提供了一個(gè)名為 BlobFS 的文件系統(tǒng)。它可作為?MySQL?和?Rocksdb?的存儲(chǔ)后端,從而使整個(gè) I/O 路徑都位于用戶空間中。

什么是 NVMe over TCP?

NVMe 是一種專為 SSD 而設(shè)計(jì)的協(xié)議,旨在通過(guò) PCIe 接口來(lái)顯著提高性能。NVMe over PCIe 是 NVMe 協(xié)議的初期目標(biāo),用于本地 NVMe SSD 訪問(wèn)。它通過(guò) PCIe 接口協(xié)議將命令和響應(yīng)映射到主機(jī)的共享內(nèi)存,以此來(lái)傳輸數(shù)據(jù)。

NVMe-oF 支持通過(guò)網(wǎng)絡(luò)來(lái)遠(yuǎn)程共享和訪問(wèn) NVMe 存儲(chǔ)設(shè)備,例如以太網(wǎng)或光纖通道。NVMe-oF 是?NVMe over PCIe 的擴(kuò)展。NVMe-oF 利用基于消息的模型或組合模型在主機(jī)與目標(biāo)存儲(chǔ)設(shè)備之間通信。所支持的傳輸協(xié)議包括光纖通道 (Fibre Channel)、RDMA (Infiniband、ROCE、iWARP) 和 TCP(圖 3)。

bef7a6f8-edb2-11ee-a297-92fbcf53809c.png

圖 3:NVMe over Fabrics 模型

SPDK 支持 RDMA、TCP 和光纖通道傳輸。它由 initiator 程序框架和 target 組成(圖 4)。如果 initiator 程序(主機(jī))和 NVMe SSD 位于同一服務(wù)器內(nèi),則直接通過(guò) PCIe 訪問(wèn)設(shè)備。否則,啟動(dòng)程序必須通過(guò)結(jié)構(gòu)來(lái)訪問(wèn)遠(yuǎn)程目標(biāo)設(shè)備。

bf0c7358-edb2-11ee-a297-92fbcf53809c.png

圖 4:SPDK NVMe over Fabrics 框架

在多種結(jié)構(gòu)選項(xiàng)中,NVMe over TCP 允許用戶跨標(biāo)準(zhǔn)以太網(wǎng)使用 NVMe。得益于成熟 TCP/IP 棧的穩(wěn)定性和可移植性,這可實(shí)現(xiàn)更低的部署成本,并降低設(shè)計(jì)復(fù)雜性。

我們將重點(diǎn)關(guān)注 SPDK NVMe over TCP,它集 NVMe over TCP 和 SPDK 工作機(jī)制的優(yōu)點(diǎn)于一身。?

使用 TCP 傳輸時(shí)(圖 5),每個(gè)主機(jī)端 NVMe 隊(duì)列對(duì)都有一個(gè)對(duì)應(yīng)的控制器端隊(duì)列對(duì),后者被映射至自己的 TCP 連接。該 NVMe 隊(duì)列對(duì)將會(huì)分配給單獨(dú)的 CPU 核心。命令包 (Command Capsules) 被封裝到 TCP 協(xié)議數(shù)據(jù)單元 (PDU) 中,并通過(guò) Linux 系統(tǒng)調(diào)用(包括?sendmsg),經(jīng)標(biāo)準(zhǔn) TCP/IP 套接字發(fā)送出去。控制器端從套接字緩沖區(qū)讀取接收到的數(shù)據(jù)并構(gòu)建接收 CMD 包。這其中就包括用于進(jìn)一步處理的請(qǐng)求信息。處理完請(qǐng)求后,會(huì)生成一個(gè) RSP 包并通過(guò)套接字發(fā)送出去。響應(yīng)數(shù)據(jù)到達(dá)主機(jī)端套接字緩沖區(qū),該緩沖區(qū)已被封裝到接收 CMD 包中。

bf33aa18-edb2-11ee-a297-92fbcf53809c.png

圖 5:NVMe over TCP 數(shù)據(jù)路徑

Arm 平臺(tái)上的優(yōu)化工作

SPDK NVMe over TCP 是一個(gè)高性能解決方案,它通過(guò) TCP/IP 網(wǎng)絡(luò)將 NVMe 存儲(chǔ)提供給遠(yuǎn)程客戶端。雖然 SPDK 是無(wú)鎖的,并且 NVMe 驅(qū)動(dòng)程序位于用戶空間內(nèi),但基于內(nèi)核的 TCP/IP 棧并不是無(wú)鎖的。因此,內(nèi)核與用戶空間之間的系統(tǒng)調(diào)用和內(nèi)存復(fù)制是不可避免的。為了有效利用 TCP/IP 棧,SPDK 引入了多項(xiàng)優(yōu)化,包括:

批量寫(xiě)入

管道緩沖

零拷貝

我們的優(yōu)化工作基于現(xiàn)有的實(shí)現(xiàn),旨在進(jìn)一步提高 SPDK NVMe over TCP 性能:

調(diào)整系統(tǒng)配置

改進(jìn)數(shù)據(jù)局部性

平衡零拷貝和非零拷貝

減少功耗浪費(fèi)

配置優(yōu)化

正確的系統(tǒng)配置對(duì)于 SPDK 來(lái)說(shuō)至關(guān)重要。平臺(tái)會(huì)根據(jù)架構(gòu)和功能進(jìn)行配置,包括:

Linux 內(nèi)核設(shè)置

PCIe 參數(shù)

NIC 參數(shù)

Linux 內(nèi)核命令行設(shè)置

Hugepage:SPDK 依賴于數(shù)據(jù)平面開(kāi)發(fā)套件 (DPDK)?庫(kù)來(lái)管理組件,包括大內(nèi)存頁(yè)和緩沖池。DPDK 支持 2MB 和 1GB,以涵蓋大內(nèi)存區(qū)域,同時(shí)不會(huì)出現(xiàn)過(guò)多 TLB 未命中的情況,從而提供更好的性能。

核心隔離:將 CPU 與內(nèi)核調(diào)度程序隔離開(kāi),以減少上下文切換。

Iommu.passthrough:如果 IOMMU 可用,SPDK 建議使用?vfio-pci 驅(qū)動(dòng)程序。否則,請(qǐng)使用?uio_pci_generic 或 igb_uio。要使用?uio_pci_generic 或 igb_uio 驅(qū)動(dòng)程序,應(yīng)禁用 IOMMU 或?qū)⑵湓O(shè)為直通模式。如果未設(shè)置 iommu.passthrough,vfio-pci 驅(qū)動(dòng)程序?qū)?duì) DMA 使用 I/O 虛擬地址 (IOVA)。這對(duì)于?IOMMU 的轉(zhuǎn)換更為安全。如果在 GRUB 命令行中添加“iommu.passthrough=1”,則對(duì) DMA 使用物理地址。這樣可以提高性能。

例如,對(duì)于四個(gè)?1G 的大頁(yè),請(qǐng)將以下參數(shù)添加到 GRUB 命令行中。SPDK 運(yùn)行在 CPU 核心 0-7 上,而 IOVA 為物理地址。

bfdc98c6-edb2-11ee-a297-92fbcf53809c.jpg

PCIe 參數(shù)調(diào)整

PCIe 最大有效負(fù)載大小 (PCIe Max Payload Size) 決定了 PCIe 數(shù)據(jù)包的最大大小。制造商會(huì)設(shè)置最大 TLP 有效負(fù)載大小,該值還取決于所連接的設(shè)備。將“pci=pcie_bus_perf”添加到內(nèi)核命令行,以確保使用 PCIe 最大有效負(fù)載大小。

PCIe 最大讀取請(qǐng)求 (PCIe Max Read Request) 決定了所允許的最大 PCIe 讀取請(qǐng)求。PCIe 最大讀取請(qǐng)求的大小可能會(huì)影響待處理請(qǐng)求的數(shù)量。請(qǐng)根據(jù)工作負(fù)載進(jìn)行調(diào)整。

使用以下命令設(shè)置最大請(qǐng)求大?。?/p>

bff3b27c-edb2-11ee-a297-92fbcf53809c.jpg

NIC 參數(shù)調(diào)整

NIC 隊(duì)列數(shù)和隊(duì)列深度

通常情況下,NIC Rx/Tx 隊(duì)列數(shù)的設(shè)置與 CPU 數(shù)量相同。隊(duì)列大小需要適當(dāng),因?yàn)檩^小的隊(duì)列可能會(huì)導(dǎo)致數(shù)據(jù)包丟失。如果環(huán)的大小超過(guò)了緩存,則較大的隊(duì)列可能會(huì)導(dǎo)致緩存利用率較差。請(qǐng)根據(jù)系統(tǒng)資源和工作負(fù)載進(jìn)行調(diào)整。

c0044e34-edb2-11ee-a297-92fbcf53809c.jpg

硬中斷關(guān)聯(lián)

IRQ 關(guān)聯(lián)是一項(xiàng) Linux 功能,它會(huì)將一些 IRQ 分配給專用處理器。正確的 IRQ 關(guān)聯(lián)設(shè)置可提高服務(wù)器工作效率。對(duì)于大多數(shù)情況而言,NIC 的 IRQ 應(yīng)綁定至 NIC 所在的同一 NUMA 節(jié)點(diǎn)。Irqbalance 是一個(gè) Linux 守護(hù)進(jìn)程,它有助于平衡所有 CPU 之間的中斷所產(chǎn)生的 CPU 負(fù)載。要設(shè)置 IRQ 關(guān)聯(lián),應(yīng)首先停止 irqbalance 服務(wù)。

例如,在 64 核系統(tǒng)的上層 32 核上,請(qǐng)將以下命令用于 IRQ 40:

c017342c-edb2-11ee-a297-92fbcf53809c.jpg

硬中斷合并

中斷合并[1]是一種控制設(shè)備何時(shí)引發(fā)中斷的方法。在產(chǎn)生中斷之前,NIC 會(huì)收集入站數(shù)據(jù)包并等待達(dá)到特定閾值。這樣便減少了 CPU 必須處理的總中斷數(shù),從而導(dǎo)致吞吐量提高、延遲增加以及 CPU 使用率降低。

請(qǐng)使用以下命令啟用自適應(yīng) irq 合并:

c02c5456-edb2-11ee-a297-92fbcf53809c.jpg

根據(jù)用例,使用?ethtool -C 設(shè)置 irq 合并:

c03d74c0-edb2-11ee-a297-92fbcf53809c.jpg

參數(shù)為:

rx-usecs:在數(shù)據(jù)包到達(dá)后會(huì)延遲 RX 中斷的?usecs?數(shù)量

rx-frames:在 RX 中斷之前所接收到的最大數(shù)據(jù)幀數(shù)

rx-frames-irq:在主機(jī)處理中斷時(shí),在生成 RX 中斷之前所接收到的最大數(shù)據(jù)幀數(shù)

軟中斷合并

NAPI[2] 是一種減少網(wǎng)絡(luò)設(shè)備在數(shù)據(jù)包到達(dá)時(shí)所生成的 IRQ 數(shù)量的機(jī)制。它會(huì)注冊(cè)一個(gè)輪詢函數(shù),NAPI 子系統(tǒng)調(diào)用此函數(shù)可收集數(shù)據(jù)幀。

設(shè)置“net.core.netdev_budget”和“net.core.netdev_budget_usecs”可限制在一個(gè) NAPI 輪詢周期內(nèi)輪詢的數(shù)據(jù)包數(shù)量。Netdev_budget 是在一個(gè)輪詢周期內(nèi)從所有接口獲取的最大數(shù)據(jù)包數(shù)。即使 netdev_budget 尚未耗盡,輪詢周期也不得超過(guò) netdev_budget_usecs 微秒。而?dev_weight 是內(nèi)核在 NAPI 中斷上可以處理的最大數(shù)據(jù)包數(shù),它是一個(gè) Per-CPU 變量。

c04b4e10-edb2-11ee-a297-92fbcf53809c.jpg

請(qǐng)參閱?Linux 網(wǎng)絡(luò)性能參數(shù)[3],獲取更多信息。

TCP 套接字緩沖區(qū)

默認(rèn)情況下,TCP 套接字緩沖區(qū)大小是根據(jù)系統(tǒng)內(nèi)存自動(dòng)計(jì)算的。較小的套接字緩沖區(qū)可能會(huì)導(dǎo)致接收數(shù)據(jù)時(shí)丟包,以及發(fā)送數(shù)據(jù)時(shí)頻繁寫(xiě)操作阻塞。要調(diào)整緩沖區(qū),請(qǐng)使用以下命令:

c05ae6cc-edb2-11ee-a297-92fbcf53809c.jpg

數(shù)據(jù)局部性優(yōu)化

在 TCP 內(nèi)核空間中,當(dāng)數(shù)據(jù)到達(dá) NIC 且 NIC DMA 數(shù)據(jù)包到達(dá) RAM 時(shí),會(huì)根據(jù) RSS 中的哈希函數(shù)選擇一個(gè)接收環(huán)。數(shù)據(jù)包的引用被排入環(huán)形緩沖區(qū)中。系統(tǒng)會(huì)發(fā)起硬 IRQ,由 CPU 負(fù)責(zé)處理。如果設(shè)置 IRQ 綁定,則是所分配的 CPU,否則 irqbalance 服務(wù)會(huì)選擇一個(gè)。默認(rèn)情況下,軟 IRQ 會(huì)在與硬 IRQ 相同的 CPU 核心上觸發(fā);硬 IRQ 會(huì)觸發(fā) NAPI,以從接收環(huán)形緩沖區(qū)輪詢數(shù)據(jù)。該數(shù)據(jù)包的處理是在?CPU 核心中進(jìn)行的,直到被排入套接字接收緩沖區(qū)中。

在 SPDK NVMe over TCP 中,每個(gè)來(lái)自客戶端的連接在啟動(dòng)期間都會(huì)分配給一個(gè) Reactor(CPU 核心)。此連接的套接字讀/寫(xiě)是在該 CPU?核心上完成的。所以,內(nèi)核空間與用戶空間之間存在語(yǔ)義差距,這與?CPU 核心親和性有關(guān)。

為了保證 CPU 核心處理內(nèi)核空間中的此套接字?jǐn)?shù)據(jù)與用戶空間中讀取此套接字的核心 (SPDK) 完全相同,在 SPDK NVMe over TCP 中,我們引入了基于 CPU 親和性的套接字處理[4]?。它將獲取套接字的 CPU 親和性,并確定在連接啟動(dòng)期間應(yīng)將此套接字分配給哪個(gè) CPU 核心。例如,當(dāng)新連接(套接字 A)啟動(dòng)時(shí)(圖 6),我們會(huì)獲得套接字 A 的 CPU 親和性。這里是?CPU 核心 1,它負(fù)責(zé)該套接字?jǐn)?shù)據(jù)包的內(nèi)核空間處理。然后在 SPDK 中,套接字 A 會(huì)被分配給核心 1 中的輪詢組,以后套接字 A 的讀/寫(xiě)將會(huì)在核心 1 上執(zhí)行。

c073de02-edb2-11ee-a297-92fbcf53809c.png

圖 6:TCP 數(shù)據(jù)接收流程

例如:對(duì)于六個(gè) P4600 NVMe 盤(pán)的服務(wù)器,它使用八個(gè)核心,NIC IRQ 被綁定至這八個(gè)核心,而客戶端程序使用 24 個(gè)和 32 個(gè)核心。這個(gè)優(yōu)化使隨機(jī)寫(xiě)入性能提升 11% - 17%。

零拷貝優(yōu)化

對(duì)于使用套接字發(fā)送數(shù)據(jù)時(shí),MSG_ZEROCOPY[5]?標(biāo)記可以使能零拷貝。該功能目前主要針對(duì) TCP 套接字實(shí)現(xiàn)。然而,零拷貝并不是沒(méi)有代價(jià)的,因?yàn)樗鼤?huì)在頁(yè)面固定期間導(dǎo)致額外的頁(yè)面記錄和完成后通知的開(kāi)銷(xiāo)。

在 SPDK NVMe over TCP 中,零拷貝可以在啟動(dòng)期間進(jìn)行啟用或禁用。啟用后,不論大小,所有數(shù)據(jù)均通過(guò)零拷貝發(fā)送。這對(duì)于小數(shù)據(jù)(例如回復(fù)請(qǐng)求)的性能有負(fù)面影響。因此,平衡內(nèi)存復(fù)制開(kāi)銷(xiāo)與頁(yè)面固定開(kāi)銷(xiāo)至關(guān)重要。動(dòng)態(tài)零拷貝[6]的引入是為了設(shè)置數(shù)據(jù)發(fā)送的閾值,以確定是否通過(guò)零拷貝發(fā)送數(shù)據(jù)。任何大于閾值的數(shù)據(jù)由零拷貝發(fā)送,其他數(shù)據(jù)則不然。

例如,?在 16 個(gè) P4610 NVMe SSD、兩個(gè)客戶端,且客戶端與服務(wù)器端程序的配置與?SPDK 報(bào)告[7]相同的測(cè)試環(huán)境中,對(duì)于 posix 套接字 rw_percent=0 (randwrite),經(jīng)測(cè)試,128 隊(duì)列深度、服務(wù)器端 1 至 40 個(gè) CPU 核心下的性能提升可達(dá) 2.4% - 8.3%。當(dāng)讀取百分比大于 50% 時(shí),其影響并不明顯。對(duì)于 uring 套接字 rw_percent=0 (randwrite),經(jīng)測(cè)試,128 隊(duì)列深度、服務(wù)器端 1 至 40 個(gè) CPU 核心下的性能提升可達(dá) 1.8% - 7.9%(圖 7)。當(dāng)讀取百分比大于 50% 時(shí),性能提升可達(dá) 1% - 7%。

c0d8fbac-edb2-11ee-a297-92fbcf53809c.png

圖 7:qdepth=128 時(shí)的 4KB 隨機(jī)寫(xiě)入性能

功耗優(yōu)化

以前在 SPDK 中,無(wú)論要處理的工作負(fù)載數(shù)量如何?,CPU 核心上的每個(gè)線程都工作在輪詢模式下。然而,如果工作負(fù)載隨時(shí)間變化較大,可能會(huì)造成功耗浪費(fèi)。為了解決這個(gè)問(wèn)題,我們引入了動(dòng)態(tài)調(diào)度程序框架,以實(shí)現(xiàn)節(jié)能并降低 CPU 占用率。

調(diào)度程序框架會(huì)動(dòng)態(tài)收集每個(gè)線程和 Reactor 的數(shù)據(jù),并執(zhí)行包括移動(dòng)線程、切換 Reactor 模式和設(shè)置 CPU 核心頻率等在內(nèi)的操作。例如,如果 Reactor 1 到 Reactor N 中的輪詢器空閑,則相應(yīng)的 SPDK 線程將遷移至 Reactor 0(圖 8)。然后,Reactor 1 至 Reactor N 切換至中斷模式。Reactor 0 的 CPU 頻率會(huì)根據(jù)該 Reactor 的繁忙程度進(jìn)行調(diào)整。我們將這稱之為?CPU 頻率調(diào)節(jié)。

c0f3a164-edb2-11ee-a297-92fbcf53809c.png

圖 8:SPDK 動(dòng)態(tài)調(diào)度程序解決方案

Linux 內(nèi)核通過(guò) CPU 頻率調(diào)節(jié) (CPUFreq) 子系統(tǒng)支持 CPU 性能調(diào)節(jié)。它由三個(gè)模塊組成:

核心

調(diào)節(jié)調(diào)控器

調(diào)節(jié)驅(qū)動(dòng)程序

調(diào)節(jié)驅(qū)動(dòng)程序與硬件通信。cppc_cpufreq 驅(qū)動(dòng)程序適用于大多數(shù) AArch64 平臺(tái)。該驅(qū)動(dòng)程序使用 ACPIv5.1 規(guī)范中所述的協(xié)作處理器性能控制 (CPPC) 方法。CPPC 是以 CPU 性能值的抽象連續(xù)量表為基礎(chǔ)的。這樣就允許遠(yuǎn)程功耗處理器靈活地進(jìn)行優(yōu)化,以提高功率和性能。

為了啟用 AArch64 上的 CPU 頻率調(diào)節(jié),cppc_cpufreq 驅(qū)動(dòng)程序支持[11]被添加到? DPDK Power Library(DPDK 功率庫(kù))中。SPDK 利用它來(lái)調(diào)節(jié) CPU 頻率,也利用它來(lái)獲取頻率信息供調(diào)節(jié)使用。選項(xiàng)包括 highest_perf、nominal_perf?以及?scaling_max_freq、scaling_min_freq?等等。它為用戶提供了?API,用于設(shè)置 CPU 頻率和啟用或禁用加速技術(shù)。請(qǐng)參閱?DPDK Power Library[12],獲取有關(guān) API 的更多信息。

結(jié)論

本文介紹了?SPDK、SPDK NVMe over TCP 以及如何對(duì)其進(jìn)行優(yōu)化,其中包括系統(tǒng)配置優(yōu)化、數(shù)據(jù)局部性優(yōu)化、內(nèi)存零拷貝優(yōu)化和功耗優(yōu)化。它們可用于解決對(duì)性能至關(guān)重要的存儲(chǔ)問(wèn)題。



審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 以太網(wǎng)
    +關(guān)注

    關(guān)注

    41

    文章

    5913

    瀏覽量

    179426
  • SSD
    SSD
    +關(guān)注

    關(guān)注

    21

    文章

    3061

    瀏覽量

    121722
  • TCP
    TCP
    +關(guān)注

    關(guān)注

    8

    文章

    1417

    瀏覽量

    82984
  • 固態(tài)硬盤(pán)
    +關(guān)注

    關(guān)注

    12

    文章

    1607

    瀏覽量

    60077
  • 非易失性存儲(chǔ)器

    關(guān)注

    0

    文章

    115

    瀏覽量

    24009

原文標(biāo)題:在 Arm 平臺(tái)上進(jìn)行 SPDK NVMe over TCP 優(yōu)化

文章出處:【微信號(hào):Arm社區(qū),微信公眾號(hào):Arm社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    NVMe協(xié)議研究掃盲

    /SAS SSD相比具有卓越的性能優(yōu)勢(shì),云平臺(tái)和數(shù)據(jù)中心已經(jīng)開(kāi)始為大量I/O密集型應(yīng)用程序提供NVMe SSD。隨著NVMe協(xié)議的不斷完善,推出了NVMe-oF(
    發(fā)表于 06-02 23:28

    NVMe高速傳輸之?dāng)[脫XDMA設(shè)計(jì)18:UVM驗(yàn)證平臺(tái)

    驗(yàn)證的硬核 IP,因此在驗(yàn)證過(guò)程中可以只使用其接口進(jìn)行模擬,這將極大減小驗(yàn)證平臺(tái)復(fù)雜度和構(gòu)建難度,同時(shí)對(duì)驗(yàn)證的完備性影響較小.驗(yàn)證平臺(tái)由 UVM 驗(yàn)證包、DUT、AXI BRAM IP 和 N
    發(fā)表于 07-31 16:39

    請(qǐng)問(wèn)如何在keil μVision 5上進(jìn)行ARM編譯器的代碼優(yōu)化

    何在keil μVision 5上進(jìn)行ARM編譯器的代碼優(yōu)化?
    發(fā)表于 08-20 07:37

    想要學(xué)習(xí)在DSP的平臺(tái)上進(jìn)行圖像處理,求推薦入門(mén)教材。

    各位大神,本人想要學(xué)習(xí)在DSP的平臺(tái)上進(jìn)行圖像處理,但基礎(chǔ)比較差。圖像處理的算法是有基礎(chǔ)的,但是總覺(jué)得這兩者結(jié)合很困難,希望大神告訴我下有什么好方法入門(mén),或者看哪些教材
    發(fā)表于 05-20 10:29

    Linux平臺(tái)上如何進(jìn)行通用計(jì)算并行優(yōu)化

    Linux平臺(tái)上如何進(jìn)行通用計(jì)算并行優(yōu)化
    發(fā)表于 03-12 07:43

    何在RK3288平臺(tái)上去編譯uboot命令

    何在RK3288平臺(tái)上去編譯uboot命令?如何在RK3288平臺(tái)上去編譯kernel命令
    發(fā)表于 02-10 06:38

    何在SDK平臺(tái)上通過(guò)lua語(yǔ)言去開(kāi)發(fā)nodemcu硬件

    什么是nodemcu?如何在SDK平臺(tái)上通過(guò)lua語(yǔ)言去開(kāi)發(fā)nodemcu硬件?
    發(fā)表于 02-15 06:26

    怎樣在阿里云物聯(lián)網(wǎng)平臺(tái)上進(jìn)行單片機(jī)程序的編寫(xiě)

    阿里云物聯(lián)網(wǎng)平臺(tái)是怎樣設(shè)置的?怎樣在阿里云物聯(lián)網(wǎng)平臺(tái)上進(jìn)行單片機(jī)程序的編寫(xiě)?
    發(fā)表于 02-22 06:04

    何在rk平臺(tái)上調(diào)試一款32寸的LVDS屏幕

    何在rk平臺(tái)上調(diào)試一款32寸的LVDS屏幕
    發(fā)表于 03-03 10:31

    何在RK3399這一 Arm64平臺(tái)上搭建Tengine AI推理框架

    Tengine是什么?如何在RK3399這一 Arm64平臺(tái)上搭建Tengine AI推理框架?
    發(fā)表于 03-04 12:31

    何在RK3399平臺(tái)上實(shí)現(xiàn)4G語(yǔ)音通話和短信功能

    何在RK3399平臺(tái)上實(shí)現(xiàn)4G語(yǔ)音通話和短信功能?有哪些步驟?
    發(fā)表于 03-07 07:48

    何在Android 4.3平臺(tái)上進(jìn)行藍(lán)牙低功耗開(kāi)發(fā)操作?(1)

    在Android 4.3平臺(tái)上進(jìn)行藍(lán)牙低功耗(BLE)開(kāi)發(fā) 第一部分
    的頭像 發(fā)表于 08-22 01:33 ?3286次閱讀

    在基于Arm平臺(tái)上使用HALCON免費(fèi)下載

    在基于Arm平臺(tái)上使用HALCON免費(fèi)下載
    發(fā)表于 12-08 17:28 ?0次下載
    在基于<b class='flag-5'>Arm</b>的<b class='flag-5'>平臺(tái)上</b>使用HALCON免費(fèi)下載

    SPDK Thread模型設(shè)計(jì)與實(shí)現(xiàn) NVMe-oF的使用案例

    SPDK Thread 模型是SPDK誕生以來(lái)十分重要的模塊,它的設(shè)計(jì)確保了spdk應(yīng)用的無(wú)鎖化編程模型,本文基于spdk最新的release 19.07版本介紹了整體thread模型
    的頭像 發(fā)表于 07-03 16:20 ?3309次閱讀

    何在手機(jī)應(yīng)用的高通平臺(tái)上使用TAS2560

    何在手機(jī)應(yīng)用的高通平臺(tái)上使用TAS2560
    發(fā)表于 11-01 08:27 ?0次下載
    如<b class='flag-5'>何在</b>手機(jī)應(yīng)用的高通<b class='flag-5'>平臺(tái)上</b>使用TAS2560