成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

系統(tǒng) CPU 效率高,DMA 技術(shù)功不可沒!

開發(fā) 架構(gòu)
所謂的 DMA(Direct Memory Access,即直接存儲器訪問)其實是一個硬件技術(shù),其主要目的是減少大數(shù)據(jù)量傳輸時的 CPU 消耗,從而提高 CPU 利用效率。其本質(zhì)上是一個主板和 IO 設(shè)備上的 DMAC 芯片。CPU 通過調(diào)度 DMAC 可以不參與磁盤緩沖區(qū)到內(nèi)核緩沖區(qū)的數(shù)據(jù)傳輸消耗,從而提高效率。

?大家好,我是樹哥。

相信大家在學(xué)習(xí) Kafka 的時候,都會被問到:為啥 Kafka 這么快?許多朋友都會回答是因為 zero-copy 技術(shù)。而一說到 Zero-copy 就會說到 DMA 技術(shù)。

但 DMA 技術(shù)到底是啥?它誕生的背景是什么?它解決了什么問題?估計很多人就不知道了。今天就讓我?guī)Т蠹冶P一盤 DMA 技術(shù)!

什么是 DMA?

DMA,全稱 Direct Memory Access,即直接存儲器訪問。

DMA 傳輸將數(shù)據(jù)從一個地址空間復(fù)制到另一個地址空間,提供在外設(shè)和存儲器之間或者存儲器和存儲器之間的高速數(shù)據(jù)傳輸。

從 DMA 的定義我們可以知道,其主要是用來傳輸數(shù)據(jù),并且是在外設(shè)和存儲器或者存儲器與存儲器之間傳輸數(shù)據(jù)。

那為啥要通過 DMA 來進行傳輸數(shù)據(jù)呢?

原因是:之前傳輸數(shù)據(jù)需要 CPU 參與,在大量數(shù)據(jù)傳輸時會消耗 CPU 資源。

因此為了提升 CPU 利用率,出現(xiàn)了 DMA 技術(shù),即直接讓內(nèi)存與磁盤進行數(shù)據(jù)傳輸。

在 DMA 技術(shù)出現(xiàn)之前,Linux 通過 I/O 中斷的方式來傳輸數(shù)據(jù),其流程如下圖所示:

圖片

IO 中斷方式的數(shù)據(jù)傳輸流程

  • 用戶進程向 CPU 發(fā)起 read 系統(tǒng)調(diào)用讀取數(shù)據(jù),由用戶態(tài)切換為內(nèi)核態(tài),然后一直阻塞等待數(shù)據(jù)的返回。
  • CPU 在接收到指令以后對磁盤發(fā)起 I/O 請求,將磁盤數(shù)據(jù)先放入磁盤控制器緩沖區(qū)。
  • 數(shù)據(jù)準備完成以后,磁盤向 CPU 發(fā)起 I/O 中斷。
  • CPU 收到 I/O 中斷以后將磁盤緩沖區(qū)中的數(shù)據(jù)拷貝到內(nèi)核緩沖區(qū),然后再從內(nèi)核緩沖區(qū)拷貝到用戶緩沖區(qū)。

用戶進程由內(nèi)核態(tài)切換回用戶態(tài),解除阻塞狀態(tài),然后等待 CPU 的下一個執(zhí)行時間鐘。

從上述流程可以看到,CPU 需要參與到「磁盤緩沖區(qū)拷貝到內(nèi)核緩沖區(qū)」、「內(nèi)核緩沖區(qū)拷貝到用戶緩存區(qū)」這兩個過程,極大地消耗了 CPU 資源。但有了 DMA 技術(shù)之后,其過程變成了這樣:

圖片

DMA 方式的數(shù)據(jù)傳輸流程

  • 用戶進程向 CPU 發(fā)起 read 系統(tǒng)調(diào)用讀取數(shù)據(jù),由用戶態(tài)切換為內(nèi)核態(tài),然后一直阻塞等待數(shù)據(jù)的返回。
  • CPU 在接收到指令以后對 DMA 磁盤控制器發(fā)起調(diào)度指令。
  • DMA 磁盤控制器對磁盤發(fā)起 I/O 請求,將磁盤數(shù)據(jù)先放入磁盤控制器緩沖區(qū),CPU 全程不參與此過程。
  • 數(shù)據(jù)讀取完成后,DMA 磁盤控制器會接受到磁盤的通知,將數(shù)據(jù)從磁盤控制器緩沖區(qū)拷貝到內(nèi)核緩沖區(qū)。
  • DMA 磁盤控制器向 CPU 發(fā)出數(shù)據(jù)讀完的信號,由 CPU 負責(zé)將數(shù)據(jù)從內(nèi)核緩沖區(qū)拷貝到用戶緩沖區(qū)。
  • 用戶進程由內(nèi)核態(tài)切換回用戶態(tài),解除阻塞狀態(tài),然后等待 CPU 的下一個執(zhí)行時間鐘。

仔細對比加入 DMA 技術(shù)之后的數(shù)據(jù)傳輸流程,我們可以發(fā)現(xiàn) DMA 技術(shù)優(yōu)化了數(shù)據(jù)從磁盤緩沖區(qū)拷貝到內(nèi)核緩沖區(qū)這個過程,減少了這個過程里 CPU 的參與。

實現(xiàn)原理

我們知道數(shù)據(jù)傳輸本質(zhì)上還是需要 CPU 去處理的,那 DMA 技術(shù)怎么實現(xiàn)不需要 CPU 參與就能實現(xiàn)數(shù)據(jù)傳輸呢?

雖然我并沒有仔細地看過 DMA 的實現(xiàn)原理,但可以大膽預(yù)測的是:其實 DMA 技術(shù)還是有用 CPU,只不過其沒有用服務(wù)器的 CPU,而是自己配了一個計算單元,專門用于做數(shù)據(jù)傳輸。這就有點像 CPU 既可以做普通計算又可以做圖形計算一樣,但因為圖形渲染太復(fù)雜,于是搞出來了個 GPU 專門做圖形渲染一樣。

DMA 本質(zhì)是就是一個硬件技術(shù),其實際樣子是主板上的一個芯片,即 DMAC (DMA Controller DMA 控制器)以及 I/O 設(shè)備上的 DMAC 芯片。

通過在各個 I/O 設(shè)備上都加了 DMAC 芯片,以網(wǎng)卡為例,用戶發(fā)送數(shù)據(jù),當數(shù)據(jù)被映射到內(nèi)核后,CPU 只需要告訴 DMAC 這個芯片,「我」要發(fā) xxx 數(shù)據(jù),打算發(fā)到哪里去,你幫我去做吧,然后 CPU 就可以走了,繼續(xù)做其它事情。

DMA 最有價值的地方體現(xiàn)在當要傳輸?shù)臄?shù)據(jù)特別大、還要求速度特別快的時候,可以有效減少 CPU 的阻塞時間。

目前大多數(shù)的硬件設(shè)備,包括磁盤控制器、網(wǎng)卡、顯卡以及聲卡等都支持 DMA 技術(shù)。通過 DMA 和虛擬內(nèi)存技術(shù),我們實現(xiàn)了 Zero Copy 的目標,IO 設(shè)備跟用戶程序空間傳輸數(shù)據(jù)的過程中,減少數(shù)據(jù)拷貝次數(shù),減少系統(tǒng)調(diào)用,實現(xiàn) CPU 的零參與,徹底消除 CPU 在這方面的負載。

總結(jié)

所謂的 DMA(Direct Memory Access,即直接存儲器訪問)其實是一個硬件技術(shù),其主要目的是減少大數(shù)據(jù)量傳輸時的 CPU 消耗,從而提高 CPU 利用效率。其本質(zhì)上是一個主板和 IO 設(shè)備上的 DMAC 芯片。CPU 通過調(diào)度 DMAC 可以不參與磁盤緩沖區(qū)到內(nèi)核緩沖區(qū)的數(shù)據(jù)傳輸消耗,從而提高效率。

參考資料

  • 前面部分講的還可以!【STM32】 DMA 原理,步驟超細詳解,一文看懂 DMA_Z 小旋的博客 - CSDN 博客_dma stm32
  • VIP!不錯!“零拷貝” 的硬件基石 ——DMA 到底是個什么東西,它是如何工作的?- 墨天輪
  • 圖畫得不錯!VIP!DMA 技術(shù)是什么,在哪里用?看完絕對有收獲 - 簡書
  • 關(guān)于 DMA(Direct memory access)比較通俗淺白的理解 - 騰訊云開發(fā)者社區(qū) - 騰訊云?
責(zé)任編輯:武曉燕 來源: 樹哥聊編程
相關(guān)推薦

2016-05-23 16:06:25

軟件IC網(wǎng)

2014-05-09 14:43:31

思科人才培養(yǎng)思科

2010-04-26 15:08:47

Oracle repo

2016-07-07 13:34:10

IBMPOWER LINUX

2010-12-20 09:04:47

2015-11-02 11:05:57

流量網(wǎng)絡(luò)終端應(yīng)用

2019-02-14 12:41:54

程序員開發(fā)互聯(lián)網(wǎng)

2013-11-15 14:47:22

IE11微軟網(wǎng)絡(luò)安全

2012-01-06 10:32:33

2018-07-18 13:33:38

大數(shù)據(jù)

2022-01-12 08:57:45

網(wǎng)絡(luò)攻擊漏洞Log4j

2018-09-20 11:17:21

超融合

2012-06-20 10:04:11

Evernote

2011-09-13 09:57:25

谷歌云計算

2011-04-06 14:20:50

Java編程

2024-09-03 13:40:00

2011-04-13 09:13:02

Java內(nèi)存

2012-05-09 13:20:00

Win7

2021-11-30 23:34:15

編程語言C++Java
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 视频一区二区在线观看 | 久久伦理电影 | 亚洲一区二区三区免费在线观看 | 欧洲亚洲一区二区三区 | 久久高清| a在线观看 | 一本一道久久a久久精品综合蜜臀 | 国产精品综合视频 | 日韩精品一区中文字幕 | 久久中文视频 | 日本精品视频一区二区 | 欧美日一区二区 | 欧美美女一区二区 | 欧美激情一区二区三级高清视频 | 日日夜夜精品视频 | 成人免费精品视频 | 亚洲h色| 成人无遮挡毛片免费看 | 成人影院av| 欧美日韩在线视频一区二区 | 国产亚洲日本精品 | 在线看片国产 | 懂色tv| 色综合九九 | 亚洲精品一区二区在线观看 | 国产视频久久久 | 午夜精品一区二区三区在线视频 | 国产精品永久免费 | 免费在线观看一区二区 | 精品久久久久久亚洲精品 | 国产成人免费视频 | 国产成人一区二区 | 日韩在线免费播放 | 欧美一区不卡 | 欧美成人二区 | 亚洲品质自拍视频 | 久久草在线视频 | jlzzjlzz国产精品久久 | 男女深夜网站 | 久久久久九九九女人毛片 | 日韩一区二区免费视频 |