最新 | 最热门 | 最高评价

+0  flashcache原理

Tag: 操作系统 | devicemapper | flashcache | generic_make_request | submit_bio
DongHao 发于 2012年10月22日 11:50 | 点击: 9275 | 展开摘要
介绍flashcache的文章很多,我就不废话了。使用上,有余峰老哥的文章;原理上,有ningoo同学的flashcache系列。但是ningoo同学漏掉了device mapper和flashcache的动态原理,只讲了静态的数据结构。我就钻个空子补充一下。

一般来说,我们对磁盘的read和write最后都会走到kernel里的submit_bio函数,也就是把io请求变成一个个的bio(bio的介绍看这里),bio是linux内核里文件系统层和block层之间沟通的数据

查看全文: http://www.udpwork.com/item/8437.html

+5  压测Cubieboard

Tag: 操作系统 | cubieboard | https | tcp | tengine
DongHao 发于 2013年01月28日 10:40 | 点击: 6462 | 展开摘要
想测一测Cubieboard最多能支撑多少tcp长链接(当然,是比较空闲的链接)。

我的cubieboard上安装的是linaro(其实就是linux),首先得调节单个进程打开的句柄数(修改/etc/security/limit.conf),然后还要修改sysctl里tcp_mem等网络参数(具体配置可以参考这里 1, 2) 然写了一套简单的TCP链接客户端和服务端的代码。Server端用epoll模型; Client端创建500个链接然后把fd放入数组里,每个c

查看全文: http://www.udpwork.com/item/9151.html

+0  ext4磁盘碎片查看

Tag: 操作系统 | e2fsck | ext4 | filefrag
RobinDong 发于 2013年09月13日 15:33 | 点击: 6419 | 展开摘要
子团兄最近在测试ext4的bigalloc特性,cluster为256K,放入了16个大文件,每个文件25GB。反馈我说碎片很多,我觉得很奇怪便问是怎么看出来碎片多的,他说是用fsck看的:

#fsck.ext4 -f -y /dev/sdi1
e4fsck 1.42 (29-Nov-2011)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Ch

查看全文: http://www.udpwork.com/item/10672.html

+0  Overlayfs 简介

Tag: 操作系统 | kernel | overlayfs | vfs
DongHao 发于 2012年06月02日 21:33 | 点击: 6252 | 展开摘要
在公司做了一个overlayfs的简介。overlayfs本身的实现比较简单,这主要是由于VFS的高度灵活性,所以重点介绍还是放在VFS上。大家姑妄看之。

overlayfs 的源代码在mszeredi的kernel git tree上:

http://git.kernel.org/?p=linux/kernel/git/mszeredi/vfs.git;a=shortlog;h=refs/heads/overlayfs.v13

也可以
git clone git://

查看全文: http://www.udpwork.com/item/7365.html

+0  cp报错"Text file busy"

Tag: 操作系统 | deny_write_access | etxtbsy | get_write_access
DongHao 发于 2011年05月12日 17:32 | 点击: 4497 | 展开摘要
有同事问到我:使用cp命令时,如果发现要被覆盖的文件(二进制可执行文件)正在运行,cp会报错,cp命令是怎么知道该文件正在执行的?

我第一个想到的是:可能ioctl可以检查文件。可惜我猜错了,看了一下cp的源码,原来如果一个文件正在运行,另一个进程再open以获得写权限的话,这个open本身就会失败,返回-1,errno为ETXTBSY。
那么cp -f 为什么又可以?因为cp -f会先把目标文件(要被覆盖的文件)删掉,然后将源文件rename为目标文件名。

从内核代码看

查看全文: http://www.udpwork.com/item/5037.html

+0  [kernel] linux在多核处理器上的负载均衡原理

Tag: 操作系统 | kernel | linux | smp
DongHao 发于 2010年07月20日 11:08 | 点击: 4267 | 展开摘要
【转载请注明出处:http://donghao.org/uii/ 】
【原理】
现在互联网公司使用的都是多CPU(多核)的服务器了,Linux操作系统会自动把任务分配到不同的处理器上,并尽可能的保持负载均衡。那Linux内核是怎么做到让各个CPU的压力均匀的呢?
做一个负载均衡机制,重点在于:
1. 何时检查并调整负载情况?
2. 如何调整负载?
先看第一个问题。
如果让我这样的庸俗程序员来设计,我第一个想到的就是每隔一段时间检查一次负载是否均衡,不均则调整之,这肯

查看全文: http://www.udpwork.com/item/2128.html

+2  ext2/ext3/ext4简介(PPT)

Tag: 操作系统 | ext4
DongHao 发于 2011年06月28日 17:20 | 点击: 4189 | 展开摘要
今天下午我的讲座,名字是《Why we need ext4》,其实主要是我上半年学到东西的一个小结

why we need ext4View more presentations from donghao.

查看全文: http://www.udpwork.com/item/5366.html

+2  缓存设计的一些思考

Tag: 体系结构与操作系统 | 缓存设计,LIRS,cache锁粒度
chuanhui 发于 2011年06月19日 20:37 | 点击: 4107 | 展开摘要
互联网架构中缓存无处不在,某厂牛人曾经说过:”缓存就像清凉油,哪里不舒服,抹一下就好了”。高品质的存储容量小,价格高;低品质存储容量大,价格低,缓存的目的就在于”扩充”高品质存储的容量。本文探讨缓存相关的一些问题。

LRU替换算法

缓存的技术点包括内存管理和替换算法。LRU是使用最多的替换算法,每次淘汰最久没有使用的元素。LRU缓存实现分为两个部分:Hash表和LRU链表,Hash表用于查找缓存中的元素,LRU链表用于淘汰。

查看全文: http://www.udpwork.com/item/5303.html

+12  如何学好C语言

Tag: C/C++语言 | Unix/Linux | Windows | 操作系统 | 编程语言 | C++ | Java | Linux | Programmer | Unix | 程序员
陈皓 发于 2011年03月29日 10:25 | 点击: 3847 | 展开摘要
有人在酷壳的留言版上询问下面的问题

keep_walker :

今天晚上我看到这篇文章。

http://programmers.stackexchange.com/questions/62502/small-c-projects

我也遇到了和提问的老外一样的问题。。能给像遇到这样烦恼的程序员一点建议嘛?谢谢!

我相信,这可能是很多朋友的问题,我以前也有这样的感觉,编程编到一定的时候,发现能力到了瓶颈,既不深,也不扎实,半吊子。比如:你长期地使用Java和.NET ,

查看全文: http://www.udpwork.com/item/4660.html

+0  怎样用上ext4 bigalloc

Tag: 操作系统 | bigalloc | ext4
DongHao 发于 2012年10月19日 13:22 | 点击: 3769 | 展开摘要
有位叫“summer77”的同学发邮件询问我如何使用ext4的bigalloc特性,主要是不方便直接把内核从2.6.28升到3.2去,跨度太大。但是我给他的回信用gmail死活发不出去(summer77同学,是不是你的邮箱有问题呀),我只能在这里做答了。

bigalloc是在3.2版以后的linux kernel才有的,因为公司要用,所以我们backport到了淘宝kernel上——淘宝kernel是基于rhel6的2.6.32-kernel的
(跟这则新闻提到的所谓“淘宝

查看全文: http://www.udpwork.com/item/8149.html

+0  rhel6再次发现jbd2的bug

Tag: 操作系统 | ext4 | jbd2
RobinDong 发于 2013年07月17日 17:38 | 点击: 3749 | 展开摘要
从上次修复jbd2的bug后到现在,已经四个月了,突然昨天DB的机器又出现了panic,用netoops抓到的信息如下:

居然又栽在jbd2上了,panic的位置和上次一样是

J_ASSERT(journal->j_running_transaction != NULL);

考虑到是运行很长时间的DB机器才出现这个问题,疑点还是落到tid上,由文卿同学找到了现象最符合的upstream的补丁:

commit deeeaf13b291420fe4a4a52606b9fc

查看全文: http://www.udpwork.com/item/10217.html

+0  linux默认kernel.pid_max值

Tag: 操作系统 | pid_max | possible cpu
RobinDong 发于 2014年01月02日 15:20 | 点击: 3342 | 展开摘要
今早石祤同学发现了一个问题:同样的两台服务器,相同的OS版本、内核版本、CPU型号、CPU核数,只是厂家不同,但是机器启动后sysctl里的kernel.pid_max值,一台是128k,一台是32k。看了一下/etc/sysctl.conf,两台都没在配置文件里做更改,应该是内核自己选定的默认值。那内核到底是怎样选定这个默认值的呢?为何两个厂家的服务器默认值就不同?怎么让它们一致?

看了一下内核代码,决定kernel.pid_max的值是在pidmap_init()函数里

查看全文: http://www.udpwork.com/item/11456.html
|<<<1234567>>>| 一共10页, 110条记录