欢迎来到天天文库
浏览记录
ID:20001735
大小:301.62 KB
页数:18页
时间:2018-10-08
《memcached源码》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Memcached源码解析启动参数-m指定最大使用内存大小(默认64MB)-t线程数(默认4)-l绑定地址(默认:所有都允许,无论内外网或者本机更换IP,有安全隐患,若设置为127.0.0.1就只能本机访问)-m最大内存使用,单位MB。默认64MB-M内存耗尽时返回错误,而不是删除项-c最大同时连接数,默认是1024-f块大小增长因子,默认是1.25-n最小分配空间,key+value+flags默认是48-k锁定所有内存页。注意你可以锁定的内存上限。-p指定端口号(默认11211)-UUDP监听端
2、口(默认:11211,0时关闭)-LTrytouselargememorypages启动settings_init()//初始化setting从启动命令中读取设置hash_init()//根据hash_type,选择相应hash函数,默认是jenkinshashinit_sasl();//todomain_base=event_init();//initializemainthreadlibeventinstancestats_init();//统计数据初始化assoc_init(settings.hashpower_init);//初始化
3、hashtable,默认hashpower为16conn_init();//connection初始化slabs_init(settings.maxbytes,settings.factor,preallocate);thread_init(settings.num_threads,main_base);init_lru_crawler();数据结构slabcalss[1]slabclass[2]…size96Bperslab10922slab_listslabslist_sizeslotssl_currslab_listslab1slab
4、2slab3slab4slab5…slabnchunk1chunk2…chunk(n-3)chunk(n-2)chunk(n-1)chunknchunk1chunk2chunk3chunk4chunk5…chunk空闲链表的头nullhashtableh_nextslabcalss[1]slabclass[2]…size96Bperslab10922slab_listslabslist_sizeslotssl_currslab1slab2slab3slab4slab5…slabnchunk1chunk2chunk3chunk4chunk5c
5、hunk6chunk7chunk8…chunk(n-4)chunk(n-3)chunk(n-2)chunk(n-1)chunkn空闲链表的头hashtableheads[1]tails[1]橙色线代表空闲链表的双向链接蓝色线代表LRU链表的双向链接heads[1]记录了LRU链表头tails[1]记录了LRU链表尾部64Bslab结构–slabclass_ttypedefstruct{unsignedintsize;/*sizesofitems*/unsignedintperslab;/*howmanyitemsperslab*/void*
6、slots;/*listofitemptrs*/unsignedintsl_curr;/*totalfreeitemsinlist*/unsignedintslabs;/*howmanyslabswereallocatedforthisclass*/void**slab_list;/*arrayofslabpointers*/unsignedintlist_size;/*sizeofprevarray*/unsignedintkilling;/*index+1ofdyingslab,orzeroifnone*/size_trequested
7、;/*Thenumberofrequestedbytes*/}slabclass_t;slab相关的默认参数#definePOWER_SMALLEST1#definePOWER_LARGEST200#defineCHUNK_ALIGN_BYTES8#defineMAX_NUMBER_OF_SLAB_CLASSES(POWER_LARGEST+1)slab_initlimit:使用的内存大小,factor:增长因子,prealloc:是否预先分配voidslabs_init(constsize_tlimit,constdoublefactor
8、,constboolprealloc)1.若是预先分配,先malloc一块大内存2.计算每个slabclass的size大小,最小的size为sizeof(item)+setti
此文档下载收益归作者所有