标签: cache

为什么现代 CPU 中使用多级缓存?

我最近阅读了有关处理器(主要是多处理器)的文章,并且遇到了多级缓存的概念。在这种情况下,这些设计具有多个级别的缓存以提高性能。

但是,我无法弄清楚额外的缓存如何提高处理器的性能?为什么不增加现有缓存的大小呢?

cache multi-processor

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

我怎样才能让 Linux 不颠簸而只是杀死进程?

Firefox(和闪存)往往会随机占用内存,导致我的计算机出现抖动,这让我发疯地等待 oom_killer 启动并杀死进程,[1] 而我自己却无能为力. 我已经禁用了交换,但这只会让事情变得更糟。它在杀死任何东西之前会挣扎数小时,这毫无意义。为什么它不只是刷新一大块缓存并继续运行?

我可以禁用缓存吗?我可以让它停止颠簸吗?我只是想让最大的内存猪在我内存不足时死去。

[1] 没关系,它实际上并不针对 Firefox,而是继续杀死 X 或我的桌面环境。

memory linux kill cache swap

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

为什么 Linux 上的 I/O 缓存性能比 Windows 好这么多?

这个问题实际上只是Stack Overflow 上类似问题的一个端口:

从这个问题出现的共识是,Linux 具有优于 Windows 的缓存,但具体原因尚未确定。这里有人对技术解释有更深入的了解吗?

一些人,包括我自己,也注意到 Windows 在 Linux 之上的虚拟机中实际上可以比在原始硬件(本机硬件)上表现得更好。为什么将 Linux 主机 Windows 作为客户端操作系统会提高 Windows 性能?

windows linux performance cache

5
推荐指数
0
解决办法
1598
查看次数

将 RamDisk 用于 Chrome 的最佳方法?

我使用了很多选项卡,一段时间后,最近打开的选项卡需要一些时间才能响应,我猜这是因为它们没有被缓存到 HDD,因为它们不是必需的。

所以在创建一个 Ram-Disk 之后我有两个选择,使用

--disk-cache-dir="G:/"
Run Code Online (Sandbox Code Playgroud)

切换到它所做的事情。或者我目前正在做的事情:使用目录连接

“[...]\AppData\Local\Google\Chrome\User Data\Default”

将整个文件夹移动到 Ram-Disk。我认为这比磁盘缓存更好,但我知道什么。是吗?

可以猜到,每次启动 chrome 时保存/加载 Ram-Disk 映像都会很痛苦,但如果它真的比前一种方法更好,我会写一个脚本或其他东西。

编辑: 在此处输入图片说明

所以“默认\缓存”不是唯一经常访问的文件夹。当打开了 21 个选项卡并尝试在后台窗口中访问最少使用的选项卡时,我截取了此屏幕截图。

由此我得出结论,将整个文件夹移动到 Ram 会比缓存更快。任何见解都非常受欢迎。

windows google-chrome ramdisk cache

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

关于写入缓存策略、其基本选项以及它如何应用于硬盘驱动器和固态驱动器的说明

上周,在对主题进行了更多研究之后,我一直在想,这些年来我一直忽略了什么来理解写缓存策略,总是将其保留为默认设置。写缓存策略提高了写性能,包括写回缓存和写缓存缓冲区刷新。

这就是我对上述所有内容的理解,但如果我在某处出错,请纠正我:

直写缓存/直写缓存本身不是写缓存策略的一部分,而是将数据写入缓存和存储设备时,因此如果 Windows 稍后再次需要该数据,则从缓存中检索它而不是从存储设备,这意味着只提高读取性能,因为无需等待存储设备再次读取所需的数据。由于数据仍然写入存储设备,写入性能没有提高,并且在断电或系统崩溃的情况下没有数据丢失或损坏的风险,而只有缓存中​​的数据丢失。此选项似乎默认启用,建议用于不需要用户使用“安全删除硬件”功能的可移动设备。

回写缓存与上面类似,但不向存储设备写入数据,定期从缓存中释放数据并在空闲时写入存储设备。在我看来,此选项可提高读取和写入性能,但如果发生电源故障或系统崩溃,不仅会丢失最终要写入存储设备的数据,还会导致文件不一致或文件系统损坏,这会带来风险。回写缓存不能与直写缓存一起启用,如果没有备用电源,不建议启用。

我认为写缓存缓冲区刷新类似于回写缓存,但可以在断电之前立即将数据从缓存释放和写入存储设备,但我不知道它是否也适用于偶尔的系统崩溃。此选项似乎是对回写缓存的补充,可减少或可能消除数据丢失或文件系统损坏的风险。

我对最后 2 个选项与当今现代 SSD 的相关性有疑问,以便获得最佳性能并减少 SSD 的磨损:

我知道传统硬盘驱动器带有板载缓存(我想知道这是什么类型的缓存),但是 SSD 也带有缓存吗?假设他们这样做了,这个缓存是否比他们的 NAND 闪存和系统 RAM 快,值得冒险通过启用回写缓存来利用它?我在某处读到通常存储设备的缓存比 RAM 快,但我想确定一下。此外,我读到应该启用写缓存,因为稍后要写入 NAND 闪存的当前数据会在缓存中保留一段时间,并且如果数据在最终写入之前被大量修改,则保留这些数据及其定期发布可减少其写入 SSD 的时间,从而减少其磨损。

现在关于写缓存缓冲区刷新,我听说 SSD 控制器本身非常快,不需要启用此选项,因为它们管理刷新。然而,再一次,我不知道 SSD 是否有自己的板载缓存,以及它是否比它们的 NAND 闪存和系统 RAM 快,因为如果是,保持启用此选项是有意义的。

最近我发布了关于我的 Intel 330 SSD 120GB 问题的问题,这是进行更深入研究的主要原因,怀疑写入缓存策略是 SSD 冻结问题的罪魁祸首,假设释放的数据是导致冻结的原因。目前我启用了写缓存并禁用了写缓存缓冲区刷新,因为我相信 SSD 控制器对写缓存刷新和 Windows 写缓存缓冲区刷新的管理相互冲突

在此处输入图片说明

由于我想通过小步骤进行故障排除以最终确定问题的根源,因此我决定从写缓存策略开始,然后转向驱动程序,稍后切换到 AHCI,最后通过注册表修改禁用 DIPM(设备启动的电源管理)感谢@TomWijsman

freeze windows-7 ssd cache buffer

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

我可以在另一个(即非操作系统)硬盘驱动器上使用英特尔 RST 缓存吗?

是否可以在 RST 中使用 SSD 缓存(非操作系统)HDD?

我使用 RST 创建了一个 128GB 的​​常规 RAID 卷(我不得不将 SSD 和 HDD 放在 RAID 中,因为 RST 需要它)。

我想对其进行配置,以便 HDD 使用 SSD 作为其缓存。

硬件:

  • 华硕 P8Z68-V PRO GEN3
  • 128 GB M4-CT128 M4SSD2 SCSI 磁盘设备(操作系统驱动器)
  • 64 GB M4-CT128 M4SSD2
  • 2 TB 硬盘

ssd hard-drive cache

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

通过 CLI 清除 Chrome 的缓存

有没有办法通过 OSX 上的 CLI 命令清除 Google Chrome 的缓存?理想情况下,这将通过某种“官方”方式完成,最好无需打开 Chrome(即通过一些标志启动它)。

terminal google-chrome cache command-line macos

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

是否有适用于 Linux 和 Windows 的融合驱动器风格的解决方案?

是否有适用于 Linux 和 Windows 的融合驱动器样式(例如在 iMac 中,其中 SSD 充当存储空间而不是缓存)解决方案?

operating-systems ssd hard-drive cache

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

为什么 RAM 的写入速度低于读取速度?缓存是如何出现的?

首先,这是真的,对吧?我觉得读取总是比写入快,这里的这个人也做了一些实验来“证明”它。他没有解释原因,只是提到了“缓存问题”。(而且他的实验似乎并不担心预取)

但我不明白为什么。如果重要的话,让我们假设我们谈论的是 Nehalem 架构(如 i7),它为每个内核提供 L1、L2 缓存,然后是共享的包容性 L3 缓存。

可能这是因为我没有正确理解读写是如何工作的,所以我会写下我的理解。请告诉我是否有问题。

If I read some memory, following steps should happen: (assume all cache misses)

    1. Check if already in L1 cache, miss
    2. Check if in L2 cache, miss
    3. Check if in L3 cache, miss
    4. Fetch from memory into (L1?) cache
Run Code Online (Sandbox Code Playgroud)

不确定最后一步。数据是否会渗透到缓存中,这意味着在缓存未命中的情况下,内存首先被读入 L3/L2/L1,然后从那里读取?或者它可以“绕过”所有缓存,然后缓存并行发生以备后用。(读取 = 访问所有缓存 + 从 RAM 获取到缓存 + 从缓存读取?)

Then write:

    1. All caches have to be checked (read) in this case too
    2. If …
Run Code Online (Sandbox Code Playgroud)

memory bandwidth nehalem cache

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

“perf”作为页面错误究竟显示了什么?

我想在我的脚本完整运行期间计算磁盘访问次数。我的 bash 脚本在本地运行另外 2 个可执行文件和远程运行另外 2 个可执行文件。像这样(那些可执行文件本身可以访问其他工具):

#!/bin/bash

./executable1 DATA1 &
./executable2 DATA2 &

ssh remote_host './executable3 DATA3' &
ssh remote_host './executable4 DATA4' &

wait;
Run Code Online (Sandbox Code Playgroud)

现在我正在运行我的 bash 脚本,perf如下所示:

perf stat -e page-faults,page-faults:u ./myBashScript.sh
Run Code Online (Sandbox Code Playgroud)

但结果总是相同的,无论我是否更改 DATA* 文件、命令、命令数量,......像这样:

128,470 page-faults
127,641 page-faults:u
Run Code Online (Sandbox Code Playgroud)

现在我的问题是“如何计算整个脚本的磁盘访问次数?”

附:

  • 如您所知,Linux 试图通过使用 ram 的可用空间作为缓存磁盘来减少磁盘访问次数,这里通过“计算磁盘访问次数”我确切的意思是操作系统需要将数据从硬盘带到主内存的次数(= RAM命中/未命中)
  • 我只需要计算本地机器上的磁盘访问次数而不是远程机器。
  • 抱歉英语不好。

memory linux cache perf

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