Linux cache对文件读取性能的影响

遇到一个奇怪的问题,我们的程序有时候会很慢,但无法重现,只是偶尔很慢。
后来发现是linux的文件cache引起的。linux第一次读一个文件,是从磁盘读的,速度会比较慢,后面再读,只要这个文件还在系统的cache里就会很快。
我们读的磁盘是nas的,2.3GB的文件,第一次无cache,读取平均73.2s,而后的读取就有cache了,读取平均18.7s。有cache后读取时间只有无cache读取的1/4多点。
但如果我们读的是ssd的盘,没有cache也可以很快,同样上面的2.3GB文件,无cache读取平均19.1s。仅多用了2%的时间。
因为linux的cache是有自己的调度算法,所以我们的文件过一段时间可能就不在cache里了,这个时候,再读取这些文件就很慢。
怎么测试无cache读取文件的性能呢?清cache:

sync
echo 3 > /proc/sys/vm/drop_caches

清cache前,用free -h看看,注意mem的倒数第二个参数(buff/cache)

$ free -h
              total        used        free      shared  buff/cache   available
Mem:           125G         12G         95G        1.2G         17G        110G
Swap:            0B          0B          0B

清完后,再free -h:

$ free -h
              total        used        free      shared  buff/cache   available
Mem:           125G         13G        109G        1.2G        2.1G        109G
Swap:            0B          0B          0B

可以,看到buff/cache数值的变化。
然后第一次读你需要的文件,就是无cache读的。后面再读,就是有cache了,读取很快了,如果没有其他人,你也没读其他文件,这个文件你读几百遍都一直很快。

ssd硬盘的接口有

SATA
mSATA(mini-SATA)
M.2
PCI-E
U.2

等,我上面测试的ssd是比较普通的SATA3接口,速度已经很不错了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值