Phonograph


Channel's geo and language: China, Chinese
Category: Technologies


在馥郁的花田
我沉睡在杂草间
顺着萤火的河流
漂向无垠的星空

Related channels

Channel's geo and language
China, Chinese
Statistics
Posts filter






?


我想打“网址”两个字






于是我写了个脚本,处理了一下 github 上开源的资源,传上来一些我常用的


telegram 开放了自定义 emoji,然后最近微软开源了它的 emoji
所以现在有没有搬运


rust for linux v9 在前几天已经推上来了,于是我去看看它到底在 Makefile 里加了啥。
从 Makefile 的角度而言,感觉就是加了几个支持性质的 build target。所以从整个构建过程而言,是为未来 rust 在 Linux 的落地铺路。

大家可以自行在 Makefile 里搜 rust 这个字符串:
https://github.com/Rust-for-Linux/linux/blob/rust/Makefile


某大厂今年和去年的hc口径


据说我很久没发频道了
我过来一看
确实。

(截图中的名字非真名


我觉得作为一个外行(比如我)去了解一个计算引擎,一个非常方便的切入点就是看它的 runtime。以 Flink 为例,它有一个名字就叫 flink-runtime 的 mvn 包,可以配合着相关的技术博客看看这里的源码。
核心要关注的点其实很简单:
1. Flink 作业被拉起来的过程中发生了什么
2. Flink 作业执行的过程中,数据是怎么流的(上面说的 shuffle 其实就是 runtime 里的一个核心概念)

大数据新人,仅代表个人观点,欢迎大家指出错误。


这段时间做了点与 Apache Flink 相关的工作,对大数据计算引擎有了一些非常浅薄的理解。
如果大家以前只是普通的 Spark Flink 的用户,想去稍微深入地做一些原理上的理解,可以从它们的 shuffle 过程看起。比如你可以去谷歌上搜索 MapReduce shuffle。其他计算引擎的这个过程也可以看看,做一些对比。

这个过程之所以重要,是因为它直接决定了数据是如何从一个算子流向另一个算子的。


今天早上逛了逛 GitHub ,看到了一个叫 gen 的项目。
是个 gorm 的扩展版,也是 gorm 团队搞的。好处在,查询语句直接写在注释里就行了,然后下面定义个接口,程序在编译期就能自动帮你生成查询逻辑。
是不是听起来挺容易被注入的?呃,我的理解是, gorm 怎么避免注入,它就同样怎么避免注入。此外,gen 还加入了若干类型安全的特性。
挺好的,下次如果有机会糊点后端,我会考虑用它。

https://github.com/go-gorm/gen


推荐大家看看我们同班另外一个组的编译器,从 PL 层面来说,比我们组写得有设计感的多。
从和类型/积类型,到模式匹配、自动捕获的匿名函数,再到标准库 std.array ,他们实现了一个编译型函数式编程语言的很多内容。从很多意义上来说,我觉得他们的产出比我们做的更有价值。

仓库: https://github.com/permui/calocom
文档: https://github.com/permui/calocom/blob/main/document/slides.pdf
样例代码: https://github.com/permui/calocom/tree/main/example
以上图片出处均来自此仓库


实操一下。
比如我在本地跑个 gentoo 容器,启动指令写上,强制把这个容器绑在两个核上。
然后我们到 /sys/fs/cgroup/cpuset.cpus 来查看一番,果然看到了预期的核数:2


追进来看,不用看下文,光看 L48 - L50 其实就已经得出结论了,它的实现是和 cgroup 有关的。如果有熟悉容器化的朋友,这几行的路径应该是在工作中比较常见的。cgroup 的实现分不同的版本,且其目录结构也因配置项而异,在此不展开介绍。

回到正题,其实 JVM 只是读取了当前容器的 cgroup 配置信息,从而获取了资源相关信息。这其实是一种非常平凡的实现方式。

随便找了一篇介绍文章,质量说得过去,有兴趣的可以进行更深入的了解:
https://tech.meituan.com/2015/03/31/cgroups.html


先来观察这个初始化函数。
从整个流程来看,JVM 默认 _is_containerized 是 false,直到中间的初始化流程都走完,JVM 才可以认为当前处于容器环境中。
怎么做到读容器被分配到资源的信息的?核心其实都在 L58
CgroupSubsystemFactory::create()


问题的产生:
Java Runtime 包中的 availableProcessors() ,可以获取当前的设备的 CPU 核数。然而,在比较远古的 JVM 1.8 版本中,若在容器中执行这个方法,我们拿到的会是物理机的核心数,而不是容器被分配的核心数。后来的 JVM 进行了改良,解决了这个问题。
于是我开始调查,JVM 是如何拿到这个数值的。


观察到了新东西,晚些时候再跟进一下

20 last posts shown.

1 383

subscribers
Channel statistics