有关Cache –(1) linux list之中的Prefetc
转载:http://www.kernelchina.org/node/1050
linux的list实现之中有如下东东:
#define list_for_each(pos, head) \
for (pos = (head)->next; prefetch(pos->next), pos != (head); \
pos = pos->next)
在遍历过程中使用了prefetch,其功能是数据的预先读取。当你确认后继续要读取某内存的信息的时候,可以采用prefetch将这一块数据读
取到cache之中,以便后继快速访问。我的理解是条件不止这些,如果后继读取的内容仅仅被访问一次,那么是否prefetch也就没有意义了。后继访问
的内存单元多次被读写才有意义。对于上述的list操作,在循环内部往往还会访问next指向的structure的内容,因此访问多次是可以期待的。
除了list之外很容易理解,array中的相邻的邻居,在遍历的时候也是可以prefetch的。prefetch的一个单元常常是一个cacheline的大小。
linux的prefetch的API描述如下
/*
prefetch(x) attempts to pre-emptively get the memory
pointed to by address "x" into the CPU L1 cache. prefetch(x) should not
cause any kind of exception, prefetch(0) is
specifically ok.
prefetch() should be defined by the architecture, if not, the #define below provides a no-op define.
There are 3 prefetch() macros:
prefetch(x) - prefetches the cacheline at "x" for read
prefetchw(x) - prefetches the cacheline at "x" for write
spin_lock_prefetch(x) - prefetches the spinlock *x for taking there is
also PREFETCH_STRIDE which is the architecure-prefered "lookahead" size
for prefetching streamed operations.
*/
看来无论读写都需要prefetch,我看了一下,多数平台这几个宏定义实现是一样的。(有什么细微差别不详,都是把数据写到cache中,等待高人指点)
在更加high level的层面也有prefetch的概念,例如OS之中的disk cache。Windows在启动的时候以提供prefetch功能预先加载可能会被后继启动的应用使用到的数据。
软件也可以采用类似手段,将后继会用到的数据在启动的时候预先读取到内存中。
相关概念在传统的数据结构课程之中有所缺失。
【参考】
http://en.wikipedia.org/wiki/Cache
有关Cache –(1) linux list之中的Prefetc的更多相关文章
- free命令(buffer与cache区别/linux查看空闲内存)
自:http://www.cnblogs.com/coldplayerest/archive/2010/02/20/1669949.html Linux上free命令的输出. 下面是free的运行 ...
- 【Linux】基于Linux的buffer和cache学习
缓存(cached)是把读取过的数据保存起来,重新读取时若命中(找到需要的数据)就不要去读硬盘了,若没有命中就读硬盘.其中的数据会根据读取频率进行组织,把最频繁读取的内容放在最容易找到的位置,把不再读 ...
- Linux内存中的Cache真的能被回收么?
在Linux系统中,我们经常用free命令来查看系统内存的使用状态.在一个RHEL6的系统上,free命令的显示内容大概是这样一个状态: [root@tencent64 ~]# free ...
- Linux中Buffer和Cache的区别
1. Cache:缓存区,是高速缓存,是位于CPU和主内存之间的容量较小但速度很快的存储器,因为CPU的速度远远高于主内存的速度,CPU从内存中读取数据需等待很长的时间,而 Cache保存着CPU刚 ...
- Linux中Cache内存占用过高解决办法
在Linux系统中,我们经常用free命令来查看系统内存的使用状态.在一个RHEL6的系统上,free命令的显示内容大概是这样一个状态: 这里的默认显示单位是kb,我的服务器是128G内存,所以数字显 ...
- Linux 内存中的Cache,真的能被回收么?
您真的了解Linux的free命令么? 在Linux系统中,我们经常用free命令来查看系统内存的使用状态.在一个RHEL6的系统上,free命令的显示内容大概是这样一个状态: 这里的默认显示单位是k ...
- Linux 中 Buffer/Cache内存占用过高解决方法
在Linux系统中,我们经常用free命令来查看系统内存的使用状态.在一个RHEL6的系统上,free命令的显示内容大概是这样一个状态: 这里的默认显示单位是kb,我的服务器是128G内存,所以数字显 ...
- [转帖]Linux中buff/cache内存占用过高解决办法
Linux中buff/cache内存占用过高解决办法 https://www.cnblogs.com/rocky-AGE-24/p/7629500.html /proc/sys/vm/drop_cac ...
- Linux中buff/cache内存占用过高解决办法
在Linux系统中,我们经常用free命令来查看系统内存的使用状态.在一个centos7的系统上,free命令的显示内容大概是这样一个状态: 这个命令几乎是每一个使用过Linux的人必会的命令,但越是 ...
随机推荐
- echarts源码中关于 判断平台的有用代码
function detect(ua) { var os = {}; var browser = {}; // var webkit = ua.match(/Web[kK]it[\/]{0,1}([\ ...
- 牛客挑战赛14-F细胞
https://www.nowcoder.com/acm/contest/81/F 循环卷积的裸题,太久没做FFT了,这么裸的循环卷积都看不出来 注意一下本文的mod 都是指表示幂的模数,而不是NTT ...
- hdu 5020(斜率的表示+STL)
Revenge of Collinearity Time Limit: 8000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/ ...
- nodejs Centos环境搭建
使用二进制文件安装: node 环境下载 https://nodejs.org/en/download/ 下载里面的windows 安装包 和 linux 安装包 1)windows安装 window ...
- Sharing Cookies --AtCoder
题目描述 Snuke is giving cookies to his three goats.He has two cookie tins. One contains A cookies, and ...
- ByteBuffer的介绍
转摘 有一个问题需要明确:为什么要使用bytebuffer,它比byte比起来有什么优点? 很简单:为了提高IO的效率.怎样提高的,这个还得google一下. 记住几个标志的含义:position[0 ...
- 2016北京集训测试赛(十六)Problem A: 任务安排
Solution 这道题告诉我们, 不能看着数据范围来推测正解的时间复杂度. 事实证明, 只要常数足够小, \(5 \times 10^6\)也是可以跑\(O(n \log n)\)算法的!!! 这道 ...
- List与set
1,List与set的区别? List:元素是有序的,元素可以重复,因为集合体系有索引 set:元素是无序的,元素不可以重复,集合体系没有索引 2,list里面特有的方法: 在制定的位置添加元素add ...
- 设置ListView的item不能点击
写了一个ListView结合volley的demo ListView只是用来展示数据,所以不需要点击效果. 网上搜索了下: 可以禁用ListView ListView.setEnabled(false ...
- asp.net获取URL方法
方法如下: Request.Url.ToString()获取完整url(协议名+域名+站点名+文件名+参数):https://localhost:44300/WebForm1.aspx?abc=123 ...