Compartilhar via

为流模式配置 BlobFuse

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

小窍门

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

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

配置参数

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

参数 Description 默认值
块大小 内存中要缓存的每个块的大小(以 MB 为单位) 16 MB
内存大小 要为块缓存预分配的总内存量(以 MB 为单位) 80% 的可用内存
路径 存储下载块的本地磁盘缓存的路径 不適用
磁盘大小 允许的最大磁盘缓存大小(以 MB 为单位) 80% 可用磁盘空间
磁盘超时 磁盘缓存逐出超时(以秒为单位) 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: 80
  disk-timeout-sec: 120

有关完整示例,请参阅 示例流式处理配置

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

后续步骤

另请参阅