全志T153處理器ARM+RISC-V的雙核CP多有強(qiáng)?
在嵌入式設(shè)備拼性能、拼響應(yīng)、拼功耗的內(nèi)卷時(shí)代,雙核協(xié)作才是破局的關(guān)鍵
傳統(tǒng)的對稱多處理(SMP)架構(gòu)已難以兼顧全場景需求,非對稱多處理(AMP)異構(gòu)架構(gòu)正在成為行業(yè)主流
在這樣的背景下,全志T153平臺直接搬出ARM+RISC-V的"雙核CP":主打高性能計(jì)算的Cortex-A7核心運(yùn)行Linux,聚焦高實(shí)時(shí)性任務(wù)的RISC-V E907核心運(yùn)行RTOS,組成 "互補(bǔ)型搭檔"。
本文會通過飛凌嵌入式OK153-S開發(fā)板,為大家實(shí)測這對雙核CP的協(xié)作實(shí)力——依托異構(gòu)核間通訊機(jī)制(IPC)與Suspend/Resume電源管理機(jī)制,全面驗(yàn)證A核與R核的協(xié)同工作能力,并驗(yàn)證異構(gòu)多核環(huán)境下的數(shù)據(jù)交互效率與智能化喚醒邏輯。
1 休眠喚醒功能驗(yàn)證
pm_test節(jié)點(diǎn)可以用于測試Linux部分的休眠喚醒功能。設(shè)備凍結(jié)后,等待5s,即返回,執(zhí)行喚醒動作。
# 設(shè)置pm_test模式 echo devices > /sys/power/pm_test # 設(shè)備進(jìn)入休眠 echo mem > /sys/power/state # 執(zhí)行以上命令后,設(shè)備5s后會被喚醒。
2 R核喚醒休眠的A核
功耗管理是產(chǎn)品續(xù)航與成本控制的核心競爭力。T153處理器的異構(gòu)多核架構(gòu)為此提供了的解決方案:
- A核休眠:ARM核在空閑時(shí)進(jìn)入WFI深度睡眠,功耗降至最低
- R核值守:RISC-V核心持續(xù)運(yùn)行,監(jiān)聽外部事件
- 按需喚醒:當(dāng)傳感器觸發(fā)、定時(shí)任務(wù)到達(dá)時(shí),R核一鍵喚醒A核處理復(fù)雜任務(wù)
A核進(jìn)入WFI模式,R核運(yùn)行在DRAM上,R核喚醒A核
首先設(shè)置主核休眠時(shí),DRAM不進(jìn)入自刷新,從核保持運(yùn)行在DRAM上??梢酝ㄟ^linux控制臺輸入以下命令切換:
echo 0 >/sys/class/pm_msgbox/set_dram_refresh
然后A核進(jìn)入休眠狀態(tài):
echo mem > /sys/power/state
使用R核喚醒A核。我們的R核提供了cpux_resume接口來喚醒主核,在R核中執(zhí)行以下命令進(jìn)行A核喚醒:
cpux_resume
在低功耗場景下,高性能的A核休眠待機(jī),低功耗的R核持續(xù)值守。當(dāng)外部事件觸發(fā)時(shí),R核可瞬間喚醒A核響應(yīng)任務(wù)。這種"小核值班、大核待命"的架構(gòu),讓設(shè)備在續(xù)航與實(shí)時(shí)響應(yīng)之間達(dá)到平衡。
3 雙核通訊驗(yàn)證
T153處理器采用ARM Cortex-A7+RISC-V的多核異構(gòu)架構(gòu),讓系統(tǒng)兼具"大腦"與"小腦",而異構(gòu)核間通訊機(jī)制(IPC)正是連接兩個(gè)"腦"的高速通道,通過共享內(nèi)存機(jī)制,雙核之間可實(shí)現(xiàn)數(shù)據(jù)傳輸。以下是操作方法:
# 測試之前首先使能R核: echo amp_rv0.bin > /sys/class/remoteproc/remoteproc0/firmware echo start > /sys/class/remoteproc/remoteproc0/state
RISC-V端例程
代碼路徑:rtos/lichee/rtos-components/aw/rpbuf/rpbuf_demo/rpbuf_test.c
static void print_help_msg(void)
{
printf("\n");
printf("USAGE:\n");
printf(" rpbuf_test [OPTIONS]\n");
printf("OPTIONS:\n");
printf(" -h : print help message\n");
printf(" -c : create buffer\n");
printf(" -C : Send Cnt(default: 1)\n");
printf(" -d : destory buffer\n");
printf(" -s : send test messagese\n");
printf(" -l : list created buffers\n");
printf(" -a : sync transmit\n");
printf(" -I ID : specify controller ID (default: 0)\n");
printf(" -N NAME : specify buffer name (default: \"%s\")\n", RPBUF_BUFFER_NAME_DEFAULT);
printf(" -L LENGTH : specify buffer length (default: %d bytes)\n", RPBUF_BUFFER_LENGTH_DEFAULT);
printf(" -p : print performance data\n");
printf("\n");
printf("e.g.\n");
printf(" First, create a buffer (its name and length should match that of remote rpbuf buffer):\n");
printf(" rpbuf_buffer -N \"xxx\" -L LENGTH -c\n");
printf(" Then if remote sends data to it, the buffer callback will be called.\n");
printf("\n");
printf(" We can send test data to remote:\n");
printf(" rpbuf_test -d 100 -s -L 32\n");
printf("\n");
printf(" If this buffer is no longer in use, destroy it:\n");
printf(" rpbuf_test -N \"xxx\" -d\n");
printf("\n");
}
參數(shù)說明
- -c創(chuàng)建緩沖區(qū)
- -C發(fā)送次數(shù)
- -d銷毀
- -i哪個(gè)節(jié)點(diǎn)
- -a數(shù)據(jù)同步
- -N名字
- -L緩沖區(qū)大小
A核例程
static void print_help_msg(void)
{
printf("\n");
printf("USAGE:\n");
printf(" rpbuf_test [OPTIONS]\n");
printf("\n");
printf("OPTIONS:\n");
printf(" -d time : set data sending interval (default: 100 ms)\n");
printf(" -s : send test messages\n");
printf(" -c : send count (default: 10)\n");
printf(" -r : receive messages\n");
printf(" -t time : specifies the time of receive messagess, unit:ms\n");
printf(" -a : sync transmit\n");
printf(" -I ID : specify rpbuf ctrl ID (default: 0)\n");
printf(" -N NAME : specify buffer name (default: \"%s\")\n", RPBUF_BUFFER_NAME_DEFAULT);
printf(" -L LENGTH : specify buffer length (default: %d bytes)\n", RPBUF_BUFFER_LENGTH_DEFAULT);
printf(" -p : print performance data\n");
printf("\n");
printf("e.g.\n");
printf(" rpbuf_test -L 0x1000 -c 10 -s : send 10 test data, size=0x1000\n");
printf(" rpbuf_test -L 0x1000 -r : receive test data forever, size=0x1000\n");
printf(" rpbuf_test -L 0x1000 -r -t 1000 : receive test data 1 second, size=0x1000\n");
printf("\n");
}
參數(shù)說明
- -s發(fā)送
- -c發(fā)送次數(shù)
- -r阻塞接收
實(shí)驗(yàn)現(xiàn)象
以RISC-V向A核發(fā)送數(shù)據(jù)為例,緩沖區(qū)大小為511.875K,發(fā)送100次;開辟一個(gè)511.875K的緩沖區(qū),A核向RISC-V發(fā)送一百次數(shù)據(jù)。
以下命令按次序執(zhí)行:
| 執(zhí)行端 | 命令 |
|---|---|
| RISC-V端 | rpbuf_test -c -I 0 -N rpbuf_test -L 524160 -a |
| A端 | rpbuf_test -L 524160 -N rpbuf_test -r |
| RISC-V端 | rpbuf_test -N rpbuf_test -C 100 -s |
RISC-V 串口輸出
cpu0>rpbuf_test -c -I 0 -N rpbuf_test -L 524160 -a cpu0>[RPBUF_INFO][rpbuf_addr_remap_default:206]reamp pa:0x42144000 -> va:0x42144000 [RPBUF_INFO][rpbuf_service_command_buffer_created_handler:827]buffer "rpbuf_test" (id:0): local_dummy_buffers -> buffers buffer "rpbuf_test" is available cpu0>rpbuf_test -N rpbuf_test -C 100 -s [0]data:21a94801873e262b487f31000da27543... [md5:fd0f42ddde63121837ebcdec775250b9]
A核串口輸出
root@OKT153:/# rpbuf_test -L 524160 -N rpbuf_test -r ping: 8099.576172ms bandwidth: 0.517149Mbps data:21a94801873e262b487f31000da27543... check:fd0f42ddde63121837ebcdec775250b9 success ping: 14.155000ms bandwidth: 186.086807Mbps data:21a94801873e262b487f31000da27543... check:fd0f42ddde63121837ebcdec775250b9 success ping: 14.721000ms bandwidth: 181.881592Mbps data:21a94801873e262b487f31000da27543... check:fd0f42ddde63121837ebcdec775250b9 success ping: 14.694000ms bandwidth: 181.992096Mbps data:21a94801873e262b487f31000da27543... check:fd0f42ddde63121837ebcdec775250b9 success ping: 14.680000ms bandwidth: 182.055313Mbps data:21a94801873e262b487f31000da27543... check:fd0f42ddde63121837ebcdec775250b9 success ping: 14.712000ms bandwidth: 181.779083Mbps data:21a94801873e262b487f31000da27543... check:fd0f42ddde63121837ebcdec775250b9 success ping: 14.690000ms bandwidth: 182.276901Mbps data:21a94801873e262b487f31000da27543... check:fd0f42ddde63121837ebcdec775250b9 success
測試數(shù)據(jù)顯示,ARM與RISC-V雙核間數(shù)據(jù)傳輸帶寬平均可達(dá) 184Mbps,驗(yàn)證了共享內(nèi)存機(jī)制的高效與穩(wěn)定。
4 結(jié)論
全志T153處理器通過 異構(gòu)多核架構(gòu)、 高效異構(gòu)核間通訊機(jī)制(IPC)以及與之配套的 智能休眠喚醒方案,可以實(shí)現(xiàn)ARM核與RISC-V核的高效協(xié)作——Linux負(fù)責(zé)復(fù)雜運(yùn)算,RTOS保障實(shí)時(shí)響應(yīng),同時(shí)將 "高性能計(jì)算"、 "硬實(shí)時(shí)控制"與 "超低功耗待機(jī)"這三大關(guān)鍵能力融為一體,滿足工業(yè)控制等場景需求。
這遠(yuǎn)不止是技術(shù)功能的實(shí)現(xiàn),更是為下一代智能硬件提供了 一個(gè)量產(chǎn)化、功能完整、性能可靠的芯片級解決方案平臺。
咨詢立即獲得專屬報(bào)價(jià)
華北區(qū)負(fù)責(zé)人
華東區(qū)負(fù)責(zé)人
華南區(qū)負(fù)責(zé)人
中西區(qū)負(fù)責(zé)人

