公開日:2025/12/03
組込み用途向けのCPU(マイコン)は、長らく1チップ1コアのシングルコア構成が主流でしたが、アプリケーションの高度化に伴い、2コアや4コアを内蔵したマルチコアCPUも一般的になりました。
通常、マルチコアCPUで動作するLinuxシステムは、特定のコアに負荷が集中しないよう全てのコアをバランスよく(負荷分散して)使用します。しかし、この方式ではシステム全体の負荷状況によりアプリケーションの処理速度が変動するため、リアルタイム性が求められる用途では課題となる場合があります。
そこで有効なのが、Linuxによる使用コアの割り当て制御です。特定のコアをリアルタイム性が必要なアプリケーションに専有させることで、パフォーマンスを安定させることが可能になります。
本コラムでは、ルネサス エレクトロニクス社製の最新プロセッサRZ/V2Hを搭載した「AP-RZV2-0A」を使用し、マルチコアの制御方法について解説します。
1. 概要
(1) AP-RZV2-0Aの概要
「AP-RZV2-0A」に搭載されている「RZ/V2H」は、80TOPSの高いAI性能を誇る、ビジョンAI向けの高性能プロセッサです。その内部は、Arm Cortex-A55(4コア)に加え、Cortex-R8(2コア)、Cortex-M33(1コア)、合計7つのコアを持つ構成となっています。
<AP-RZV2-0Aの特長>
- ルネサス エレクトロニクス社「RZ/V2H」搭載
- - ARM Cortex-A55 ×4コア
- 最大1.8GHz
- - ARM Cortex-R8 ×2コア
- 最大800MHz
- - ARM Cortex-M33 ×1コア
- 最大200MHz
- - AIアクセラレータ内蔵
- 大容量メモリを搭載
- LPDDR4 SDRAM 8GByte
- QSPI Flash 4MByte、eMMC 8GByte - MIPIインタフェース採用
- MIPI DSI
- MIPI CSI-2 ×4ポート - 拡張性の高いインタフェース
microSDカードスロット、10/100/1000base-T Ethernet、USB2.0 Host/Function、CAN、Pmod、CAN I/Fなど - 対応OS
Linux
(2) マルチコアで動くLinux
RZ/V2Hは、複数のCPUコアを内蔵していますが、Linuxシステムが主に使用するのはメインとなる4つの「Cortex-A55」コアです。
Linuxでは、ユーザーアプリケーションを実行していない状態であっても、バックグラウンドでは常に様々な処理が動いています。タスクスケジューリングやネットワーク等の各種サービス、デーモンなどがその代表です。Linuxシステムは、これらの処理をどのコアで実行するかを自動的に判断し、特定のコアに負荷が集中しないよう適切に分散させる仕組みになっています。

この仕組みにより、Linuxは特定のコアへの負荷集中を避け、システム全体の負荷をバランスよく保っています。
しかしその一方で、イベント通知があっても即座に処理を開始できず、一時的な待ち(遅延)が発生してしまうことがあります。 このわずかな遅延が、動画や音声の信号処理など、高い即応性が求められるアプリケーションにとっては致命的となり、要求される性能を満たせなくなる場合があります。

このような状況を回避するためには、Linuxシステムが使用するコアをあらかじめ制限しておく方法が有効です。 特定のアプリケーションにコアを専有させることで、処理の応答性を高めることが可能になります。


2. Linuxのビルドと動作確認
コア制御の確認のため、以下のパッケージを追加でインストールしたイメージを作成します。
- stress-ng...負荷試験用のパッケージです。
- htop..........CPUの負荷状況をグラフィカルに表示するためのパッケージです。
パッケージの追加は yocto の local.conf ファイルを編集し再度 bitbake を行うことで実施されます。
「AP-RZV2-0A」、PC、電源、起動用ファイルを書き込んだSDカードを用意し、以下のように接続を行いeMMCブートモードで起動します。

「stress-ng」は以下のように使用します。
#stress-ng -–io 8 &
「stress-ng」を実行した状態で「htop」を実行すると、以下のように表示されます。
#htop

Core1∼4に平均的に負荷が掛かっているのが確認できます。
- 1)システムで使用するコアの制限方法
Linuxシステムで使用するCPUを制限するには、u-boot にisolcpusパラメータを追加する必要があります。
再度「AP-RZV2-0A」をeMMCブートモードで起動します。
起動後u-boot のプロンプトを有効にし、bootargs にパラメータを追加します。「AP-RZV2-0A」では以下のようにパラメータを設定します。=>setenv prodsdbootargs 'setenv bootargs rw rootwait earlycon root=/dev/mmcblk1p2 isolcpus=3'isolcpus=3は、RZ/V2Hのコア4をLinuxシステムで使用させないためのオプションとなります(コアの指定は0オリジンとなります)。パラメータの設定後、Linuxを起動し「stress-ng」「htop」を起動すると以下のような表示になります。

コア1∼3に負荷が集中し、コア4がフリーとなっているのが分かります。
- 2)アプリケーションの実行コアを指定する方法
今回は、「taskset」を使用して実行コアを指定する方法を紹介します。
「stress-ng」が動作していない状態で以下のコマンドを実行し、「stress-ng」をコア4のみで動作させてみます。コア指定(-c 3)は0オリジンのため、3を設定することでコア4の指定となります。
#taskset -c 3 stress-ng –io 8 &「htop」で確認すると、今度はコア1∼3の負荷はそのままで、「taskset」で指定したコア4の負荷が増加していることが分かります。

このように「taskset」コマンドを使用することで、アプリケーションを実行するコアを任意に指定することが可能です。
3. 使用例
Linuxシステムは、ベアメタル(OSなし)の環境とは異なり、同時に多様な機能を実行します。音声信号処理や画像認識などには高いリアルタイム性が求められますが、Ethernet通信やファイルアクセスなどの負荷が突発的に増大した場合、処理が追いつかずデータの取りこぼしが発生してしまうリスクがあります。
そこで役立つのが、本コラムで紹介する「isolcpus」の設定と「taskset」コマンドです。これらを組み合わせることによりCPUリソースをより効率的に配分し、安定したパフォーマンスを実現できます。

具体的に、どのようなシーンでマルチコア制御が効果を発揮するのか、主な例を挙げてみましょう。
- 動画処理・画像認識
カメラ映像の処理用に専用のコアを割り当て、ネットワーク通信や画面描画(結果の表示)といった他の処理から切り離します。 これにより画像処理の応答性が高まり、より大きな画像サイズの扱いや、動画のフレームレート(FPS)の向上が期待できます。 - 音声処理
信号処理を他のタスクから明確に切り分けることで、処理落ちによる音声の途切れ(ノイズ)や遅延の発生を防ぎます。 また、応答性が安定することでサンプリングレートを上げることができます。そのため、遅延の少ない、より高品質な音声伝達が可能になります。
4. まとめ
本コラムでは、マルチコアCPUの環境下でリアルタイム性を確保するために、アプリケーションに特定のコアを専有させる手法について解説しました。
なお、今回の手法は、マイクロ秒単位の厳密な応答速度が求められる用途には不向きですが、通信や画面表示などミリ秒オーダーでの応答性が重視されるアプリケーションには非常に効果的です。
「AP-RZV2-0A」をご使用いただければ、ご紹介した手順にてCPUコア制御の効果を手軽に体験することが可能です。ご興味を持たれた方は、別コラムVol.26「最新の高性能AI MPU を体験してみよう」も公開しておりますので、ご検討いただきぜひご活用ください。
製品のご案内
本コラム以外にも開発にお役立ていただける技術情報をアプリケーションノートとして公開しております。
ご興味のある方は、ぜひ製品をご利用ください。
- ※ArmおよびCortexは、米国および/またはその他の地域におけるArm Limited(またはその子会社)の登録商標です。
- ※記載されている会社名、製品名は、各社の商標または登録商標です。
- ※記載の内容は改良のため、予告なく変更する場合がございます。