Kernel

共 257 篇文章。

OpenZFS Developer Summit

• Kernel

今天去 San Francisco 的 Delphix 参加了 OpenZFS Developer Summit,今天这会太充实了,先记一笔。

ZFS Channel Program:目前的 ZFS 应用程序需要以多次系统调用来完成一项功能。为了实现原子性,用户态部分实现起来比较复杂,而且最终内核中的 sync task 可能会导致长时间的延迟。提出的解决方案是在 ZFS 内核部分引入一个 Lua 字节码解释器,用户态一次灌一个脚本进去,通过脚本逻辑实现原子性,从而减少上下文切换开销并极大地简化用户态部分。

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

从 gmirror 迁移到 graid

• Kernel

谷奥 的服务器硬盘坏了,而且托管商很奇怪地用了 gmirror 而不是 BIOS 直接支持的 graid(我厂 Alexander Motin 实现的与 BIOS 兼容的软件 RAID,支持 Intel、Adaptec、JMicron、nVidia、Promise和SiL等多家厂商的软RAID格式),所以趁这个机会给它换掉。记一下迁移的过程。

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

FreeBSD 9.1-RC3

• Kernel

总算是 命名了……现在 re@ 已经开始拒绝所有的变动请求,包括前几天的 High Point Technologies 驱动更新。不出意外的话,两周之内应该会正式 release 了。

参与评论

FreeBSD 的 strlen(3)

• Kernel

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

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

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

delphijfork 9.0

• Kernel

可以在 这里 下载。

和过去一样,风险自担 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

• Kernel

记一笔,没啥特别。

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

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

netmap进 -CURRENT

• Kernel

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

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

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

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

W^X (可写与可执行互斥)

• Security

Von Neumann体系结构的计算机系统的一项特点是使用内存来保存程序和数据。这种设计减少了制造计算机的成本,但是也带来了一个弱点:因为事实上程序也是一种数据,如果这些"数据"在运行时可写,程序便有可能修改其本身,而如果这一特性被误用,例如由于程序本身的设计缺陷,攻击者便可以利用它来执行攻击者希望的任何事情。

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

netmap

• Kernel

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

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

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

针对桌面系统的一个ULE调度器tunable

• Kernel

在 /etc/sysctl.conf 中加入:

kern.sched.preempt_thresh=224

然后用 /etc/rc.d/sysctl start 或重启系统令其生效。

系统默认的值是 80,表示只有新优先级 < 80 时才允许抢占;224 表示非空闲线程均可以进行抢占。这样做的结果是系统会产生更多的切换,从而改善响应时间(牺牲吞吐量)。对桌面系统来说,这种设置是很有用的。

参与评论