如果有 8 個核心 cpu,理論上 OS 可以同時寫入 8 個檔案而無需背景關系切換?
順序和同時寫入 8 個 1gb 文本檔案的速度有很大差異嗎?(使用執行緒或多行程)
uj5u.com熱心網友回復:
您對磁盤傳輸有很大的誤解。現在磁盤 IO 不是由 CPU 完成的。當 CPU 必須從 IO 埠( https://wiki.osdev.org/ATA_PIO_Mode )讀取/寫入資料時,它曾經是這樣。ATA PIO 模式是最新的(并且仍然受支持的)不是 DMA 的硬碟傳輸模式。
否則,您將擁有一個 AHCI,它是一個可以控制硬碟的 PCI 設備。AHCI 是與現代 SATA 硬碟互動的規范 ( https://www.intel.ca/content/www/ca/en/io/serial-ata/serial-ata-ahci-spec-rev1-3- 1.html)。它不控制 NVME 磁盤。NVME 是一個單獨的類,必須由具有不同介面 ( https://wiki.osdev.org/NVMe ) 的專用 PCI 控制器控制。
如果我沒記錯的話,PCI 總線是串行的。他們一次傳輸一位。它們可以非常快,并且 PCI 規范用于高端服務器,PCI-SIG 小組經常發布新規范,旨在提供新功能(新速度、新機制等)。
在 PCI 中,您寫入 RAM 中的一些常規位置,這些位置寫入設備的 PCI 暫存器。這通常稱為記憶體映射 IO (MMIO)。可以肯定的是,它比您在問題中所說的要復雜得多。具有 8 個內核的 CPU 不會同時寫入 8 個檔案。即使在沒有 DMA 的系統中,讀取的 IO 埠也只能從硬碟上的一個特定位置存盤一些資料。它不能被 8 個核心同時讀取。
我對 AHCI 不太確定,但通常情況下,PCI 硬體介面幾乎不需要鎖定。它們在 RAM 中具有必須像操作佇列一樣修改的結構。可以肯定的是,如果一個核心修改了佇列,另一個核心一定不能也觸及佇列中的相同位置。如果 8 核必須做檔案 IO,則 8 核會將其操作添加到 AHCI 的 DMA 作業佇列中。我從未實作過 AHCI 驅動程式,但在 AHCI 規范(第 5 章)中說明:
AHCI 的資料結構是在假設 HBA 中的每個埠都包含自己的 DMA 引擎的情況下構建的,也就是說,每個埠都可以獨立于任何其他埠執行。這是軟體的自然流程,因為每個設備通常都被視為一個單獨的執行執行緒。強烈建議以這種方式進行 HBA 實施。
軟體向 HBA 提供一個埠的命令串列,然后由 HBA 處理它們。對于命令串列深度為“1”的 HBA,這是一個單步操作,軟體僅提供一個命令。對于支持命令串列的 HBA,可能會發布多個命令。
軟體將作業系統接收到的新命令發布到串列中的空槽中,并在 PxCI 暫存器中設定相應的槽位。HBA 不斷查看 PxCI 以確定是否有命令要傳輸到設備。
這里,HBA 指的是 AHCI 規范(實際芯片)的硅實作。我不確定這意味著什么,但我認為這意味著可以同時發生多個 DMA 作業,但可能不是來自同一個設備/硬碟。由于在大多數計算機上只有一個主硬碟,所以我想不會有 8 個 DMA 作業來自同一個磁盤,因為“CPU 中有 8 個內核”。
uj5u.com熱心網友回復:
無論cpu內核如何,os都可以一次打開許多檔案并寫入,但瓶頸是硬碟驅動器。即使您有 8 個核心 cpu,您寫入的所有資料也必須按順序傳輸到硬碟驅動器。
但是現代作業系統不直接寫入檔案,所以如果您同時打開并寫入 8 個檔案,它將存盤在 RAM 上并排隊等待寫入硬碟驅動器,因此每當硬碟驅動器空閑時,它將獲取該資料從 ram 并將其寫入磁盤。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/439002.html
下一篇:apt按多個欄位顯示過濾器
