我正在开发一个 Java EE Web 应用程序,并试图加快测试过程。为此,我想知道是否有办法告诉系统将我的构建文件夹保留在系统内存中?
我可以使用yum clean all或者更快地使用清除缓存yum clean expire-cache。
但是,在没有实际清除缓存的情况下,我只想知道缓存何时会自行过期。
我怎样才能知道 yum 的元数据什么时候过期?
我将 CFEngine 用于自我修复基础架构,因此应该安装在我正在处理的服务器上的软件包将在yum clean expire-cache运行后不久安装。我已经测试过了。如果我可以检查其中一台我没有运行过的服务器上的元数据过期时间yum clean expire-cache,我就会知道这些服务器何时会自我修复。
我很困惑,因为所有的 dentry 都有指向 inode 对象的指针。据我所知,您总是通过 dentries 来查找您的 inode。那么,为什么会有inode缓存呢?
我有时会一遍又一遍地运行相同的、相当昂贵的命令,以获得相同的输出。例如,ffprobe获取有关媒体文件的信息。给定相同的输入,应该总是产生相同的输出——所以缓存应该是可能的。
我已经看到Memoizing/caching 命令行输出,但我正在寻找更彻底的实现:特别是,那个似乎只是比较命令行 - 如果传递的文件之一被修改,它不会注意到。(它还有一堆固定长度的缓冲区,这让我很怀疑,奇怪的是它是一个守护进程。)
在我开始自己写之前,我很好奇是否已经存在。关键要求:
/dev/nullas stdin,以及两个不同的文件作为 stdout 和 stderr。基本上我想做什么,如果我自己写,是(为了简洁而跳过一些锁定和错误检查):获取命令行 + 命令行上每个项目的统计结果(错误或开发,inode,大小,mtime ) 并通过 SHA-512 或 SHA-256 传递整个混乱。这将提供一个固定大小的密钥,但如果命令或文件发生更改,则会更改(除非有人进行了大小和 mtime 保留更改,在这种情况下,他们应得的)。检查该键是否在缓存目录中。如果它已经存在,将它们的内容复制到 stdout 和 stderr。否则,在带有 stdin /dev/null 和两个文件作为 stdout 和 stderr 的子进程中运行该命令。如果成功,将文件放入缓存目录。然后将它们的内容复制到 stdout 和 stderr。如果结果是我自己写的,欢迎设计反馈。
我们有一个 Squid 网络缓存设置,用于缓存包下载,因此这里的所有机器不必独立重新下载所有内容。安装程序会提示您提供镜像和代理。只要每台机器使用完全相同的镜像(此处为http.us.debian.org)和代理,它就可以工作。
这有点烦人,因为它涉及“手动输入信息”并每次都输入(正如安装程序所做的那样ftp.us.debian.org,Squid 没有意识到这是相同的)。
安装程序默认为 just mirror,有没有办法让它工作?所以我可以偷懒,直接输入一堆?
在 Arch Linux 中,今天安装了最新的更新后,我在日志中看到以下错误:
kernel: FS-Cache: Duplicate cookie detected
kernel: FS-Cache: O-cookie
Run Code Online (Sandbox Code Playgroud)
总共有大约 20 行是这样的。我没有通过搜索找到任何关于此的信息。这是一个严重的或已知的问题吗?
我的 CPU 是带有华硕主板的英特尔酷睿 i7。我可以提供任何要求的相关信息。但是,此时此刻,我不知道我在看什么,所以我不确定哪些信息是相关的。
更新:在第二次重新启动时,消息较少。这是 journalctl -b -p err 的完整输出
kernel: FS-Cache: Duplicate cookie detected
kernel: FS-Cache: O-cookie c=000000001e72b895 [p=0000000089da8da7 fl=222 nc=0 na=1]
kernel: FS-Cache: O-cookie d=00000000c3a2cbed n=00000000f757123a
kernel: FS-Cache: O-key=[10] '040002000801c0a805c3'
kernel: FS-Cache: N-cookie c=00000000ea48db1d [p=0000000089da8da7 fl=2 nc=0 na=1]
kernel: FS-Cache: N-cookie d=00000000c3a2cbed n=000000000f72327e
kernel: FS-Cache: N-key=[10] '040002000801c0a805c3'
Run Code Online (Sandbox Code Playgroud) 我在一个文件中有一个 luks 加密的 ext4,我用它来存储敏感数据(让我们将此 FS 称为“内部”)。文件本身又位于另一个 ext4 上,该 ext4 驻留在物理 SSD 上。让我们称其为“外部”FS。内部 FS 使用指向外部 FS 上文件的环回设备进行安装。
\n\n当我调用sync(1)时,是否能保证内部FS的所有挂起写入都被持久化?
\n\n如果同步以不幸的顺序发生,则(根据我的理解)可能会发生以下情况:
\n\nsync调用。sync.同步是否能保证这种情况不会发生,或者我是否必须调用同步与嵌套文件系统层的次数一样多才能确定?
\n\n我要求的是 Linux,但如果 POSIX 有这方面的消息,我\xe2\x80\x99d 也会对此感兴趣。
\n\nsync(1)或上的 Debian 联机帮助页sync(2)没有关于此情况的信息。
我一直在测试 Linux 4.18.16-200.fc28.x86_64。根据free -h.
我有vm.dirty*sysctl 的默认值。 dirty_background_ratio是 10,现在dirty_ratio是 20。根据我读过的所有内容,我希望 Linux 在达到 RAM 的 10% 时开始写出脏缓存:0.77G。当脏缓存达到 RAM 的 20%:1.54G 时,缓冲的 write() 调用应该阻塞。
我跑过去dd if=/dev/zero of=~/test bs=1M count=2000看着dirty田野atop。当dd命令运行时,该dirty值稳定在 0.5G 左右。这明显低于脏背景阈值(0.77G)!怎么会这样?我错过了什么?
dirty_expire_centisecs是 3000,所以我认为这不是原因。我什至尝试降低dirty_expire_centisecs到 100 和dirty_writeback_centisecs10,看看这是否是限制dirty。这并没有改变结果。
作为调查的一部分,我最初写下了这些观察结果:为什么在 2013 年报告了“USB 记忆棒停顿”问题?为什么现有的“No-I/O 脏节流”代码没有解决这个问题?
我知道在两个阈值之间的中间 - 15% = 1.155G - write() 调用开始在曲线上受到限制(延迟)。但是在这个天花板之下时不会增加延迟;允许生成脏页的进程“自由运行”。
据我了解,节流旨在将脏缓存保持在 15% 或以上,并防止达到 20% 的硬限制。它并不为每种情况提供保证。但我正在用一个dd命令测试一个简单的案例;我认为它应该简单地限制 write() 调用以匹配设备实现的写出速度。 …
设备块大小通常为 512 字节,而文件系统块大小通常为 4096 字节。他们为什么不同?为什么 512B 和 4KB 是设备和文件系统块大小的不错选择?什么块大小最适合缓存用户空间库中的磁盘读取?
AFAIK,Linux 有一个页面缓存来提高性能(例如,如果你打开一个文件,linux 将该文件缓存在 RAM 中),然后如果再次请求文件并缓存它,操作系统会避免从磁盘读取文件并从缓存...
我的问题是:如果您在tmpfs 中有一个文件并且您与该文件交互(读取),该文件是否会在 RAM 中重复(一个在 tmpfs 中,另一个在页面缓存中?)
cache ×10
linux ×4
filesystems ×2
linux-kernel ×2
apache-httpd ×1
atop ×1
block-device ×1
command-line ×1
debian ×1
files ×1
inode ×1
kernel ×1
memory ×1
mount ×1
software-rec ×1
squid ×1
sysctl ×1
tmpfs ×1
yum ×1