Function `zend_hash_find_bucket` consumes much time in WordPress workload
まだ誰も着手していません。
- 主要言語
- C
- スター
- 40.4k
- フォーク
- 8.2k
- 平均マージ
- 2日 13時間
- マージ済み PR(30日)
- 96
説明
Description
Dear, maintainers:
I am utilizing PHP-FPM and have profiled performance data for a WordPress workload. Within this benchmark, I've identified certain hotspots. The performance analysis from 'perf' highlights that functions such as zend_hash_find and zend_hash_find_known_hash are consuming a considerable amount of time. Upon investigation, I suspect that the core issue lies within the zend_hash_find_bucket function.
Upon inspecting the assembly code and annotating it, I noticed that certain 'mov' instructions are causing significant delays. To address this, I attempted to optimize the zend_hash_find_bucket function. I experimented with optimizations such as utilizing prefetch instructions and employing struct alignment. However, these optimizations did not seem to have a discernible impact on performance.
Percent│
│
│
│ Disassembly of section .text:
│
│ 0000000000532ae0 <zend_hash_find>:
│ zend_hash_find():
0.84 │ push %r12
0.04 │ push %rbp
0.01 │ mov %rsi,%rbp
2.52 │ push %rbx
│ zend_string_hash_val():
8.01 │ mov 0x8(%rsi),%rax
│ zend_hash_find():
0.02 │ mov %rdi,%rbx
│ zend_string_hash_val():
0.12 │ test %rax,%rax
0.14 │ ↓ je 78
│ zend_hash_find_bucket():
5.63 │13: or 0xc(%rbx),%eax
0.28 │ mov 0x10(%rbx),%r12
0.16 │ cltq
25.03 │ mov (%r12,%rax,4),%ebx
1.98 │ cmp $0xffffffff,%ebx
0.56 │ ↓ je a0
0.85 │ shl $0x5,%rbx
0.50 │ add %r12,%rbx
15.20 │ cmp 0x18(%rbx),%rbp
12.97 │ ↓ jne 68
│ zend_hash_find():
1.41 │32: mov %rbx,%rax
0.60 │ pop %rbx
0.03 │ pop %rbp
1.25 │ pop %r12
1.83 │ ← ret
│ nop
│ zend_hash_find_bucket():
0.26 │40: mov 0x18(%rbx),%rdi
0.04 │ test %rdi,%rdi
│ ↓ je 53
│ zend_string_equal_content():
0.01 │ mov 0x10(%rbp),%rax
0.01 │ cmp %rax,0x10(%rdi)
5.03 │ ↓ je 90
│ zend_hash_find_bucket():
1.06 │53: mov 0xc(%rbx),%ebx
0.11 │ cmp $0xffffffff,%ebx
0.15 │ ↓ je a0
0.33 │ shl $0x5,%rbx
0.24 │ add %r12,%rbx
1.90 │ cmp 0x18(%rbx),%rbp
2.69 │ ↑ je 32
2.00 │68: mov 0x8(%rbp),%rax
0.24 │ cmp %rax,0x10(%rbx)
Is this a known performance issue within the PHP community? I'm seeking suggestions or insights on potential avenues for optimization. Your feedback and suggestions would be greatly appreciated.
PHP Version
master
Operating System
No response
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
まず zend_hash_find_bucket と、関連するエントリポイントである zend_hash_find および zend_hash_find_known_hash を読み、その後、WordPress ワークロードに対して報告された perf プロファイルを再現します。WordPress ワークロードで測定可能な改善が得られる、根拠のある変更を行い、かつハッシュ検索の動作を維持できれば完了です。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- c, php
- 領域
- backend, performance
- issue の種類
- リファクタリング
- 難易度
- 5/5
- 見積もり時間
- 1週間以上
- 活発さ
- 停滞
- 明瞭さ
- 説明が足りない
- 初心者へのやさしさ
- 25/100