簡體   English   中英

為什么在Linux中需要連續的內存分配?

[英]Why Contiguous memory allocation is required in linux?

大多數設備需要連續的內存。 例如GPU,VPU。

CMA和靜態內存分配是連續內存的示例。

為什么需要連續內存?

對於只能與連續范圍的物理內存一起使用的I / O設備,需要連續內存分配(CMA)。 在具有I / O內存管理單元(IOMMU)的系統上,這不會成為問題,因為IOMMU可以將設備地址空間中連續的緩沖區映射到物理內存的不連續區域。 同樣,某些設備可以執行分散/收集DMA (即可以從多個不連續的緩沖區讀取/寫入數據)。 理想情況下,所有I / O設備都應設計為在IOMMU后面運行,或者應具有分散/聚集DMA的能力。 不幸的是,情況並非如此,並且有些設備需要物理上連續的緩沖區。 設備驅動程序有兩種分配連續緩沖區的方法:

  • 設備驅動程序可以在啟動時分配物理內存的塊。 這是可靠的,因為大多數物理內存將在引導時可用。 但是,如果不使用I / O設備,則會浪費分配的物理內存。
  • 可以按需分配物理內存的塊,但是可能很難找到所需大小的連續可用范圍。 但是,優點是僅在需要時才分配內存。

CMA通過提供這兩種方法的優點而沒有缺點,解決了這個確切的問題。 基本思想是使遷移已分配的物理頁面以為連續緩沖區創建足夠的空間成為可能。 有關CMA如何工作的更多信息,請參見此處

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM