Linux文件预读对系统的影响(2)

发表于:2014-01-20来源:IT博客大学习作者:Yu Feng点击数: 标签:linux
test 1025 1084 1024 cp 3 36 18 ... #第二次拷贝test,我们可以看到 用户要1025个页面,预读决定读284,但是实际IO读了0,很合理,因为所有的页面在pagecache里面都已经

  test 1025 1084 1024

  cp 3 36 18

  ...

  #第二次拷贝test,我们可以看到 用户要1025个页面,预读决定读284,但是实际IO读了0,很合理,因为所有的页面在pagecache里面都已经存在

  Tue May 31 05:50:46 2011, TOTAL: 1038, SKIP: 804, REQ: 1039, TO_RD: 328, NR_RD: 0

  FILENAME REQ TO_RD NR_RD

  test 1025 284 0

  cp 3 4 0

  ...

  Linux系统不仅为文件的读取提供自动预读,还提供了readahead这样的系统调用和工具,帮助用户主动预加载数据,我们演示下:

  $ readahead junk

  Preloaded 0 files (0 KB) in 5 ms

  另外一个窗口说:

  Tue May 31 05:57:45 2011, TOTAL: 1044, SKIP: 805, REQ: 1045, TO_RD: 348, NR_RD: 0

  FILENAME REQ TO_RD NR_RD

  junk 1026 284 0

  readahead 3 4 0

  Linux还支持对每个设备设定预读的默认大小,不同的大小可以用来控制预读的力度,用户可以自行改变:

  $ pwd

  /sys/block/sda/queue

  $ cat read_ahead_kb

  128

  $ echo 256 |sudo tee read_ahead_kb

  256

  后续我会用这个工具分析leveldb数据库的行为,欢迎关注!

  总结: 如果actual读比用户req的要多很多, 那么我们的很多预读就浪费了,可以考虑减少预读的大小。

原文转自:http://blogread.cn/it/article/3670