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
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
相关文章推荐
- Java:IO流之字符流Reader、Writer详解
- PHP中上传多张图片
- Spring MVC 中的 forward 和 redirect
- java Vamei快速教程18 容器
- 如何禁止类的拷贝构造函数和复制构造函数
- CocoaPods安装步骤(已有Ruby环境):
- java学习笔记
- Spring Class MongoTemplate详解
- c++11 线程同步信号的使用
- java中System类对IO的支持
- CS0016: 未能写入输出文件“c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\b6a1c8
- 非纯c++模式实现ogre1.9的Android版
- IIS是如何处理ASP.NET请求的
- ThinkPHP中where()方法的使用
- C语言文法
- php curl用法
- 日志库EasyLogging++学习系列(7)—— 记录方式详解
- 使用jsp+javaBean写一个网页计算器
- (26) java泛型实现原理 及 java泛型详解
- 如何解决C++中用eof()多读一次