linux内核 涉及自己的项目
文章平均质量分 60
guogaofeng1219
这个作者很懒,什么都没留下…
展开
-
内核线程相关
http://blog.csdn.net/maray/archive/2009/08/13/4442450.aspxhttp://blog.csdn.net/bing_bing/archive/2010/09/16/5889224.aspx转载 2010-12-14 09:33:00 · 491 阅读 · 0 评论 -
cond_resched 以及 dm-io相关问题
cond_resched 这个函数具有主动被调度的作用。为了及时响应实时过程,需要中断线程化,而在中断线程化的过程中,需要调用cond_resched 这个函数。在目前的内核代码中,一般在读磁盘前(或者其它可能费时操作前),会调用这个函数。 在使用dm_io_s原创 2010-12-06 16:50:00 · 3778 阅读 · 0 评论 -
项目调试bug感悟 && 取数的高位
1spin_lock_irqsave的第二个参数 flag 必须为unsign long 型,否则会出内存溢出的问题 2对一块内存free(vfree, kfree, mempool_free)后,一定要将相应的指针置空。 否则会出野指针的问题。 这一点在memp原创 2011-04-23 10:15:00 · 952 阅读 · 0 评论 -
bio切分函数 ---- 非递归实现
以前的实现方式: 递归式的,但是在内核中递归是一个非常危险的举动, 所以把它实现成非递归的数据结构:struct md_bio_pair { struct list_head bio_head; struct bio *oldbio;原创 2011-07-18 17:58:21 · 1143 阅读 · 0 评论 -
ext3日志文件系统理解
1. 对于ext3日志文件系统。是一个事务,对应同一个时间戳?对于ext3的Ordered模式(默认模式)来说事务里面仅包含元数据,包括 inode,bitmap等,这些都会被先写到JBD层所在的磁盘上。每个事务都有自己的状态标记,比如是否committed。没有commit会被放到一起,然后被JBD层scan下刷。在没有断电的情况下,是直接把内存中的相应内容刷到磁盘,断电后重启后,原创 2011-06-11 10:36:00 · 2642 阅读 · 0 评论 -
calltrace 中寄存器 && vmalloc && virt_to_page
<br />1<br />预备知识:<br />RIP(指令指针)RIP寻址代码段存储区内的下一条指令<br /> <br /> <br />RSP(堆栈指针)RSP寻址一个称为堆栈的存储区。通过这个指针存取堆栈存储器数据,具体操作将在本书后面讲解访问堆栈存储器数据的指令时再进行原创 2011-04-15 11:02:00 · 1600 阅读 · 0 评论 -
项目思考
<br />系统的设计是王道,测试只是从一个侧面来考察系统的稳定行,健壮性等。<br /> <br />1<br />为了增加 系统的 健壮性以及 易维护性,需要对系统的结构进行优化。<br /> <br />2<br />从内存压力角度来看系统,导致我们加入 extent概念以及 元数据的换入换出<br /> <br />3<br />具体 实现方面 <br /> <br />1) 为了解决 数据和元数据 的先后关系,引入master --- slave 关系<br />2) 为了 解决 由于 下发请求过原创 2011-04-13 11:49:00 · 566 阅读 · 0 评论 -
关于 中断 以及 死锁的错误
环境 : 2.6.18内核发生死锁有2中错误:1 :soft lockup - cpu#0 stuck for 10s 发生这种情况的根本原因是__smp_call_function 里面 的 spin_lock(&call_lock) 一直拿不到锁而导致它发生的情况目前遇到2种:1) 死循环所以如果在某个地方不停retry的话,就必须睡一段时间。目前使用的是:set_current_state(TASK_UNINTERRUPTIBLE); schedule_timeout(WAIT_TIME);目的是原创 2011-04-12 10:03:00 · 1777 阅读 · 0 评论 -
存储理解
今天老板来讲了一通,醍醐灌顶,对自己做的东西终于有了一个大概的了解。1raid5对于小写更新,只有25%的raid1的性能。 原因如下: 一个小写(不够一个条带)过来。 需要先读就“旧数据”和“旧的校验” 然后和构成新的数据的新的校验和。相当于有2次读和2次写,这样导致形成只有原来25%的性能。而我们做的系统,asd和cbd充分利用空间局部性(小io变成大io),而bwc(拿出系统2%的空间),充分利用时间局部性(上层应用有可能在不同的时间老是写同一块)。最终可以达到80% ---- 90%的raid0的原创 2011-03-23 21:34:00 · 727 阅读 · 0 评论 -
从块设备层理解 add_disk,mkfs.ext3,mount,umount
<br /><br />因为自己写的块设备驱动程序在文件系统的下一层,所以可以通过监视进去块设备的bio的一些数据,来窥视一些操作的内部实现。 比如: add_disk,mkfs.ext3,mount ,umount 等<br /> <br />使用的块设备的大小为 10G<br /> <br />add_disk时,进入make_request的数据如下:<br /> <br /> <br /> <br />rw :READ,bi_sector : 20971392,bi_size :4096<br />原创 2011-01-17 10:36:00 · 2015 阅读 · 0 评论 -
内核模块中如何打开文件?
第一种方案:用sys_open,sys_read,sys_close需要包含头文件:#include #include /* sys_open, sys_read; sys_close */#include #include 编译 通过,但在insmod模块的时候,却提示:Unknown symbol sys_open. (有可能在内核空间,看不到这个导出的函数,怎么办?)师兄告诉一种方法:在本模块中,自己声明相应的函数指针。比如asmlinkage long (*sys_open1)(const cha原创 2010-11-10 21:05:00 · 2448 阅读 · 0 评论 -
hash表,radix_tree,红黑树,B+树比较
如题,这几种数据结构都是我们平时常用的数据结构。hash链表: 本质上就是 数组 + 链表hash树: 本质上就是 数组 + 树。这个树可以是红黑树,B+树,radix_tree等因为每种数据结构都有自己的优点,缺点。hash链表的各种性能介于 数组和链表之间,hash树的各种性能介于 数组和链表之间。先看一个摘自网上的图: 首先,它们的程序在不同程度上比数组和链表的复杂;其次,哈希表要求预先知道要存储多少数据,数据对存储空间的利用率也不是非常高。普通的二叉树对顺序的数据来说,会变成缓慢的O(N)级操作;而原创 2010-12-22 10:19:00 · 13644 阅读 · 2 评论 -
使用oprofile 过程
oprofile 从安装到使用具体步骤如下:安装如下:1从http://oprofile.sourceforge.net/download/ 下oprofile的最新版本:oprofile-0.9.6.tar.gz(目前为止)2解压后,在oprofile-0.9.6文件夹中运行 ./configure --with-kernel-support 。在最后会遇到一个问题1:configure: error: liberty library not found解决:yum install binutils-de原创 2010-10-29 20:04:00 · 2739 阅读 · 0 评论 -
cache设计 && 局部变量调试bug
<br />在我们需要进行查找操作时,如果感觉查找很耗时间,就可以利用cache机制。<br />比如 :<br />在“虚拟地址->物理地址” 过程中使用的tlb<br /> <br />find_vma 搜索vm_area_struct结构时,也是先找cahche,如果没有命中cache,才会遍历红黑树。<br /> <br /> <br /> <br />------------------------------------------------------<br /> <br />以前调一个bu原创 2010-12-17 13:03:00 · 803 阅读 · 0 评论 -
内存越界引起的bug汇总
1一个比较隐蔽的死锁bug 在测试代码的过程中,发现有大概百分之一的概率会出现一个死锁bug。进过仔细检查,发现加锁,解锁的地方是没有问题的。实在找不到问题的原因了,一狠心在每次加锁和解锁之后,将rwlock_t中的lock值打印出来。 每次write_unlock之原创 2011-02-25 18:01:00 · 1992 阅读 · 0 评论