基准测试
基准测试是用来衡量 pandas 性能的测试。与 pandas 相关的基准测试主要有两种类型:
- 内部 pandas 基准测试,用于衡量一段时间内的速度和内存使用情况
- 社区基准测试,比较不同工具在执行相同任务时的速度或内存使用情况
pandas 基准测试
pandas 基准测试在我们的代码库的 asv_bench 目录中实现。这些基准测试是为 airspeed velocity(简称 asv)框架实现的。
任何 pandas 开发人员都可以本地运行基准测试。这可以通过 asv run
命令完成,在更改前后运行基准测试可以帮助检测本地更改是否会影响性能。有关运行性能测试套件的更多信息,请参见 此处。
请注意,基准测试不是确定性的,在不同硬件上运行或在相同硬件上以不同压力级别运行会对结果产生重大影响。即使在相同的硬件和几乎相同的条件下运行基准测试,在运行完全相同的代码时也会产生显著差异。
pandas 基准测试服务器
我们目前有两台物理服务器,它们为 main
分支的每次(或几乎每次)提交运行 pandas 的基准测试。服务器相互独立运行。原始服务器已经运行了很长时间,它与一位 pandas 维护人员的物理位置相同。较新的服务器位于一个数据中心,由 OVHCloud 赞助。有关 pandas 赞助商以及您的公司如何支持 pandas 开发的更多信息,请访问 pandas 赞助商 页面。
基准测试结果可在以下位置获得:
- 原始服务器:asv
- OVH 服务器:asv(基准测试结果也可以在此 Conbench PoC 中可视化)
原始服务器配置
该机器可以通过 tomaugspurger/asv-runner 中的 Ansible 剧本进行配置。结果发布到另一个 GitHub 代码库 tomaugspurger/asv-collection 中。
基准测试由 Airflow 调度。它有一个用于查看和调试结果的仪表板。您需要设置 SSH 隧道才能查看它们
ssh -L 8080:localhost:8080 pandas@panda.likescandy.com
OVH 服务器配置
用于运行基准测试的服务器已配置为减少系统噪音并最大程度地提高基准测试时间的稳定性。
有关服务器配置详细信息,请参阅 pandas-benchmarks 仓库。这里有一个简要概述
- CPU 隔离:避免用户空间任务在与基准测试相同的 CPU 上执行,这可能会在执行期间中断它们(包括使用物理内核的所有虚拟 CPU)
- NoHZ:停止内核滴答,该滴答在隔离的 CPU 中启用上下文切换
- IRQ 亲和性:禁止基准测试 CPU 避免在隔离的 CPU 中发生许多(但不是全部)内核中断
- TurboBoost:禁用基于高 CPU 需求的 CPU 缩放
- P-States:使用“性能”调控器禁用 P-States 和基于它们的 CPU 频率更改
- C-States:将 C-State 设置为 0 并禁用更改,以避免系统不活动后 CPU 速度变慢
社区基准测试
比较包含 pandas 的数据框工具的主要基准测试是