免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 7382 | 回复: 22
打印 上一主题 下一主题

[内存管理] 请教文件系统的cache memory [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-08-15 22:53 |只看该作者 |倒序浏览
当偶系统硬盘读写频繁的时候,文件系统的cache特别大,整个内存使用率一直在95% 以上,尽管书上说,这完全不必担心,——“ 其实这缓存内存(Cache Memory)在你需要使用内存的时候会自动释放,所以你不必担心没有内存可用”

但事实上,它还是影响到了我,明显地内存不足,在内存使用率高的时候:
  1. Aug 13 21:38:41 AnShion <12> klogd: [603494.431057] kworker/0:1: page allocation failure. order:4, mode:0x4020
  2. Aug 13 21:38:41 AnShion <12> klogd: [603494.431060] Pid: 0, comm: kworker/0:1 Not tainted 2.6.38.8 #357
  3. Aug 13 21:38:41 AnShion <12> klogd: [603494.431062] Call Trace:
  4. Aug 13 21:38:41 AnShion <12> klogd: [603494.431068]  [<c01bf5c0>] ? __alloc_pages_nodemask+0x5b0/0x680
  5. Aug 13 21:38:41 AnShion <12> klogd: [603494.431071]  [<c01bf6a7>] ? __get_free_pages+0x17/0x30
  6. Aug 13 21:38:41 AnShion <12> klogd: [603494.431074]  [<c01e9c98>] ? kmalloc_order_trace+0x28/0x90
  7. Aug 13 21:38:41 AnShion <12> klogd: [603494.431077]  [<c0125708>] ? default_spin_lock_flags+0x8/0x10
  8. Aug 13 21:38:41 AnShion <12> klogd: [603494.431080]  [<c01eb3d2>] ? __kmalloc+0x1a2/0x1b0
  9. Aug 13 21:38:41 AnShion <12> klogd: [603494.431083]  [<c069dce0>] ? pskb_expand_head+0x90/0x210
  10. Aug 13 21:38:41 AnShion <12> klogd: [603494.431086]  [<c069ef6d>] ? __pskb_pull_tail+0x4d/0x300
  11. Aug 13 21:38:41 AnShion <12> klogd: [603494.431088]  [<c069c852>] ? skb_find_text+0x72/0x90
  12. Aug 13 21:38:41 AnShion <12> klogd: [603494.431092]  [<f81722d8>] ? replace_mt+0x248/0x4a0 [xt_replace]
  13. Aug 13 21:38:41 AnShion <12> klogd: [603494.431094]  [<c06a01c5>] ? skb_checksum+0x1b5/0x280
  14. Aug 13 21:38:41 AnShion <12> klogd: [603494.431097]  [<c06a127b>] ? __skb_checksum_complete_head+0x1b/0x70
  15. Aug 13 21:38:41 AnShion <12> klogd: [603494.431099]  [<c06a12db>] ? __skb_checksum_complete+0xb/0x10
  16. Aug 13 21:38:41 AnShion <12> klogd: [603494.431103]  [<c0741761>] ? nf_ip_checksum+0x61/0x120
  17. Aug 13 21:38:41 AnShion <12> klogd: [603494.431107]  [<c06e0e10>] ? ____nf_conntrack_find+0x100/0x140
  18. Aug 13 21:38:41 AnShion <12> klogd: [603494.431111]  [<c074a4c5>] ? ipt_do_table+0x295/0x3b0
  19. Aug 13 21:38:41 AnShion <12> klogd: [603494.431115]  [<c074ae30>] ? iptable_mangle_hook+0x40/0x150
  20. Aug 13 21:38:41 AnShion <12> klogd: [603494.431118]  [<c06db887>] ? nf_iterate+0x67/0x90
  21. Aug 13 21:38:41 AnShion <12> klogd: [603494.431123]  [<c0701e50>] ? ip_forward_finish+0x0/0x60
  22. Aug 13 21:38:41 AnShion <12> klogd: [603494.431126]  [<c06dba30>] ? nf_hook_slow+0xa0/0xf0
  23. Aug 13 21:38:41 AnShion <12> klogd: [603494.431129]  [<c0701e50>] ? ip_forward_finish+0x0/0x60
  24. Aug 13 21:38:41 AnShion <12> klogd: [603494.431132]  [<c070208d>] ? ip_forward+0x1dd/0x430
  25. Aug 13 21:38:41 AnShion <12> klogd: [603494.431135]  [<c0701e50>] ? ip_forward_finish+0x0/0x60
  26. Aug 13 21:38:41 AnShion <12> klogd: [603494.431138]  [<c0700751>] ? ip_rcv_finish+0x241/0x3c0
  27. Aug 13 21:38:41 AnShion <12> klogd: [603494.431142]  [<c0700b76>] ? ip_rcv+0x2a6/0x320
  28. Aug 13 21:38:41 AnShion <12> klogd: [603494.431145]  [<c0700510>] ? ip_rcv_finish+0x0/0x3c0
  29. Aug 13 21:38:41 AnShion <12> klogd: [603494.431148]  [<c06a94b8>] ? __netif_receive_skb+0x258/0x520
  30. Aug 13 21:38:41 AnShion <12> klogd: [603494.431151]  [<c01e8d10>] ? add_partial+0x40/0x70
  31. Aug 13 21:38:41 AnShion <12> klogd: [603494.431154]  [<c06a98b3>] ? netif_receive_skb+0x23/0x50
  32. Aug 13 21:38:41 AnShion <12> klogd: [603494.431157]  [<c06a99d7>] ? napi_skb_finish+0x37/0x50
  33. Aug 13 21:38:41 AnShion <12> klogd: [603494.431160]  [<c06aa01b>] ? napi_gro_receive+0xdb/0xf0
  34. Aug 13 21:38:41 AnShion <12> klogd: [603494.431163]  [<c069d8bf>] ? consume_skb+0x4f/0x70
  35. Aug 13 21:38:41 AnShion <12> klogd: [603494.431170]  [<f81d679c>] ? igb_poll+0x5fc/0xef0 [igb]
  36. Aug 13 21:38:41 AnShion <12> klogd: [603494.431174]  [<c0819348>] ? _raw_spin_lock+0x8/0x10
  37. Aug 13 21:38:41 AnShion <12> klogd: [603494.431177]  [<c01e8d10>] ? add_partial+0x40/0x70
  38. Aug 13 21:38:41 AnShion <12> klogd: [603494.431181]  [<c06ae6e6>] ? dst_destroy+0x86/0x100
  39. Aug 13 21:38:41 AnShion <12> klogd: [603494.431184]  [<c06ae6e6>] ? dst_destroy+0x86/0x100
  40. Aug 13 21:38:41 AnShion <12> klogd: [603494.431187]  [<c06fca01>] ? dst_rcu_free+0x21/0x40
  41. Aug 13 21:38:41 AnShion <12> klogd: [603494.431190]  [<c06a9e4a>] ? net_rx_action+0xaa/0x1a0
  42. Aug 13 21:38:41 AnShion <12> klogd: [603494.431194]  [<c014bff1>] ? __do_softirq+0xb1/0x190
  43. Aug 13 21:38:41 AnShion <12> klogd: [603494.431197]  [<c014bf40>] ? __do_softirq+0x0/0x190
  44. Aug 13 21:38:41 AnShion <12> klogd: [603494.431199]  <IRQ>  [<c014bebd>] ? irq_exit+0x5d/0x80
  45. Aug 13 21:38:41 AnShion <12> klogd: [603494.431205]  [<c0104bc5>] ? do_IRQ+0x45/0xb0
  46. Aug 13 21:38:41 AnShion <12> klogd: [603494.431208]  [<c0109328>] ? sched_clock+0x8/0x10
  47. Aug 13 21:38:41 AnShion <12> klogd: [603494.431210]  [<c01036f0>] ? common_interrupt+0x30/0x38
  48. Aug 13 21:38:41 AnShion <12> klogd: [603494.431214]  [<c016007b>] ? next_pidmap+0x5b/0x90
  49. Aug 13 21:38:41 AnShion <12> klogd: [603494.431219]  [<c040e7c3>] ? acpi_idle_enter_simple+0xee/0x122
  50. Aug 13 21:38:41 AnShion <12> klogd: [603494.431224]  [<c06740d9>] ? cpuidle_idle_call+0xd9/0x1c0
  51. Aug 13 21:38:41 AnShion <12> klogd: [603494.431226]  [<c010214a>] ? cpu_idle+0x8a/0xc0
  52. Aug 13 21:38:41 AnShion <12> klogd: [603494.431229]  [<c0813789>] ? start_secondary+0x1a1/0x1e8
  53. Aug 13 21:38:41 AnShion <12> klogd: [603494.431231] Mem-Info:
  54. Aug 13 21:38:41 AnShion <12> klogd: [603494.431233] DMA per-cpu:
  55. Aug 13 21:38:41 AnShion <12> klogd: [603494.431235] CPU    0: hi:    0, btch:   1 usd:   0
  56. Aug 13 21:38:41 AnShion <12> klogd: [603494.431237] CPU    1: hi:    0, btch:   1 usd:   0
  57. Aug 13 21:38:41 AnShion <12> klogd: [603494.431239] CPU    2: hi:    0, btch:   1 usd:   0
  58. Aug 13 21:38:41 AnShion <12> klogd: [603494.431240] CPU    3: hi:    0, btch:   1 usd:   0
  59. Aug 13 21:38:41 AnShion <12> klogd: [603494.431242] CPU    4: hi:    0, btch:   1 usd:   0
  60. Aug 13 21:38:41 AnShion <12> klogd: [603494.431243] CPU    5: hi:    0, btch:   1 usd:   0
  61. Aug 13 21:38:41 AnShion <12> klogd: [603494.431244] CPU    6: hi:    0, btch:   1 usd:   0
  62. Aug 13 21:38:41 AnShion <12> klogd: [603494.431245] CPU    7: hi:    0, btch:   1 usd:   0
  63. Aug 13 21:38:41 AnShion <12> klogd: [603494.431246] Normal per-cpu:
  64. Aug 13 21:38:41 AnShion <12> klogd: [603494.431248] CPU    0: hi:  186, btch:  31 usd: 159
  65. Aug 13 21:38:41 AnShion <12> klogd: [603494.431249] CPU    1: hi:  186, btch:  31 usd: 189
  66. Aug 13 21:38:41 AnShion <12> klogd: [603494.431250] CPU    2: hi:  186, btch:  31 usd: 169
  67. Aug 13 21:38:41 AnShion <12> klogd: [603494.431251] CPU    3: hi:  186, btch:  31 usd: 165
  68. Aug 13 21:38:41 AnShion <12> klogd: [603494.431253] CPU    4: hi:  186, btch:  31 usd: 177
  69. Aug 13 21:38:41 AnShion <12> klogd: [603494.431254] CPU    5: hi:  186, btch:  31 usd: 164
  70. Aug 13 21:38:41 AnShion <12> klogd: [603494.431255] CPU    6: hi:  186, btch:  31 usd: 162
  71. Aug 13 21:38:41 AnShion <12> klogd: [603494.431256] CPU    7: hi:  186, btch:  31 usd: 158
  72. Aug 13 21:38:41 AnShion <12> klogd: [603494.431257] HighMem per-cpu:
  73. Aug 13 21:38:41 AnShion <12> klogd: [603494.431258] CPU    0: hi:  186, btch:  31 usd: 163
  74. Aug 13 21:38:41 AnShion <12> klogd: [603494.431259] CPU    1: hi:  186, btch:  31 usd:  63
  75. Aug 13 21:38:41 AnShion <12> klogd: [603494.431261] CPU    2: hi:  186, btch:  31 usd: 174
  76. Aug 13 21:38:41 AnShion <12> klogd: [603494.431262] CPU    3: hi:  186, btch:  31 usd: 171
  77. Aug 13 21:38:41 AnShion <12> klogd: [603494.431263] CPU    4: hi:  186, btch:  31 usd: 169
  78. Aug 13 21:38:41 AnShion <12> klogd: [603494.431264] CPU    5: hi:  186, btch:  31 usd:  33
  79. Aug 13 21:38:41 AnShion <12> klogd: [603494.431265] CPU    6: hi:  186, btch:  31 usd:  19
  80. Aug 13 21:38:41 AnShion <12> klogd: [603494.431267] CPU    7: hi:  186, btch:  31 usd:  51
  81. Aug 13 21:38:41 AnShion <12> klogd: [603494.431270] active_anon:6753 inactive_anon:0 isolated_anon:0
  82. Aug 13 21:38:41 AnShion <12> klogd: [603494.431270]  active_file:29814 inactive_file:694125 isolated_file:0
  83. Aug 13 21:38:41 AnShion <12> klogd: [603494.431271]  unevictable:11325 dirty:1594 writeback:0 unstable:0
  84. Aug 13 21:38:41 AnShion <12> klogd: [603494.431271]  free:65973 slab_reclaimable:14131 slab_unreclaimable:68430
  85. Aug 13 21:38:41 AnShion <12> klogd: [603494.431272]  mapped:3890 shmem:0 pagetables:152 bounce:0
  86. Aug 13 21:38:41 AnShion <12> klogd: [603494.431276] DMA free:3520kB min:64kB low:80kB high:96kB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB isolated(anon):0kB isolated(file):0kB present:15784kB mlocked:0kB dirty:0kB writeback:0kB mapped:0kB shmem:0kB slab_reclaimable:1832kB slab_unreclaimable:32kB kernel_stack:0kB pagetables:0kB unstable:0kB bounce:0kB writeback_tmp:0kB pages_scanned:0 all_unreclaimable? yes
  87. Aug 13 21:38:41 AnShion <12> klogd: [603494.431280] lowmem_reserve[]: 0 865 3530 3530
  88. Aug 13 21:38:41 AnShion <12> klogd: [603494.431285] Normal free:257160kB min:3728kB low:4660kB high:5592kB active_anon:5104kB inactive_anon:0kB active_file:98648kB inactive_file:135428kB unevictable:16kB isolated(anon):0kB isolated(file):0kB present:885944kB mlocked:0kB dirty:6328kB writeback:0kB mapped:4kB shmem:0kB slab_reclaimable:54692kB slab_unreclaimable:273688kB kernel_stack:896kB pagetables:36kB unstable:0kB bounce:0kB writeback_tmp:0kB pages_scanned:0 all_unreclaimable? no
  89. Aug 13 21:38:41 AnShion <12> klogd: [603494.431288] lowmem_reserve[]: 0 0 21324 21324
  90. Aug 13 21:38:41 AnShion <12> klogd: [603494.431293] HighMem free:3212kB min:512kB low:3384kB high:6256kB active_anon:21908kB inactive_anon:0kB active_file:20608kB inactive_file:2641072kB unevictable:45284kB isolated(anon):0kB isolated(file):0kB present:2729588kB mlocked:0kB dirty:48kB writeback:0kB mapped:15556kB shmem:0kB slab_reclaimable:0kB slab_unreclaimable:0kB kernel_stack:0kB pagetables:572kB unstable:0kB bounce:0kB writeback_tmp:0kB pages_scanned:0 all_unreclaimable? no
  91. Aug 13 21:38:41 AnShion <12> klogd: [603494.431296] lowmem_reserve[]: 0 0 0 0
  92. Aug 13 21:38:41 AnShion <12> klogd: [603494.431299] DMA: 2*4kB 5*8kB 55*16kB 63*32kB 3*64kB 1*128kB 1*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 3520kB
  93. Aug 13 21:38:41 AnShion <12> klogd: [603494.431304] Normal: 24030*4kB 13888*8kB 2747*16kB 183*32kB 2*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 257160kB
  94. Aug 13 21:38:41 AnShion <12> klogd: [603494.431310] HighMem: 29*4kB 7*8kB 4*16kB 3*32kB 37*64kB 4*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 3212kB
  95. Aug 13 21:38:41 AnShion <12> klogd: [603494.431316] 735343 total pagecache pages
  96. Aug 13 21:38:41 AnShion <12> klogd: [603494.431317] 0 pages in swap cache
  97. Aug 13 21:38:41 AnShion <12> klogd: [603494.431318] Swap cache stats: add 0, delete 0, find 0/0
  98. Aug 13 21:38:41 AnShion <12> klogd: [603494.431319] Free swap  = 0kB
  99. Aug 13 21:38:41 AnShion <12> klogd: [603494.431320] Total swap = 0kB
  100. Aug 13 21:38:41 AnShion <12> klogd: [603494.437366] 915440 pages RAM
  101. Aug 13 21:38:41 AnShion <12> klogd: [603494.437368] 688130 pages HighMem
  102. Aug 13 21:38:41 AnShion <12> klogd: [603494.437369] 15196 pages reserved
  103. Aug 13 21:38:41 AnShion <12> klogd: [603494.437370] 731150 pages shared
  104. --More--
复制代码
请问,我能否把文件系统cache的内存限制一个比例(总内存的)或者一个绝对值以下????

论坛徽章:
0
2 [报告]
发表于 2012-08-16 00:37 |只看该作者
/proc/sys/vm/drop_caches

通过这个可以控制手动刷cache

论坛徽章:
0
3 [报告]
发表于 2012-08-16 07:44 |只看该作者
完全同lz,linux的这个filesystem cache就是一个坑爹的货,总有人信誓旦旦的说没问题(比如,http://www.linuxatemyram.com/),其实那只能说明他/她没有遇到特别的场景,一直想解决这个问题,之前在网上找到这样的补丁,但比较陈旧而在高性能环境下有问题。
一直准备分析好linux的这方面,然后写补丁或找对应的解决方案,可惜能力不够,至今未能完成。
PS:LS提的这种/proc接口是主动释放(2.6提供的接口挺多),也算是一种方法,但明显比较矬。

论坛徽章:
0
4 [报告]
发表于 2012-08-16 07:57 |只看该作者
一般的桌面应用,估计倒的确没什么问题。但是,对于中断环境下的突发式内存申请(比如突发式的网络数据包达到),虽然系统会保留有一些内存用于原子分配,但可能还是不够,如果内存被大量的filesystem cache占据,此时可能要进行内存释放,如果缓存的是写数据,那还得先把数据刷到磁盘,但在像数据包处理软中断这样的环境里,还能允许系统做这么动作么?这不杯了个具?

论坛徽章:
16
2015亚冠之吉达阿赫利
日期:2015-08-17 11:21:462015年迎新春徽章
日期:2015-03-04 09:58:11酉鸡
日期:2014-12-07 09:06:19水瓶座
日期:2014-11-04 14:23:29天秤座
日期:2014-03-02 08:57:52双鱼座
日期:2014-02-22 13:07:56午马
日期:2014-02-14 11:08:18双鱼座
日期:2014-02-13 11:09:37卯兔
日期:2014-02-06 15:10:34子鼠
日期:2014-01-20 14:48:19戌狗
日期:2013-12-19 09:37:46射手座
日期:2013-12-19 09:33:47
5 [报告]
发表于 2012-08-16 08:30 |只看该作者
本帖最后由 embeddedlwp 于 2012-08-16 08:32 编辑

如果用户直接操作page cache的ratio,谁能保证系统的性能呢。page cache可以看作block device与 memory之间的cache,所以cache hit是非常重要的。如果内存足够多,可以尽量多一些memory用于page cache来提高cache hit。毕竟block disk的速度比memory慢5个数量级。如果LZ是因为磁盘读写频繁而大量使用了memory,可以修改writeback子系统导出的一些接口,来尽快释放dirty pages。

ls /proc/sys/vm/ | grep 'dirty'
dirty_background_bytes
dirty_background_ratio
dirty_bytes
dirty_expire_centisecs
dirty_ratio
dirty_writeback_centisecs

个人愚见!

论坛徽章:
16
2015亚冠之吉达阿赫利
日期:2015-08-17 11:21:462015年迎新春徽章
日期:2015-03-04 09:58:11酉鸡
日期:2014-12-07 09:06:19水瓶座
日期:2014-11-04 14:23:29天秤座
日期:2014-03-02 08:57:52双鱼座
日期:2014-02-22 13:07:56午马
日期:2014-02-14 11:08:18双鱼座
日期:2014-02-13 11:09:37卯兔
日期:2014-02-06 15:10:34子鼠
日期:2014-01-20 14:48:19戌狗
日期:2013-12-19 09:37:46射手座
日期:2013-12-19 09:33:47
6 [报告]
发表于 2012-08-16 09:02 |只看该作者
回复 3# lenky0401


thank you for your link!


   

论坛徽章:
0
7 [报告]
发表于 2012-08-16 09:46 |只看该作者
lenky0401 发表于 2012-08-16 07:44
完全同lz,linux的这个filesystem cache就是一个坑爹的货,总有人信誓旦旦的说没问题(比如,http://www.li ...


Linux的fs cache也本质上不会浪费内存,在内存紧张的时候,这个内存都会被收缩掉,但他会影响到buddy中的大块内存,会将其分解成小的buddy,导致大块连续内存分配失败。
请问这个patch是基于什么考虑,去避免大order的buddy块不被分配的?因为,我也碰到过这种情况,没想着改动cache这一块,就是系统init的时候预分了一块内存,但这个方法太urgly了。

论坛徽章:
0
8 [报告]
发表于 2012-08-16 10:14 |只看该作者
Limit the size of the pagecache [LWN.net]:http://lwn.net/Articles/218890/
How to reduce max buffer/cache size? (Page 1) / GNU/Linux Discussion / Arch Linux Forums:https://bbs.archlinux.org/viewtopic.php?id=128088
[RFC] Limit the size of the pagecache | KernelTrap:http://kerneltrap.org/mailarchive/linux-kernel/2007/1/24/47350
LKML: Al Boldi: Re: [RFC] Limit the size of the pagecache:https://lkml.org/lkml/2007/1/25/75
LKML: (Vaidyanathan Srinivasan): Re: [PATCH] Provide an interface to limit total page cache.:https://lkml.org/lkml/2007/1/17/96

用google搜对应的英文关键字,之前我就搜索到很多链接,但没找到啊合适的方法,上面是收藏夹里的几个。

论坛徽章:
16
2015亚冠之吉达阿赫利
日期:2015-08-17 11:21:462015年迎新春徽章
日期:2015-03-04 09:58:11酉鸡
日期:2014-12-07 09:06:19水瓶座
日期:2014-11-04 14:23:29天秤座
日期:2014-03-02 08:57:52双鱼座
日期:2014-02-22 13:07:56午马
日期:2014-02-14 11:08:18双鱼座
日期:2014-02-13 11:09:37卯兔
日期:2014-02-06 15:10:34子鼠
日期:2014-01-20 14:48:19戌狗
日期:2013-12-19 09:37:46射手座
日期:2013-12-19 09:33:47
9 [报告]
发表于 2012-08-16 10:22 |只看该作者
回复 7# George_lz


你要分配多大的块,可否考虑hugetlb/THP ?

   

论坛徽章:
16
2015亚冠之吉达阿赫利
日期:2015-08-17 11:21:462015年迎新春徽章
日期:2015-03-04 09:58:11酉鸡
日期:2014-12-07 09:06:19水瓶座
日期:2014-11-04 14:23:29天秤座
日期:2014-03-02 08:57:52双鱼座
日期:2014-02-22 13:07:56午马
日期:2014-02-14 11:08:18双鱼座
日期:2014-02-13 11:09:37卯兔
日期:2014-02-06 15:10:34子鼠
日期:2014-01-20 14:48:19戌狗
日期:2013-12-19 09:37:46射手座
日期:2013-12-19 09:33:47
10 [报告]
发表于 2012-08-16 10:23 |只看该作者
thank you 8楼!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP