cond_resched
这个函数具有主动被调度的作用。为了及时响应实时过程,需要中断线程化,而在中断线程化的过程中,需要调用cond_resched 这个函数。在目前的内核代码中,一般在读磁盘前(或者其它可能费时操作前),会调用这个函数。
在使用dm_io_sync过程中对它的num_regions不是很了解,原来以为这个参数是用来切分传给它的page_list的,但是其实dm_io只能往磁盘的连续区域读写数据。使用num_regions可以让dm_io往不同磁盘的不同位置写相同的数据。
dm_io_sync_bvec 函数读写的最小单位是一个page,而不是一个sector.
另一篇介绍的不错:
http://blog.sina.com.cn/s/blog_57cddd200100078b.html
关键:
在使用任何dm-io服务之前,用户必须调用dm_io_get()、同时指定他们想要的页数来执行I/O.
DM-io将尝试着更改自己的内存池的大小来确认在执行i/o时为了避免不必要的等待而有足够的页面来供给。
当用户完成了使用I/O服务,他们将调用dm_io_put(),并指定和给dm_io_get()的相同数量的页面
当用户完成了使用I/O服务,他们将调用dm_io_put(),并指定和给dm_io_get()的相同数量的页面