[英]Memory allocation failed when required more than 16GB contiguous memory
[英]Why Contiguous memory allocation is required in linux?
大多數設備需要連續的內存。 例如GPU,VPU。
CMA和靜態內存分配是連續內存的示例。
為什么需要連續內存?
對於只能與連續范圍的物理內存一起使用的I / O設備,需要連續內存分配(CMA)。 在具有I / O內存管理單元(IOMMU)的系統上,這不會成為問題,因為IOMMU可以將設備地址空間中連續的緩沖區映射到物理內存的不連續區域。 同樣,某些設備可以執行分散/收集DMA (即可以從多個不連續的緩沖區讀取/寫入數據)。 理想情況下,所有I / O設備都應設計為在IOMMU后面運行,或者應具有分散/聚集DMA的能力。 不幸的是,情況並非如此,並且有些設備需要物理上連續的緩沖區。 設備驅動程序有兩種分配連續緩沖區的方法:
CMA通過提供這兩種方法的優點而沒有缺點,解決了這個確切的問題。 基本思想是使遷移已分配的物理頁面以為連續緩沖區創建足夠的空間成為可能。 有關CMA如何工作的更多信息,請參見此處 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.