「十日谈」- 22 年 06 期 - 总第 0006 期

这里是 PsiACE,为你带来关于最近十天关于我的一切(并不)。这次是大概 12 天。

开源 & 研习

  • 最近主要的贡献可能就是砍掉了 Databend 中的一些依赖 :(
  • 对数据库的一些知识还不是很了解,好在同事都很 nice ,虎哥还特别给我指出了 table functions 和 aggergate/scalar functions 的区别
  • 给之前 10 月份发现的 release 版本无法正确显示贡献者/依赖的问题想到了解决方案,不知道有没有人感兴趣做
  • 罗杨博士今年计划选我做 Casbin Rust 那边的 Mentor,说来惭愧,感觉自己过去没有做很多贡献在里面,还需要努力

二月份依然保持了 github 全绿的局面,并首次突破单月 100 commits 大关,这个迭代还有一篇关于减缓构建时 OOM 的文章,应该也没有很摸鱼

娱乐 & 生活

  • 最近没啥娱乐活动,已经要锈掉了
  • 又入手了《普林斯顿数学指南》和全套《新概念英语》,买书能够有效缓解我的焦虑,当然,我确实有计划重新做人
  • 读了一下《学习之道》这本书,理念很普通,可能要坚持去做才能有效
  • 受未知影响被误赋黄码,社区工作人员都很和善,但解决不了问题,7 天 3 次核酸倒是无所谓,就是小弟暂时不能去学校读书
  • 惊蛰嘛,本来要发一期视频的,可能要缓一两天

还是不要喝地西泮了吧,只要晚上早点放下手机和电脑,我自己是可以睡着的

迭代 & 立 flag

  • 这个迭代明明过得很忙,但又想不出自己做了些什么,好像失忆了一样
  • 本来说要换个更充实的风格去讲,又变流水帐了,或许加一些知识性的部分会好一些
  • 上面提到的重新做人,应该会在新的迭代开动,预计后面会公开出来,敬请期待

第一个有效的做法应该是正视自己存在的问题,然后逐个打败它们


那么,新的迭代,请多多指教了。

逃离编译时的内存溢出

今天写周报的时候提到了这个话题,顺便就记录一下如何逃离 Rust 编译时的内存溢出。

内存溢出,也就是 Out of Memory(OOM),从字面就能看出来,是要用到的内存大于系统能提供的最大内存而引起的故障。

Databend 中的 common/functions 模块为用户提供常用 SQL 函数支持,体量本身就很大,并且在新一轮的改造中引入了很多需要 codegen 的环节。于是,我们又遇到了老朋友(CI 又挂了):

(signal: 9, SIGKILL: kill) warning: build failed, waiting for other jobs to finish... error: build failed.

使用 -Z time-passes 这个 RUSTFLAGS 可以帮助观测一些指标,就很容易判断出来是 OOM 。而且之前的一些反馈和报错也能够佐证是发生在链接阶段。

那么,该怎么办呢?最简单的办法是「大就是好,多就是美」,加钱上更多内存,或者分配更大的 Swap 空间(没错,就像我之前有一个 暴力的 32GiB Swapfile)。这当然可以一劳永逸,但:前者无疑会消耗钱包,目前内存条还是一个很大的负担,而且对于笔记本之类,更换的余地也有限;后者虽然守住了钱包,但是白白占去那么大一块空间,而且说不得会影响一些性能。

让我们一起看一下,有没有什么过渡的选项可以缓解这一尴尬的局面,进行一些有限的平衡。

「更快、更高、更强」的 mold

是的,既然是链接器的问题,那么最简单的办法就是换一个。Rust 默认的 linker 选项设定的是 cc,这意味着会利用到 gnu 工具链中的 ld,尽管 gnu 在自由软件领域有着卓越的贡献,但以目前的经验而言,这并不是一个好的现代选择。它的一个有力的竞争者是 llvm 工具链中的 lld 。

而到了今天,我们还有另外一个更加优越的候选人 —— 「mold」,在实际使用中,表现出与 lld 相当、甚至超过的性能,并且使用更少的内存。

该如何与 Rust 工具链结合使用呢,有这么两种方法:

mold -run

采用这种模式,可以帮助我们快速体验 mold ,这得益于内置的拦截机制,可以将指向 ld ,ld.lld ,ld.gold 的命令转向 mold 自身。

# 结合 Make
mold -run make <make-options-if-any>
# 或者针对于 Cargo
mold -run cargo <cargo-options-if-any>

编辑 .cargo/config.toml

添加下面的内容即可,如果是按 sudo make install 安装的,path/to/mold 大概率会指向 /usr/local/bin/mold

[target.x86_64-unknown-linux-gnu]
linker = "clang"
rustflags = ["-C", "link-arg=-fuse-ld=/path/to/mold"]

船新的符号修饰方案

符号修饰,或者说 symbol mangling ,是现代计算机程序设计语言的编译器用于解决由于程序实体的名字必须唯一而导致的问题的一种技术。

Rust 目前有一个自己设计符号修饰方案,rust-lang/rfcs#2603,通过启用这一方案,在有重复组件的情况下,会生成更小的符号。

要想启用这一特性,同样有两种方法:

RUSTFLAGS

在目前最新的 Rust nightly 中,可以使用 -C symbol-manging-version=v0 这个 RUSTFLAG ,相对旧一点的版本可能需要使用 -Z symbol-manging-version=v0

RUSTFLAGS="-C symbol-manging-version=v0" cargo

编辑 .cargo/config.toml

添加下面的内容即可,如果报错,请试试 -Z

[target.nightly-x86_64-unknown-linux-gnu]
rustflags = ["-C", "symbol-mangling-version=v0"]

还能做什么?

拆分成更小的单元,让编译每个部分的时候不会太吃力;或者去掉一些笨重的依赖,让它不那么费劲;或者对编译选项进行更多调整,进行针对性优化。

好吧,今天就到这里咯,祝大家都能逃离 OOM ,换上更强悍的机器。


笑死,清理了半天依赖,还剩下不到 900 个。

「十日谈」- 22 年 05 期 - 总第 0005 期

这里是 PsiACE,为你带来关于最近十天关于我的一切(并不)。

开源 & 研习

  • 有做 Databend 中 math 函数的迁移和 parsers 单元测试的重构。
  • 顺便宣布一下 Databend 已经完全用上船新版本的 datavalues 啦。
  • 开源了一个 simd bitvec 的实现 bitsvec,某种程度上能观测到一些优势,但是感觉并没有很好。
  • 仔细看了一下关于构建的问题,感觉目前没有很好的办法去调优。
  • 试着仔细读了一篇关于重配置的论文,满篇推理和证明,把思路搞明白了,细节暂时放过吧。

论文十问的缺陷也很明显,关于实验的两个问题在某些时候或许可以改成关键算法的设计和推理。

娱乐 & 生活

  • 汉堡王为什么每家店的出品差距那么明显啊!!!
  • 佛跳墙真好吃,以后有机会一定要去吃正宗的。
  • 这个迭代离家上班,体验每天两点一线的生活,感觉也挺好的。
  • 失眠,失眠,失眠。零星补一些觉,倒是状态还凑合。
  • 目前还在整理稿子/视频,大概率要下个迭代完成了。

要试着享受工作,热爱生活。

迭代 & 立 flag

  • 争取把 LigaAI 利用起来好好管理日常工作/生活。
  • 重新规划一下理财,以前的思路太分散和臃肿了。
  • 可能需要一个系统的学习路径去改善一下当前的学习模式。

QAQ,咱就是说,一整个完蛋。


那么,新的迭代,请多多指教了。

论文十问

最近有试着在读论文,由于自身积累问题,往往试图跳过其中艰深的部分,不能很好汲取其中的精华。

最近看到沈向洋老师的 “论文十问”,觉得很有帮助,现摘抄如下:

论文十问

  • Q1 论文试图解决什么问题?
  • Q2 这是否是一个新的问题?
  • Q3 这篇文章要验证一个什么科学假设?
  • Q4 有哪些相关研究?如何归类?谁是这一课题在领域内值得关注的研究员?
  • Q5 论文中提到的解决方案之关键是什么?
  • Q6 论文中的实验是如何设计的?
  • Q7 用于定量评估的数据集是什么?代码有没有开源?
  • Q8 论文中的实验及结果有没有很好地支持需要验证的科学假设?
  • Q9 这篇论文到底有什么贡献?
  • Q10 下一步呢?有什么工作可以继续深入?

一点额外说明

  • 需要正确区分问题之间的边界,既要讲出关键,又不能车轱辘话来回滚。

  • 尽量使用原文中的表达,并帮助没有前置知识的读者理解主题。

  • 十答应当能够表达清楚论文的主要工作和贡献。


QAQ,所以说,雨水的这篇论文应该会迟到一两天,并且立春的 learned-cache 大概率要铲掉重做了。

「十日谈」- 22 年 04 期 - 总第 0004 期

这里是 PsiACE,为你带来关于最近十天关于我的一切(并不)。

开源 & 研习

  • 完成了 Databend 2 月份的例行维护,整理了一个简单的文档。
  • 迁移了一点点 math 相关的函数,sundy 哥哥的 datavalues2 属实靠谱。
  • 灌水 commits 总量达到 #6 ,没啥大贡献,希望以后能整个好活。
  • 《重塑组织》读得很艰难,或许会整理一点心得,甚至觉得也许有机会实现个什么奇怪的 leaderless 协议。

什么时候才能有 sundy 哥哥三成水平 QAQ

娱乐 & 生活

  • 《长津湖之水门桥》,很少看这类电影,有意外之喜,至少故事是讲成功了。我爱我的祖国。
  • 失眠现象加重,塞着耳塞才睡了两天安稳觉。
  • 把之前内部分享过的 learned cache 又录了一遍塞在 B 站上,下次得记得写脚本,稀碎。

调整作息大失败!

迭代 & 立 flag

  • 争取多离家办公,增强学习力度,降低摸鱼事件发生概率。
  • 补一两篇稿子,好像还差不到十篇?鸽了有一年多可能,总得善始善终。

已经不敢乱立 flag 啦,先调整一下。


那么,新的迭代,请多多指教了。