cache memory study--mmap copy scatter-list 比较

生命唯一的乐趣就是学习。

IC的arm核是 ARM1176JZ-S ,用armV6的指令集,不过可以先看arm7的,对应的linux kernel中的cache相关代码:
/linuxOS/arch/arm/mm
proc-v6.c cache-v6

#
# Processor Type
#
CONFIG_CPU_32=y
CONFIG_CPU_V6=y
CONFIG_CPU_32v6K=y
CONFIG_CPU_32v6=y
CONFIG_CPU_ABRT_EV6=y
CONFIG_CPU_CACHE_V6=y
CONFIG_CPU_CACHE_VIPT=y
CONFIG_CPU_COPY_V6=y
CONFIG_CPU_TLB_V6=y
CONFIG_CPU_CP15=y
CONFIG_CPU_CP15_MMU=y

一般来说:
scatter-list比mmap更加安全,但是如果用于dma操作,但是hardware又不支持scatter-list的话,dma操作会非常频繁。
但是对于读写dram的开销来说,mmap会好。

mmap:
前提是user用使用mmap出来的空间,如果user希望自己开buffer,然后copy到mmap的空间,这样读写dram的开销会比copy
的方式还大。

假设user用mmap出的空间,这个空间在cache中,dcache大小是16k。

 1) dma 之前flush dcache,一次burst写,这个写最多是16k,
 2)inv cache ;这个认为无开销
 3)当user需要这个数据时,由于缺页,会有一次burst 读, 大小是1个page- 全部data;

copy:
 假设user的buffer在cache里:
 1.copy from user 一次burst写;
 2. copy to user 一次 burst 读;

其实如果data量大于16k的话,可能会由于缺页再读一些page


scattler-list:
 假设user的buffer在cache里:
 1.dma 之前flush dcache,一次burst写,这个写可能会大于整个data量,因为flush是以
page为单位的;
 2.inv cache ;这个认为无开销
 3.当user需要这个数据时,由于缺页,会有一次burst 读, 大小是1个page- 全部data的page;


由上面讨论可见:
1.空间小于16k: copy 和mmap差不多,
2. 空间大于16k: mmap较好;
3. hardware没有scatter-list 支持,scatter-list 没有太多优势。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值