2017-01-28 27 views
1

我想知道當設備的DMA控制器正在進行內存操作時,CPU可以處理/執行什麼樣的操作,以提高併發性水平?而如果CPU的緩存/寄存器是空的,怎麼另一個指令可以在不進行交織DMA獲取關於DMA和CPU併發性

THX

+0

任何特定的架構?並非所有的CPU和DMA都是相同的。可能太寬泛。 –

回答

1

它一般情況下,在大硬件,CPU可以做,而更多或任何少DMA正在進行中。通常,它只是繼續在OS的控制下正常執行正在運行的進程或內核任務。

關於:[?]

... [A] ND如果CPU高速緩存/寄存器是空的,如何另一指令可以 是沒有進行交織DMA取出

作爲我瞭解它,你問如果CPU需要訪問內存會發生什麼。一般來說,CPU通常會頻繁地訪問內存,不僅在「寄存器或緩存爲空」時,該活動可能正常或多或少地正常進行DMA正在進行時。內存總線通常由多個設備共享,包括多個支持DMA的設備,PCI卡,多個內核或多個CPU。 memory controller負責接受和履行所有這些問題,其中包括當時的仲裁。

所以,你是正確的,有可能是某種類型的「交錯」當兩個DMA和CPU訪問內存,只是當兩個核心存取存儲器(或者甚至是兩個邏輯線程在同一內核上運行),這可能會發生。它在實際中的工作方式取決於DRAM的組織方式,存儲器控制器的工作方式(以及存在的數量)以及其他許多細節,但總的來說,您期望現代存儲器系統具有高度的並行性 - 能夠支持多個訪問並經常接近RAM施加的帶寬限制。


如今,這幾乎意味着什麼比嵌入式微控制器更大。例如,即使移動CPU也是合格的。

通過正常我的意思是正常的機制使用,你可以期望的存儲器訪問工作,但不是說性能不會受到影響。 CPU的內存訪問將與DMA訪問(也可能是其他CPU訪問,PCI設備如視頻卡等)競爭,並且可能會變慢 - 但在合理的硬件上,它肯定不會等到DMA完成!

+1

雖然DMA和CPU內存訪問是交錯/管理的,但它可能引起顯着的影響。一個寫得很好的算法可以完全飽和內存總線帶寬,並且是「I/O綁定」。如果DMA發生,那麼你的算法會變慢,因爲DMA傳輸必須通過相同的總線來擠壓!我遇到過這種情況,感到很自豪! – bazza

+1

感謝您的詳細信息。我真的不知道那個「分享」的東西。內存控制器必須真的做一些瘋狂的東西。和@bazza一樣,它也很難達到你可以測試這個差異的程度。恭喜! – zgulser

+1

@bazza - 絕對!我不打算暗示其他情況。基本上,DRAM和Dram本身的路徑是共享資源,並且該資源的DMA使用不是免費的。也就是說DMA不會鎖定總線或任何東西,因此仍然可以訪問內存。 *大多數*算法對內存帶寬不是非常敏感,而是對延遲非常敏感,而一個好的控制器通常會以合理的方式滿足併發請求。 – BeeOnRope