netmap
今天 BAFUG 活动, Luigi Rizzo (十年前提出DEVICE_POLLING概念的那哥们) 带来了他在 FreeBSD 上新实作的 netmap。
简单来说 netmap 实际上是提供了一种让用户程序以一致的接口直接访问网卡(收发包且zero copy)的方法。Luigi Rizzo 的测试中,用以 1050MHz 的单核,在很普通的万兆网卡上就可以轻松达到 14.8 Mpps 了,每个包的开销大约是90个时钟周期。
阅读全文…SMB协议 vs TCP的延迟ACK特性
之前一直没什么概念,今天看了微软的 KB 321169 的解释,大致如此:
- 客户端 (SMB Redirector) 如果启用了 security signature,则必须等待命令处理完成才会发出下一条SMB;
- 服务器端如果启用了延迟ACK,则可能需要过200ms (Windows 2000)才会给出ACK回应
不过感觉这个解释依然不是很有说服力—-文档上说,SMB服务器端是需要对 NT_TRANSACT_NOTIFY_CHANGE 给出回应的,那么这种情况下ACK不就回应回来了吗?或者说,只要收到了 ACK 就说明服务器端已经处理了这条 SMB?哪位帮忙理解一下?
参与评论Ruby用实际行动向GPLv3吐槽,Ruby 1.9.3将改用 BSD 许可证发布
Ruby 从下一个版本,也就是 1.9.3 开始,从原先的 GPLv2 许可证换成了 2-clause BSD 许可证(大体上相当于 MIT 许可证)。
早期 Ruby 采用的是自由软件基金会推荐的 GPLv2 or later 许可证方式。在实际操作中这种许可方式十分常见,这种许可证方式包含两层意思:
阅读全文…备忘:OpenSSL valgrind报"Conditional jump or move depends on uninitialised value(s)"的解决
最近改一个用到 OpenSSL 的程序,顺手用 valgrind 抓了一下,发现很多「Conditional jump or move depends on uninitialised value(s)
」的错误。发现 OpenSSL 的 FAQ 提到,在生成随机数时会将输入缓冲区(未初始化)的内容直接混入 entropy pool,使用 valgrind 时便会导致警告。
.svn目录
今天同事跑来问我为什么没办法checkout一个子目录,发现svn提示说某个目录已有既有的、未有版本的副本(这是一个新的checkout)。
删除重新checkout,问题依旧。
阅读全文…嚷一嗓子
intron 因任满卸任,现水木社区的 FreeBSD 版需要一名版主。哪位去申请一下?
参与评论一次DNS重大运营事故教训
长久不做 SA,所以有些事情变得没有以前那么敏感。昨天终于还是出事了,不过幸亏不是商业系统,如果是的话,我觉得绝对够得上是重大事故。记一笔,留个教训。
阅读全文…针对桌面系统的一个ULE调度器tunable
在 /etc/sysctl.conf 中加入:
kern.sched.preempt_thresh=224
然后用 /etc/rc.d/sysctl start 或重启系统令其生效。
系统默认的值是 80,表示只有新优先级 < 80 时才允许抢占;224 表示非空闲线程均可以进行抢占。这样做的结果是系统会产生更多的切换,从而改善响应时间(牺牲吞吐量)。对桌面系统来说,这种设置是很有用的。
参与评论检查是否有多余#include的小工具
基于 LLVM 的一个 小检查器。如果代码经手人很多,或者经过了大规模的改写,这个工具就很有用了。使用说明 在此。
参与评论作弊条:用git做中心式代码库
在开始创建 git 代码库的时候,应使用 --bare
参数。举例:
git init --bare [repo_path]
或者,如果多人开发的话:
git init --bare --shared [repo_path]
将现有代码库转换为中心式代码库:
阅读全文…