理论上讲清空或者说填上随机产生的数据效果是一样的,除非NULL或你的随机数据恰好是要写进去的数据。 ia32的话
可以清cache,但是不能将自己的值写进去
清空的办法有几种
1是刷CR3
2是用WBINVD指令(推荐)
如果楼主只是不想用cache,可以在一开始就把CR0里面的CD标志位置位,然后cache就不会更新了。
注意只是不会更新,已经准备好的cache还是会被使用,所以要在一开始关闭;或者关闭之后再用WBINVD
回复 #12 dxcnjupt 的帖子
谢谢!我只是想测试之前清除cache的数据,测试的时候还要用到cache,cache不能关闭,请问这个WBINVD指令可以做到这一点吗? 原帖由 h168ch 于 2007-12-2 13:18 发表 http://linux.chinaunix.net/bbs/images/common/back.gif请教各位大侠,有什么办法可以把cpu 的cache清空,或者把cache用随机产生的数据填满?
谢谢!
一、将 cache 清空可以:
1、invd 指令刷新 cache
2、wbinvd 指令刷新 cache 并回写 memory
3、clflush 指令刷新 cache line
二、用随机产生数据填满 cache 可以:
1、先在 memory 中产生随机数据
2、使用 prefecth 系列指令加载到 cache 中
回复 #14 mik 的帖子
大侠就是大侠。。。:em09:谢谢!
回复 #14 mik 的帖子
1、invd 指令刷新 cache2、wbinvd 指令刷新 cache 并回写 memory
3、clflush 指令刷新 cache line
这些指令运行以后cache是不是就无效了,我只是想把cache刷新一下,后面的程序还要用到cache,cache里面的数据可以不要,请问这些指令可以吗? 原帖由 h168ch 于 2007-12-2 20:10 发表 http://linux.chinaunix.net/bbs/images/common/back.gif
1、invd 指令刷新 cache
2、wbinvd 指令刷新 cache 并回写 memory
3、clflush 指令刷新 cache line
这些指令运行以后cache是不是就无效了,我只是想把cache刷新一下,后面的程序还要用到cache,cache里面的数 ...
CR0.CD 才会置 cache 无效,刷新只是清空当时的数据
回复 #17 mik 的帖子
再问一个比较低级一点的问题,我在linux下用c语言写了个小程序,在里面用asm嵌入了上面的命令,然后用gcc编译运行,编译可以通过,运行的 时候提示断错误,为什么 会出现这种情况呢?怎么做可以在 c语言里嵌入上面的命令呢? wbinvd是特权指令......要在ring0才能用clflush 好像不是一个具体的指令吧,查文档没找到,试着用nasm编译也编不出来。
如果楼主不想进ring0,可以用Mik说的那个办法。
页:
1
[2]