netmap

| *nix and Win32 Kernel

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

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

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

SMB协议 vs TCP的延迟ACK特性

| *nix and Win32 Kernel

之前一直没什么概念,今天看了微软的 KB 321169 的解释,大致如此:

不过感觉这个解释依然不是很有说服力—-文档上说,SMB服务器端是需要对 NT_TRANSACT_NOTIFY_CHANGE 给出回应的,那么这种情况下ACK不就回应回来了吗?或者说,只要收到了 ACK 就说明服务器端已经处理了这条 SMB?哪位帮忙理解一下?

参与评论

Ruby用实际行动向GPLv3吐槽,Ruby 1.9.3将改用 BSD 许可证发布

| Development

Ruby 从下一个版本,也就是 1.9.3 开始,从原先的 GPLv2 许可证换成了 2-clause BSD 许可证(大体上相当于 MIT 许可证)。

早期 Ruby 采用的是自由软件基金会推荐的 GPLv2 or later 许可证方式。在实际操作中这种许可方式十分常见,这种许可证方式包含两层意思:

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

备忘:OpenSSL valgrind报"Conditional jump or move depends on uninitialised value(s)"的解决

| Security

最近改一个用到 OpenSSL 的程序,顺手用 valgrind 抓了一下,发现很多「Conditional jump or move depends on uninitialised value(s)」的错误。发现 OpenSSL 的 FAQ 提到,在生成随机数时会将输入缓冲区(未初始化)的内容直接混入 entropy pool,使用 valgrind 时便会导致警告。

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

.svn目录

| Development

今天同事跑来问我为什么没办法checkout一个子目录,发现svn提示说某个目录已有既有的、未有版本的副本(这是一个新的checkout)。

删除重新checkout,问题依旧。

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

嚷一嗓子

| Others

intron 因任满卸任,现水木社区的 FreeBSD 版需要一名版主。哪位去申请一下?

参与评论

一次DNS重大运营事故教训

| Life

长久不做 SA,所以有些事情变得没有以前那么敏感。昨天终于还是出事了,不过幸亏不是商业系统,如果是的话,我觉得绝对够得上是重大事故。记一笔,留个教训。

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

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

| *nix and Win32 Kernel

在 /etc/sysctl.conf 中加入:

kern.sched.preempt_thresh=224

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

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

参与评论

检查是否有多余#include的小工具

| Development

基于 LLVM 的一个 小检查器。如果代码经手人很多,或者经过了大规模的改写,这个工具就很有用了。使用说明 在此

参与评论

作弊条:用git做中心式代码库

| Development | #git

在开始创建 git 代码库的时候,应使用 --bare 参数。举例:

git init --bare [repo_path]

或者,如果多人开发的话:

git init --bare --shared [repo_path]

将现有代码库转换为中心式代码库:

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