cache memroy 실습
linux device driver, 8장을 실습 했다. 컴파일 하여 실행하기 전에는 어떻게 돌아가는지 잘 알 수 없다. scullc을 보고 따라하려 했으나 잘 모르겠다. 메모리를 cache로 선언하고 일반 메모리를 쓰듯이 하면 된다.
#include<linux/kernel.h> #include<linux/init.h> #include<linux/module.h> #include <linux/slab.h> #define scullc_quantum 16 /* declare one cache pointer: use it for all devices */ /* kmem_cache_t 가 kmem_cache로 변경됨*/ struct kmem_cache *scullc_cache; static const char test[scullc_quantum]="123456789abcde"; static char* data; static int __init hello_world_init(void) /* Constructor */ { int i; printk(KERN_INFO "hello, cache memory\n"); /* memory 할당*/ scullc_cache = kmem_cache_create("scullc", scullc_quantum*sizeof(char), 0, SLAB_HWCACHE_ALIGN, NULL); /* no ctor */ if (!scullc_cache) { printk(KERN_ERR "no memory. out.\n"); return -ENOMEM; } /* allocate*/ data = kmem_cache_alloc(scullc_cache, GFP_KERNEL); for (i=0;i<scullc_quantum;i++){ data[i] = test[i]; } printk(KERN_INFO "cache: pos: %p, size: %d\n",scullc_cache, sizeof(scullc_cache)); printk(KERN_INFO "data: pos:%p, size: %d, %s\n",data, sizeof(data), data); return 0; } void __exit hello_world_exit(void) { kmem_cache_free(scullc_cache, data); kmem_cache_destroy(scullc_cache); printk(KERN_INFO "good bye, cache memory\n"); } module_init(hello_world_init); module_exit(hello_world_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR("now0930"); MODULE_DESCRIPTION("cache memory test");
cache 메모리를 얼마나 사용하고 있는지 알아보는 유틸리티가 있을 것 같은데 못 찾았다.
참조 사이트