本文介绍如何将 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
有关完整示例,请参阅 示例流式处理配置。
选择最佳配置值时,请使用下图作为指南。
有关使用流式处理模式的建议
应用程序必须检查返回的代码(成功或失败),以获取文件系统调用,例如
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 缓存选项。