PostgreSQL 数据库首次支持 IO_uring: 可以显著提高速度
作为对开源 PostgreSQL 数据库服务器的一项非常激动人心的改进
它已合并了在 Linux 服务器上利用 IO_uring 进行异步 I/O 的初步支持, 并可带来一些不错的性能提升
使用 IO_uring 的初步支持已于 3月26日 (昨天) 合并到 PostgreSQL Git 中, 这是 PostgreSQL 18 年内稍后推出前一项非常激动人心的新增功能
该 IO_uring 支持要求使用 "--with-liburing" 构建 PostgreSQL Git 以对 IO_uring 的 liburing 库进行构建, 该针对 Linux 的特性还要求设置 PostgreSQL 选项 "io_method=io_uring" 以将 IO_uring 用作数据库服务器的 I/O 方式
该提交添加了可选的 liburing 构建依赖, 然后随后的提交推进了集成并添加了 io_method=io_uring 选项, 该提交解释道
此前围绕 PostgreSQL 的 IO_uring 讨论展示了 IO_uring/liburing 路径的一些非常不错的潜力, 并且还有进一步性能优化的空间
看到 IO_uring 支持合并到主线 PostgreSQL 中令人十分激动
并且到 PostgreSQL 18.0 发布时, IO_uring 方法的调优程度将会非常有趣
PostgreSQL 18.0 预计将于九月亮相
#LinuxStorage #FreeSoftware #PostgreSQL
原文链接
作为对开源 PostgreSQL 数据库服务器的一项非常激动人心的改进
它已合并了在 Linux 服务器上利用 IO_uring 进行异步 I/O 的初步支持, 并可带来一些不错的性能提升
使用 IO_uring 的初步支持已于 3月26日 (昨天) 合并到 PostgreSQL Git 中, 这是 PostgreSQL 18 年内稍后推出前一项非常激动人心的新增功能
该 IO_uring 支持要求使用 "--with-liburing" 构建 PostgreSQL Git 以对 IO_uring 的 liburing 库进行构建, 该针对 Linux 的特性还要求设置 PostgreSQL 选项 "io_method=io_uring" 以将 IO_uring 用作数据库服务器的 I/O 方式
该提交添加了可选的 liburing 构建依赖, 然后随后的提交推进了集成并添加了 io_method=io_uring 选项, 该提交解释道
aio: 添加 io_method=io_uring
使用 io_uring 进行异步 I/O 操作时比使用 io_method=worker 快得多, 尤其是在发出大量小型 I/O 时, 原因在于
a) 基于 worker 的 AIO 上下文切换开销变得更为显著
b) I/O worker 的数量可能成为限制因素
然而, io_uring 是 Linux 特有的, 并且需要额外的编译时依赖 (liburing)
该实现相当简单, 并且存在大量优化机会
此前围绕 PostgreSQL 的 IO_uring 讨论展示了 IO_uring/liburing 路径的一些非常不错的潜力, 并且还有进一步性能优化的空间
看到 IO_uring 支持合并到主线 PostgreSQL 中令人十分激动
并且到 PostgreSQL 18.0 发布时, IO_uring 方法的调优程度将会非常有趣
PostgreSQL 18.0 预计将于九月亮相
#LinuxStorage #FreeSoftware #PostgreSQL
原文链接
PostgreSQL 迎来批量模式和其它异步 I/O 改进
上周 PostgreSQL 合并了对 IO_uring 的支持, 该支持可提供 "大幅提升" 性能来提升这款流行的开源数据库服务器的性能
在周末, PostgreSQL 的异步 I/O (AIO) 代码合并了一些额外改进, 包括引入一种新的批处理模式, 该模式同样可提升性能
在 IO_uring 支持几天前合并后, 周日又合并了 PostgreSQL 的几项额外 I/O 改进
最新的活动包括为缓冲管理器提供异步 I/O 读取支持, 以便异步读取到缓冲池中
随后还提交了额外的代码, 以开始实际使用该异步 I/O 读取支持
接着提交了代码以引入并使用可选的批处理模式支持
这种批处理模式支持允许以更大批次提交 I/O, 从而比逐一提交具有更高效率
这可以帮助提高 PostgreSQL 对许多小读取操作的性能
由于相关语义的原因, 批处理模式支持是一个选择性功能
本周末为 Postgres 完善 I/O 改进的最后一步是由于克服了先前的限制, 在所有系统上启用了 I/O 并发
这些针对 PostgreSQL 数据库服务器的 I/O 改进正为九月发布的 PostgreSQL 18 版本做准备
#FreeSoftware #PostgreSQL
原文链接
上周 PostgreSQL 合并了对 IO_uring 的支持, 该支持可提供 "大幅提升" 性能来提升这款流行的开源数据库服务器的性能
在周末, PostgreSQL 的异步 I/O (AIO) 代码合并了一些额外改进, 包括引入一种新的批处理模式, 该模式同样可提升性能
在 IO_uring 支持几天前合并后, 周日又合并了 PostgreSQL 的几项额外 I/O 改进
最新的活动包括为缓冲管理器提供异步 I/O 读取支持, 以便异步读取到缓冲池中
随后还提交了额外的代码, 以开始实际使用该异步 I/O 读取支持
接着提交了代码以引入并使用可选的批处理模式支持
这种批处理模式支持允许以更大批次提交 I/O, 从而比逐一提交具有更高效率
这可以帮助提高 PostgreSQL 对许多小读取操作的性能
由于相关语义的原因, 批处理模式支持是一个选择性功能
本周末为 Postgres 完善 I/O 改进的最后一步是由于克服了先前的限制, 在所有系统上启用了 I/O 并发
这些针对 PostgreSQL 数据库服务器的 I/O 改进正为九月发布的 PostgreSQL 18 版本做准备
#FreeSoftware #PostgreSQL
原文链接
PostgreSQL 转向 AVX-512 进行 CRC32 计算: 最高提升 3 倍速度
除了最近在 Linux 上为 PostgreSQL 数据库服务器添加的可选 IO_uring 支持和异步 I/O 批处理模式外, 本周还合并了另一项令人兴奋的性能改进
本周合并到 PostgreSQL 数据库服务器的功能是对 CRC32C 计算使用 AVX-512 指令的支持
在支持 AVX-512 指令的 AMD 和 Intel 处理器上使用该指令可以为这一流行的开源数据库中的 CRC32C 循环冗余校验代码路径带来惊人的性能提升
添加该 AVX-512 用于 CRC32C 计算的提交说明:
在 Intel Tiger Lake 上使用该 AVX-512 CRC32C 代码测试时, 速度提升达 50% 到 3 倍
如果在支持更好 AVX-512 的更新 Intel Xeon 服务器处理器上, 或者在拥有广泛 AVX-512 支持的 AMD Zen 4 和 Zen 5 处理器上
性能提升更为显著, 将会非常有趣
这是开源 PostgreSQL 18 数据库服务器在大约九月发布的下一个重大功能版本之前的又一项巨大改进
#FreeSoftware #PostgreSQL
原文链接
除了最近在 Linux 上为 PostgreSQL 数据库服务器添加的可选 IO_uring 支持和异步 I/O 批处理模式外, 本周还合并了另一项令人兴奋的性能改进
本周合并到 PostgreSQL 数据库服务器的功能是对 CRC32C 计算使用 AVX-512 指令的支持
在支持 AVX-512 指令的 AMD 和 Intel 处理器上使用该指令可以为这一流行的开源数据库中的 CRC32C 循环冗余校验代码路径带来惊人的性能提升
添加该 AVX-512 用于 CRC32C 计算的提交说明:
使用 AVX-512 指令在可用时计算 CRC32C
x86 上之前的 CRC32C 实现依赖于 SSE 4.2 扩展中的原生 CRC32 指令, 该指令一次可处理最多 8 个字节
我们可以通过在 SIMD 寄存器上使用无进位乘法来获得显著加速, 每次循环迭代处理 64 个字节
对于较短的输入则回退到普通的 CRC 指令
在 Intel Tiger Lake 硬件 (2020) 上, 对于 64 到 112 字节的输入, CRC 现在快了 50%, 对于 256 字节的输入快了 3 倍
512 位寄存器上的 VPCLMULQDQ 指令自 2019 年起在 Intel 硬件上可用, 自 2022 年起在 AMD 上可用
对于 128 位寄存器有一个较旧的变体, 但至少在 Zen 2 上, 对于较短的输入, 其性能不如普通的 CRC 指令
我们现在必须进行运行时检查, 即使对于针对 SSE 4.2 的构建也是如此
这在实践中对于 WAL (可以说是最关键的情况) 并不重要, 因为自提交 e2809e3 以来, 当针对该扩展时, 带有 20 字节 WAL 头的最终计算已被内联并展开
与两个直接函数调用相比, 测试显示对于处理几十个字节的间接函数调用, 随后对固定输入 20 字节的内联指令, 其性能相当或略快
在 Intel Tiger Lake 上使用该 AVX-512 CRC32C 代码测试时, 速度提升达 50% 到 3 倍
如果在支持更好 AVX-512 的更新 Intel Xeon 服务器处理器上, 或者在拥有广泛 AVX-512 支持的 AMD Zen 4 和 Zen 5 处理器上
性能提升更为显著, 将会非常有趣
这是开源 PostgreSQL 18 数据库服务器在大约九月发布的下一个重大功能版本之前的又一项巨大改进
#FreeSoftware #PostgreSQL
原文链接
PostgreSQL 合并了对 NUMA 感知性的初始支持
PostgreSQL 开源数据库服务器最近经历了一系列令人振奋的变革...
PostgreSQL 18 最近合并了 IO_uring 支持, 同时利用 AVX-512 加速 CRC32 计算, 实现最高 3x 性能提升
今天合并到 PostgreSQL 的还有对 NUMA 感知性的初步支持, 用以提升多节点/插槽服务器上 PostgreSQL 的性能
在即将于九月发布的 PostgreSQL 18.0 版本之前, 基础 NUMA 感知性已合并到 PostgreSQL Git 中
如果使用 "
其他操作系统的 NUMA 感知性可能会在以后添加
正如在关于 PostgreSQL 的 NUMA 感知性支持讨论中所提到的, 该工作基于去年著名微软工程师 Andres Freund 在 PGConf EU 上的演讲
对于多插槽服务器而言, 这种 NUMA 感知性应能帮助降低延迟
-- 有望实现非常显著的改善, 它还可以帮助在靠近 PCIe 连接的存储或更好处理 CXL 内存的 NUMA 节点上执行数据库 I/O
在为 PostgreSQL 添加了基础 NUMA 感知性之后, 已经推出了 pg_shmem_allocations_numa, 用于提供共享内存在 NUMA 节点之间分布的信息
以及 pg_buffercache_numa, 用于提供各个缓冲区在 NUMA 内存节点上的信息
在今年晚些时候发布的 PostgreSQL 18 版本之前, 观察这种 NUMA 感知性能调优到何种程度将十分有趣
无论如何, 看到 NUMA 感知性支持最终进入主流开源 PostgreSQL 数据库服务器令人振奋
#FreeSoftware #PostgreSQL
原文链接
PostgreSQL 开源数据库服务器最近经历了一系列令人振奋的变革...
PostgreSQL 18 最近合并了 IO_uring 支持, 同时利用 AVX-512 加速 CRC32 计算, 实现最高 3x 性能提升
今天合并到 PostgreSQL 的还有对 NUMA 感知性的初步支持, 用以提升多节点/插槽服务器上 PostgreSQL 的性能
在即将于九月发布的 PostgreSQL 18.0 版本之前, 基础 NUMA 感知性已合并到 PostgreSQL Git 中
如果使用 "
--with-libnuma
" 配置选项进行构建, 则初步实现了仅限 Linux 的 NUMA 感知性其他操作系统的 NUMA 感知性可能会在以后添加
正如在关于 PostgreSQL 的 NUMA 感知性支持讨论中所提到的, 该工作基于去年著名微软工程师 Andres Freund 在 PGConf EU 上的演讲
对于多插槽服务器而言, 这种 NUMA 感知性应能帮助降低延迟
-- 有望实现非常显著的改善, 它还可以帮助在靠近 PCIe 连接的存储或更好处理 CXL 内存的 NUMA 节点上执行数据库 I/O
在为 PostgreSQL 添加了基础 NUMA 感知性之后, 已经推出了 pg_shmem_allocations_numa, 用于提供共享内存在 NUMA 节点之间分布的信息
以及 pg_buffercache_numa, 用于提供各个缓冲区在 NUMA 内存节点上的信息
在今年晚些时候发布的 PostgreSQL 18 版本之前, 观察这种 NUMA 感知性能调优到何种程度将十分有趣
无论如何, 看到 NUMA 感知性支持最终进入主流开源 PostgreSQL 数据库服务器令人振奋
#FreeSoftware #PostgreSQL
原文链接