背景
我正在尝试在台式计算机上设置iotop
计算机。整个过程耗费了一整天,包括安装操作系统和软件。不过,我对此并没有太多考虑。
然后我尝试使用新机器完成我的工作,它比我的笔记本电脑慢得多,这很奇怪。
我做了cat /proc/vmstat | egrep "dirty|writeback"
并发现解压缩包时的磁盘流量大约是1-2MB / s,而且肯定是异常的。
然后,经过数小时的研究,我发现this article描述了完全相同的问题,并提供了一个丑陋的解决方案:
我们最近在一些系统上出现了一个主要的性能问题,其中磁盘写入速度极慢(~1 MB / s - 正常性能) 是150 + MB / s)。
...
编辑:解决这个问题,要么删除足够的RAM,要么添加“mem = 8G”作为内核启动参数(例如在Ubuntu上的/ etc / default / grub中 - 不要 忘了运行update-grub!)
我也看过这篇文章
https://lonesysadmin.net/2013/12/22/better-linux-disk-caching-performance-vm-dirty_ratio/
并且做了
nr_dirty 10
nr_writeback 0
nr_writeback_temp 0
nr_dirty_threshold 0 // and here
nr_dirty_background_threshold 0 // here
输出是:
8223
设置4111
时,这些值为mem=8g
和vm.dirty_background_ratio
。
因此,它基本上显示当系统内存大于8GB 时(在我的情况下为32GB),无论vm.dirty_ratio
和public class ReaderPreferences extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preference);
}
@Override
public void onStart() {
super.onStart();
View v = getView();
v.setBackgroundColor(getActivity().getResources.getColor(R.color.my_color));
}
设置如何,(5%和10在我的情况下%,实际脏阈值变为0 并且写缓冲区被禁用?
为什么会这样?
这是内核中的错误还是其他地方的错误?
除了拔掉RAM或使用“mem = 8g”之外,还有解决方法吗?
UPDATE:我正在使用32位的ubuntu 12.04运行3.13.0-53通用内核,所以这可能只发生在32位系统上。
答案 0 :(得分:7)
如果使用具有2G以上RAM的32位内核,则运行在次优配置中,必须进行重大权衡。这是因为在这些配置中,内核不能再一次映射所有物理内存。
随着物理内存量的增加超过这一点,权衡变得越来越糟,因为用于管理所有物理内存的struct page
数组必须始终保持映射,并且该数组随之增长物理记忆。
内核不直接映射的物理内存称为" highmem",默认情况下,写回代码将highmem视为不可破坏。这就是导致脏阈值零值的原因。
您可以通过将/proc/sys/vm/highmem_is_dirtyable
设置为1来更改此设置,但是如果您安装了64位内核,那么使用这么多内存会更好。
答案 1 :(得分:0)
这是内核中的错误
根据您引用的文章,这是一个错误,该错误在较早的内核中不存在,并且在较新的内核中已修复。
请注意,此问题似乎在更高版本(3.5.0+)中已得到修复,并且是一种回归(在2.6.32等版本中不会发生)