Posted on 2007-10-15 09:09
dennis 阅读(667)
评论(0) 编辑 收藏 所属分类:
涂鸦 、
linux & C
hack有水平高低之分,最近看到一个blog,牛人的hack水平让你不得不服。情况是这样的,牛人在使用
mongrel_light_cluster的过程中,发现这个cluster违反了copy-on-write的语义,导致占用了太多的内存。根本原因在于Ruby的GC机制是
marks all memory pages as dirty。为了减少内存的占用,让集群跑更多mongrel,牛人走上了hack之路,给c ruby打补丁,他也真的
做到了。c ruby的GC使用的是mark and sweep(标记并清除)的垃圾收集算法,他发现在mark过程中使用了
st_table,这个数据结构占用了很大的内存,那么就改用
Google’s sparse_hash。然后他又写了一个memory pool,以应对marking和sweep使用过程中对malloc和free调用带来的内存损失,因为在x86 GNU/linux gcc上,malloc函数如果申请的内存小于76KB,那么当free的时候这些内存不会被返还给操作系统。他的hack之路还没结束,有兴趣的关注他的blog:
http://izumi.plan99.net/blog/index.php/