青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

那誰的技術(shù)博客

感興趣領(lǐng)域:高性能服務(wù)器編程,存儲,算法,Linux內(nèi)核
隨筆 - 210, 文章 - 0, 評論 - 1183, 引用 - 0
數(shù)據(jù)加載中……

ccache0.6 版本發(fā)布

這個版本沒有太多的新特性,大部分為改進(jìn)原有版本的問題,版本主要的工作包括:

version 0.6 (2009.10.22, base on svn reversion 85)
1) rename ccache_create and ccache_destroy to ccache_open and ccache_close
respectly
2) when open the cache, use ini style configure file to config the cache
3) rename the API ccache_replace to ccache_set
4) all the funcions's first param is cache
5) when open the cache, init the compare function pointer, so when use the
cache API does not need to specify the compare function  
6) add install/uninstall target in Makefile
7) use Bob Jenkins hash algorithm instead of the previous one.

項(xiàng)目地址在: commoncache
另外,項(xiàng)目的wiki頁面我新增了一些解釋commoncache實(shí)現(xiàn)和簡單的demo代碼。

另外,感謝 helloghui提出代碼中的一個BUG。






posted on 2009-10-22 20:51 那誰 閱讀(4547) 評論(8)  編輯 收藏 引用 所屬分類: ccache

評論

# re: ccache0.6 版本發(fā)布  回復(fù)  更多評論   

converse你好,看了一些ccache源碼,感謝你的開源項(xiàng)目。我有幾個問題(因?yàn)椴]有看到方方面面,所以也不算特別肯定,抱歉):
1、ccache使用mmap映射文件到內(nèi)存,除了持久存儲,應(yīng)該就是為了使不相關(guān)進(jìn)程能訪問同一cache,但存儲里卻用了指針(ccache_t里,prev,next等等),也就是地址,而地址是僅僅只對初始化它們(init)的進(jìn)程才有意義的,因?yàn)椴⒉荒鼙WC文件會被不同進(jìn)程映射到它們相同的邏輯地址。所以我覺得項(xiàng)目里mmap、文件的初衷達(dá)不到,也就是只有單進(jìn)程能訪問cache,而且程序重啟reload file不可用。我個人覺得所有需要存儲的指針(地址)都應(yīng)該改為偏移量(off_t);
2、項(xiàng)目只使用了一個rwlock,也就是鎖粒度是整個cache級的,我覺得這個是不能接受的,一旦有寫鎖加上,整個cache都無法訪問。cache應(yīng)用中會有大量的讀操作(多進(jìn)程,多線程),也會有一定量的寫操作,讀操作應(yīng)該盡量不被堵塞。建議讀寫鎖粒度可以細(xì)化到hashitem級。另外我看里面除了visit其他全部都是加的寫鎖,包括find,具體代碼我沒細(xì)看,可能你有一些值需要更新,但是我覺得原則上find操作應(yīng)該加讀鎖;
3、對unfix的支持好像是freearea通過多級fix(alignsiz)實(shí)現(xiàn)的?這個我沒細(xì)看,沒太多發(fā)言權(quán)。因?yàn)楫?dāng)時追蹤看到了,有些奇怪,提一下。我覺得這里就是一個類似malloc包的內(nèi)存管理,malloc包也會有小的塊這樣的概念,但和你這個好像并不是相同的用意。
2010-05-04 23:13 | ping

# re: ccache0.6 版本發(fā)布  回復(fù)  更多評論   

@ping
1.第一點(diǎn)我沒太看明白,我的測試用例就是使用多進(jìn)程去進(jìn)行壓力測試的,好像還沒有發(fā)現(xiàn)問題.
2.這一點(diǎn)我也比較頭疼,但是目前沒有找到降低鎖粒度的辦法.find操作要加寫鎖,是因?yàn)楦鶕?jù)LRU算法,每次訪問過的節(jié)點(diǎn),需要往鏈表頭走一步,所以也有更新的操作.這樣,經(jīng)常被find的元素,就會越靠近鏈表頭.
3.是的,這個算法類似STL中內(nèi)存池的設(shè)計.
2010-05-04 23:30 | 那誰

# re: ccache0.6 版本發(fā)布  回復(fù)  更多評論   

@那誰
第一點(diǎn)可能我省字沒說明白,我的意思是這樣:
既然ccache使用了mmap和文件,那它肯定應(yīng)該能支持:1、一個程序啟動,往里面insert一些數(shù)據(jù),程序關(guān)閉;程序再次啟動,load上次的文件,這時它應(yīng)該是能讀取上次寫入的那些數(shù)據(jù)的;2、不相干的進(jìn)程使用ccache,指定相同的文件,那它們應(yīng)該是能通信的,彼此的更新都能看到,而且也能同步訪問(rwlock)。不然你的ccache只能給一個進(jìn)程或父子之類的相關(guān)進(jìn)程訪問,這顯然意義不大。我想上面兩點(diǎn)也應(yīng)該是你使用mmap和文件的初衷。
而你想要不同的進(jìn)程、不相干的進(jìn)程都能理解你的文件結(jié)構(gòu)的話,只能使用偏移量,不能使用指針。比如你創(chuàng)建cache的進(jìn)程(配置init=1)mmap返回的地址為A,里面的某個指針freearea指向的地方相對于它(ccache_t )的偏移量為X,然后freearea這個指針的值就為A+x,它被保存在文件里了,另一個不相干的進(jìn)程(配置init=0)把它mmap到自己的進(jìn)程空間,它的mmap返回值為B,而不是A,而這時你用freearea這個指針的值(A+x)去訪問你的空閑區(qū)顯然就出錯了(應(yīng)該是B+x)。所以我說在文件(以及共享內(nèi)存)不能使用指針、只能使用偏移量,是這個意思。
你的test/目錄下那個多進(jìn)程insert的代碼我看了,因?yàn)槭歉缸舆M(jìn)程繼承mmap的關(guān)系,所以不會出錯,因?yàn)檫@種繼承關(guān)系本身就保證了mmap值的想同。
前面這些是基于對你的mmap作用、init作用的大概判斷的基礎(chǔ)上說的,希望沒有理解錯,以致浪費(fèi)你的時間。
下面是一個會出問題的例子代碼:
#define WCF "../conf/fix_cache.conf.w"
#define RCF "../conf/fix_cache.conf.r"

void ccget()
{
int i,len;
char str[9];
ccache_data_t data;
ccache_t *cache = ccache_open(RCF,NULL);
assert(cache);

for(i = 1;i <= 1000000;i++)
{
len = sprintf(str,"%08d",i);

//data.data = (void *)&str;
//data.datasize = len;
data.key = (void *)&str;
data.keysize = len;

if(ccache_find(cache,&data) != 0)
{
printf("find FAIL\n");
break;
}
else printf("%s\t%s\n",(char *)data.key,(char *)data.data);
}
}
void ccset()
{
int i,len;
char str[9];
ccache_data_t data;
ccache_t *cache = ccache_open(WCF,NULL);
assert(cache);

for(i = 1;i <= 1000000;i++)
{
len = sprintf(str,"%08d",i);

data.data = (void *)&str;
data.datasize = len;
data.key = (void *)&str;
data.keysize = len;

if(ccache_insert(cache,&data,NULL,NULL) != 0)
{
printf("insert FAIL\n");
break;
}
}
}
int main(int argc,char **argv)
{
if(!strcmp(argv[1],"set")) ccset();
else if(!strcmp(argv[1],"get")) ccget();
}

其中fix_cache.conf.w就是你的fix_cache.conf文件,fix_cache.conf.r則是把它里面的init=1改為init=0,其它不變。
我用它來模仿不相干進(jìn)程,先寫數(shù)據(jù):
./cctest set
然后再打開文件讀數(shù)據(jù):
./cctest get
我測了兩次,一次段錯誤,一次get FAIL.

如果是我對init的使用理解有誤,對耽誤你的時間表示歉意。
2010-05-06 00:02 | ping

# re: ccache0.6 版本發(fā)布  回復(fù)  更多評論   

@ping
你說的沒錯,之前這個問題一直沒有發(fā)現(xiàn),是因?yàn)槲抑皩懙姆?wù)器程序都是父子進(jìn)程的模式,能否給我留一個聯(lián)系方式,我將在下一次修正這個BUG的時候在changelog中加入你的信息,謝謝.你可以在私人留言中給我留下聯(lián)系方式.



2010-05-06 00:39 | 那誰

# re: ccache0.6 版本發(fā)布  回復(fù)  更多評論   

@那誰
呵呵,不用。之前我有看過你在CU上寫的lighttpd源碼分析學(xué)習(xí)lighttpd,收獲很多,這次看ccache的代碼也學(xué)到了一些東西,尊敬你開源和共享的精神,這次能有所幫助已經(jīng)很高興了。技術(shù)范圍內(nèi)的討論大家都有收獲就好,簡簡單單,你不用特意的感謝。
2010-05-06 09:16 | ping

# re: ccache0.6 版本發(fā)布  回復(fù)  更多評論   

有幾個問題想問問博主,感謝博主有空解答。

1。是否支持重復(fù)索引數(shù)據(jù)。
2。數(shù)據(jù)被刪除后空間是否真的被釋放。
3。能否支持按照表的方式管理。
4。可否考慮使用文件鎖的方式實(shí)現(xiàn)?
2010-08-19 20:28 | njmpop@sina.com.cn

# re: ccache0.6 版本發(fā)布  回復(fù)  更多評論   

converse,你好,你的程序我在mingw下編譯,發(fā)現(xiàn)編譯不過,找不到sys/mman.h這個頭文件,請問我怎么解決這個問題?
2010-08-26 17:57 | messi

# re: ccache0.6 版本發(fā)布  回復(fù)  更多評論   

很久不更新版本了,封板了。
2012-05-25 16:50 | wxh
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            日韩视频一区二区在线观看 | 亚洲校园激情| 在线日韩电影| 亚洲二区免费| 一区二区久久久久| 亚洲女同精品视频| 久久久久成人精品| 欧美韩日高清| 一区二区成人精品| 亚洲欧美国产制服动漫| 久久精品视频一| 欧美电影免费观看高清完整版| 男女精品视频| 国产精品美女999| 激情av一区| 一区二区欧美视频| 久久精品国产第一区二区三区最新章节| 亚洲国产精品一区二区三区| 久久婷婷久久一区二区三区| 亚洲大胆视频| 一区二区三区免费看| 久久av红桃一区二区小说| 毛片基地黄久久久久久天堂| 欧美日韩亚洲一区三区 | 久久久久久精| 日韩视频在线免费| 久久久久久久久蜜桃| 欧美日韩亚洲一区二区三区四区| 国产午夜久久久久| 99国产精品99久久久久久粉嫩| 性感少妇一区| 亚洲欧洲免费视频| 久久久青草婷婷精品综合日韩| 欧美日韩一级黄| 亚洲人精品午夜| 麻豆精品精华液| 亚洲一区区二区| 欧美精品免费观看二区| 激情综合亚洲| 久久精品道一区二区三区| 日韩一级大片在线| 欧美成人免费小视频| 极品av少妇一区二区| 性欧美长视频| 亚洲视频一区二区| 欧美视频在线观看视频极品| 亚洲免费大片| 亚洲国产1区| 美日韩精品视频| 在线看国产一区| 久久中文在线| 久久九九电影| 激情六月婷婷久久| 久热精品视频在线观看| 久久gogo国模啪啪人体图| 国产精品丝袜白浆摸在线| 亚洲一区精品视频| 一区二区三区视频在线播放| 欧美日韩一区精品| 亚洲性夜色噜噜噜7777| 一本久道久久综合婷婷鲸鱼| 欧美日韩在线播放一区二区| 亚洲影院免费观看| 亚洲一区自拍| 国产一区观看| 美女在线一区二区| 欧美福利在线| 一区二区三区精品国产| 中国亚洲黄色| 国产一区 二区 三区一级| 久久人人97超碰人人澡爱香蕉| 久久都是精品| 亚洲黄色在线视频| 亚洲理论在线| 久久精品成人| 久久久精品国产免大香伊 | 99re6热只有精品免费观看 | 在线成人性视频| 亚洲成色精品| 欧美四级在线| 久久久久久久网站| 欧美成人免费网| 亚洲女优在线| 久久精品亚洲| 一本色道久久99精品综合| 亚洲色无码播放| 在线电影一区| 在线天堂一区av电影| 红桃视频一区| 日韩亚洲不卡在线| 国产亚洲精品自拍| 91久久久久| 国内久久婷婷综合| 日韩视频中文| 在线观看国产日韩| 亚洲深爱激情| 亚洲日本视频| 欧美中文字幕精品| 正在播放欧美视频| 久久在线播放| 欧美一区二区三区啪啪| 欧美精品 日韩| 久久在线播放| 国产精品久久久久天堂| 亚洲国产精品久久久久秋霞蜜臀 | 亚洲欧美视频在线观看视频| 亚洲国产成人久久综合一区| 一区二区三区久久网| 亚洲高清资源综合久久精品| 亚洲在线网站| 一区二区电影免费在线观看| 久久久久久久久久久成人| 亚洲午夜一区| 欧美精品久久99| 欧美ed2k| 精品91久久久久| 欧美一区二区三区视频免费播放| 亚洲午夜黄色| 欧美日韩亚洲不卡| 最新日韩av| 亚洲激情视频| 久久这里只精品最新地址| 久久亚洲春色中文字幕久久久 | 一区二区三区 在线观看视| 久久久99国产精品免费| 欧美一区二区三区久久精品| 欧美日韩在线三级| 亚洲美女诱惑| 亚洲一区综合| 国产精品嫩草99a| 在线亚洲国产精品网站| 欧美在线影院| 欧美日韩国产精品专区| 亚洲人成在线观看| 伊人精品久久久久7777| 亚洲欧美综合另类中字| 亚洲欧美三级在线| 国产精品视频一区二区三区| 日韩一级精品| 亚洲欧美日韩精品综合在线观看| 国产精品九九| 亚洲在线免费| 久久影视精品| 亚洲人永久免费| 欧美区日韩区| 亚洲图片自拍偷拍| 久久久噜久噜久久综合| 在线激情影院一区| 欧美.日韩.国产.一区.二区| 91久久久国产精品| 亚洲午夜电影网| 国产日韩精品在线| 久久人人爽人人爽| 亚洲精品久久嫩草网站秘色| 亚洲一区二区精品视频| 国产视频精品va久久久久久| 久久精品论坛| 亚洲精品国产精品国产自| 午夜视频精品| 在线视频国产日韩| 欧美日韩国产精品一区| 午夜伦理片一区| 牛人盗摄一区二区三区视频| 日韩午夜视频在线观看| 国产精品毛片在线| 久久久国产精品亚洲一区| 国产一区二区三区精品久久久| 老司机久久99久久精品播放免费| 亚洲美女中文字幕| 久久人人精品| 一本色道久久综合亚洲精品婷婷| 国产欧美一二三区| 欧美va亚洲va香蕉在线| 亚洲网站在线观看| 欧美二区不卡| 欧美一区二区三区四区高清| 亚洲国产欧美日韩| 国产精品自拍一区| 欧美精品成人| 久久国产精品99久久久久久老狼| 亚洲国产乱码最新视频| 久久精品二区| 亚洲女性喷水在线观看一区| 亚洲国产高清在线| 国产欧美亚洲精品| 欧美日韩在线播| 久久亚洲精品视频| 午夜精品一区二区三区在线视| 亚洲欧洲视频| 你懂的亚洲视频| 久久久久久久波多野高潮日日| 中文欧美在线视频| 亚洲国产高清高潮精品美女| 国产亚洲欧美日韩精品| 欧美色大人视频| 欧美激情亚洲视频| 免费欧美日韩国产三级电影| 久久激情五月婷婷| 欧美亚洲综合另类| 一区二区三区av|