【问题标题】:What does it mean to 'flush to disk'?“刷新到磁盘”是什么意思?
【发布时间】:2016-01-28 00:11:41
【问题描述】:

有人可以解释以下上下文中刷新到磁盘的含义吗?如果我将数据写入文件系统上的日志,这是否意味着我将其放在磁盘上?在什么时候将/应该将文件刷新到磁盘?

这表明了一种非常简单的设计:与其在内存中保留尽可能多的内容,并在空间不足时将其全部刷新到文件系统中,不如将其反转。所有数据都会立即写入文件系统上的持久日志,而不必刷新到磁盘。实际上这只是意味着它被转移到内核的页面缓存中。

(来自https://kafka.apache.org/documentation.html#design)。

【问题讨论】:

  • 这就是我所说的卡夫卡式解释

标签: caching memory


【解决方案1】:

所有数据都会立即写入文件系统上的持久日志,而不必刷新到磁盘。实际上这只是意味着它被转移到内核的页面缓存中。

这意味着 Kafka 使用 write() 系统调用将数据传递给内核——此时它对其他进程可见,但实际上可能会或可能不会反映在磁盘上并在重启后仍然存在——但不会不要强迫内核使用fsync() 调用或类似的方法(根据手头的操作系统)将其快速写入磁盘。如果优化吞吐量并且不需要保证内容是可检索的,这可能是一个合适的决定:fsync() 及其亲属可能是昂贵的调用(尽管通过不需要查找的长时间连续写入,kafka 将它的磁盘 IO)。

【讨论】:

  • 我有一个后续问题,即 write() 在未刷新到磁盘时如何使数据对其他进程可见? @CharlesDuffy
  • 进程不直接进入磁盘,它们使用read() 系统调用。 read() 知道首先检查内存中的缓存。
【解决方案2】:

这意味着所有下载的状态都会刷新到磁盘,()文件永远保留在那里,并且在文件下载后不会将文件写入HD。

这是一个与在高级首选项中启用部分文件时跳过文件有关的问题。

要么关闭零件文件,要么停止跳过文件。

【讨论】:

  • 嗯?这似乎表明内容永远不会进入磁盘;这不是真的。
猜你喜欢
  • 2013-02-09
  • 1970-01-01
  • 2015-03-22
  • 2021-11-19
  • 1970-01-01
  • 2017-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多