亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
123下一頁
最近訪問板塊 發(fā)新帖
查看: 11573 | 回復(fù): 28
打印 上一主題 下一主題

討論一個高性能的查找方法 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2010-11-10 14:38 |只看該作者 |倒序瀏覽
本帖最后由 duanjigang 于 2010-11-13 11:17 編輯

結(jié)構(gòu)體

  1. struct node
  2. {
  3.      u_int32_t srcaddr
  4.      u_int16_t srcport;
  5.      u_int32_t dstaddr;
  6.      u_int16_t dstport;
  7.      u_int8_t   proto;
  8.      u_int8_t   input;
  9.      u_int8_t   output
  10.      xxxxx
  11.     xxxxxxx
  12. }
復(fù)制代碼
會以每秒超過5萬的速率發(fā)送到一個處理程序,處理程序需要做的是在一分鐘內(nèi)江將所有這些node按照

  1. u_int32_t srcaddr
  2.      u_int16_t srcport;
  3.      u_int32_t dstaddr;
  4.      u_int16_t dstport;
  5.      u_int8_t   proto;
  6.      u_int8_t   input;
  7.      u_int8_t   output
復(fù)制代碼
這7元組進(jìn)行合并,大概估算下,每分鐘有300萬個數(shù)據(jù)單元。
我起初的做法是開一個哈希表,哈希key值生成算法為

  1.   (srcaddr|dstaddr|srcport|dstport)%HASH_TABLE_SIZE;
復(fù)制代碼
但是發(fā)現(xiàn)不能完全處理,要完全處理300萬個節(jié)點,大概需要快300秒時間(包括合并完成后遍歷哈希表寫入數(shù)據(jù)到內(nèi)存),也就是快5分鐘。
后來打印了詳細(xì)信息,發(fā)現(xiàn)哈希表有些節(jié)點的沖突鏈長度為600以上,一分鐘查找次數(shù)達(dá)到二十幾萬?隙ㄊ沁@些節(jié)點的查找合并影響到性能了。
不知道有什么好的方法完成這類節(jié)點的合并,而且高效,盡量在一分鐘之內(nèi)完成。謝謝!
########################
11月13日,解決了,見23樓,請指出可能問題和看法。謝謝

論壇徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辭舊歲徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
2 [報告]
發(fā)表于 2010-11-10 14:44 |只看該作者
回復(fù) 1# duanjigang


    你的hash size有多大?
是不是因為hash沖突太多造成的性能損失問題?

論壇徽章:
0
3 [報告]
發(fā)表于 2010-11-10 14:53 |只看該作者
回復(fù)  duanjigang


    你的hash size有多大?
是不是因為hash沖突太多造成的性能損失問題?
dreamice 發(fā)表于 2010-11-10 14:44



    一開始設(shè)置2K,后來改成上萬了,也不怎么湊效。
哈希表過長的話,數(shù)據(jù)匯報時性能也會影響吧?

論壇徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辭舊歲徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
4 [報告]
發(fā)表于 2010-11-10 14:56 |只看該作者
一開始設(shè)置2K,后來改成上萬了,也不怎么湊效。
哈希表過長的話,數(shù)據(jù)匯報時性能也會影響吧?
duanjigang 發(fā)表于 2010-11-10 14:53



    那你這個問題,明顯是hash的問題了

論壇徽章:
0
5 [報告]
發(fā)表于 2010-11-10 14:58 |只看該作者
那你這個問題,明顯是hash的問題了
dreamice 發(fā)表于 2010-11-10 14:56



    是啊,哈希算法不知道哪個更好了,就是想求助一個更好的哈希算法

論壇徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辭舊歲徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
6 [報告]
發(fā)表于 2010-11-10 14:58 |只看該作者
本帖最后由 dreamice 于 2010-11-10 15:26 編輯

你看看現(xiàn)在linux里面,路由,nf_conntrack,都用了這個hash算法:
  1. static inline u32 jhash_3words(u32 a, u32 b, u32 c, u32 initval)
  2. {
  3.         a += JHASH_GOLDEN_RATIO;
  4.         b += JHASH_GOLDEN_RATIO;
  5.         c += initval;

  6.         __jhash_mix(a, b, c);

  7.         return c;
  8. }


  9. #define __jhash_mix(a, b, c) \
  10. { \
  11.   a -= b; a -= c; a ^= (c>>13); \
  12.   b -= c; b -= a; b ^= (a<<8); \
  13.   c -= a; c -= b; c ^= (b>>13); \
  14.   a -= b; a -= c; a ^= (c>>12);  \
  15.   b -= c; b -= a; b ^= (a<<16); \
  16.   c -= a; c -= b; c ^= (b>>5); \
  17.   a -= b; a -= c; a ^= (c>>3);  \
  18.   b -= c; b -= a; b ^= (a<<10); \
  19.   c -= a; c -= b; c ^= (b>>15); \
  20. }
復(fù)制代碼
解決hash沖突問題,可以極大的提高性能。

評分

參與人數(shù) 1可用積分 +15 收起 理由
duanjigang + 15 謝謝指導(dǎo)

查看全部評分

論壇徽章:
0
7 [報告]
發(fā)表于 2010-11-10 15:12 |只看該作者
你看看現(xiàn)在linux里面,路由,nf_conntrack,都用了這個hash算法:
static inline u32 jhash_3words(u32 a, ...
dreamice 發(fā)表于 2010-11-10 14:58



    好,多謝高手!我去試試

論壇徽章:
0
8 [報告]
發(fā)表于 2010-11-10 17:50 |只看該作者
感謝江總,雖然沒用到那個算法,但是卻從中得到了啟發(fā)。
首先去掉很影響性能的 %操作符號。
其次把

  1. u_int32_t key = (srcaddr | dstaddr | srcport | dstport)%HASH_SIZE;
復(fù)制代碼
改成

  1. u_int16_t key = (srcaddr | dstaddr | (srcport << 16 | dstport));
復(fù)制代碼
效率無比瘋狂啊。
從原來的200多秒降低到20秒以內(nèi)了。13-19秒。
呵呵,謝謝!

論壇徽章:
0
9 [報告]
發(fā)表于 2010-11-10 17:53 |只看該作者
標(biāo)注下,多多討論,只要處理時間在一分鐘內(nèi),都很好!

論壇徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辭舊歲徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
10 [報告]
發(fā)表于 2010-11-10 17:53 |只看該作者
感謝江總,雖然沒用到那個算法,但是卻從中得到了啟發(fā)。
首先去掉很影響性能的 %操作符號。
其次把改成效 ...
duanjigang 發(fā)表于 2010-11-10 17:50



    你這個要多測試一下,有可能IP地址和端口分布不一樣,hash沖突不一樣,最終的效果就不一樣了。
用移位取代%操作,肯定能提高效率,但如果能更好的解決hash沖突問題,效率可以再上一個檔次。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP