标签: cache

禁用写回缓存限制 - 调整 vm.dirty_ratio

我的工作负载在短时间内具有极高的写入突发率。目标磁盘相当慢,但我有足够的 RAM 并且非常能容忍瞬时数据丢失。

我尝试调整 vm.dirty_ratio 以最大限度地利用用于脏页的可用 RAM 空间。

# free -g
              total        used        free      shared  buff/cache   available
Mem:            251           7         213           3          30         239
Swap:             0           0           0

# sysctl -a | grep -i dirty
vm.dirty_background_bytes = 0
vm.dirty_background_ratio = 5
vm.dirty_bytes = 0
vm.dirty_expire_centisecs = 90000
vm.dirty_ratio = 90
Run Code Online (Sandbox Code Playgroud)

但是,我似乎仍然遇到一些基于底层磁盘速度的写回限制。我怎样才能禁用这个功能?

# dd if=/dev/zero of=/home/me/foo.txt bs=4K count=100000 oflag=nonblock
100000+0 records in
100000+0 records out
409600000 bytes (410 MB) copied, 10.2175 s, 40.1 MB/s
Run Code Online (Sandbox Code Playgroud)

只要有空闲内存并且脏率尚未超过 - 我想全速写入页面缓存。

linux filesystems cache disk

5
推荐指数
1
解决办法
1926
查看次数

无需 root 权限即可清除 linux 缓存

为了清除缓存,我通常调用

# echo 3 | tee /proc/sys/vm/drop_caches
Run Code Online (Sandbox Code Playgroud)

这需要 root 权限。为什么我需要偶尔这样做?因为它会对我的一些程序的运行时产生巨大的影响。我的问题是:如果没有超级用户权限,我该如何做到这一点,特别是这两种情况:

1)我/用户没有root权限。系统管理员可以做些什么来允许普通用户运行上面的命令吗?

2) 对删除缓存的调用来自 shell 脚本内,并且不能以超级用户权限运行整个脚本。例如,因为此脚本中有多个调用“mpirun”的实例,所以实际上不应该以 root 身份运行。尽管只有几行实际上需要它,但以 root 身份运行脚本中的所有内容对我来说似乎不是一个好的做法。

编辑:忘记提及:以上命令仅在以 root 身份登录时有效。否则命令将是echo 3 | sudo tee /proc/sys/vm/drop_caches

root memory cache non-root-user

5
推荐指数
1
解决办法
4882
查看次数

LVMCache:为什么使用缓存池而不是缓存卷?

我知道 acachepool和之间的区别cachevol

Cachepool将缓存数据和元数据分成两个单独的卷,而 aCachevol对两者使用单个卷。

cachepool我的问题是,使用 a而不是仅使用 a有什么好处cachevol?我能想到的唯一最有意义的情况是,如果您想将单个设备(或一组设备)专用于缓存的元数据,并将一个单独的设备(或一组设备)用于实际缓存数据。但这似乎是一个非常具体的场景,而且它也没有解决以下问题:Why?

为什么大多数人默认使用 acachepool而不是 a cachevol,尤其是。当一台设备用于缓存时?

cachepool使用vs的动机/利弊是什么cachevol

编辑就上下文而言,这个问题背后的动机来自cachepool于保守设置(如家庭服务器和台式机)中使用的假设,仅仅是因为人们遵循的指南和教程是从企业用例中滴下来的。

cachepool除了工具支持之外,并且仅基于vs的优点cachevol,是否有任何具体原因(性能、实施等...)来激励人们提倡呢cachepool?或者它只是企业涓滴现象的受害者?

如果后者是正确的,那么考虑更保守的设置可能是合理cachevol的,而不是cachepool考虑是否不需要cachepool设置的灵活性和复杂性。

cache ssd lvm hard-disk bcache

5
推荐指数
1
解决办法
865
查看次数

当 RAM 充满缓存时,为什么我的系统要使用交换区?

我正在运行 openSUSE TW、32 GiB RAM、64 GiB 交换 (SSD)。

在 RAM 完全被缓存填满之前,交换空间的使用量为零。

我正在使用 htop 来监控它。黄色/橙色 = 缓存

我的系统将使用 2 GiB 的 RAM,但其余的(30 GiB)都是缓存,然后,不是在需要时丢弃一些缓存来为其他数据腾出空间 - 它开始使用交换,只有几个 MiB,但我我发誓我会注意到轻微的冻结,并且系统有时会明显变慢。

这是为什么?我能做什么?

我愿意提供任何要求的信息。


vmstat 60 5 vmstat 60 5

vm.swappiness = 1
vm.dirty_ratio = 20
vm.dirty_background_ratio = 10
Run Code Online (Sandbox Code Playgroud)

opensuse cache swap freeze ram

5
推荐指数
1
解决办法
1543
查看次数

free 输出中的缓冲区列是什么?

这些 问题简要列出了 free 命令的格式,注意缓冲区是必须写入磁盘的内核内存,缓存是不需要写入磁盘的文件数据。

在我的系统上,与大多数时候免费运行不同,缓冲区占用了超过 10% 的 RAM。通常,缓冲区是一个很小的、几乎是令牌的值。

我的问题是,在称为缓冲区的区域中究竟是什么?我可以找它lsof吗?它是否包含尚未刷新的打开文件区域?它是内存映射文件区域吗?它是什么?

系统运行良好,很少使用交换,所以性能很好。

linux memory cache

4
推荐指数
1
解决办法
1万
查看次数

如何获取尚未写入磁盘的数据大小?

在某些程序中,复制大文件的百分比非常快地达到 100%,然后在进行下一步之前我要等待更多。

它是由缓冲区引起的。如何查看将要写入的数据量?

cache disk

4
推荐指数
1
解决办法
105
查看次数

如何找到页面大小、关联性以及 TLB 大小和条目数?

在Ubuntu系统下,有没有查找命令:

  • 页面大小,
  • n 在 n 路缓存关联中,
  • TLB 缓存的大小和条目数?

cache virtual-memory

4
推荐指数
1
解决办法
1万
查看次数

我应该减少 /dev/shm 的大小吗?

我有一台 8 GB RAM 的服务器

内存:
总计 8031464
使用的 5146344
免费 2885120

如果我执行

# df
Run Code Online (Sandbox Code Playgroud)

它总是返回这个

tmpfs            4015732         0   4015732   0% /dev/shm
Run Code Online (Sandbox Code Playgroud)

我有 4GB 未使用 RAM(全天使用 0%),这意味着什么?

还有一些与 /dev/shm 有关的其他疑问,请;

如果我看到全天使用率为 0%,我是否应该减少 /dev/shm 大小,例如从 4GB 减少到 1GB?

如果是,如何减少 /dev/shm 的大小?

我可以使用这个内存位置 /dev/shm 来符号链接一些具有大量 IOwait (磁盘使用)的文件夹吗?

谢谢

linux cache tmpfs ram

4
推荐指数
1
解决办法
3146
查看次数

每个设备的dirty_ratio

我最近检查了一个几乎完全挂起的 RHEL7.2,因为它写入了 CIFS 文件系统。dirty_ratio = 30和 cifs的默认设置被缓存(用于读取和写入),这些脏页大多是 cifs 的。

在内存压力下,当系统回收大部分读缓存时,系统顽固地尝试刷新和回收脏(写)缓存。所以情况是一个巨大的 CPU iowait 伴随着极好的本地磁盘 I/O 完成时间,D 中的许多进程不间断等待和一个完全无响应的系统。OOM杀手从来没有从事过,因为免费的内存系统没有给出来。(我认为 CIFS 也有一个错误,它使刷新速度慢得令人难以置信。但别介意这里。)

我惊讶地发现内核处理刷新页面到一些慢速远程 CIFS 盒的方式与处理超快速本地 SSD 驱动器完全相同。拥有一个dirty_ratio包是不明智的,它很快就会导致 30% 的 RAM 包含来自最慢设备的脏数据的情况。真是浪费钱。

这种情况是可重现的;设置dirty_ratio = 1彻底解决问题。但是为什么我需要因为使用cifs挂载而牺牲本地磁盘的缓存?

除了完全禁用某些设备的缓存或设置vm.dirty_ratio为非常低的值之外,还有什么方法可以将快速设备“列入白名单”以获得更多写入缓存?或者让慢速设备(或像 //cifs/paths 这样的远程“设备”)使用更少的写缓存?

RHEL 7.2 的内核版本称为 3.10.0-327。(它基于 3.10.0,但包括数年的向后移植)。

rhel cache nfs linux-kernel cifs

4
推荐指数
1
解决办法
1930
查看次数

Chromium 中的完全缓存禁用

Chrome 中有很多禁用缓存的方法,但我发现的唯一一种适用于 Chromium 的方法不太符合我的需求。

建议

编辑chromium配置某处/etc进行设置

CHROMIUM_FLAGS="--disk-cache-dir=/dev/null --disk-cache-size=1"

但对我不起作用,因为

  1. 没有任何可以/etc为 Chromium配置的内容
  2. 我想通过策略而不是命令行禁用尽可能多的磁盘写入

所以,我的问题是,我应该在 chromium 策略中编写什么来将尽可能多的写入重定向到 RAM?

cache chrome

4
推荐指数
1
解决办法
2万
查看次数