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

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

Chinaunix

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

[內(nèi)核入門] per-cpu變量之間是如何同步的? [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2016-06-02 20:34 |只看該作者 |倒序?yàn)g覽
我想問(wèn)問(wèn),per-cpu變量之間是如何同步的?即當(dāng)cpu3更改了它本地的per-cpu變量之后,如果cpu0去讀取該變量(cpu0本地副本),它應(yīng)該讀到修改后的值吧。那么該變量是如何從cpu3本地副本更新到cpu0本地副本的?

論壇徽章:
9
辰龍
日期:2014-08-18 20:38:42未羊
日期:2014-09-04 08:50:45丑牛
日期:2014-09-06 00:12:55寅虎
日期:2014-12-22 20:50:56摩羯座
日期:2015-01-14 22:28:15巳蛇
日期:2015-01-23 20:39:272015年辭舊歲徽章
日期:2015-03-03 16:54:1515-16賽季CBA聯(lián)賽之青島
日期:2016-03-13 23:37:1915-16賽季CBA聯(lián)賽之深圳
日期:2016-03-29 18:52:38
2 [報(bào)告]
發(fā)表于 2016-06-02 22:01 |只看該作者
回復(fù) 1# tomxue0126


為什么要更新,本來(lái)PER CPU變量就是一人CPU一個(gè)副本,互相獨(dú)立的。這是它的本意,一個(gè)核改了,如果去同步修改到其它核的副本那不就成全局變量了嗎。

訪問(wèn)別人的核的副本,用per_cpu就行了。它會(huì)下接算出對(duì)應(yīng)的核的副本的地址的。

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2016-06-03 01:12 |只看該作者
回復(fù) 2# Tinnal

謝謝答復(fù)!
不過(guò)還是沒(méi)理解。
你也說(shuō)每個(gè)CPU一個(gè)變量副本,既然是副本,好歹也要和原始變量保持一致吧?
如果每個(gè)CPU看到的變量副本值都不同,那這程序還能正常工作嗎?
如果不需要和原始變量保持一致,那為什么不直接用4個(gè)不同的變量?(假設(shè)是個(gè)4核處理器)

per-cpu的出現(xiàn)是為了解決加鎖的問(wèn)題,但沒(méi)說(shuō)不要同步啊

   

論壇徽章:
11
程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-09-09 06:20:00CU十四周年紀(jì)念徽章
日期:2016-05-16 11:11:112016科比退役紀(jì)念章
日期:2016-05-04 17:16:57程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-02-20 06:20:00程序設(shè)計(jì)版塊每周發(fā)帖之星
日期:2015-11-06 19:30:58程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-09-12 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-09-11 06:20:00每日論壇發(fā)貼之星
日期:2015-09-10 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-09-10 06:20:00每日論壇發(fā)貼之星
日期:2015-09-09 06:20:0015-16賽季CBA聯(lián)賽之四川
日期:2016-12-15 15:52:10
4 [報(bào)告]
發(fā)表于 2016-06-03 09:07 |只看該作者
你的論據(jù)基礎(chǔ)就是錯(cuò)的,per-cpu字面意思就是一人一份,不用同步,自己用自己的

論壇徽章:
9
程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-02-13 06:20:00數(shù)據(jù)庫(kù)技術(shù)版塊每日發(fā)帖之星
日期:2016-06-15 06:20:00數(shù)據(jù)庫(kù)技術(shù)版塊每日發(fā)帖之星
日期:2016-06-16 06:20:00數(shù)據(jù)庫(kù)技術(shù)版塊每日發(fā)帖之星
日期:2016-06-18 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-06-27 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-07-09 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-07-15 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-07-27 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-08-18 06:20:00
5 [報(bào)告]
發(fā)表于 2016-06-03 10:26 |只看該作者
tomxue0126 發(fā)表于 2016-06-03 01:12
回復(fù) 2# Tinnal

謝謝答復(fù)!


你把per-CPU的需求正好搞反了
說(shuō)方案就是錯(cuò)的

論壇徽章:
9
辰龍
日期:2014-08-18 20:38:42未羊
日期:2014-09-04 08:50:45丑牛
日期:2014-09-06 00:12:55寅虎
日期:2014-12-22 20:50:56摩羯座
日期:2015-01-14 22:28:15巳蛇
日期:2015-01-23 20:39:272015年辭舊歲徽章
日期:2015-03-03 16:54:1515-16賽季CBA聯(lián)賽之青島
日期:2016-03-13 23:37:1915-16賽季CBA聯(lián)賽之深圳
日期:2016-03-29 18:52:38
6 [報(bào)告]
發(fā)表于 2016-06-06 10:29 |只看該作者
本帖最后由 Tinnal 于 2016-06-06 10:30 編輯

回復(fù) 3# tomxue0126


回復(fù) 2# Tinnal

謝謝答復(fù)!
不過(guò)還是沒(méi)理解。
你也說(shuō)每個(gè)CPU一個(gè)變量副本,既然是副本,好歹也要和原始變量保持一致吧?
不會(huì),各是各的。


如果每個(gè)CPU看到的變量副本值都不同,那這程序還能正常工作嗎?
為什么不能呢


PERCPU變量的目的就是每核一份,不共享。 如果要共享,用全局變量就行了。


C語(yǔ)言有局部變量的概念,每個(gè)函數(shù)都是獨(dú)立的,那程序會(huì)出問(wèn)題嗎?
   

論壇徽章:
9
辰龍
日期:2014-08-18 20:38:42未羊
日期:2014-09-04 08:50:45丑牛
日期:2014-09-06 00:12:55寅虎
日期:2014-12-22 20:50:56摩羯座
日期:2015-01-14 22:28:15巳蛇
日期:2015-01-23 20:39:272015年辭舊歲徽章
日期:2015-03-03 16:54:1515-16賽季CBA聯(lián)賽之青島
日期:2016-03-13 23:37:1915-16賽季CBA聯(lián)賽之深圳
日期:2016-03-29 18:52:38
7 [報(bào)告]
發(fā)表于 2016-06-06 10:34 |只看該作者
如果不需要和原始變量保持一致,那為什么不直接用4個(gè)不同的變量?(假設(shè)是個(gè)4核處理器)
用4個(gè)不同的變量,不同核的代碼就不能復(fù)用了呀。


per-cpu的出現(xiàn)是為了解決加鎖的問(wèn)題,但沒(méi)說(shuō)不要同步啊
沒(méi)說(shuō),不代表要做。per_CPU的目的,是解決各核的數(shù)據(jù)依賴,讓和個(gè)能并行工作,互相不阻塞。

論壇徽章:
20
程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-08-17 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-07-16 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-07-18 06:20:00每日論壇發(fā)貼之星
日期:2016-07-18 06:20:00黑曼巴
日期:2016-12-26 16:00:3215-16賽季CBA聯(lián)賽之江蘇
日期:2017-06-26 11:05:5615-16賽季CBA聯(lián)賽之上海
日期:2017-07-21 18:12:5015-16賽季CBA聯(lián)賽之青島
日期:2017-09-04 17:32:0515-16賽季CBA聯(lián)賽之吉林
日期:2018-03-26 10:02:16程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-07-15 06:20:0015-16賽季CBA聯(lián)賽之江蘇
日期:2016-07-07 18:37:512015亞冠之薩濟(jì)拖拉機(jī)
日期:2015-08-17 12:21:08
8 [報(bào)告]
發(fā)表于 2016-06-06 10:40 |只看該作者
>> 如果不需要和原始變量保持一致,那為什么不直接用4個(gè)不同的變量?(假設(shè)是個(gè)4核處理器)

可以用4個(gè)不同的變量,per_cpu的一種“樸素”實(shí)現(xiàn)是全局?jǐn)?shù)組,每個(gè)core使用不同的下標(biāo)/索引。

但如果是4個(gè)不同名字的變量的話,想象一下代碼會(huì)寫成什么樣子?
if (core == 0) use_var(var_0);
else if (core == 1) use_var(var_1);
....

論壇徽章:
0
9 [報(bào)告]
發(fā)表于 2016-06-06 11:26 |只看該作者
本帖最后由 tomxue0126 于 2016-06-06 11:50 編輯

謝謝樓上各位!
我大致理解了。主要是應(yīng)用場(chǎng)景沒(méi)想明白,后來(lái)找到一處代碼如下,即各個(gè)CPU的中斷mask。
這個(gè)在多核處理器中肯定是各個(gè)CPU獨(dú)立標(biāo)示的,這樣就容易理解per-cpu為什么要這樣設(shè)計(jì)了。
  1. struct irq_desc {
  2.     ...
  3.     unsigned int __percpu   *kstat_irqs;   // @kstat_irqs:     irq stats per cpu
  4.     ...
  5.     struct cpumask      *percpu_enabled;
復(fù)制代碼
您需要登錄后才可以回帖 登錄 | 注冊(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