Hantong 最近的时间轴更新
Hantong

Hantong

V2EX 第 533120 号会员,加入于 2021-02-13 09:49:19 +08:00
根据 Hantong 的设置,主题列表被隐藏
二手交易 相关的信息,包括已关闭的交易,不会被隐藏
Hantong 最近回复了
62 天前
回复了 lsk569937453 创建的主题 Rust hyper v1+anyhow 可能导致性能急速下降
目前根据 bench 结果:

```
Gnuplot not found, using plotters backend
Anyhow/anyhow/v1.0.76 time: [46.255 ns 50.158 ns 54.338 ns]
change: [-3.3466% +7.6940% +20.010%] (p = 0.18 > 0.05)
No change in performance detected.
Found 5 outliers among 100 measurements (5.00%)
3 (3.00%) high mild
2 (2.00%) high severe
Anyhow/anyhow/v1.0.90 time: [48.072 ns 56.167 ns 63.721 ns]
change: [-29.746% +34.093% +175.67%] (p = 0.69 > 0.05)
No change in performance detected.
Found 16 outliers among 100 measurements (16.00%)
11 (11.00%) high mild
5 (5.00%) high severe
```

但是我的测试环境发生变动: AMD AI9 HX370, 7500MT LPDDR5.

```
rustc 1.84.0-nightly (e7c0d2750 2024-10-15)
binary: rustc
commit-hash: e7c0d2750726c1f08b1de6956248ec78c4a97af6
commit-date: 2024-10-15
host: x86_64-pc-windows-msvc
release: 1.84.0-nightly
LLVM version: 19.1.1
```

测试代码:

```rust
use criterion::{criterion_group, criterion_main, BatchSize, Criterion};

fn bench_maps(c: &mut Criterion) {
let mut group = c.benchmark_group("Anyhow");

group.bench_function("anyhow/v1.0.76", |b| {
b.iter_batched(
|| anyhow_1_0_76::anyhow!("test error"),
|e| {
criterion::black_box({
let _ = e;
});
},
BatchSize::SmallInput,
)
});

group.bench_function("anyhow/v1.0.90", |b| {
b.iter_batched(
|| anyhow_1_0_90::anyhow!("test error"),
|e| {
criterion::black_box({
let _ = e;
});
},
BatchSize::SmallInput,
)
});
}

criterion_group!(benches, bench_maps);
criterion_main!(benches);
```

切换至当前 stable rust 测试:

```
rustc 1.81.0 (eeb90cda1 2024-09-04)
binary: rustc
commit-hash: eeb90cda1969383f56a2637cbd3037bdf598841c
commit-date: 2024-09-04
host: x86_64-pc-windows-msvc
release: 1.81.0
LLVM version: 18.1.7
```

```
Running benches/anyhow.rs (target\release\deps\anyhow-e035dda9f6eff98f.exe)
Gnuplot not found, using plotters backend
Anyhow/anyhow/v1.0.76 time: [7.3229 ns 7.5644 ns 7.9092 ns]
change: [-5.8063% -1.9072% +1.6252%] (p = 0.33 > 0.05)
No change in performance detected.
Found 7 outliers among 100 measurements (7.00%)
3 (3.00%) high mild
4 (4.00%) high severe
Anyhow/anyhow/v1.0.90 time: [46.830 ns 53.064 ns 59.741 ns]
change: [-16.795% -3.3065% +13.223%] (p = 0.68 > 0.05)
No change in performance detected.
Found 6 outliers among 100 measurements (6.00%)
3 (3.00%) high mild
3 (3.00%) high severe
```

emmm, 奇怪的结果.
78 天前
回复了 hahiru 创建的主题 Windows 轻易别更新 win11 24h2,又拉了一坨
说白了要不是大小核谁升级 Windows 11, 用 Windows 不还是因为蛮多专业软件只有 Windows 版本, 游戏也是... 所以求稳才是第一.
78 天前
回复了 bingyin 创建的主题 DNS 自建了个国内的 DoH,有兴趣的欢迎来看看
卧槽, 分分钟被取消备案, 国内机器搭 DNS 是违法的我记得
想趟浑水就买, 最多买点短期的.
楼上有说屏蔽 MCDN 的, 实测会导致更加卡顿, 因为得等播放器 fallback 到备用地址.

一个相对有效的解决方案是: 有软路由的话直接 ban 掉 HTTP DNS, 没有就只能安装 AdGuard 一类的软件本地拦截, 同时 api.bilibili.com / app.bilibili.com / *.biliapi.net / *.biliapi.com 仅解析 IPv6(遇到 CNAME 是 *.bilicdn.* 这种自建机房可能没 IPv6 的就麻烦了), 拿到的资源连接大多数就是 mirror 型的 CDN, 也就是大厂提供的 CDN 了.

至于代码层面的限速, 等人开发个模块吧.

B 的技术向来垃圾, 现在还搞降本增笑, AV1 的码率都压得面目全非了, 还会卡顿, 只能说褒姒.
B 站 APP 端的 ijkplayer 明确是有限速相关代码的, 可以用模块的方式干掉(? 但是目前似乎没有, 似乎是 native 层级别的限制).

此外, B 站大量运用了 MCDN / BCache CDN / PCDN, MCDN (mcdn.bilivideo.*) 和 PCDN (纯 IP 没域名那种, 或者迅雷那个 sy 什么什么的, 南方沿海见得多一点) 众所周知的质量相当差, BCache CDN 作为 B 自建的 VOD CDN, 速度各个地区差异蛮大, 有些地方机房带宽便宜速度就好.

以上是我给一个模块开发替换视频 UPOS 功能时的总结.
182 天前
回复了 yaott2020 创建的主题 程序员 发现 Rust 的 target 比 node_modules 还离谱
@Ocean810975 同意. 我个人不是科班出身, 拿 Rust 入的门, 然后因为参与维护了一个安卓项目, 从学习大佬的代码开始学会了 Kotlin, 后面才补课的 C, 现在因为自己的小项目用到略接触到 Go. Python, JavaScript or TypeScript 也会写一点. 我会的这些语言里面最擅长也最喜欢的就是 Rust, 其次是 Kotlin.

记得 This Week in Rust 分享了一篇文章关于如何加速编译的, 我试用后感受明显, 虽然最有用的那个把 linker 改成 Mold 只支持 Linux 平台, 改 codegen backend 为 cranelift 不支持 WoA(这个影响也不大), 不支持 SIMD, 不支持 unwinding on panics(这个影响蛮大, 不过可以单开个 build 配置继承 release 配置, 把 debug 打开啥的, 专用于测试版本构建). po 个链接供参考: https://blog.rust.careers/post/compile_rust_faster/
182 天前
回复了 drymonfidelia 创建的主题 程序员 给大家见识一下日本的逆天 IT 水平
@shakoon IE 4 的机器, emmm 现在绝大部分网站都不支持 SSLv3 了吧
182 天前
回复了 lsk569937453 创建的主题 Rust hyper v1+anyhow 可能导致性能急速下降
@RTSmile 毕竟是 std 的问题, 修复蛮麻烦的.

benchmark 一下就能看出来, 我原来还不信的.

最简单的复现代码, 虽然不够严谨. 严谨点得用 benchmark, 或者上火焰图看看什么情况, 我对为什么慢不感兴趣所以没弄.

```rust
fn main() {
let mut result = Vec::with_capacity(20);

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

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

result.push(now.elapsed().as_nanos());
}

let avg = result.iter().sum::<u128>() as f64 / 20f64 / 1000f64;

println!("avg cost: {}s", avg);
}
```

反正我现在是遵照一位大佬的建议锁 1.0.76 这最后一个正常的版本, 然后所有依赖 anyhow 的库也基本会对齐依赖版本. 还在观察中, 后天有空看看 nightly 版本下的情况.
216 天前
回复了 lsk569937453 创建的主题 Rust hyper v1+anyhow 可能导致性能急速下降
对于此问题, 修复方法推荐强制指定 anyhow 版本到 =1.0.76
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2718 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 12ms · UTC 08:18 · PVG 16:18 · LAX 00:18 · JFK 03:18
Developed with CodeLauncher
♥ Do have faith in what you're doing.