vxWorks系統中多核cpu的使能

2021-08-01 03:32:41 字數 2844 閱讀 7576

平台介紹:
vxworks6.7,cpu為loongson3a1000(4核)

基本過程就是首先0號cpu初始化(這段**還沒分析),之後就是0號cpu對1,2,3號cpu進行初始化。這裡主要記錄下對0號之外的cpu的初始化。

函式呼叫:

usrroot

usrsmpinit

kernelcpuenableinternal

vxcpustateinit

syscpuenable

syscpustart

godson3_cpu_start

#define cpuset_set(cpuset, n)         (cpuset |= (1 << n)) //某位置1

#define cpuset_isset(cpuset, n) (cpuset & (1 << n)) //判斷某位是否為1

#define cpuset_clr(cpuset, n) (cpuset &= ~(1 << n))//把某位置0

#define cpuset_zero(cpuset) (cpuset = 0) //清0

local void usrenablecpu (void)

else

cpuset_set (enabledcpus, cpu);

} //在指定延遲的時間下還沒有使能就列印,並迴圈執行等待使能

timeoutstart = vxabsticksget ();

dobreak;

}} while (_wrs_cpu_enabled () != enabledcpus);

//執行鉤子函式

for ( cpu = 1 ; cpu < numcpus ; cpu ++)

} }

本函式呼叫kernelcpuenableinternal對每個cpu進行使能。
status kernelcpuenableinternal 

(unsigned int cputoenable

)

這裡主要是對pcpustate結構體進行設定,這是要寫進cpu暫存器的值。其中entry是乙個函式,作用為設定cpu已經使能標誌(全域性變數vxcpuenabled),並載入idle程式。

entry:

_wrs_func_noreturn void kernelcpuentry (void)

syscpuinittable[cpunum] = (funcptr) cpustate->regs.pc;

return syscpustart(cpunum, cpustate);

}status syscpustart(int cpu, wind_cpu_state *cpustate)

其中godson3_cpu_start函式為:

#define mailbox_buf1    0x900000003ff01120  //核間暫存器,放置啟動引數

#define mailbox_buf2 0x900000003ff01220 //

#define mailbox_buf3 0x900000003ff01320 //

.globl godson3_cpu_start

.ent godson3_cpu_start

godson3_cpu_start: //a0 a1 a2 a3 a4都是引數

li t0,0x1 //t0=1

bne a0,t0,1f //如果a0!=t0,就跳轉到下面緊接著的標號1處

nop //

dli t0,mailbox_buf1 //相等就載入mailbox_buf1到t0中,並跳轉到標號2處

b 2f //

1: //

li t0,0x2 //

bne a0,t0,1f //

nop //

dli t0,mailbox_buf2 //

b 2f //

1: //

li t0,0x3 //

bne a0,t0,1f //

nop //

dli t0,mailbox_buf3 //

b 2f //

2: //

sd a1,0(t0) //把a1的值放在t0儲存的位址的偏移位址0處

sd a2,8(t0) //把a2的值放在t0儲存的位址的偏移位址8處

sd a3,0x10(t0) //把a3的值放在t0儲存的位址的偏移位址0x10處

sd a4,0x18(t0) //把a4的值放在t0儲存的位址的偏移位址0x18處

1: //

jr ra //

.end godson3_cpu_start //

#endif //

利用CPU多核處理

在mysql5.5.x後,可以利用innodb read io threads和innodb write io threads,取代之前的innodb file io threads引數,在linux平台上就可以根據cpu核數來更改相應的引數值,預設是4.比如cpu是2棵8核的,可以設定 innod...

多核CPU利用測試

一直在想程式上是否特意讓執行緒在指定的cpu上去執行,這樣可以提高執行效率,所以特地寫個 讓cpu使用率畫正弦曲線的實驗,我使用的是amd x4 641的cpu,為四核四執行緒的 如下 include stdafx.h include include include include using na...

多核cpu應用場景 CPU多核多執行緒到底有什麼用

你去電子城裝電腦檔口推銷人員都會推銷電腦時會給你說,我這電腦是多少多少核,多少多少執行緒,多大記憶體,多大視訊記憶體之類的。其中我們最關心的無非就cpu,記憶體,顯示卡視訊記憶體,其中最關心的可能就是cpu了。為什麼呢,因為其它的都是死的,只要不是假貨,那些引數都非常容易選。cpu的效能就決定了你電...