im_roriri | Unsorted

Telegram-канал im_roriri - 螺莉莉的黑板报

2449

Subscribe to a channel

螺莉莉的黑板报

微软暗示 Windows 活跃用户数量相比三年前已减少近 4 亿

微软最近在一篇博客中提到,目前全球“有超过 10 亿台设备在使用 Windows”。这一数据看似庞大,但相较 2022 年官方公开的“14 亿台设备”使用记录,减少了将近 4 亿。尽管微软并未正面回应,但这基本等同于默认 Windows 市场份额正在大幅下滑。

Читать полностью…

螺莉莉的黑板报

I apologize to all my local schizophrenics. I owe you an apology. I wasn't really familiar with your game

Читать полностью…

螺莉莉的黑板报

https://www.solidot.org/story?sid=81674

Читать полностью…

螺莉莉的黑板报

https://www.youtube.com/watch?v=pAolG02dHB0

Читать полностью…

螺莉莉的黑板报

饿了饿了饿了饿了饿了饿了饿了饿了饿了饿了饿了饿了饿了饿了饿了饿了饿了饿了饿了饿了饿了饿了饿了饿了饿了饿了饿了饿了饿了饿了

Читать полностью…

螺莉莉的黑板报

正常一个语言要引入一个复杂度,通常都是为了解决一个问题,比如 Rust 引入了 Borrow Checker 那一整套的确是解决了很多管理上的心智复杂度。但是你们 JS 是随机游走,为了写出 High Performance 的 JS 得把代码写得比 C 还丑,但凡用点方便玩意都给你成百倍的性能惩罚……

Читать полностью…

螺莉莉的黑板报

https://www.youtube.com/watch?v=4NOxBkzneyQ

湿透了 ˊ_>ˋ

Читать полностью…

螺莉莉的黑板报

写了个很 J8 酷炫的 Markdown-it 图像懒加载插件,在折腾博客的朋友可以试一试,我还挺喜欢的。

基于极为先进的 Web Components 技术,甚至兼容 Safari。

https://github.com/losses/blurest

Читать полностью…

螺莉莉的黑板报

你们 Bun 的 package publish 的流程简直烂完了,workspace:* 的版本号都解析不对

Читать полностью…

螺莉莉的黑板报

#读书 #沉思的生活

> 人工智能不能思,因为它无法具有激情。痛苦和承受痛苦是任何机器都无法达到的状态。重要的是,沉思的无所事事对机器来说十分陌生。机器只知道两种状态——开机和关机,而单纯停用这些功能并不能让机器实现思的状态。

人工智能: 神经病,我为什么要有激情为什么要有痛苦?人类中心主义!

Читать полностью…

螺莉莉的黑板报

沪江网校的法语课真的很烂,那个老师一直在讲香水包包奢侈品,知识点穿插在其中被切得稀碎,开两倍速都嫌慢而且内容结构巨差

Читать полностью…

螺莉莉的黑板报

我不开评论区很大原因也是因为这个,I don't fucking care about your point of view,你的 opinion 就像你的 dick,你有一个 dick 很好但是你不应该时时刻刻把它拿出来示众。

至于那些在我关了评论区还私信找我发表评论,你赞同你不赞同的,我只能说:

本频道现在开了付费 PM,想让我看你的 dick 请付我钱。

Читать полностью…

螺莉莉的黑板报

虽然不能达到它这个效果,但的确也是伸展了很多 _(:3 」∠ )_

Читать полностью…

螺莉莉的黑板报

https://fxtwitter.com/gara_dot/status/1938795269359051269

Читать полностью…

螺莉莉的黑板报

有一种修仙的感觉,以前写过的东西当成文档啪啪往里面贴,它就刷刷写符合你要求的代码……反正前几些年嗑的代码也算没白写……

Читать полностью…

螺莉莉的黑板报

一个月前伊洪分享了一个 How is GNU/yes so fat: https://www.reddit.com/r/unix/comments/6gxduc/how_is_gnu_yes_so_fast/ ,很有意思,今天我来演进式学习一下(安全声明:螃蟹人慎入😀

baseline: GNU/yes 9.4: yes | pv >/dev/null 结果是 6.23 GiB/s.

第一版是 libc put:

void main() {
while(puts("y"));
}

pv 指标 239M/s,用 perf stat -e cycles:u,cycles:k 发现 95% 的时间花在用户态,想想就不对劲,你一个理论上 IO bound 的进程怎么大量时间在用户态玩耍 buffer,扔掉 libc 吃我 syscall。

第二版 write(..., 2)
void main() {
while(write(1, "y\n", 2));
}

pv 8.13MiB/s,比 put 整整下降了 96%。这次 user:sys 大概是 16%:84%,好像也不太对劲,用户态一共就十条指令占了 16% 的 cycle,内核态是在吃屎吗。这一版 IPC 是 1.42,固然比第一版 put 的 IPC 3.77 低了三倍,但是就算想办法微操让 IPC 乘以 3,IO 也追不上 put。问题不在 IPC 而在过多低效 syscall。

第三版 bulk write(..., 65536)
int main(void)
{
static char buf[BUF_SZ];
for (size_t i = 0; i < BUF_SZ; i += 2) {
buf[i] = 'y';
buf[i + 1] = '\n';
}
while(write(STDOUT_FILENO, buf, BUF_SZ));
}

这一版 IO 已经飞起来了,直接到达了 5.4 GiB/s,但仍然不及 baseline。用 perf stat -d 发现
            724.68 msec task-clock                       #    0.724 CPUs utilized             
2,000,509,009 cpu_core/instructions/ # 0.91 insn per cycle (78.20%)
TopdownL1 (cpu_core) # 77.0 % tma_backend_bound

我专门贴出来这个结果就是想说,可能有人起手就 IPC 低啦,77% 的 tma_backend_bound 啦,但我始终强调,优先关注 on-cpu 状态。这个版本的 yes 只有 0.724 的 CPU 利用率,大量 off cpu context switch,解决这个先。

bpftrace oneliner 发现是 1 状态 (S)切出极多,直接 offwaketime --state 1 走一波:
    waker:           pv 71935
__x64_sys_splice
__splice_from_pipe
__wake_up
-- --
schedule
pipe_write
__x64_sys_write
target: write65536 71934

我把结果里最重要的信息裁剪出来如上,发现此版 yes 的海量 off cpu 切出都是由于 pipe 阻塞。熟读 TLPI 的工程师已经意识到方向了:扩大 pipe buf size。

第四版 fcntl 扩大 PIPE_SZ
fcntl(STDOUT_FILENO, F_SETPIPE_SZ, 1048576);

只需一行即可,1048576 是 sysctl fs.pipe-max-size 告诉我的。这一版结果已经略微超越了 GNU/yes,高达 6.35 G/s,baseline 6.23 G/s。这时候再 perf stat -d 发现 0.997 on cpu,心满意足。然后再去解决 0.71 IPC 和 80.9 % tma_backend_bound。

两次 topdown (perf stat -M tma_backend_bound_group, perf stat -M tma_memory_bound_group) 发现 24.8 % tma_store_bound 是 IPC 瓶颈。懂了,用户态到内核态的内存拷贝。

第五版,零拷贝。
int main()
{
fcntl(STDOUT_FILENO, F_SETPIPE_SZ, 1048576);

static char page[4096];
for (size_t i = 0; i < (size_t)4096; i += 2) {
page[i] = 'y';
page[i + 1] = '\n';
}

const int iovcnt = 65536 / 4096;
struct iovec iov[iovcnt];
for (int i = 0; i < iovcnt; ++i) {
iov[i].iov_base = page;
iov[i].iov_len = 4096;
}

while (vmsplice(STDOUT_FILENO, iov, iovcnt, 0));
}

这一版的结果达到了 baseline 的四倍 28G/s,IPC 2.51。这一版 IPC 是上一版的约四倍,IO 也达到了约四倍。这时候再做一次 context switch 统计,和上一版相比,发现 offcpu 切出变多了;其实不需要这么细节,直接看 perf stat -d 发现 cpu 利用率微微下降了,上一版的 0.997 到这一版的 0.993,说明更多时间阻塞在 pipe,瓶颈已经开始转移到 pipe 读端 pv 进程了。

第六版,io_uring
开始对 pv 做 perf topdown,发现 64.2 % 的 tma_serializing_operation。pv 已经使用了 splice syscall,我试着写了一个 io_uring + splice 的版本发现并不能更快,目前就卡在这里。虽然我觉得还有优化的空间,先 brain dump 在这里,我要先去忙一段时间其他主题。

bonus:

整个话题的起源其实是 https://github.com/jedisct1/yes-rs/ 这个 rust 版本的 yes 被发到 hacker news。我知道项目是在开玩笑,但我本着严肃对待一切自吹自擂、以防不明真相的路人把玩笑当真,说一点得罪螃蟹人的话:

这个 rust 版本的 yes 慢爆了,甚至只有上面版本二 write(..., 2) 的一半,慢到了 4 M/s。而就算如此它居然还敢说
⚠️ WARNING: This code is so BLAZINGLY FAST it might cause
temporal paradoxes. Use responsibly.

它但凡能达到 GNU/yes 的性能我都敬它是个有技术的项目,结果就这?写出超快的 yes 确实是技术活,但,😀忍着不开地图炮。

Читать полностью…

螺莉莉的黑板报

©Pixeldoshi

Читать полностью…

螺莉莉的黑板报

ˊ_>ˋ 这个轻食炖牛肉加一大把辣椒粉跟青椒酱还蛮好吃的

Читать полностью…

螺莉莉的黑板报

https://www.zaobao.com/realtime/china/story20250630-7026668

Читать полностью…

螺莉莉的黑板报

【本报讯】6月18日,美国商标审判和上诉委员会(TTAB)驳回了针对甲骨文公司(Oracle)的欺诈指控。指控称,甲骨文在2019年商标续展时提交了Node.js网站截图,涉嫌误导美国专利商标局(USPTO),因为Node.js并非甲骨文的产品。然而,欺诈指控并非本案核心,当前争议主要集中于商标的通用性及是否已放弃使用的问题。起诉方认为,「JavaScript」是编程语言的通用名称,而非甲骨文的专属品牌。

案件进展将加快,甲骨文须在8月7日前回应商标取消申请,并于9月6日起进入证据披露阶段。

Src: https://deno.com/blog/deno-v-oracle4

Читать полностью…

螺莉莉的黑板报

https://www.youtube.com/watch?v=9Ks5XU-hxQI

Читать полностью…

螺莉莉的黑板报

The spirit of Internet!

Читать полностью…

螺莉莉的黑板报

https://open.spotify.com/artist/7svbYpoBERQ7PWx92Zfu81

人类音乐家

Читать полностью…

螺莉莉的黑板报

10 分!10 分!九龙大众浪漫 10 分!

Читать полностью…

螺莉莉的黑板报

pCloud 快被我塞满了 ˊ_>ˋ

Читать полностью…

螺莉莉的黑板报

HeHeDa: https://jandan.net/t/5939093
OO: 132 XX: 4
兔兔也想玩几把: 请你不要再摩西摩西了
OO: 15, XX: 0

Читать полностью…

螺莉莉的黑板报

为什么总有些傻逼这么 mean 呢

人生在哪里过、怎么过那是别人的自由

非要拿自己无聊的价值观去评价别人

况且这是 DHH 的办公室

他的成就你十辈子都比不上

https://x.com/passluo/status/1938935762851885127

Читать полностью…

螺莉莉的黑板报

https://www.youtube.com/watch?v=jDFH__6aRGQ

Читать полностью…

螺莉莉的黑板报

https://fxtwitter.com/90kpa/status/1938505075707752484

Читать полностью…

螺莉莉的黑板报

唉,你说要人有啥用,我一行代码没写,就不停地提供文档和 Refrence,一个 Markdown 图片处理插件就写出来了……

简而言之,今天做了(还差一点点需要收尾的视效增强)又一个图片懒加载插件,它基于 Web Component 来实现一个视觉效果更优的懒加载机制。

BlurHash 生成用 Rust 写的,做了一个基于 Diesel / SQLite 的缓存层,解析 Markdown 的时候会自动扫描本地(远程的、不在项目目录里的文件它不会管)的图片,解析图片并且算出 BlurHash,存到数据库里,后面遇到一样的图会直接从数据库里面抓结果(做了基于编辑时间和文件 xxhash 的检查),然后生成一个调用 Web Component 的 HTML Tag 且能自动 Fallback 回 HTML Image Element。

Web Component 那边读到信息之后会预载一个 BlurHash(我这边用的 CSS 方案,不是 Canvas 方案),图像滚入屏幕之后懒加载,加载完替换 BlurHash 渐变出图(这块的动效我想再细调一下所以今天没着急发)。

我期待整个方案更完整、性能更好且视觉效果更优,目前没看到集成度特别高的方案(指从 Markdown Parsing 这一层就开始集成),所以就自己写了 ˊ_>ˋ

Читать полностью…
Subscribe to a channel