FreeBSD
GNU libtool 和 FreeBSD 10
FreeBSD 开始用 10 以上的版本号有一段时间了。这个变动立刻导致了大量 ports 无法编译,多数情况下是因为开发者采用了较早版本的 libtool 导致的,具体来说,是类似下面的代码:
阅读全文…FreeBSD 的 strlen(3)
之前只有一篇关于较早版本的 strlen(3) 实现的笔记,这里补上我在 2010 年做的新增改进。
与 Pascal 等语言不同,C 的字符串并不保存串的长度,而是在字符串末尾以 nul 字符(’\0’)来表示字符串结束。这个设计决策是上世纪 60 年代作出的,有都市传说是为了省几个字节的空间,不过我个人认为也可能是因为汇编里面到处都是判断是否碰到了 0 的操作。不管怎么说,这个设计令 strlen 变成了一个 O(n) 的操作。
阅读全文…远程升级 FreeBSD 系统备忘
📜 历史文件已不具备现实意义
目前(2020)的最佳实践是使用 etcupdate 和 package。本文内容已过时。
最近两次失败记录的教训。
首先是联编 world 和 kernel (make buildworld buildkernel),这个没啥可说的。假定 / 是 UFS(即,可使用 nextboot),且配置了 watchdog,则操作步骤为:
阅读全文…全盘加密
最近在琢磨一个产品里实现全盘加密的问题,简单来说就是加入存储卷的硬盘存储的是完全加密的数据。对于保存机密数据(例如患者数据)的存储设备来说,这一点十分重要,举例来说,如果硬盘出现故障,OP可以直接把硬盘拆下送回厂商,而不是必须做抹除数据的动作。
阅读全文…delphijfork 9.0
可以在 这里 下载。
和过去一样,风险自担 USE AT YOUR OWN RISK!
和 FreeBSD 9.0-RELEASE 相比的改动:
- 修正了一组 tmpfs 的 bug;
- 针对 nullfs、 devfs 的可靠性改进;
- “skeljail”;
- top(1) 默认显示每个CPU的占用比例;
- 针对 powerd 的多处理器支持;
- 对 IPv4 流量分 IP 进行统计【注意,由于上锁开销,此改动会略微降低IPv4性能】;
- 重启时设置 watchdog;
- 改善 csh 可用性配置;
- 预设将共享内存绑在主存内;
- Winbond watchdog 驱动;
- 对虚拟化环境默认不测试内存;
- 修正 NEW_PCIB 导致某些硬件问题的bug;
- 一系列 ZFS 相关改进;
- 减少 AHCI 上下文切换开销,高负载状态可达 3.8%;
- 一组 VM 性能改进,提高了异步操作以及 msync 情形的性能;
- 改善了 NFS 服务器预取的顺序读性能;
- 等等。
idprio和rtprio
记一笔,没啥特别。
Unix 系统的分时调度中,nice值(通过 nice(1) 来控制)是管理员告诉调度器的一个参数,这个参数令内核在考虑就绪进程优先级时,根据其值适当增大或减少执行绪的动态优先级。很明显,如果采用抢占式调度,如果执行绪等待时间较长,或者由于某种原因获得了优先级奖励(例如I/O导致的等待),即使有更重要的任务需要执行,内核还是会将这个执行绪调度进来并进行执行;反之,如果执行绪使用的 CPU 很多(计算密集型任务,如压缩等等),即使这个执行绪进行的就是最重要的任务,它仍然可能被置入休眠状态。
阅读全文…netmap进 -CURRENT
近日, netmap 已经正式进入 -CURRENT (r227614)。目前联编带 netmap 的内核需要做下面的操作:
% cd /usr/src/sys
% patch -p0 < dev/netmap/head.diff然后在内核联编配置中加入:
阅读全文…clang静态分析工具作弊条
📜 历史文件已不具备现实意义
文章介绍的是旧版 clang 的用法。
静态分析是一种辅助的代码品质提高手段,简而言之静态分析大致是走一个类似编译的过程(或者走完生成副产品),然后给出代码中可能存在的问题。
阅读全文…FreeBSD 的 InfiniBand 支持
现时 InfiniBand 硬件已经相当廉价。有些 4x 的 InfiniBand 适配器已经可以在 $100 以内拿到。由于 InfiniBand 可以提供高带宽、低延迟的数据传输,而且点对点对联不需要交换机,因此可以以十分低廉的价格满足近实时同步,或分离存储服务这样的需求。
今年年初的时候, Isilon、我厂 和 Panasys 联合资助了 FreeBSD 上的 InfiniBand 协议栈的实现。这个实现基于 OpenFabrics Alliance 的 OFED,对基于 Mellanox 芯片的多种常见的 InfiniBand 卡都提供了支持。这些代码目前已合并至 FreeBSD 的开发主线,并将随 FreeBSD 9.0-RELEASE 发布。
阅读全文…netmap
今天 BAFUG 活动, Luigi Rizzo (十年前提出DEVICE_POLLING概念的那哥们) 带来了他在 FreeBSD 上新实作的 netmap。
简单来说 netmap 实际上是提供了一种让用户程序以一致的接口直接访问网卡(收发包且zero copy)的方法。Luigi Rizzo 的测试中,用以 1050MHz 的单核,在很普通的万兆网卡上就可以轻松达到 14.8 Mpps 了,每个包的开销大约是90个时钟周期。
阅读全文…