亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区
Chinaunix
標(biāo)題:
per-cpu變量之間是如何同步的?
[打印本頁]
作者:
tomxue0126
時(shí)間:
2016-06-02 20:34
標(biāo)題:
per-cpu變量之間是如何同步的?
我想問問,per-cpu變量之間是如何同步的?即當(dāng)cpu3更改了它本地的per-cpu變量之后,如果cpu0去讀取該變量(cpu0本地副本),它應(yīng)該讀到修改后的值吧。那么該變量是如何從cpu3本地副本更新到cpu0本地副本的?
作者:
Tinnal
時(shí)間:
2016-06-02 22:01
回復(fù)
1#
tomxue0126
為什么要更新,本來PER CPU變量就是一人CPU一個(gè)副本,互相獨(dú)立的。這是它的本意,一個(gè)核改了,如果去同步修改到其它核的副本那不就成全局變量了嗎。
訪問別人的核的副本,用per_cpu就行了。它會(huì)下接算出對應(yīng)的核的副本的地址的。
作者:
tomxue0126
時(shí)間:
2016-06-03 01:12
回復(fù)
2#
Tinnal
謝謝答復(fù)!
不過還是沒理解。
你也說每個(gè)CPU一個(gè)變量副本,既然是副本,好歹也要和原始變量保持一致吧?
如果每個(gè)CPU看到的變量副本值都不同,那這程序還能正常工作嗎?
如果不需要和原始變量保持一致,那為什么不直接用4個(gè)不同的變量?(假設(shè)是個(gè)4核處理器)
per-cpu的出現(xiàn)是為了解決加鎖的問題,但沒說不要同步啊
作者:
我愛你我的菜
時(shí)間:
2016-06-03 09:07
你的論據(jù)基礎(chǔ)就是錯(cuò)的,per-cpu字面意思就是一人一份,不用同步,自己用自己的
作者:
mordorwww
時(shí)間:
2016-06-03 10:26
tomxue0126 發(fā)表于 2016-06-03 01:12
回復(fù) 2# Tinnal
謝謝答復(fù)!
你把per-CPU的需求正好搞反了
說方案就是錯(cuò)的
作者:
Tinnal
時(shí)間:
2016-06-06 10:29
本帖最后由 Tinnal 于 2016-06-06 10:30 編輯
回復(fù)
3#
tomxue0126
回復(fù) 2# Tinnal
謝謝答復(fù)!
不過還是沒理解。
你也說每個(gè)CPU一個(gè)變量副本,既然是副本,好歹也要和原始變量保持一致吧?
不會(huì),各是各的。
如果每個(gè)CPU看到的變量副本值都不同,那這程序還能正常工作嗎?
為什么不能呢
PERCPU變量的目的就是每核一份,不共享。 如果要共享,用全局變量就行了。
C語言有局部變量的概念,每個(gè)函數(shù)都是獨(dú)立的,那程序會(huì)出問題嗎?
作者:
Tinnal
時(shí)間:
2016-06-06 10:34
如果不需要和原始變量保持一致,那為什么不直接用4個(gè)不同的變量?(假設(shè)是個(gè)4核處理器)
用4個(gè)不同的變量,不同核的代碼就不能復(fù)用了呀。
per-cpu的出現(xiàn)是為了解決加鎖的問題,但沒說不要同步啊
沒說,不代表要做。per_CPU的目的,是解決各核的數(shù)據(jù)依賴,讓和個(gè)能并行工作,互相不阻塞。
作者:
nswcfd
時(shí)間:
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);
....
作者:
tomxue0126
時(shí)間:
2016-06-06 11:26
本帖最后由 tomxue0126 于 2016-06-06 11:50 編輯
謝謝樓上各位!
我大致理解了。主要是應(yīng)用場景沒想明白,后來找到一處代碼如下,即各個(gè)CPU的中斷mask。
這個(gè)在多核處理器中肯定是各個(gè)CPU獨(dú)立標(biāo)示的,這樣就容易理解per-cpu為什么要這樣設(shè)計(jì)了。
struct irq_desc {
...
unsigned int __percpu *kstat_irqs; // @kstat_irqs: irq stats per cpu
...
struct cpumask *percpu_enabled;
復(fù)制代碼
歡迎光臨 Chinaunix (http://www.72891.cn/)
Powered by Discuz! X3.2