使用ossfs 2.0与对象存储OSS交互时,合理优化发往OSS服务端的元数据请求量,不仅能减少OSS请求以节省服务调用成本,还能提升系统并发处理能力以及改善挂载点的读写性能。本文介绍一些典型场景下的元数据调优最佳实践。
配置项
配置项 | 说明 |
attr_timeout | 元数据缓存失效时间。单位为秒。默认为60s。失效后需向OSS请求最新的元数据。 |
max_inode_cache_count | 表示启用主动控制元数据缓存数量。
|
oss_negative_cache_timeout | 负缓存的失效时间。单位为秒。
|
oss_negative_cache_size | 负缓存的最大条目数量。默认为10000。当缓存条目数超过设定值时,ossfs2.0 将按照一定的规则淘汰超出部分的条目。 |
场景与使用建议
减少OSS请求与性能加速
场景 | 使用建议 |
依次访问已知文件列表中的文件 | 开启元数据缓存。在遍历访问某个文件夹下的所有文件时,先通过 |
大量创建文件 | 开启元数据负缓存。挂载时指定 |
场景同时满足如下条件:
| 样例场景:在64 GiB 内存的机器上执行包含1000万条数据集的ImageNet训练任务。任务会先遍历数据集构建元数据,随后再读文件。 使用建议:读任务会占用机器的页缓存,使得操作系统内核会发起请求淘汰元数据。开启元数据缓存,可避免元数据淘汰,将其全部缓存在内存中,减少后续的OSS元数据请求。机器内存足够缓存全部1000万条元数据且留有充足的余量。
|
内存控制
访问场景 | 场景示例 | 使用建议 |
需要访问的文件数量不多 | 访问文件数量在100万以内 | 无需专门设置,由操作系统自动控制元数据缓存数量。 |
文件不会重复访问 | 访问一个目录后,后续在元数据过期时间前均无需读取该目录下的文件 | 无需专门设置,由操作系统自动控制元数据缓存数量。 |
对内存占用比较敏感 | 希望减少ossfs2进程的元数据占用,且对元数据性能不敏感 | 根据实际需求设置 ossfs 2.0的读写缓冲也有内存占用(挂载选项说明),实际操作时建议预留部分内存。 |
使用示例
场景示例 | 使用建议 |
执行ImageNet训练任务
| 挂载时指定 使用默认参数时,训练速度约为每秒630张图片。 |
频繁查询文件,文件大小较小(如10 KB)或无并发访问
| 挂载时指定 |
发起10个并发,单并发创建1万个空文件
| 挂载时指定 如果未配置负缓存,则耗时约为680s,且OSS元数据请求数量多一倍。 |
依次读取单目录下文件元数据
| 挂载时指定 未提前执行 |