为什么linux在系统ram大于8GB时禁用磁盘写入缓冲区?
背景: 我试图在我的桌面电脑上安装一台为什么linux在系统ram大于8GB时禁用磁盘写入缓冲区?,linux,linux-kernel,disk,Linux,Linux Kernel,Disk,背景: 我试图在我的桌面电脑上安装一台ubuntu机器。整个过程花了一整天,包括安装操作系统和软件。不过我没怎么想 然后我试着用这台新机器做我的工作,它比我的笔记本电脑慢很多,这很奇怪 我做了iotop,发现解压缩包时的磁盘流量约为1-2MB/s,这肯定是不正常的 然后,经过数小时的研究,我发现它描述了完全相同的问题,并提供了一个丑陋的解决方案: 我们最近在一些系统上遇到了一个主要的性能问题,在这些系统中,磁盘写入速度非常慢(~1 MB/s—正常性能) 大于150 MB/s)。 编辑:要解决这
ubuntu
机器。整个过程花了一整天,包括安装操作系统和软件。不过我没怎么想
然后我试着用这台新机器做我的工作,它比我的笔记本电脑慢很多,这很奇怪
我做了iotop
,发现解压缩包时的磁盘流量约为1-2MB/s,这肯定是不正常的
然后,经过数小时的研究,我发现它描述了完全相同的问题,并提供了一个丑陋的解决方案:
我们最近在一些系统上遇到了一个主要的性能问题,在这些系统中,磁盘写入速度非常慢(~1 MB/s—正常性能)
大于150 MB/s)。
编辑:要解决这个问题,要么删除足够的RAM,要么添加“mem=8G”作为内核启动参数(例如Ubuntu上的/etc/default/grub中-不要
忘记运行更新grub!)
我也看了这个帖子
而且
cat /proc/vmstat | egrep "dirty|writeback"
输出为:
nr_dirty 10
nr_writeback 0
nr_writeback_temp 0
nr_dirty_threshold 0 // and here
nr_dirty_background_threshold 0 // here
设置mem=8g
时,这些值分别为8223
和4111
因此,它基本上显示了当系统内存大于8GB时(在我的情况下为32GB),不管vm.dirty\u background\u ratio
和vm.dirty\u ratio
设置如何,(在我的情况下为5%和10%),实际的脏阈值变为0并且写缓冲区被禁用
为什么会这样
这是内核中的bug还是其他地方的bug
除了拔下RAM或使用“mem=8g”之外,还有其他解决方案吗
更新:我正在用ubuntu 12.04 32位运行3.13.0-53-generic内核,因此这可能只发生在32位系统上。如果您使用的32位内核的RAM超过2G,那么您运行的是次优配置,必须进行重大权衡。这是因为在这些配置中,内核不再能够一次映射所有物理内存 随着物理内存量的增加超过这一点,权衡变得越来越糟糕,因为用于管理所有物理内存的
struct page
数组必须始终保持映射,并且该数组随着物理内存的增加而增加
内核未直接映射的物理内存称为“highmem”,默认情况下,写回代码将highmem视为不可插入。这就是导致脏阈值为零值的原因
您可以通过将/proc/sys/vm/highmem\u is\u dirtyable
设置为1来改变这一点,但是如果您安装一个64位内核,那么有了这么多内存,情况会好得多
这是内核中的错误吗
根据你引用的文章,这是一个bug,在早期的内核中不存在,在最近的内核中已经修复
请注意,此问题似乎在以后的版本(3.5.0+)中已得到修复,并且是一种回归(例如2.6.32上不会发生)
当我运行上面的cat/egrep时,我看不到零。这是在一个运行Ubuntu14.04的AMD FX8150上,16GB内存,highmem_is_dirtyable==0,这些比率仍然应该基于“lowmem”进行计算,并给出一个非零的结果,不是吗?@user3528438:我假设当你有超过8GB的内存时,你所有的空闲或可回收内存最终都在highmem中(部分原因是页面表为线性内核映射使用了额外的lowmem)。