为流模式配置 BlobFuse

本文介绍如何将 BlobFuse 配置为在 流式处理模式下装载容器。

小窍门

可以在 流模式 或 缓存模式下装载容器。 若要了解有关每个模式的详细信息,请参阅 流式处理模式与缓存模式。

在 流式处理模式下,BlobFuse 在内存中缓存区块(块)中的数据,以便读取和写入。 在读取和写入操作期间进行流式处理时,它会在读取或更新时将数据块缓存到内存中。 当您关闭文件或缓冲区被脏块填满时,BlobFuse 会刷新到 Azure 存储的更新。

配置参数

下表描述了每个参数及其默认设置。

参数 Description 默认值
块大小 内存中要缓存的每个块的大小(以 MB 为单位) 16 MB
内存大小 要为块缓存预分配的总内存量(以 MB 为单位) 60% 的空闲内存
路径 存储下载块的本地磁盘缓存的路径 不適用
磁盘大小 允许的最大磁盘缓存大小(以 MB 为单位) 60% 的可用磁盘空间
磁盘超时 磁盘缓存逐出超时(以秒为单位) 120 秒
预取 要为串行读取操作预取的块数量 2 × CPU 核心数
并行度 下载数据和写入磁盘缓存的并行线程数 3 × CPU 核心数
启动时清理 启动时清理临时目录(如果临时目录非空) 假

以下示例将这些值设置为命令的参数 mount 。

blobfuse2 mount <mount-path> --streaming --block-cache-disk-size=16 --block-cache-block-size=80 --block-cache-disk-timeout=120

以下示例演示如何在 BlobFuse 配置文件中显示这些设置:

block_cache:
  block-size-mb: 16
  mem-size-mb: 4096
  parallelism: 128

有关完整示例,请参阅 示例流式处理配置。 完整的命令行参数列表,请参见 CLI参数。

选择最佳配置值时,请使用下图作为指南。

显示如何基于各种因素配置块缓存模式的图示。

有关使用流式处理模式的建议

  • 应用程序必须检查返回的代码(成功或失败),以获取文件系统调用,例如read,write,close和flush。 如果返回错误,应用程序必须中止其相应的操作。

  • 应用程序必须确保给定文件一次只有一个写入者。

  • 处理大型文件(以 TiB 为单位)时,请相应地配置块大小。 Azure 存储仅支持每个 Blob 50,000 个块 。

流式处理模式的重要注意事项

  • 虽然可以从多个同时线程读取同一个 Blob,但同时进行写操作可能会导致意外的文件数据结果,包括数据丢失。

  • 虽然同时支持读取操作和单个写入操作,但从某些线程读取的数据可能不是最新的数据。

  • 使用多个句柄对同一文件进行并发写入时,不会检查数据一致性,这可能导致写入错误的数据。

  • 对一个正在被另一个进程或句柄同时写入的文件进行读取操作时,无法返回最新的数据。

  • 使用 cp 实用工具将带有尾随 null 字节的文件复制到 BlobFuse 装载的路径时,请使用 --sparse=never 参数来避免剪裁数据。 例如: cp --sparse=never src dest。

  • 对于写入操作,只有当应用程序调用close、sync或flush操作时,才会将数据提交到 Azure 存储容器中。

  • 如果最初创建的文件与当前配置的块大小不同,则无法修改文件。

可以在内核和 BlobFuse 级别禁用缓存,也可以仅在内核级别禁用缓存。 有关详细信息,请参阅 配置 BlobFuse 缓存选项。

后续步骤

另请参阅