Linux map type uncache 和 write combine区别


前言

这段时间被Map Cache Type坑了一次。
GPU的PCI bar地址map成uncache 的还是 write combine?


一、定义

uncache(uc) : map后,CPU读写不经过Cache
write combine(wb): map后,CPU读写同样不经过Cache,但是和Cache之间有一块buffer,以便于将多次连续小读写合成一次大读写

这是互联网上能查到的定义,但是实际应用并没有给出结论,什么情况下用什么,无脑用uc肯定是不会出错的。

二、隐含区别

如果我要往外设的寄存器进行读写,如果是uncache的,这是正确的做法,不会有什么潜在的问题。
那如果是write combine的会发生什么?
寄存器我们知道有FIFO,我们读写设备的FIFO(例如串口),我们每读写一次,串口会弹出/记录数据 同时改变FIFO寄存器的值,此时读写次数会影响到设备行为/寄存器的值。
而write combine会将多次连续小读写合成一次大读写,甚至是读写重排,改变了读写的次数/行为,对于类似读写敏感的寄存器会出现不可预知的错误。

如果我要在vram中进行读写
那如果是write combine的会发生问题吗?
首先给出结论:不会
vram并不会像寄存器对读写敏感,像frame buffer以及gart table都没问题。

(有些人可能以为gart table必须得用uncache,实际上write combine就行了。)


总结

寄存器部分 map成uncache,而类似vram对读写顺序以及次数不敏感的map成write combine用于提升读写性能。

小问题,如果我的寄存器也对读写不敏感怎么办,例如配置寄存器,这种情况该用什么?

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值