ベンチマーク
ベンチマークとは、pandasのパフォーマンスを測定するためのテストです。pandasに関連するベンチマークには、2つの異なる種類があります。
- 時間経過に伴う速度とメモリ使用量を測定するための内部pandasベンチマーク
- 同じジョブを実行する際のさまざまなツールの速度またはメモリ使用量を比較するコミュニティベンチマーク
pandasベンチマーク
pandasのベンチマークは、リポジトリのasv_benchディレクトリに実装されています。ベンチマークは、airspeed velocity (略してasv)フレームワーク用に実装されています。
ベンチマークは、pandasの開発者であれば誰でもローカルで実行できます。これは、asv run
コマンドで実行でき、変更前と変更後にベンチマークを実行することで、ローカルの変更がパフォーマンスに影響を与えているかどうかを検出するのに役立ちます。パフォーマンステストスイートの実行に関する詳細は、こちらにあります。
ベンチマークは決定的ではなく、異なるハードウェアで実行したり、異なる負荷レベルで同じハードウェアで実行したりすると、結果に大きな影響を与えることに注意してください。同じハードウェアでほぼ同一の条件でベンチマークを実行した場合でも、まったく同じコードを実行すると、大きな差異が生じます。
pandasベンチマークサーバー
現在、pandasのベンチマークをmain
ブランチへのすべての(またはほぼすべての)コミットに対して実行している2つの物理サーバーがあります。サーバーは互いに独立して動作します。オリジナルのサーバーは長期間稼働しており、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:システム非アクティブ後にCPUが遅くなるのを防ぐために、C-Stateを0に設定し、変更を無効にします。
コミュニティベンチマーク
pandasを含むデータフレームツールを比較する主なベンチマークは次のとおりです。