FreeBSD

GNU libtool 和 FreeBSD 10

FreeBSD 开始用 10 以上的版本号有一段时间了。这个变动立刻导致了大量 ports 无法编译,多数情况下是因为开发者采用了较早版本的 libtool 导致的,具体来说,是类似下面的代码:

阅读全文…( 本文约 198 字,阅读大致需要 1 分钟 )

FreeBSD 的 strlen(3)

之前只有一篇关于较早版本的 strlen(3) 实现的笔记,这里补上我在 2010 年做的新增改进。

与 Pascal 等语言不同,C 的字符串并不保存串的长度,而是在字符串末尾以 nul 字符(’\0’)来表示字符串结束。这个设计决策是上世纪 60 年代作出的,有都市传说是为了省几个字节的空间,不过我个人认为也可能是因为汇编里面到处都是判断是否碰到了 0 的操作。不管怎么说,这个设计令 strlen 变成了一个 O(n) 的操作。

阅读全文…( 本文约 1364 字,阅读大致需要 3 分钟 )

远程升级 FreeBSD 系统备忘

📜 历史文件已不具备现实意义

目前(2020)的最佳实践是使用 etcupdate 和 package。本文内容已过时。

最近两次失败记录的教训。

首先是联编 world 和 kernel (make buildworld buildkernel),这个没啥可说的。假定 / 是 UFS(即,可使用 nextboot),且配置了 watchdog,则操作步骤为:

阅读全文…( 本文约 355 字,阅读大致需要 1 分钟 )

全盘加密

最近在琢磨一个产品里实现全盘加密的问题,简单来说就是加入存储卷的硬盘存储的是完全加密的数据。对于保存机密数据(例如患者数据)的存储设备来说,这一点十分重要,举例来说,如果硬盘出现故障,OP可以直接把硬盘拆下送回厂商,而不是必须做抹除数据的动作。

阅读全文…( 本文约 264 字,阅读大致需要 1 分钟 )

delphijfork 9.0

| Kernel | #FreeBSD | #kernel | #customization | #performance | #ZFS

可以在 这里 下载。

和过去一样,风险自担 USE AT YOUR OWN RISK!

和 FreeBSD 9.0-RELEASE 相比的改动:

参与评论

idprio和rtprio

记一笔,没啥特别。

Unix 系统的分时调度中,nice值(通过 nice(1) 来控制)是管理员告诉调度器的一个参数,这个参数令内核在考虑就绪进程优先级时,根据其值适当增大或减少执行绪的动态优先级。很明显,如果采用抢占式调度,如果执行绪等待时间较长,或者由于某种原因获得了优先级奖励(例如I/O导致的等待),即使有更重要的任务需要执行,内核还是会将这个执行绪调度进来并进行执行;反之,如果执行绪使用的 CPU 很多(计算密集型任务,如压缩等等),即使这个执行绪进行的就是最重要的任务,它仍然可能被置入休眠状态。

阅读全文…( 本文约 676 字,阅读大致需要 2 分钟 )

netmap进 -CURRENT

| Kernel | #netmap | #FreeBSD | #kernel | #networking | #performance

近日, netmap 已经正式进入 -CURRENT (r227614)。目前联编带 netmap 的内核需要做下面的操作:

% cd /usr/src/sys
% patch -p0 < dev/netmap/head.diff

然后在内核联编配置中加入:

阅读全文…( 本文约 259 字,阅读大致需要 1 分钟 )

clang静态分析工具作弊条

📜 历史文件已不具备现实意义

文章介绍的是旧版 clang 的用法。

静态分析是一种辅助的代码品质提高手段,简而言之静态分析大致是走一个类似编译的过程(或者走完生成副产品),然后给出代码中可能存在的问题。

阅读全文…( 本文约 437 字,阅读大致需要 1 分钟 )

FreeBSD 的 InfiniBand 支持

现时 InfiniBand 硬件已经相当廉价。有些 4x 的 InfiniBand 适配器已经可以在 $100 以内拿到。由于 InfiniBand 可以提供高带宽、低延迟的数据传输,而且点对点对联不需要交换机,因此可以以十分低廉的价格满足近实时同步,或分离存储服务这样的需求。

今年年初的时候, Isilon我厂Panasys 联合资助了 FreeBSD 上的 InfiniBand 协议栈的实现。这个实现基于 OpenFabrics Alliance 的 OFED,对基于 Mellanox 芯片的多种常见的 InfiniBand 卡都提供了支持。这些代码目前已合并至 FreeBSD 的开发主线,并将随 FreeBSD 9.0-RELEASE 发布。

阅读全文…( 本文约 647 字,阅读大致需要 2 分钟 )

netmap

| Kernel | #netmap | #FreeBSD | #networking | #performance | #kernel

今天 BAFUG 活动, Luigi Rizzo (十年前提出DEVICE_POLLING概念的那哥们) 带来了他在 FreeBSD 上新实作的 netmap

简单来说 netmap 实际上是提供了一种让用户程序以一致的接口直接访问网卡(收发包且zero copy)的方法。Luigi Rizzo 的测试中,用以 1050MHz 的单核,在很普通的万兆网卡上就可以轻松达到 14.8 Mpps 了,每个包的开销大约是90个时钟周期。

阅读全文…( 本文约 618 字,阅读大致需要 2 分钟 )