Linux drm内存管理(一) 浅谈TTM与GEM,为什么我们需要TTM和GEM?

这篇具有很好参考价值的文章主要介绍了Linux drm内存管理(一) 浅谈TTM与GEM,为什么我们需要TTM和GEM?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

@[TOC](Linux drm内存管理(一) 为什么我们需要TTM和GEM?)

系列文章(更新中):
Linux drm内存管理(二) TTM内存管理基础概念

前言

  目前Kernel中DRM中GPU的VRAM(GPU片上显存)的管理框架是有GEM和TTM,其中TTM早于GEM出现,GEM的出现是为了解决TTM复杂的使用方法,将大部分的VRAM管理实现逻辑交由厂商实现。

正文

  如果你看了何总的GEM相关的博客,我这里额外补充一点我了解到的知识点,我们都知道了内核层的GEM指向或者说包含一片内存,应用层只能获取到GEM的handle,但是可以通过mmap获取到内核层GEM所指向的内存,从而实现CPU读写。
  GPU可以使用自己的片上显存,同时也能使用CPU的内存。假设我们GEM指向的内存都在GPU的片上显存上,那我们多次创建和释放GEM,片上显存是如何实现管理的?比如第一个GEM指向的是GPU的0-16MB,第二个GEM指向的是16-32MB,第三个GEM指向的是CPU的某块内存。很明显GEM只能负责完成内存的映射,我们额外需要一个管理GEM的框架去管理显存的分配,或者说我们需要一个框架去统一GPU的内存寻址总线

思考

  我看GEM和TTM还有AMD DRM的源码一直在思考一个问题,为什么要创建GEM\TTM框架去管理GPU的VRAM?
  我们都知道CPU的内存 在Linux中通过伙伴系统进行管理,为什么GPU不能简单套用CPU的内存管理子系统,而要额外创建GEM和TTM框架来管理GPU的VRAM?
  CPU 使用内存的方法:直接用alloc_pages向伙伴系统申请page,伙伴系统找一片空闲的内存返回,或者通过slab\slub\CMA\shmem等子系统间接申请page,申请成功后再对这些page进行读写。
  GPU和CPU类似,想办法在显存中找一片空闲的区域,成功找到后再对这片区域读写。共同点都是申请一片内存区域,然后读写使用,为什么GPU要用GEM和TTM进行管理呢?
根本原因上面提到过,GPU的内存总类很多,寻址总线无法统一

GPU使用内存相比CPU有以下缺点

1.GPU的内存种类多
  GPU有独显也有核显,核显借用CPU的RAM当作VRAM,独显有着自己的VRAM,当然也可以借用CPU的RAM当作VRAM,GPU的内存种类多,既能访问自己的显存,也能访问CPU的内存,GPU的内存总线没有统一,不同的bus访问方式甚至物理属性不同(解释下属性不同:如果Texture放RAM中,S3睡眠的时候内存是不断电的,如果Texture放VRAM中,S3睡眠数据全丢了),所以CPU内存管理框架无法运用在GPU上。

2.CPU与GPU之间带宽有限
  内存直接挂在CPU的地址和数据总线上,CPU访问自己的内存很简单。
  GPU一般是挂在CPU的外设总线上例如PCIE上,所以GPU的VRAM地址需要映射后访问。CPU和GPU不是直连,通讯带宽是有限的,我们当然可以通过将IO映射到总线上来,通过MMIO直接进行数据传输,但是访问会不断的触发外设的数据传输,而CPU和GPU的带宽肯定没有CPU和内存之间的带宽大,最好还是得借助老朋友DMA,去节省有限的带宽

3.GPU的内存使用方式与CPU不同
  GPU的使用上,往往使用一片显存作为最小使用单位,例如一个Texture,Shader,而非单个字节做为最小单位。实际上对于应用层来说,我们不关心Texture被分配会在显存的哪个位置,也不关心Texture是如何分配的,所以我们建立Buffer Object(BO)的概念,作为GPU显存使用的最小单位。

  综上,这就是GPU内存管理框架产生的原因,我们需要一套框架去管理BO的分配与释放,这套内存管理框架和核心思想:应用层并不需要在乎我们BO被分配在哪,但是内核层需要去处理GPU不同的bus,将bo放在合适的位置(例如VRAM或者是CPU的RAM)

TTM与GEM有什么不同

  TTM是用GEM的实现内存管理框架(AMD提出),GEM一般被GPU厂商嵌入自己的数据结构,构造自己的内存管理框架。

BO主要的应用场景实现区别

1.BO需要从VRAM 转移到 RAM,或者是从RAM转移到VRAM。(TTM提供实现接口)
2.BO需要将指向的内存映射出来,供应用层CPU访问。(TTM/GEM提供实现接口)
所以说TTM要比GEM复杂。文章来源地址https://www.toymoban.com/news/detail-418960.html

到了这里,关于Linux drm内存管理(一) 浅谈TTM与GEM,为什么我们需要TTM和GEM?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ThreadLocal-为什么会导致内存泄漏

    一个Thread中存在字段为ThreadLocalMap ThreadLocal.ThreadLocalMap threadLocals = null; 也就是说我们使用threadLocal进行set操作和get操作,其实就是操作该Thread的threadLocalMap。 这个map是一个基于数组的key和value的格式,在进行get的时候,会将调用对象this作为key进行查询。 hashMap是通过链表法,

    2024年02月03日
    浏览(62)
  • 为什么你的手机需要更大的内存

    可以确定的是,手机已经先于电脑开启了AI计算时代,新发布的手机几乎都集成了AI处理器,那为什么你还需要更大的内存呢,下面我们来探讨下这个问题。 虽然目前新发布的手机并不都集成了AI处理器,但AI处理器已经成为了一种趋势和特色,越来越多的手机厂商开始开发和

    2024年02月02日
    浏览(54)
  • 银河麒麟操作系统free查看服务器的内存,为什么比实际物理内存少很多?

    银河麒麟操作系统创建成功后,free -m命令查询内存大小,查询结果比实际物理内存小很多。 创建的虚拟机实际内存为8192M。系统内查询可用内存为6807M 使用 dmidecode -t memory 命令查看实际的硬件内存大小, free -m 查询系统内内存大小如下: 可以看到使用dmidecode -t memory查看的内

    2024年02月07日
    浏览(93)
  • 为什么选择C/C++内存检测工具AddressSanitizer?如何使用AddressSanitizer?

    目录 1、C++程序中的内存问题 2、AddressSanitizer是什么? 3、AddressSanitizer内存检测原理简述

    2024年02月09日
    浏览(45)
  • kafka的堆内存大小对kafka的影响以及为什么堆内存大一些kafka会更稳定

    堆内存是Java虚拟机(JVM)用于存储运行时数据的一部分内存。对于Kafka Broker,它是一个由Java编写的分布式消息系统,因此Kafka Broker的性能和稳定性会受到堆内存大小的影响。 以下是堆内存大小对Kafka的一些详细影响: 存储和缓存消息: Kafka Broker使用内存来存储消息,以支持

    2024年01月19日
    浏览(47)
  • 【API 管理】什么是 API 管理,为什么它很重要?

    当今复杂的数字生态系统由许多相互关联的部分组成。API 作为看门人和连接器在其中发挥着关键作用——提供了许多最终用户甚至没有注意到的自动化机会和效率。 企业密切关注 API。它们对于应用程序、数据和各种客户交互的功能至关重要。 这使得 API 管理成为几乎每个部

    2024年01月19日
    浏览(47)
  • 买手机就要买大容量的以及为什么手机内存满了之后会变卡

    我现在手里正在用的这个是 IPhone XR,2019 年还是 2018 年买的,我记得买的时候已经上市一段时间了。这个是苹果第一款双卡双待的手机,到现在用了三四年了。 都说苹果的手机可以用很多年还很流畅,而安卓的手机一般一两年就卡的没法用,需要换了。这种说法有一定的依据

    2024年02月09日
    浏览(61)
  • macOS Sonoma 14.3.1终于发布啦 为什么清除内存对于提高mac性能非常重要?

    苹果今天发布了macOS Sonoma 14.3.1,这是对去年9月发布的‌macOS Sonoma‌操作系统的微小更新。‌macOS Sonoma ‌14.3.1是在macOS Sonoma 14.3发布几周后推出的。 ‌‌‌‌macOS Sonoma 14.3‌.1更新可以在所有符合条件的Mac电脑上,使用系统设置的软件更新下载。 今天的更新解决了一个令人沮

    2024年02月22日
    浏览(40)
  • 为什么企业需要IT服务管理?

    什么是IT服务管理? 将IT服务管理功能扩展到技术服务之外,解决以业务为中心通过单一平台,门户和服务目录管理服务供需,通过PaaS/低代码开发工具加速创新和工作流自动化。   为什么企业需要IT服务管理? 为了更好管理公司内不同业务,员工需要IT,人力资源,设施,法

    2024年02月11日
    浏览(48)
  • 我们为什么需要API管理系统?

    我们为什么需要API管理系统? 随着web技术的发展,前后端分离成为越来越多互联网公司构建应用的方式。前后端分离的优势是一套Api可被多个客户端复用,分工和协作被细化,大大提高了编码效率,但同时也带来一些“副作用”: 接口文档不可靠。很多小伙伴管理接口文档,

    2024年02月12日
    浏览(73)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包