摘要:
以前用iozone简单测了下ext3及dnfs的性能,用磁盘测试工具测了一下硬盘的性能。前者在http://blog.chinaunix.net/u2/87570/showart_1944522.html【A】中做了分析;后者在http://blog.chinaunix.net/u2/87570/showart_2191188.html【B】中做了分析。 A中的数据当时让我很吃惊,为什么读写的... 阅读全文
posted @ 2013-04-19 14:05
ydzhang
阅读(1075)
评论(0)
推荐(0)
摘要:
为什么需要iSCSI ? 1. 解决了SCSI协议在设备数目和连接距离上的限制;
2. 为SAN提供了一种高性价比的传输协议;
3. 与各种存储管理结合起来,提供灵活的备份、镜像、灾难恢复以及次级存储解决方案; 什么是iSCSI ? iSCSI是由IEETF开发的网络存储标准,目的是为了用IP协议将存储设备连接在一起。通过在IP网上传送SCSI命令和数据,ISCSI推动了数据在网际之间的... 阅读全文
posted @ 2013-04-19 14:05
ydzhang
阅读(825)
评论(0)
推荐(0)
摘要:
等待队列是linux里的一个重要数据结构,包括之前分析的fuse中也用到等待队列以实现阻塞IO,等待队列实际上是一个循环链表,需要等待某个条件的进程在相应的等待队列上睡眠,但等待条件变为真时,进程被唤醒。
主要的数据结构在include/linux/wait.h中声明及定义:
等待队列头的结构如下:
struct __wait_queue_head { spinlock_t lock; //用于... 阅读全文
posted @ 2013-04-19 14:05
ydzhang
阅读(290)
评论(0)
推荐(0)
摘要:
printf(内核态为printk)是我觉得最好的调试工具,我碰到的大部分问题也是通过在代码中打印调试信息来分析错误源的位置,但当我们写的代码需要发布时,这些调试信息则是多余的,而当我们再次发现bug时,可能又需要加入一些调试信息,于是我们可能想寻求一种方法可以控制print函数是否打印调试信息,预处理宏可帮助我们实现这一功能。 #undef PDEBUG /* undef it, ... 阅读全文
posted @ 2013-04-19 14:05
ydzhang
阅读(201)
评论(0)
推荐(0)
摘要:
使用HD Tune Pro测试了下磁盘的性能,在老大的帮助下把测试的结果弄清楚了。 1. 裸盘的测试(读) 测试结果显示,磁盘速率不断跳跃式的下降,应该是从磁盘的沿着磁盘外道到内道读取数据,由于外圈的线速度远大于内圈,故在外圈速率也会高些,而不断的跳跃则是出现在磁盘磁盘换道的时刻。快结束的时候出现了一个大幅度的下降,因为测试时系统运行着很多其他的应用程序,应该是受到其他进程的影响才出现的。
... 阅读全文
posted @ 2013-04-19 14:05
ydzhang
阅读(474)
评论(0)
推荐(0)
摘要:
去年寒假,中国移动推出“两城一家”“优惠”活动。口号是两城一家,实惠到家!畅享移动新生活。资费标准如下: 想到我回家后可能会经常接打电话,觉得这项业务办理了很划算,于是就开通了。的确,在家里,“两城一家”给我省了不少钱,还纳闷移动怎么这么傻,一个月2元的功能费,给我省了这么多钱。 直到前些天,一个亲戚问我,怎么跟我打几次电话,话费用得那么快,我才恍然大悟,移动才不傻呢,傻的永远是消费者... 阅读全文
posted @ 2013-04-19 14:05
ydzhang
阅读(137)
评论(0)
推荐(0)
摘要:
fuse通过fuse_session_loop来启动守护程序,守护程序最终会调用fuse_dev_readv,fuse_dev_readv调用request_wait,使得进程在fc的waitq队列上睡眠。 代码片段1
static ssize_t fuse_dev_readv(struct file *file, const struct iovec *iov, unsigned long... 阅读全文
posted @ 2013-04-19 14:05
ydzhang
阅读(912)
评论(0)
推荐(0)
摘要:
fuse处理请求的整个流程如下图所示,以unlink操作为例进行说明。其中“>”表示调用,”<”表示返回,[]表示调用中所做的工作。本人结合fuse的源代码,对整个流程进行了分析。 fuse通过fuse_session_loop(或对应多线程的方法)来启动fuse守护程序,守护程序不断的从/dev/fuse上读取请求,并处理。 代码片段1
int fuse_session_loop(st... 阅读全文
posted @ 2013-04-19 14:05
ydzhang
阅读(1507)
评论(0)
推荐(1)
摘要:
fuse为开发者提供了两组接口,分别是fuse_lowlevel_ops以及fuse_operations,开发者只需要实现这两组接口的一种即可实现一个用户空间文件系统。 struct fuse_lowlevel_ops的成员如下所示,其中init方法在其它所有方法之前调用,用于初始化文件系统,fuse已经实现,destroy则是在文件系统被卸载时做一些清理工作。用于大多数请求的参数都是fuse... 阅读全文
posted @ 2013-04-19 14:05
ydzhang
阅读(1209)
评论(0)
推荐(1)
摘要:
对fuse提供的两个选项direct_io及big_writes困惑已久,以前对内核完全不了解,看不懂fuse内核模块的代码,这两天把fuse的代码重新过了一遍,把整个机制弄清楚了,很多细节方面的东西还在学习中。 指定direct_io挂载文件系统时,系统调用到了fuse层后,会跳过页高速缓存,当指定了direct_io后,读写系统调用会使用fuse_direct_io_file_operati... 阅读全文
posted @ 2013-04-19 14:05
ydzhang
阅读(2312)
评论(0)
推荐(0)
浙公网安备 33010602011771号