阿弥陀佛
发布时间:2013-01-11 14:12:28
http://www.makelinux.net/books/lkd2/ch11lev1sec5vmalloc 函数常常和kmalloc作为内核申请内存的主要函数,vmalloc申请的内存是内存的虚拟地址是连续的,而kmalloc申请的内存的物理地址是连续的。而内核大多采用kmalloc,主要的原因是由于kmalloc申请的内存是物理上连续的,效率高,而vmalloc申请的内存虚拟地址连续,但是使用的时候需要经过一个页表转换,有开销,效率低。而且某些硬件设备是不经过内存管理单元的。vmalloc的使用场合是内核模块动态的加载进内核的时候,使用vmalloc,而不是使用kmalloc,或者是需要......【阅读全文】
发布时间:2013-01-08 19:32:51
zfs的写性能很差,zfs on linux 上的写性能个人感觉更差。 而且这种差很难修改,原因是由于在linux内核当中,在zfs当中,对于一个4k块大小的块设备,如果你要重写一个2k的块,你可以发现大量的读操作从内核的上层发起。操作如下$dd if=/dev/zero of=/dev/zd0 bs=2k count=10000造成大量的读的原因很简单 由于你要2k,2k的写,而真正的zfs 的块设备块大小为4k,所以他会发起一个读取整个块的操作,从磁盘上读一个4k上来,然后将2k的数据写入这个块上,然后将这个新的4k,封装好bio,以request的形式往底层传递......【阅读全文】
发布时间:2012-12-27 10:08:41
有些时候大家可能觉得Linux系统刚刚启动的时候没什么操作,为什么这么耗内存。最最常见的回答就是Linux会将很多的东西cache到内存当中。这么说是笼统的。 linux的cache有很多种,linux之所以这么消耗内存,主要是内核的设计即使如此。 我总结了一下,主要有两个大类: 1.slab会先从内存当中申请一些内存,以备内核申请一个核心数据结构的时候能够快速得到满足,提高内核申请一些关键数据结构的效率。 2.page cache,将常常需要访问的文件及数据块c......【阅读全文】
发布时间:2012-12-25 19:17:14
当写buffer的操作完成之后,在dbuf_dirty函数当中,会创建一个dr,dr所属的txg 为 open txg 的 txg id。然后 他会插入到dnode的dn_dirty_records当中。为了以后同步的时候使用,所以 根据txgoff=txg & TXG_MASK,算出相应的txgoff,然后插入进去。当open txg 变成 sync txg的时候,sync thread会调用函数spa_sync ,大范围内的进行同步操作。spa_sync(spa,txg)点击(此处)折叠或打开list_insert_tail(&dn->dn_dirty_records......【阅读全文】
发布时间:2012-12-25 18:31:24
不多说,见如下文件。 点击(此处)折叠或打开 backtrace.c: #include <execinfo.h> #include <stdio.h> #include <stdlib.h> #define BT_MAX_TRACE 100 void print_trace (void) { void *array[BT_MAX_TRACE]; size_t size; &......【阅读全文】