{"id":5011,"date":"2022-01-26T22:03:17","date_gmt":"2022-01-26T13:03:17","guid":{"rendered":"https:\/\/now0930.pe.kr\/wordpress\/?p=5011"},"modified":"2022-01-26T22:04:05","modified_gmt":"2022-01-26T13:04:05","slug":"linux-memory-pools","status":"publish","type":"post","link":"https:\/\/now0930.pe.kr\/wordpress\/linux-memory-pools\/","title":{"rendered":"linux memory pools"},"content":{"rendered":"\n<p>memory pools<\/p>\n\n\n\n<p>cache memory\uc5d0 \uc774\uc5b4 memory pools\ub97c \uc2e4\uc2b5\ud588\ub2e4. \uc5ed\uc2dc \ucc45\ub9cc \ubcf4\uba74 \uc798 \ubaa8\ub978\ub2e4. nvme \ub4dc\ub77c\uc774\ubc84- drivers\/nvme\/target\/io-cmd-file.c &#8211; \uc911 mempool \uad00\ub828 \ucf54\ub4dc\ub97c \ucc3e\uc744 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"c\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include&lt;linux\/kernel.h>\n#include&lt;linux\/init.h>\n#include&lt;linux\/module.h>\n#include &lt;linux\/slab.h>\n#include &lt;linux\/mempool.h>\n\n#define scullc_quantum 16\n\/* declare one cache pointer: use it for all devices *\/\n\/* kmem_cache_t \uac00 kmem_cache\ub85c \ubcc0\uacbd\ub428*\/\nstruct kmem_cache *scullc_cache;\nstatic const char test[scullc_quantum]=\"123456789abcde\";\nstatic char* data;\nmempool_t *mem_pool1;\nstatic int __init hello_world_init(void) \/* Constructor *\/\n{\n\tint i;\n\tprintk(KERN_INFO \"hello, pool memory\\n\");\n\t\/* memory \ud560\ub2f9*\/\n\tscullc_cache = kmem_cache_create(\"scullc\", scullc_quantum*sizeof(char),\n\t\t\t0, SLAB_HWCACHE_ALIGN, NULL); \/* no ctor *\/\n\n\tif (!scullc_cache) {\n\t\tprintk(KERN_ERR \"no memory. out.\\n\");\n\t\treturn -ENOMEM;\n\n\t}\n\t\n\t\/* memory pool\ub85c allocate*\/\n\tmem_pool1 = mempool_create(16, mempool_alloc_slab, mempool_free_slab,\n\t\t\tscullc_cache);\n\n\t\/\/data = kmem_cache_alloc(scullc_cache, GFP_KERNEL);\n\n\tdata = mempool_alloc(mem_pool1, GFP_KERNEL);\n\tfor (i=0;i&lt;scullc_quantum;i++){\n\t\tdata[i] = test[i];\n\t}\n\n\tprintk(KERN_INFO \"cache: pos: %p, size: %d\\n\",scullc_cache, sizeof(scullc_cache));\n\tprintk(KERN_INFO \"data: pos:%p, size: %d, %s\\n\",data, sizeof(data), data);\n\treturn 0;\n}\n\nvoid __exit hello_world_exit(void)\n{\n\t\/\/kmem_cache_free(scullc_cache, data);\n\tmempool_free(data, mem_pool1);\n\tmempool_destroy(mem_pool1);\n\tkmem_cache_destroy(scullc_cache);\n\tprintk(KERN_INFO \"good bye, pool memory\\n\");\n\n}\nmodule_init(hello_world_init);\nmodule_exit(hello_world_exit);\n\nMODULE_LICENSE(\"GPL\");\nMODULE_AUTHOR(\"now0930\");\nMODULE_DESCRIPTION(\"cache memory test\");<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">pi@raspberrypi:~\/rasp\/advancedMemory\/mempool $ make\n#make -C \/lib\/modules\/5.10.63-v7l+\/build V=1 M=\/home\/pi\/rasp\/advancedMemory\/mempool modules\nmake -C \/lib\/modules\/`uname -r`\/build M=`pwd` modules\nmake[1]: \ub514\ub809\ud130\ub9ac '\/usr\/src\/linux-headers-5.10.63-v7l+' \ub4e4\uc5b4\uac10\nmake[1]: \ub514\ub809\ud130\ub9ac '\/usr\/src\/linux-headers-5.10.63-v7l+' \ub098\uac10\npi@raspberrypi:~\/rasp\/advancedMemory\/mempool $ sudo insmod memory_pool.ko\npi@raspberrypi:~\/rasp\/advancedMemory\/mempool $ sudo rmmod memory_pool \npi@raspberrypi:~\/rasp\/advancedMemory\/mempool $ dmesg | tail -10\n[52590.309504] hello, pool memory\n[52590.309579] cache: pos: 0c17faff, size: 4\n[52590.309598] data: pos:f97bc0b2, size: 4, 123456789abcde\n[52601.784069] good bye, pool memory<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>memory pools cache memory\uc5d0 \uc774\uc5b4 memory pools\ub97c \uc2e4\uc2b5\ud588\ub2e4. \uc5ed\uc2dc \ucc45\ub9cc \ubcf4\uba74 \uc798 \ubaa8\ub978\ub2e4. nvme \ub4dc\ub77c\uc774\ubc84- drivers\/nvme\/target\/io-cmd-file.c &#8211; \uc911 mempool \uad00\ub828 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[12],"tags":[775,1025,949,1024,1027],"class_list":["post-5011","post","type-post","status-publish","format-standard","hentry","category-12","tag-c","tag-cache","tag-driver","tag-memory","tag-memory-pools"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/posts\/5011","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/comments?post=5011"}],"version-history":[{"count":3,"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/posts\/5011\/revisions"}],"predecessor-version":[{"id":5015,"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/posts\/5011\/revisions\/5015"}],"wp:attachment":[{"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/media?parent=5011"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/categories?post=5011"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/now0930.pe.kr\/wordpress\/wp-json\/wp\/v2\/tags?post=5011"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}