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

系統 CPU 效率高,DMA 技術功不可沒!

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

?大家好,我是樹哥。

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

但 DMA 技術到底是啥?它誕生的背景是什么?它解決了什么問題?估計很多人就不知道了。今天就讓我帶大家盤一盤 DMA 技術!

什么是 DMA?

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

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

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

那為啥要通過 DMA 來進行傳輸數據呢?

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

因此為了提升 CPU 利用率,出現了 DMA 技術,即直接讓內存與磁盤進行數據傳輸。

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

圖片

IO 中斷方式的數據傳輸流程

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

用戶進程由內核態切換回用戶態,解除阻塞狀態,然后等待 CPU 的下一個執行時間鐘。

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

圖片

DMA 方式的數據傳輸流程

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

仔細對比加入 DMA 技術之后的數據傳輸流程,我們可以發現 DMA 技術優化了數據從磁盤緩沖區拷貝到內核緩沖區這個過程,減少了這個過程里 CPU 的參與。

實現原理

我們知道數據傳輸本質上還是需要 CPU 去處理的,那 DMA 技術怎么實現不需要 CPU 參與就能實現數據傳輸呢?

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

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

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

DMA 最有價值的地方體現在當要傳輸的數據特別大、還要求速度特別快的時候,可以有效減少 CPU 的阻塞時間。

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

總結

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

參考資料

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

2016-05-23 16:06:25

軟件IC網

2014-05-09 14:43:31

思科人才培養思科

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

流量網絡終端應用

2019-02-14 12:41:54

程序員開發互聯網

2013-11-15 14:47:22

IE11微軟網絡安全

2012-01-06 10:32:33

2022-01-12 08:57:45

網絡攻擊漏洞Log4j

2018-07-18 13:33:38

大數據

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內存

2012-05-09 13:20:00

Win7

2021-11-30 23:34:15

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

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩在线观看网站 | 九九精品在线 | 91视频免费在观看 | 日韩精品视频中文字幕 | 一区二区三区小视频 | 国产在线视频一区二区 | av国产精品毛片一区二区小说 | 日韩欧美在线播放 | 午夜激情影院 | 91久久精品一区二区二区 | 国产免费a视频 | 九色porny自拍视频 | 久久久久久久一区 | 免费国产一区 | 韩日一区二区 | 在线播放一区 | 欧美精品在线观看 | 天天看片天天干 | 天天干精品| 99reav | 久久久性 | 国产精品永久在线观看 | 在线视频a| 亚洲综合精品 | 国产精品国产 | 精品欧美| 日韩中文字幕高清 | 欧美精品一区二区三区在线播放 | 99九色 | 欧洲高清转码区一二区 | 日韩av免费在线电影 | 一级毛片大全免费播放 | 日韩在线精品视频 | 成人亚洲综合 | 国产免费又黄又爽又刺激蜜月al | 99在线视频观看 | 亚洲一二三在线观看 | 日韩午夜一区二区三区 | www.激情.com | 亚洲成人一区 | 毛片国产 |