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

  免費注冊 查看新帖 |

Chinaunix

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

求幫助,如何通過sys文件系統(tǒng)保存對應(yīng)cpu的寄存器 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2012-03-24 19:05 |只看該作者 |倒序瀏覽
在項目中想實現(xiàn)這樣一種功能,通過讀寫 /sys/devices/system/cpu/cpuX/save_reg接口(自己通過sysfs create出來的),來保存對應(yīng)cpu的寄存器到一塊memory中,目前接口已經(jīng)完成了,但是有一個問題,如何保證save的是對應(yīng)cpu的?

舉個例子里說明一下:

Exmaple:
       echo 1 > /sys/devices/system/cpu/cpu1/save_reg ,想實現(xiàn)的就是cpu1會save自己的register,

因為我們不能假設(shè)這個動作就會發(fā)生在cpu1上,所以就很困惑,盼望高人幫助!!感激

論壇徽章:
1
拜羊年徽章
日期:2015-03-03 16:15:43
2 [報告]
發(fā)表于 2012-03-24 22:48 |只看該作者
回復(fù) 1# cuibixiong_cu

如果你的讀寫程序只是讀寫本地CPU, 這里就是對應(yīng)的本地cpu.
想保險的話能不能用per-cpu data area?
   

論壇徽章:
0
3 [報告]
發(fā)表于 2012-03-26 11:24 |只看該作者
沒有明白樓上的意思,我的意思是如何保證/sys/devices/system/cpu/cpu1/下對應(yīng)的就是cpu1的操作,我們不能做這種假設(shè),說對cpu1目錄下的讀寫就一定會發(fā)生在cpu1上,linux也不會做這種假設(shè)的,這違反了一般性原則,必定需要我們實現(xiàn)一種機制,來保障對cpu1目錄下文件的讀寫就發(fā)生在cpu1上。

論壇徽章:
0
4 [報告]
發(fā)表于 2012-03-26 13:10 |只看該作者
樓主對每個cpu registers的讀取采用了什么方式?換句話說你如何確定你現(xiàn)在讀取的是cpu0而不是cpu1的寄存器呢?

論壇徽章:
0
5 [報告]
發(fā)表于 2012-03-26 13:40 |只看該作者
我現(xiàn)在是這么考慮的,因為cpu_idle是每個cpu都要走的代碼,那么我可以在這個做一個判斷,判斷我自己設(shè)定的一下bitmask,比如cpu_save_reg_mask(類似于cpu_online_mask), 然后再執(zhí)行sysfs讀寫的時候只是簡單的設(shè)定一下這些mask,最后從cpu_idle進入我自己的save_reg handler,不知道這樣可不可以,這樣就可以保證讀寫的是對應(yīng)cpu的寄存器了

論壇徽章:
0
6 [報告]
發(fā)表于 2012-03-26 15:05 |只看該作者
回復(fù) 4# MagicBoy2010


Hi M兄,剛才我try了一下,我所說的通過cpu_idle來控制是可以實現(xiàn)的,告知您一聲,謝謝

評分

參與人數(shù) 1可用積分 +2 收起 理由
Godbach + 2 感謝分享

查看全部評分

論壇徽章:
0
7 [報告]
發(fā)表于 2012-03-26 19:30 |只看該作者
cuibixiong_cu 發(fā)表于 2012-03-26 15:05
回復(fù) 4# MagicBoy2010


其實我好奇的是4樓中的問題,不過沒看到你的回答。。。
在內(nèi)核中這種問題用per-CPU變量是最常規(guī)的解決方法。

論壇徽章:
0
8 [報告]
發(fā)表于 2012-03-26 20:42 |只看該作者
回復(fù) 7# MagicBoy2010


    其實per-cpu是為每個cpu分配的一段內(nèi)存空間,用來保存每個cpu的特殊內(nèi)容。其實在這里寄存器保存到哪兒不會是什么問題,無論是保存在per-cpu結(jié)構(gòu)中還是保存在另外的地方,最后我只要能引用到了就可以了。問題是我怎么保證在我執(zhí)行echo 1 > /sys/devices/sytem/cpu/cpu1/save_reg時,所要保存的就是cpu1的寄存器。這個我想才是最主要的問題。


目前所采用的解決方法就是:
1. echo 1 > /sys/devices/system/cpu/cpu1/save_reg時,只是設(shè)定的相應(yīng)的bitmask位,表明我要保存這個cpu的寄存器。
2. cpu_idle是每個cpu都要run的,所以在cpu_idle中做了一個判斷(save_regs_mask中相應(yīng)的bit位其實就是我在echo的handler中設(shè)定的)
           
           if (test_bit(cpu_mask_check(smp_processor_id()), cpu_mask_bits(save_regs_mask)))
                                       
                                      .....
                                      save_regs(smp_processor_id())
                           .....


這樣就可以保證我運行save_regs這個段程序所對應(yīng)的cpu就是我想保存寄存器的cpu了


不知道這樣可不可以回答magicboy兄的問題?


論壇徽章:
0
9 [報告]
發(fā)表于 2012-03-26 21:39 |只看該作者
其實per-cpu是為每個cpu分配的一段內(nèi)存空間,用來保存每個cpu的特殊內(nèi)容。其實在這里寄存器保存到哪兒不會是什么問題,無論是保存在per-cpu結(jié)構(gòu)中還是保存在另外的地方,最后我只要能引用到了就可以了。問題是我怎么保證在我執(zhí)行echo 1 > /sys/devices/sytem/cpu/cpu1/save_reg時,所要保存的就是cpu1的寄存器。這個我想才是最主要的問題。

===================================
我總感覺你用cpu_idle的方法并不好,因為cpu_idle只有在沒有其他進程可被調(diào)度運行時才會進入,如果從系統(tǒng)啟動到你用echo 1來讀cpu1的寄存器,cpu1上一直都有可被調(diào)度的進程,那么豈不是會有問題?沒有更好的辦法嗎?

而且你echo 1時只是做個標記,cpu寄存器中的數(shù)值一直在變化,即便之后cpu1進入到cpu_idle,它保存的是你echo 1時所希望看到的值嗎?

論壇徽章:
0
10 [報告]
發(fā)表于 2012-03-26 23:19 |只看該作者
其實也是想借論壇來看看大家有什么更好的辦法沒有,如果maigcboy兄有什么好的思路也希望不吝賜教啊,多謝多謝
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(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