看到汇编推送操作数是瓶颈的原因

ham*_*emi 6 c c++ assembly cpu-registers cpu-cache

我有一段用C编写的代码,我想找到这段代码的瓶颈!使用perf工具并注释汇编代码,我发现push %r12函数开头的指令是瓶颈(见图):

我对此有点困惑!一条简单的推送指令如何导致成为瓶颈?是否有可能CPU在将寄存器内容压入堆栈之前被迫从缓存更新内存内容?如果是,如果您让我知道背后的原因是什么,我将不胜感激。

这是我的函数的输入参数,以防需要:

nt32_t
rte_hash_lookup(const struct rte_hash *h, const void *key)
{
    RETURN_IF_TRUE(((h == NULL) || (key == NULL)), -EINVAL);
    return __rte_hash_lookup_with_hash(h, key, rte_hash_hash(h, key), NULL);
}
Run Code Online (Sandbox Code Playgroud)