一个人的BSD——MidnightBSD

MidnightBSD(官方主页在这里:http://www.midnightbsd.org) 是一个“小众版”的BSD系统,作者是Lucas Holt。尽管MidnightBSD目前只有Lucas一个人维护,但是它却诞生在2005年,也算是“历史悠久”了。而MidnightLucas养的第一只猫的名字。

MidnightBSD的初衷是要做一个对普通用户更友好的“桌面版”FreeBSD。我并没有使用过MidnightBSD,所以无法对其用户体验做出评价。但是Lucas一个人来做维护一个操作系统的发行版的所有工作:改代码,搭建cvs服务器,创建mport等等,还是很令我佩服的。不过也正如Lucas自己所说的:

Learning how to work on MidnightBSD has been the most rewarding project I’ve ever done.

尽管工作艰难,但是整个过程也让Lucas收获颇丰,学到了很多知识,这也的确是“回报丰富”。

坦率地讲,我个人很羡慕Lucas,也希望有朝一日能拥有自己的操作系统发行版。

2017年11月总结

这个月休了一个一周的小长假,回了家,额外的收获有两个:见到了老友,读完了《平凡的世界》第二部。

工作上不是太忙,来新公司一年了,这个月把这一年的工作收了个尾,同时也为下一年的工作做了一个计划。

业余时间看看C++,写了几篇文章。也许今年不会有什么开源代码贡献了。

Arch Linux —— 一个不错的Linux发行版

使用Arch Linux差不多有一年的时间了,总体感觉它是一个很不错的Linux发行版。

Arch Linux采用的是“滚动发布”(rolling release)模式,只需一个“pacman -Syu”命令,就可以用上最新的内核和软件包。这对那些对软件版本“追求极致”的开发者们(比如我),无疑是个“福音”。此外,Arch Linux的安装包做的很“人性化”。例如,我最近尝试使用clang开发OpenMP程序,不同于gccclang需要安装额外的包。而在安装clang时,系统会给出详细的提示信息:

# pacman -S clang
......
Optional dependencies for clang
    openmp: OpenMP support in clang with -fopenmp
    python2: for scan-view and git-clang-format
......

可以看到,除了表明需要openmp安装包外,系统还指出使用clang时要使用-fopenmp选项,这充分反映了安装包“考虑”的很“周全”。而在使用其它的一些Linux发行版时,安装clangOpenMP开发包时就很费一番周折。

另外,Arch Linux已经正式宣布不再支持i686平台了,这也提醒我们,也许是时候考虑和32位处理器说再见了。

如何计算进程占用的物理内存

How to get the process resident set size一文不仅介绍了在WindowsUnix(包括LinuxBSDmacOS等等)操作系统上如何获取进程所使用的峰值和实时物理内存,并提供了现成的代码。在这里我只分析一下Linux上相关功能的实现:

(1)获取峰值内存:

size_t getPeakRSS() {
    struct rusage rusage;
    getrusage(RUSAGE_SELF, &rusage);
    return (size_t)(rusage.ru_maxrss * 1024L);
}

getrusage函数获取进程资源的使用情况。当第一个参数时RUSAGE_SELF时,表示得到当前进程的统计数据。struct rusage中的ru_maxrss即表示该进程物理内存的使用峰值,因为度量单位是kilobytes,故而需要乘以1024

(2)获得实时内存:

size_t getCurrentRSS() {
    long rss = 0L;
    FILE* fp = NULL;
    if ( (fp = fopen( "/proc/self/statm", "r" )) == NULL )
        return (size_t)0L;      /* Can't open? */
    if ( fscanf( fp, "%*s%ld", &rss ) != 1 )
    {
        fclose( fp );
        return (size_t)0L;      /* Can't read? */
    }
    fclose( fp );
    return (size_t)rss * (size_t)sysconf( _SC_PAGESIZE);
}

/proc/self/statm文件共包含7个字段,第二个即是进程当前时刻占用的物理内存,单位是页面大小。要获得精确的字节数,还需通过sysconf系统调用获得页面所占据的空间,通常为4096

 

Linux垄断超级计算机

top500网站公布的统计数据显示,目前世界排名前500的超级计算机使用的全部都是Linux操作系统:1
这就意味着之前“500强”中仅存的2Unix也终于“沦陷”了:

2

看一下关于Linux发行版的统计数据:

3

占据份额最大的是“Linux”,是因为不能确定具体的发行版?还是自己组装的,所以不属于任何发行版?我没有找到解释。但是“屈居亚军”的是CentOS,这倒也反映了这个RHEL的“免费社区版本”的稳定性以及受欢迎程度。如果你想选一个不花钱,又可靠的操作系统,CentOS可能是一个不错的选择。

此外,中国的超级计算机数量首次超越美国,成为世界第一:

4

最后,我的前东家HPE在生产厂商的排名中继续高居榜首,联想和浪潮,这两个来自中国的企业紧随其后:

5

为什么root用户所在的群组叫wheel?

Unix系统下,root用户所在的组称之为wheel

# ls -alt
total 18776
drwx------   6 root  wheel      512 Oct  7 01:30 .
-rw-------   1 root  wheel       40 Oct  6 17:20 .git-credentials
drwxr-xr-x   7 root  wheel      512 Oct  5 17:32 Project
-rw-r--r--   1 root  wheel       56 Oct  5 17:28 .gdbinit
......

Wheel来源于big wheel这个俚语,指有强大“威力”或“影响力”的人。随之而来的就是TENEX操作系统发明了wheel bit,一个允许处理器做一些限制性的操作的“特权bit”。Unix操作系统则在上世纪八十年代引入wheel,这就是为什么root用户所在的组称之为wheel的来历。

参考资料:
Wheel (Unix term)

2017年8月总结

(1)工作方面把所有开发的feature都集成到了master分支,并测试通过;下一步就是往产品化方向去做了;
(2)由于工作比较忙,个人精力实在有限,决定把业余时间和精力主要放在BPF上;
(3)写了2Unix微信工作号文章和3DTrace文章;
(4)做了人生第一次的技术演讲;
(5)看了一部介绍OpenBSD的技术视频:An OpenBSD talk by Michael Lucas