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

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

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問(wèn)板塊 發(fā)新帖
查看: 1866 | 回復(fù): 6
打印 上一主題 下一主題

[網(wǎng)絡(luò)子系統(tǒng)] 誰(shuí)能解釋下內(nèi)核級(jí)并行? [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2014-03-06 16:39 |只看該作者 |倒序?yàn)g覽
我們知道,內(nèi)核可以看做一個(gè)大進(jìn)程(別問(wèn)我怎么知道的,說(shuō)不清。)
但是并行依然存在,只是不知道這時(shí)候并行的是“線程級(jí)”還是“進(jìn)程級(jí)”。

最近在處理TCP邏輯時(shí),發(fā)現(xiàn)需要弄清楚并行這個(gè)問(wèn)題。
TCP代碼有全局變量,比如sysctl對(duì)應(yīng)的變量,也有局部變量,就是結(jié)構(gòu)體了,最常見(jiàn)的形式為tp->snd_cwnd;這樣的。
全局變量訪問(wèn)需要加鎖,這很好理解,因?yàn)橛卸鄠(gè)tcp_sock結(jié)構(gòu)體可能同時(shí)訪問(wèn)同一個(gè)全局變量。
局部變量少見(jiàn)加鎖,但仍然存在并行,比如接收端連續(xù)收到一批數(shù)據(jù)包,當(dāng)給有的數(shù)據(jù)包回復(fù)ACK時(shí),有些數(shù)據(jù)包卻同時(shí)在向上層提交,這個(gè)過(guò)程應(yīng)該是并行的,否則太慢。我在實(shí)際代碼不同位置打印的接受隊(duì)列也證實(shí)了這一點(diǎn),發(fā)送ACK時(shí)打印的接受隊(duì)列和接收緩存調(diào)節(jié)時(shí)打印的接受隊(duì)列完全不同。

誰(shuí)能解釋下,上面的提到的并行,在內(nèi)核中是如何管理的?對(duì)于同一個(gè)tcp流,也就是同一個(gè)tcp_sock結(jié)構(gòu)體,也仍然存在并行,卻少有加鎖,這如何實(shí)現(xiàn)?

論壇徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辭舊歲徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亞洲杯之卡塔爾
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08處女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技術(shù)圖書(shū)徽章
日期:2014-03-25 09:00:29
2 [報(bào)告]
發(fā)表于 2014-03-06 17:27 |只看該作者
能否舉個(gè)局部變量加鎖的例子?呵呵
好像沒(méi)見(jiàn)過(guò)~~

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2014-03-06 17:52 |只看該作者
回復(fù) 2# humjb_1983
事實(shí)上,我也很少見(jiàn)到。所以才對(duì)并行處理有困惑。

加鎖的例子,在timer里最常見(jiàn),例如tcp_timer:
//這里加了自旋鎖
        bh_lock_sock(sk);
        if (sock_owned_by_user(sk)) {
完整代碼請(qǐng)參閱LXR tcp_timer.c static void tcp_delack_timer(unsigned long data)函數(shù)

其余的加鎖大多是“userlock”,我也沒(méi)完全弄懂這個(gè)。例如tcp_input.c tcp_rcv_space_adjust函數(shù)中:
//sk_userlocks
                if (sysctl_tcp_moderate_rcvbuf &&
                    !(sk->sk_userlocks & SOCK_RCVBUF_LOCK)) {
                        int new_clamp = space;

這里解釋一下:sock tcp_sock結(jié)構(gòu)體,對(duì)應(yīng)每條流,其中的變量也是每條流私有的。結(jié)構(gòu)體變量就是內(nèi)核維護(hù)局部變量的方式。
我對(duì)”局部變量“這個(gè)詞,上面沒(méi)有解釋清楚。我的意思是指結(jié)構(gòu)體變量。   

論壇徽章:
17
水瓶座
日期:2013-08-29 12:09:27白羊座
日期:2014-08-07 12:36:42丑牛
日期:2014-07-24 12:44:41寅虎
日期:2014-04-16 16:15:33寅虎
日期:2014-03-12 09:28:43摩羯座
日期:2014-03-06 13:22:04技術(shù)圖書(shū)徽章
日期:2014-03-06 11:34:50天蝎座
日期:2014-01-09 11:31:44寅虎
日期:2013-12-27 17:01:44雙子座
日期:2013-12-27 12:32:29雙子座
日期:2013-12-25 09:03:33丑牛
日期:2013-12-24 16:18:44
4 [報(bào)告]
發(fā)表于 2014-03-07 09:55 |只看該作者
回復(fù) 3# henrystark

雖然沒(méi)有仔細(xì)查看代碼,但是明顯定時(shí)器屬于異步事件!自然需要加鎖串行化!

也就是說(shuō),tcp_sock的訪問(wèn)不僅僅只是當(dāng)前的執(zhí)行流,還有可能出現(xiàn)定時(shí)器到期,訪問(wèn)該tcp_sock。

至于關(guān)閉了底半,定時(shí)器能不能同時(shí)在其他cpu上執(zhí)行?說(shuō)實(shí)話有點(diǎn)忘記了,只記得定時(shí)器好像是默認(rèn)在schedule的CPU上執(zhí)行,能否遷移到其他CPU請(qǐng)其他人確認(rèn)下!

論壇徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辭舊歲徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亞洲杯之卡塔爾
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08處女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技術(shù)圖書(shū)徽章
日期:2014-03-25 09:00:29
5 [報(bào)告]
發(fā)表于 2014-03-07 11:33 |只看該作者
henrystark 發(fā)表于 2014-03-06 17:52
回復(fù) 2# humjb_1983
事實(shí)上,我也很少見(jiàn)到。所以才對(duì)并行處理有困惑。

這里的sk應(yīng)該都是從slab里面分配的
sk = kmem_cache_alloc(slab, priority & ~__GFP_ZERO);
不是真正的局部變量(在棧中分配),所以并發(fā)時(shí)應(yīng)該是需要加鎖保護(hù)的~。

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2014-03-07 18:26 |只看該作者
回復(fù) 5# humjb_1983
只關(guān)注TCP層的代碼了,沒(méi)注意到sk是用高速內(nèi)存分配的。
cache高速內(nèi)存算是哪個(gè)區(qū)?
高速體現(xiàn)在哪里?好似是管理方式更好?

   

論壇徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辭舊歲徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亞洲杯之卡塔爾
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08處女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技術(shù)圖書(shū)徽章
日期:2014-03-25 09:00:29
7 [報(bào)告]
發(fā)表于 2014-03-10 09:06 |只看該作者
henrystark 發(fā)表于 2014-03-07 18:26
回復(fù) 5# humjb_1983
只關(guān)注TCP層的代碼了,沒(méi)注意到sk是用高速內(nèi)存分配的。
cache高速內(nèi)存算是哪個(gè)區(qū)?
...

內(nèi)核中就沒(méi)有什么區(qū)的概念了,物理內(nèi)存都是伙伴系統(tǒng)負(fù)載分配和管理的,對(duì)于整個(gè)內(nèi)核來(lái)說(shuō),應(yīng)該都是可見(jiàn)的。
您需要登錄后才可以回帖 登錄 | 注冊(cè)

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

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP