Performance

共 34 篇文章。

FreeBSD 上的 nginx kTLS 支持

Security

昨天,FreeBSD 13.2 正式发布了kTLS 是在 FreeBSD 13.0 中由 Netflix 赞助的新功能, 过去,TLS/SSL 应用程序对于通讯内容的加解密通常是在用户态进行的,这样一来, 系统在读取出数据和发出数据之前需要进行额外的上下文切换,并在内核和用户地址空间之间来回复制缓冲区来满足加解密的需要。 有了 kTLS 之后,内核可以在 sendfile(2) 时直接在内核上下文中完成加密和填充到网络协议栈的操作,从而减少了上下文切换和不必要的复制操作。

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

记录一下之前对 fsck_msdosfs(8) 的改进

Development

疫情之前,娃在周末会去某个才艺班,上课的时间我觉得实在是比较无聊, 于是就带上笔记本坐在星巴克做一些较小规模的代码清理工作。 最终,我利用这些碎块化的时间完成了对 FreeBSDfsck_msdosfs(8) 的核心代码的算法进行了改进,使其需要的内存用量变成了原先的 11281 \over 128, 这里稍微记一下当时的一些思路。

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

启用 SPDY

Security

之前 Frank 同学提到了这个问题,所以今天花了些时间来配置。 nginx 对 SPDY 的支持是一项比较新的特性,只有在 1.3.x 版本以上才支持。FreeBSDnginx-devel 默认并不启用 SPDY,需要在 make config 的阶段启用。

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

nginx的https压缩

Security

官方版本的 nginx 在 https 的时候是不对流量做压缩的,具体原因在这里这里 有解释,它会增加半兆的连接内存开销。

启用 https 压缩除了需要 nginx 本身做少量修改(例如去掉 if[n]def SSL_OP_NO_COMPRESSION 部分的语句块)之外,还需要 OpenSSL 本身编译了加密支持。FreeBSD ports 的 security/openssl 预设启用了 ZLIB 扩展,但基本系统目前没有(由于 zlib 是很大的一片代码,也许需要做了 Capsicum 处理之后才可以放进来用)。

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

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 分钟 )

#lspe之Disks

Hardware

今天去 Y! 参加了 #lspe 的一个交流会。

比较感兴趣的项目是之前了解过但仔细看过的 FlashCache,这是 Facebook 搞的一个 SSD 加速模块,原理不复杂,是在文件系统下面做上一层集关联(set-associative)高速缓存,提供了LRU和FIFO两种淘汰方法。这次 Mohan Srinivasan 讲解的时候提到了以前公开发表的讲稿上没有的一个内容—-按线程id/线程组id去做的黑白名单,并对MySQL进行了修改,令其在扫描表时不做cache。从使用的角度,这个不失为一个不错的折衷方法。

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