您的位置:首页 > 编程语言

scst cache 代码调试笔记

2015-10-28 17:14 423 查看
由于之前师兄写的代码是基于SCST-1.0,,内核版本是2.6.18的,版本都太旧了,我先我用的是SCST-2.2.0,内核版本是2.6.32.26,由于版本的差别,一些数据结构的定义和接口都有所改变了,主要有以下几个地方的变动。

1.内核代码中scatterlist结构的变化:

struct scatterlist {

#ifdef CONFIG_DEBUG_SG

unsigned long sg_magic;

#endif

unsigned long page_link;

unsigned int offset;

unsigned int length;

dma_addr_t dma_address;

__u32 dma_length;

};

之前的版本中scatterlist有page域,现在改为page_link,所以在SCST中的sg变量的操作应该作如下修改

page = sgl[j].page; ------> page=sg_page(&sgl[j]); //sg_page函数原型定义在 include/linux/scatterlist.h文件中

sgl[j].page=temp;-------> sg_assign_page(&sgl[j],temp) //同上

2.scst-2.2.0中struct scst_vdisk_thr结构体的变化

struct scst_vdisk_dev *virt_dev = thr->virt_dev; -----> struct scst_vdisk_dev *virt_dev = cmd->dev->dh_priv;

原本scst_vdisk_dev设备描述符保存在scst_vdisk_dev的vrit_dev域中,现在改放到scst cmd中;

3.内存块的分配方式

之前用的是kmalloc分配,现在采用kmem_cache_alloc(blockio_work_cachep,gfp_mask)分配;

4.缓存基树的初始化和内存回收

在scst模块初始化时,要对缓存块进行初始化

调用blockio_init_cache和cache_radix_tree_init初始化

在卸载模块时,也要释放缓存节点

free_cache_and_node和cache_radix_tree_destory

5.缓存容量大小的调整

一开始只要加载了有缓存的scst,发起端一旦连接,目标端就会死机,栈一直报错,有时虚拟机和主机都会一同死机,推测有可能是内存满了,所以调整虚拟机的内存大小为4G,同时调整缓存的容量

对应于scst_vdisk_cache.h文件中的

改变Cache容量,修改下面两个宏就可以了:

#define CACHE_CAPACITY_SHIFT 21 //写Cache容量2m

#define CACHE_CAPACITY_SHIFT_R 28 //读Cache容量256m
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: