V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lsk569937453
V2EX  ›  Rust

hyper v1+anyhow 可能导致性能急速下降

  •  
  •   lsk569937453 · 57 天前 · 969 次点击
    这是一个创建于 57 天前的主题,其中的信息可能已经有所发展或是发生改变。

    出问题的源码

    https://gist.github.com/lsk569937453/b42a8cfce21bd20c5da8737db1f5a1b1

    导致的问题

    加了 anyhow = { version = "1.0.xx"}之后,gateway 的 TPS 从 8w 降到 4w(4 核 8G 的 docker 容器)。

    怎么修复

    anyhow = { version = "1.0.xx", default-features = false }

    怎么避免

    • 项目依赖的 crates 中的 anyhow 必须是非 std 的即 anyhow = { version = "1.0.xx", default-features = false }
    • 项目依赖的 crates 中,如果依赖了 anyhow ,也必须是非 std 得。否则,项目会出现性能下降。比如项目依赖了 log4rs 和 https://github.com/BinChengZhao/delay-timer,由于这两个 crates 依赖了 std 的 anyhow ,因此需要将 log4rs 和 delay-timer 排除掉,否则也会出问题。

    问题原因

    目前不确定是 anyhow 的问题还是 hyper v1 的问题。我用同样的代码在 hyper v0.14.xx 实现了一遍,没有发现问题。所以倾向是 hyper v1 的问题。

    6 条回复    2024-03-04 14:08:42 +08:00
    PTLin
        1
    PTLin  
       57 天前
    虽然不知道你代码具体原因是什么,但是 anyhow 1.0.80 不同 feature backtrack 的速度确实不一样,不开启 std feature 的话用的是 anyhow 自己的实现,开启的话用的是标准库的实现,在 Windows 上好像是标准库的实现比较慢。
    ```rust
    use anyhow::anyhow;
    use std::time::Instant;

    fn main() {
    for _ in 0..20 {
    let now = Instant::now();

    for _ in 0..10000 {
    let _ = anyhow!("asd");
    }

    println!("{:?}", now.elapsed());
    }
    }
    ```
    lsk569937453
        2
    lsk569937453  
    OP
       57 天前
    应该和 anyhow 的版本没什么关系,我换成 anyhow = { version = "1.0.70"}还是有同样的问题。
    PTLin
        3
    PTLin  
       57 天前
    又测试了下,调用层数多点能有十多倍的差距
    https://imgur.com/SVIrrfT
    https://imgur.com/2LDykii
    lsk569937453
        4
    lsk569937453  
    OP
       55 天前
    保险起见,不用 anyhow 这个 crate 了,代码改动还小点。
    PTLin
        5
    PTLin  
       55 天前
    @lsk569937453 我比较好奇题主是什么平台运行的代码
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5479 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 07:53 · PVG 15:53 · LAX 00:53 · JFK 03:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.