看tag知内容 尴尬,每月总结也有todo了,todo越欠越多

[toc]

MongoDB管理: 如何让mongod产生core文件

让SIGSEGV的处理函数保持不变

ulimit -c 设置好core文件大小限制

设置好/proc/sys/kernel/core_pattern,保证进程有权限存储core文件

How we built a forever-free serverless SQL database

CRDB serverless了,怎么做的

Todo

## Strings, arrays, recursion, and parsing JSON: Exploring PL/pgSQL

pg内置函数更像个脚本语言了

Linux Kernel 代码艺术——编译时断言

/* Force a compilation error if condition is true, but also produce a
   result (of value 0 and type size_t), so the expression can be used
   e.g. in a structure initializer (or where-ever else comma expressions
   aren't permitted). */
#define BUILD_BUG_ON_ZERO(e) (sizeof(struct { int:-!!(e); }))
#define BUILD_BUG_ON_NULL(e) ((void *)sizeof(struct { int:-!!(e); }))

#define BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2*!!(condition)]))   

#define BUILD_BUG_ON_NOT_POWER_OF_2(n)            \ 
    BUILD_BUG_ON((n) == 0 || (((n) & ((n) - 1)) != 0))

奇技淫巧。看个乐

The Design of the NetBSD IO Subsystems

Todo

Gmock cookbook

居然有了新文档

Control Planes vs Data Planes

Marc的博客非常不错,文章挨个读读

这篇就是服务组件设计,控制面和数据面,两者拆开

修改系统时间,导致sem_timedwait函数一直阻塞的问题解决和分析

sem_timedwait存在的缺陷的理由:

假设当前系统时间是1565000000(2019-08-05 18:13:20)sem_timedwait传入的阻塞等待的时间戳是1565000100(2019-08-05 18:15:00),那么sem_timedwait就需要阻塞1分40秒(100秒),若在sem_timedwait阻塞过程中,中途将系统时间往前修改成1500000000(2017-07-14 10:40:00),那么sem_timedwait此时就会阻塞2年多! 这就是sem_timedwait存在的缺陷

业务代码用到了这个破玩意,往这个方向考虑了一下,不过最终确认不是这个问题

A different take on the NUMA OOM killer story

作者遇到个问题,16G机器用了6G进程被杀了,配置了numa,仔细一看,还配置了memkind,这个限制导致如果内存分配不够会去系统分配,系统发起oom杀进程,结果把这个进程杀了?这是不是memkind的bug啊

A good old-fashioned Perl log analyzer

2021年还有人写perl

perl还是有很多好用的工具的,比如

use Regexp::Log::Common;
use Date::WeekNumber 'iso_week_number';

Why I Use Nim instead of Python for Data Processing

我也在关注nim,这个博主给的例子,nim的性能吊锤python,编译语言比动态语言优势太大

语法也类似,不过需要实现类似的轮子来把生态同步过来

比较的代码

gc = 0
total = 0

for line in open("orthocoronavirinae.fasta"):
    if line[0] == '>': # ignore comment lines
        continue
    for letter in line.rstrip():
        if letter == 'C' or letter == 'G':
            gc += 1
        total += 1

print(gc / total)
var gc = 0
var total = 0

for line in lines("orthocoronavirinae.fasta"):
    if line[0] == '>': # ignore comment lines
        continue
    for letter in line:
        if letter == 'C' or letter == 'G':
            gc += 1
        total += 1

echo(gc / total)

Program Time Relative to Nim
Python 3.9 23.43 s 30.6x
PyPy 7.3 2.54 s 3.3x
Nim 1.4 (with-d:danger --gc:orc flags) 0.765 s 1.0x