0
点赞
收藏
分享

微信扫一扫

系统性能之内存篇(一)

孟祥忠诗歌 2023-02-21 阅读 132

1.buffer和cache

  • Buffers 是对原始磁盘块的临时存储,也就是用来缓存磁盘的数据,通常不会特别大(20MB 左右)。这样,内核就可以把分散的写集中起来,统一优化磁盘的写入,比如可以把多次小的写合并成单次大的写等等。(读写磁盘)
  • Cached 是从磁盘读取文件的页缓存,也就是用来缓存从文件读取的数据。这样,下次访问这些文件数据时,就可以直接从内存中快速获取,而不需要再次访问缓慢的磁盘。(读写文件)

2.案例分析

使用dd来模拟磁盘和文件I/O,观察I/O变化情况。为了减少缓存的影响,先清理下系统缓存。echo 3 > /proc/sys/vm/drop_caches

2.1 磁盘和文件写案例 

执行vmstat 1 ,关注buff和cache;bi和bo。正常情况下这些值变化不大。

系统性能之内存篇(一)_数据

接下来执行dd命令,随机读取设备,生成500M大小文件。

$ dd if=/dev/urandom of=/tmp/file bs=1M count=500

# vmstat 1
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 7499460 1344 230484 0 0 0 0 29 145 0 0 100 0 0
1 0 0 7338088 1752 390512 0 0 488 0 39 558 0 47 53 0 0
1 0 0 7158872 1752 568800 0 0 0 4 30 376 1 50 49 0 0
1 0 0 6980308 1752 747860 0 0 0 0 24 360 0 50 50 0 0

发现cache 在不断的增长,buff保持不变。

继续执行dd命令,随机向磁盘分区写入文件。

$ dd if=/dev/urandom of=/dev/sdb1 bs=1M count=2048

# vmstat 1
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----

r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 7584780 153592 97436 0 0 684 0 31 423 1 48 50 2 0
1 0 0 7418580 315384 101668 0 0 0 0 32 144 0 50 50 0 0
1 0 0 7253664 475844 106208 0 0 0 0 20 137 0 50 50 0 0
1 0 0 7093352 631800 110520 0 0 0 0 23 223 0 50 50 0 0
1 1 0 6930056 790520 114980 0 0 0 12804 23 168 0 50 42 9 0
1 0 0 6757204 949240 119396 0 0 0 183804 24 191 0 53 26 21 0
1 1 0 6591516 1107960 123840 0 0 0 77316 22 232 0 52 16 33 0

发现buff和cache都在增长,buff增长的较快。

结论:写文件时会用到 Cache 缓存数据,而写磁盘则会用到 Buffer 来缓存数据

2.2 磁盘和文件读案例

接下来执行dd命令,读取数据文件写入空设备

$ dd if=/tmp/file of=/dev/null

# vmstat 1
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 1 0 7724164 2380 110844 0 0 16576 0 62 360 2 2 76 21 0
0 1 0 7691544 2380 143472 0 0 32640 0 46 439 1 3 50 46 0
0 1 0 7658736 2380 176204 0 0 32640 0 54 407 1 4 50 46 0
0 1 0 7626052 2380 208908 0 0 32640 40 44 422 2 2 50 46 0

发现cache 在不断的增长,buff保持不变。

继续执行dd命令,从磁盘分区读取数据,写入空设备。

$ dd if=/dev/sda1 of=/dev/null bs=1M count=1024

# vmstat 1
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 7225880 2716 608184 0 0 0 0 48 159 0 0 100 0 0
0 1 0 7199420 28644 608228 0 0 25928 0 60 252 0 1 65 35 0
0 1 0 7167092 60900 608312 0 0 32256 0 54 269 0 1 50 49 0
0 1 0 7134416 93572 608376 0 0 32672 0 53 253 0 0 51 49 0
0 1 0 7101484 126320 608480 0 0 32748 0 80 414 0 1 50 49 0

发现buff和cache都在增长,buff增长的较快。

结论:读文件时会用到 Cache 缓存数据,而读磁盘则会用到 Buffer 来缓存数据。


举报

相关推荐

0 条评论