生命唯一的乐趣就是学习。
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 没有太多优势。
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 没有太多优势。