性能优化
本文档介绍了Alluxio的部分功能,可提高部分场景下的Alluxio性能。
Client 异步预取
如果当前文件正在进行顺序读,Alluxio client 会在当前读取位置后预取一定范围的数据,并开始在client 上缓存这些数据。 如果当前读取位置的数据已经被预取缓存,Alluxio client 将返回缓存数据,而不是向 Worker 发送 RPC 请求。
预取窗口是自调节的。 如果读取总是从上次读取位置的末尾开始(即读取连续),预取窗口将增大。 如果读取不连续,预取窗口会缩小。 如果读取完全是随机读取,预取窗口最终会缩小为 0。
异步预取将数据缓存到 client 的直接内存中。 通过增加分配给 JVM 进程的直接内存,可提高性能。
Client 异步预取始终处于启用状态。 用户可通过以下参数来调整此功能。
配置项 | 推荐值 | 描述 |
---|---|---|
alluxio.user.position.reader.streaming.async.prefetch.thread | 64 | 总异步预取并发数 |
alluxio.user.position.reader.streaming.async.prefetch.part.length | 4MB | 预取单元的大小 |
alluxio.user.position.reader.streaming.async.prefetch.max.part.number | 8 | 单个已打开文件的最大单元数。 例如,如果预取单元大小为 4MB,最大单元数为 8,则 Alluxio 最多会为打开的文件预取 32MB 的数据。 |
alluxio.user.position.reader.streaming.async.prefetch.file.length.threshold | 4MB | 如果文件大小小于指定阈值,Alluxio 会立即最大化预取窗口,而不是从一个小窗口开始。 此配置用于提高小文件的读取性能。 |
启用慢速异步预取池
用户可能会在不同情况下需要不同的异步预取参数,例如冷读取与缓存过滤读取。 冷读通常需要更多并发量,以最大限度地利用网络带宽并实现最佳性能。 Alluxio 有一个专用于其他配置的辅助异步预取池,称为慢速线程池。 要启用和配置该辅助池,请进行以下配置:
配置项 | 推荐值 | 描述 |
---|---|---|
alluxio.user.position.reader.streaming.async.prefetch.use.slow.thread.pool | true | 设置为 true 可启用慢速池 |
alluxio.user.position.reader.streaming.async.prefetch.use.slow.thread.pool.for.cold.read | true | 如果设置为 true,慢速池也将用于冷读取。否则,慢速池将仅用于缓存过滤读取。 |
alluxio.user.position.reader.streaming.slow.async.prefetch.thread | 256 | 慢速池的总异步预取并发数 |
alluxio.user.position.reader.streaming.slow.async.prefetch.part.length | 1MB | 慢速池使用的预取单元大小 |
alluxio.user.position.reader.streaming.slow.async.prefetch.max.part.number | 64 | 单个已打开文件在慢速池中可以拥有的最大单元数 |
Client 大文件预加载
大文件预加载是对大文件冷读的优化。
如果启用该功能,Alluxio 将在 client 最初读取文件时将整个文件同时加载到 Alluxio Worker 中。 在对存储在 S3 上的单个 100GB 文件运行 FIO 基准测试时,在开启该功能后,Alluxio的冷读性能可以接近全缓存的热读性能。
数据去重是在 client 和 worker 端处理的,以避免产生过多的 RPC 调用和向 UFS 传输冗余数据。 请注意,由于 Alluxio 总是加载完整的文件,如果应用程序不需要读取整个文件,此功能可能会导致读放大。
启用该功能
配置项 | 推荐值 | 描述 |
---|---|---|
alluxio.user.position.reader.preload.data.enabled | true | 设置为 true 可启用大文件预加载 |
alluxio.user.position.reader.preload.data.file.size.threshold.min | 1GB | 触发异步预加载的最小文件大小 |
alluxio.user.position.reader.preload.data.file.size.threshold.max | 200GB | 触发异步预加载的最大文件大小。 这有助于避免加载超大文件,因为超大文件会完全填满页面存储容量并触发缓存驱逐。 |
alluxio.worker.preload.data.thread.pool.size | 64 | 在 worker 上并行加载文件数据到 UFS 的并发作业数。每个作业会将一页数据加载到 Alluxio 中。 例如,如果页面大小为 4MB, 且该配置设置为 64,则 worker 每次迭代将并发加载 256MB 的数据。 |
Last updated