平台介紹:
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的效能就決定了你電...