Manjusaka 的碎碎念


Гео и язык канала: не указан, не указан
Категория: не указана


Manjusaka 的碎碎念

Связанные каналы  |  Похожие каналы

Гео и язык канала
не указан, не указан
Категория
не указана
Статистика
Фильтр публикаций






一个村小新一批的待助学生资料会在本月31号(下周二)上午8点半发布于村小网站待助学生页面:http://www.one-school.org/plant/one2one/helpchild_1.asp




image_2023-10-24_17-08-15.png
53.1Кб
最近两个月高强度的给 #OpenDAL 贡献了一波 提供了不少 Service 的支持/改进,完整覆盖了所有 Service 的文档,增强了不少可观测性,拾掇了不少 CI 这一切建立在我并不太会写 Rust 的基础上
这点实际上又可以作为一个很好的正面例子。即便你不会一门语言,或者一些其余的东西
但是你自己独一无二的经验,你独特的想法,依旧可以让你在一个社区里找到足够的活去做
一个良性的社区,也需要尽可能的让没有相关经验的人能在这里成长
这大概就是开源共同体(




我现在差不多每天上班8h(oncall不确定),然后写点社区的东西1-2h,写作业1h,可能还得看书2h。最近有点麻了,感觉需要给自己释压了。。


Репост из: yihong0618 和朋友们的牛逼频道
开源的世界里很多领域都是一个或者几个人撑起来的。感叹下 gray 说的是对的。
今天刷到一个做日语 NLP 的人,发现他项目贡献者也是之前就发现的那么几个做日语 NLP 的,比如 https://github.com/polm
https://github.com/ikegami-yukino




这个世界只有一种英雄主义,那就是看清生活的真相后依旧热爱生活


关于 Python 移除 DTrace 后续的一些事情,https://github.com/python/cpython/issues/104280#issuecomment-1753055289

1. 官方维护者把 DTrace 和 PEP 669 做的事混为一谈完全是瞎搞,完全不同的东西
2. 3.12 后 perf trampoline 支持后,因为 trampoline 锚定了 bytecode 在内存中的位置,所以可以用 uprobe 来做 trace,某种意义上能取代一部分 DTrace 的东西。但是这一部分 bytecode 是要在第一次执行的时候才会被编译为 trampoline,换句话说你很难从一开始就能获得地址
3. Dtrace 和 trampoline 应该是互补的,现在的搞法完全是瞎搞
4. 你们移除 Dtrace 也得更新文档啊


某航司数据大规模泄漏,包含身份证号等信息,诈骗即将进入新高峰,请注意防范


我们都会成为他,只是时间早晚而已






和 Gray 反复确认后发现,3.12 的确是在一个 commit 的中移除了 function_entry 和 function_return 的 USDT Point
https://github.com/python/cpython/issues/110385
我们应该是第一个发现的。。。然而始作俑 commit 是作为 PEP 669 的一个实现在四个月前引入的 https://github.com/python/cpython/commit/411b1692811b2ecac59cb0df0f920861c7cf179a

只能高呼 Python 遥遥领先,遥遥领先(不知道作者是故意的还是不小心的(要是因为 669 而移除 USDT 的话,那就属于开历史倒车的行为了


Репост из: Manjusaka
感谢,很有趣,我自己最开始想先排除一下寄存器,所以在死嗑看能不能很方便的获取到 frameptr
但是目前和你聊完一波发现感觉只能还是磕寄存器。
至于寄存器和兼容性的问题,目前发现有一些初步的结论

1. 3.9 以下是 r15, 3.10/3.11 是 rbx,3.12 很神奇,默认 dtrace 编译出来的不带 function_entry 的 hook point
2. dtrace 默认不少发行版以及 pyenv 编译的时候没开参数,会导致失效
3. 感觉兜底方案还是直接读进程内存去慢慢解析(


Репост из: Welcome to the Black Parade
奥格对 CPython USDT 的应用很感兴趣,那我就详细说说。

核心是取到 PyFrameObject,能取到这玩意,就可以做 python 虚拟机级的栈回溯,也可以在 function__entry 取到入参:_PyInterpreterFrame(不过需要比较辛苦的解析工作)。

但是落脚点是怎么取到 PyFrameObject,因为 CPython 并没有直接传递这个指针给 USDT。

我们直接去看 function__entry 这个 USDT 所在的地方,图一:

1. 最后的 nop 在 attach 之后会变成 int3
2. 上一个指令是 call PyFrame_GetLineNumber
3. 简单看一眼 PyFrame_GetLineNumber 这个函数的声明: PyFrame_GetLineNumber(PyFrameObject *f) ,入参就是 PyFrameObject
4. 所以 nop 上面两行的指令 mov %rbx,%rdi 我们就可以知道 rbx == rdi == &PyFrameObject

所以至少在这个版本的 CPython 上,我们可以在 function__entry 这个 USDT 通过 rbx 取到 PyFrameObject。

当然这是需要打表的,比如 3.10 在 rbx,3.11 可能在其他寄存器。或者实时分析一下 ELF 也行。

当然这只是开始的开始,真要做到工业级的应用,还有很多工作要做。我只是想说,CPython USDT 虽然看起来简陋,但是我们已经可以做到很多很多的事情。

只可惜我要做的事情太多了,CPython 的 tracing tool 只能让少年们去做了。




Репост из: Welcome to the Black Parade
https://lpc.events/event/17/contributions/1609/

kp 和 up 似乎目前就这一位 Jiri Olsa 在往前推进 😭 好像 ftrace 也是他。。

很久以前总是看到有人说 “你能想到的别人早就想到了”,我说放屁。我举目四望,所见之处百废待兴,太多的事情没人去做,只有一两位开源英雄在推动巨石。

Показано 20 последних публикаций.

515

подписчиков
Статистика канала