[Python-Dev] Opcode cache in ceval loop (original) (raw)
Yury Selivanov yselivanov.ml at gmail.com
Wed Feb 3 16:22:28 EST 2016
- Previous message (by thread): [Python-Dev] Opcode cache in ceval loop
- Next message (by thread): [Python-Dev] Opcode cache in ceval loop
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On 2016-02-03 3:53 PM, francismb wrote:
Hi,
On 02/01/2016 10:43 PM, Yury Selivanov wrote:
We also need to deoptimize the code to avoid having too many cache misses/pointless cache updates. I found that, for instance, LOADATTR is either super stable (hits 100% of times), or really unstable, so 20 misses is, again, seems to be alright. Aren't those hits/misses a way to see how dynamic the code is? I mean can't the current magic (manually tweaked on a limited set) values, be self tweaked/adapted on those numbers?
Probably.
One way of tackling this is to give each optimized opcode a counter for hit/misses. When we have a "hit" we increment that counter, when it's a miss, we decrement it.
I kind of have something like that right now: https://github.com/1st1/cpython/blob/opcache5/Python/ceval.c#L3035
But I only decrement that counter -- the idea is that LOAD_ATTR is allowed to "miss" only 20 times before getting deoptimized.
I'll experiment with inc/dec on hit/miss and see how that affects the performance.
An ideal way would be to calculate a hit/miss ratio over time for each cached opcode, but that would be an expensive calculation.
Yury
- Previous message (by thread): [Python-Dev] Opcode cache in ceval loop
- Next message (by thread): [Python-Dev] Opcode cache in ceval loop
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]