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

  免費注冊 查看新帖 |

Chinaunix

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

[內核入門] per cpu [復制鏈接]

論壇徽章:
2
寅虎
日期:2014-11-25 21:47:342015小元宵徽章
日期:2015-03-06 15:58:18
跳轉到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2015-03-30 21:18 |只看該作者 |倒序瀏覽
本帖最后由 鎮(zhèn)水鐵牛 于 2015-04-01 20:02 編輯

per cpu的實現(xiàn)類似數(shù)組+禁止搶占,如果原cpu id為1的線程現(xiàn)在被遷移到cpu id為2上,假設沒有要訪問per cpu數(shù)據(jù)的線程,會去運行在cpu 1上,
1. 那豈不是其原cpu id為1的數(shù)據(jù)就無法被訪問了?
2. 還有它只是禁止搶占,沒有禁止本地中斷,如果豈不是中斷中不能訪問per cpu了?

論壇徽章:
20
程序設計版塊每日發(fā)帖之星
日期:2015-08-17 06:20:00程序設計版塊每日發(fā)帖之星
日期:2016-07-16 06:20:00程序設計版塊每日發(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程序設計版塊每日發(fā)帖之星
日期:2016-07-15 06:20:0015-16賽季CBA聯(lián)賽之江蘇
日期:2016-07-07 18:37:512015亞冠之薩濟拖拉機
日期:2015-08-17 12:21:08
2 [報告]
發(fā)表于 2015-04-01 12:00 |只看該作者
2.中斷上下文會發(fā)生內核搶占嗎?

論壇徽章:
20
程序設計版塊每日發(fā)帖之星
日期:2015-08-17 06:20:00程序設計版塊每日發(fā)帖之星
日期:2016-07-16 06:20:00程序設計版塊每日發(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程序設計版塊每日發(fā)帖之星
日期:2016-07-15 06:20:0015-16賽季CBA聯(lián)賽之江蘇
日期:2016-07-07 18:37:512015亞冠之薩濟拖拉機
日期:2015-08-17 12:21:08
3 [報告]
發(fā)表于 2015-04-01 12:30 |只看該作者
1. “假設沒有要訪問per cpu數(shù)據(jù)的線程,會去運行在cpu 1上,”,這句話沒太理解……

=============================================

per_cpu的一個典型場景是作為counter計數(shù)。
如果不使用per_cpu,那勢必要使用全局counter+全局lock或者使用atomic_add,smp下的性能受影響。
換成per_cpu,每個cpu只更新自己的counter就可以了,并且per_cpu變量的內存布局,盡量保證不同cpu的counter不共享cacheline,這樣最大程度的保證性能。

關于為什么要disable搶占,我的理解是,由于更新操作不是原子的,要避免這個r-m-w序列分布在不同的cpu上來完成。

如果需要獲取全局counter的值,只需要把所有cpu的局部counter遍歷一下累加起來就行。
需要注意,訪問其它cpu的per_cpu counter時,其它cpu還是有可能在同時更新其local counter的,所以得到的全局counter只是一個瞬間的不嚴格的快照而已。(可以稱為“測不準”么 :p)
遍歷過程本身不需要disable搶占,通常循環(huán)變量都是stack上的局部變量,就算變量線程在多個cpu之間跳來跳去,總是能保證安全完成遍歷的!苍Shotplug cpu的場景除外。

論壇徽章:
2
寅虎
日期:2014-11-25 21:47:342015小元宵徽章
日期:2015-03-06 15:58:18
4 [報告]
發(fā)表于 2015-04-01 20:02 |只看該作者
問題1:
        /*
         * We do not migrate tasks that are:
         * 1) running (obviously), or
         * 2) cannot be migrated to this CPU due to cpus_allowed, or
         * 3) are cache-hot on their current CPU.
         */
問題2:
        如果你真要在中斷中訪問per cpu,范例如下:
                    local_irq_save(flags);
                pvec = &__get_cpu_var(lru_rotate_pvecs);
                if (!pagevec_add(pvec, page))
                        pagevec_move_tail(pvec);
                local_irq_restore(flags);

論壇徽章:
20
程序設計版塊每日發(fā)帖之星
日期:2015-08-17 06:20:00程序設計版塊每日發(fā)帖之星
日期:2016-07-16 06:20:00程序設計版塊每日發(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程序設計版塊每日發(fā)帖之星
日期:2016-07-15 06:20:0015-16賽季CBA聯(lián)賽之江蘇
日期:2016-07-07 18:37:512015亞冠之薩濟拖拉機
日期:2015-08-17 12:21:08
5 [報告]
發(fā)表于 2015-04-02 10:36 |只看該作者
2. 可以看一下 Document/local_ops.txt

- Preemption (or interrupts) must be disabled when using local ops in
  process context to   make sure the process won't be migrated to a
  different CPU between getting the per-cpu variable and doing the
  actual local op.
- When using local ops [in interrupt context], no special care must be
  taken on a mainline kernel, since they will run on the local CPU [with
  preemption already disabled]
. I suggest, however, to explicitly
  disable preemption anyway to make sure it will still work correctly on
  -rt kernels.

您舉的這個例子,入口/出口用到了irq_save/irq_restore,說明這段代碼即可被用在interrupt context,也可用在process context。
如果僅用在interrupt context,就沒有必要save和restore了。

不過也許您討論的上下文是-rt內核,那上面那段話就不成立了。

回復 4# 鎮(zhèn)水鐵牛


   

論壇徽章:
2
寅虎
日期:2014-11-25 21:47:342015小元宵徽章
日期:2015-03-06 15:58:18
6 [報告]
發(fā)表于 2015-04-02 20:30 |只看該作者
回復 5# nswcfd
我把2.6初期的內核和最新的內核對比著看,是有很大差異。

   
您需要登錄后才可以回帖 登錄 | 注冊

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

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP