最近更新时间:2026-04-02 21:18:53
ks3fs1.2.0版本开始引入了全新的读写性能优化模式(Performance Mode) ,该模式通过内存缓存替代传统的磁盘缓存,能够显著提升文件的读写吞吐量,适用于AI训练、大数据分析等高性能读写场景需求。
ks3fs1.2.0核心变化如下:
变化项 | 核心说明 | 注意事项 |
|---|---|---|
兼容性保障 | 性能模式需手动添加参数开启,默认不启用。 | 升级后不改变原有业务逻辑,无侵入性影响。 |
缓存机制升级 | 性能模式采用内存缓存替代磁盘缓存。 | 需根据并发文件数预留足够内存,避免内存打满导致掉挂载。 |
写入规则优化 | 性能模式仅支持顺序写入。 | 性能模式不支持随机写入,会返回报错,数据库等需要随机写入类场景不适用。 |
读取方式变化 | 开启性能模式后不支持客户端多线程读取同一文件。 | 客户端多线程读取同一个文件,会出现文件预读缓存频繁清理,导致读取操作无法正常执行。 |
开启性能模式与未开启性能模式对比:
操作类型 | 开启性能模式 | 未开启性能模式 |
|---|---|---|
顺序写入 | 单线程大文件顺序写入场景下,开启性能模式的带宽提升20倍以上。 | 标准性能。 |
顺序读取 |
| 标准性能。 |
随机写入 | 不支持,报错 | 支持。 |
随机读取 | 支持(但不走预读,无性能提升)。 | 支持。 |
内存占用 | 较高(需根据并发数预留内存)。 | 较低(磁盘缓存)。 |
关于ks3fs性能测试结果,请参见文档:ks3fs读写性能测试。
ks3fs1.2.0开启性能模式后,存在以下限制:
仅支持顺序写入,不支持随机写入,随机写入会返回Operation not supported报错,因此不推荐数据库类应用、在线文档编辑、日志随机写入等场景开启性能模式。
仅新文件的顺序写入可得到性能提升,已存在的文件写入无性能增益。
仅顺序读取文件可获得性能提升,随机读取文件无性能增益。
使用vim编辑文件时会报错提示,但文件内容可正常修改保存。
truncate操作仅支持清空文件,不支持将文件截断至指定大小。
性能模式下,您可以通过以下参数调整并发,提升读写性能。
分类 | 配置项名称 | 说明 | 是否必选 |
|---|---|---|---|
性能模式开关 | performance | 开启读写性能模式,默认不开启。 | 否 |
下载相关参数 | prefetch_concurrency | 全局预读并发数。
| 否 |
prefetch_concurrency_per_file | 单个文件的预读并发数。
| 否 | |
prefetch_chunk_size | 预读的块大小(MB)。
| 否 | |
prefetch_chunks | 单文件预读块总数量系数,不设置默认为3,此时单文件预读块总数量为3*20=60。计算公式为: 单个文件总预取内存大小 = | 否 | |
上传相关参数 | upload_concurrency | 全局上传并发数。
| 否 |
parallel_count | 单文件上传并发数。
| 否 | |
multipart_size | 分块上传时单块大小(MB)。
该参数会影响最大支持的文件大小,分块上传时最大仅支持10000块,默认值下,最大支持的文件为95GB。若需上传大于95GB的文件,可适当调大 | 否 | |
enable_content_crc64 | 开启CRC64校验,默认不开启。 为了保证数据完整性,建议开启CRC64校验。 | 否 |
针对不同内存规格的机器,建议配合调整并发参数以达到预期效果。不同内存机型并发参数推荐如下所示:
内存大小 | 推荐并发配置范围(prefetch_concurrency/upload_concurrency) |
|---|---|
4GB-8GB | 60-100 |
8GB-16GB | 160-200 |
>16GB | 200-300 |
如需开启性能模式,在挂载ks3fs1.2.0时增加以下参数:
-o performance示例:
ks3fs bucket:/path /mnt/ks3 \
-o url=http://ks3-cn-beijing.ksyuncs.com \
-o sigv4 \
-o region=BEIJING \
-o performance机器内存为8-16GB时,配置示例如下:
ks3fs bucket:/folder /mnt/ks3 \
-o url=http://ks3-cn-beijing.ksyuncs.com \
-o sigv4 \
-o region=BEIJING \
-o performance \
-o prefetch_concurrency=160 \
-o upload_concurrency=160开启性能模式后,ks3fs 使用内存缓存替代磁盘缓存来提升性能,因此会显著增加内存占用。
并发文件数量越多(同时读写的文件数量)、并发数越高、数据块越大内存占用越多,因此若服务器内存偏小,可通过减少并发文件数量、调小并发数、调小数据块大小来降低内存占用,避免因内存不足导致掉挂载,影响业务稳定性。
为了防止因文件并发数过多导致内存耗尽,ks3fs1.2.0 引入了自动降级机制:
正常模式:当同时处理的文件数小于等于全局并发上限时,每个文件都能获得完整的并发加速,性能最强 。
降级模式:当同时处理的文件数大于全局并发上限时,系统会自动进入降级模式,自动降低超额文件的内存分配(每个文件降至1个并发),以确保任务不卡死、不报错,但整体吞吐量会有所下降 。
总内存占用 = 下载内存占用 +上传内存占用
1. 下载内存占用计算公式:下载内存 = min(全局预读并发数prefetch_concurrency, 单文件预读并发数prefetch_concurrency_per_file × 同时处理文件数) × 3 × 预读块大小prefetch_chunk_size + 超额文件数 × 预读块大小prefetch_chunk_size × 3
2. 上传内存占用计算公式:上传内存占用 = min(单文件上传并发数parallel_count × 同时处理文件数, 全局上传并发数upload_concurrency) × 上传分块大小multipart_size + 超额文件数 × 上传分块大小multipart_size
场景 | 操作流 | 内存计算方式 |
|---|---|---|
下载 | KS3 → 本地 | 仅计算下载内存 |
上传 | 本地 → KS3 | 仅计算上传内存 |
复制 | KS3 → KS3 | 计算下载内存 + 上传内存 |
计算公式:下载内存占用 = min(全局预读并发数prefetch_concurrency, 单文件预读并发数prefetch_concurrency_per_file × 同时处理文件数) × 3 × 预读块大小prefetch_chunk_size + 超额文件数 × 预读块大小prefetch_chunk_size × 3
计算示例:
同时处理文件数 | 超额文件数 | 是否降级 | 下载基础内存 | 下载额外内存 | 下载总内存 |
|---|---|---|---|---|---|
3个 | 0 | 否 | min(100, 60)×3×10 = 1800MB | 0MB | 1.76GB |
5个 | 0 | 否 | min(100, 100)×3×10 = 3000MB | 0MB | 2.93GB |
10个 | 5 | 是 | min(100, 200)×3×10 = 3000MB | 5×10×3 = 150MB | 3.08GB |
15个 | 10 | 是 | min(100, 300)×3×10 = 3000MB | 10×10×3 = 300MB | 3.22GB |
计算公式:上传内存占用 = min(全局上传并发数upload_concurrency, 单文件上传并发数parallel_count × 同时处理文件数) × 上传分块大小multipart_size + 超额文件数 × 上传分块大小multipart_size
计算示例:
同时处理文件数 | 超额文件数 | 是否降级 | 上传基础内存 | 上传额外内存 | 上传总内存 |
|---|---|---|---|---|---|
3个 | 0 | 否 | min(100, 60)×10 = 600MB | 0MB | 0.59GB |
5个 | 0 | 否 | min(100, 100)×10 = 1000MB | 0MB | 0.98GB |
10个 | 5 | 是 | min(100, 200)×10 = 1000MB | 5×10 = 50MB | 1.02GB |
15个 | 10 | 是 | min(100, 300)×10 = 1000MB | 10×10 = 100MB | 1.07GB |
总内存占用 = 下载内存占用 +上传内存占用
1. 下载内存占用计算公式:下载内存 = min(全局预读并发数prefetch_concurrency, 单文件预读并发数prefetch_concurrency_per_file × 同时处理文件数) × 3 × 预读块大小prefetch_chunk_size + 超额文件数 × 预读块大小prefetch_chunk_size × 3
2. 上传内存占用计算公式:上传内存占用 = min(单文件上传并发数parallel_count × 同时处理文件数, 全局上传并发数upload_concurrency) × 上传分块大小multipart_size + 超额文件数 × 上传分块大小multipart_size
计算示例:
同时处理文件数 | 超额文件数 | 是否降级 | 下载总内存 | 上传总内存 | 下载+上传总内存 |
|---|---|---|---|---|---|
3个 | 0 | 否 | 1.76GB | 0.59GB | 2.35GB |
5个 | 0 | 否 | 2.93GB | 0.98GB | 3.91GB |
10个 | 5 | 是 | 3.08GB | 1.02GB | 4.1GB |
15个 | 10 | 是 | 3.22GB | 1.07GB | 4.29GB |
纯净模式
