1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

QNXの性能解析ツールを試す (Raspberry Pi + WSLの環境構築を添えて)

Last updated at Posted at 2025-10-19

本記事について

  • QNXは主に自動車業界で使用されているReal Time OS (RTOS) です
  • 以前は個人で気軽に試すことは難しかったり、試せても30日間の試用しかできませんでした
  • 去年(2024)ごろから、非商用利用であれば無料で使えるライセンスが用意されました。また、Raspberry Pi 4 向けのイメージファイルも提供されるようになりました
  • 開発環境の導入までは公式ドキュメントが充実していますし、日本語での解説記事も既にいくつかあります。本記事では、(自分の備忘録的に書いた開発環境導入に加えて)、QNXから提供されている性能解析ツールの簡単な紹介を行いたいと思います

環境

  • Host PC
    • Windows 11 + WSL2 (Ubuntu 24.04)
  • Target Device
    • Raspberry Pi 4
  • Others
    • SD Card
    • SD Card reader
    • WiFi環境

参考資料

Keywords

  • QNX (Neutrino) RTOS: OSそのものの名称。2025年10月時点のバージョンは8.0
  • QNX Software Development Platform (QNX SDP): 開発者向け統合パッケージ。2025年10月時点のバージョンは8.0
  • QNX Momentics: IDE
  • QNX Software Center: QNXが提供するソフトウェア配布・管理ツール

開発環境の構築

方針

  • QNX Software CenterをホストPCにインストールし、その後Raspberry Pi用のイメージやSDPのインストールを行います
  • ホスト環境としてはWindowsとLinuxがサポートされています。私は普段Windowsを使用しているので、最初は全手順をWindows上で行いました。が、後々のことを考えるとLinux上で行った方が便利です
  • そのため、本記事ではWindows + WSL (Ubuntu 24.04) を対象に環境構築を行います。出来ることはWindows上での環境と同じで、今のところデメリットや問題点は見つかっていません。ターゲットとの通信などでもトラブったことはありません

アカウントの作成・ライセンス取得・インストーラー取得

QNX SDPのインストール

  • 基本的には参考サイトの通りです
    • https://devblog.qnx.com/using-qnx-with-wsl2/
    • 加えて、下記コマンドではRaspberry Pi 4 向けイメージのダウンロードも行っています
      • 下記コマンドだと、~/qnx/pi_image/images/qnx_sdp8.0_rpi4_quickstart_ooo.img にイメージがダウンロードされます
  • 万が一SDPやパッケージのインストールでエラーが発生した場合、以下コマンドでQNX Software Centerを起動して、GUIからインストールしてください
    ./qnx/qnxsoftwarecenter/qnxsoftwarecenter &
    
  • 以下は手順抜粋です(自分用メモ)
onUbuntu
# Install Software center
cd $HOME
cp /mnt/c/Users/<username>/Downloads/qnx-setup-<version>-linux.run .
chmod +x qnx-setup-<version>-linux.run
./qnx-setup-<version>-linux.run

# Add License key
export USER_NAME="your-qnx-user-name"
export PASSWORD="your-qnx-password"
export LICENSE_KEY="your-qnx-license-key"
  
cd $HOME
 
./qnx/qnxsoftwarecenter/qnxsoftwarecenter_clt -myqnx.user "$USER_NAME" -myqnx.password "$PASSWORD" -addLicenseKey "$LICENSE_KEY"
 
# Install SDP
./qnx/qnxsoftwarecenter/qnxsoftwarecenter_clt -myqnx.user "$USER_NAME" -myqnx.password "$PASSWORD" -cleanInstall -mirrorBaseline qnx800 -installBaseline com.qnx.qnx800 -destination ~/qnx800
 
# Install Momentics IDE
./qnx/qnxsoftwarecenter/qnxsoftwarecenter_clt -myqnx.user "$USER_NAME" -myqnx.password "$PASSWORD" -cleanInstall -installBaseline com.qnx.sdp.host.momentics.group -destination ~/qnx/qnxmomenticside

# Download a quick start target image for Raspberry Pi 4
./qnx/qnxsoftwarecenter/qnxsoftwarecenter_clt -myqnx.user "$USER_NAME" -myqnx.password "$PASSWORD" -cleanInstall -installBaseline com.qnx.qnx800.quickstart.rpi4 -destination ~/qnx/pi_image

Raspberry Pi 4向けにイメージをSDカードに書き込み、動作確認を行う

  • 基本的には参考サイトの通りです
  • SDカードへのアクセスはWSL経由だと面倒なので、WSL上の ~/qnx/pi_image/images/qnx_sdp8.0_rpi4_quickstart_20250820.img をWindows側にコピーしてから行います
  • 書き込み完了後、SDカード内のwpa_supplicant.confを編集してWiFiパスワードなどを入力しておきます
  • (必須ではないですが)、もしもHDMIを接続していたら下図のような画面が出力されます
  • sshでアクセスできることと、IPアドレスを確認しておきます
    • Windowsからsshする場合は ssh -m hmac-sha2-256 qnxuser@qnxpi.local
  • その他情報
    • 初期ユーザーとパスワード: qnxuser, qnxuser
    • rootとパスワード: root, root

WIN_20251019_19_16_58_Pro.jpg

Hello worldプログラム

  • 標準IDEであるQNX MomenticsとVSCodeの両方で環境構築します
  • コーディング、デバッグはVSCodeの方がやりやすいかと思います。が、後述のプロファイリング機能はVSCodeでは一部動かないようなので、必要に応じてMomenticsを使うという使い分けになるかと思います

QNX Momentics IDEでHello world

プロジェクトの作成

  • 以下コマンドでQNX Momenticsを起動します
    • よくあるEclipseベースのIDEのようです。初回起動したら適当にworkspaceを設定します
./qnx/qnxmomenticside/qde &
  • プロジェクトを作ります
    • Menu -> File -> New -> QNX Project -> QNX Executable
    • 適当なProject nameをつけます。(hello_momentics)
    • 以下の設定をします
      • Language: C++ (Cでもよい)
      • CPU Variant: aarch64le

実行

  • Targetを作成します
    • 適当にRunボタンをクリックします
    • New QNX Targetをクリックします
    • 先ほど調べたIPアドレスを入力してFinish

image.png

  • 再度DebugやRunボタンを実行すると、Raspberry Pi上でプログラムが実行されます

Releaseビルド

  • Host PCからではなく、完全にRaspberry Pi上で動かしたい場合は、以下でReleaseビルドしてからscpして実行します
    • Menu -> Project -> Build Configurations -> Set Active -> aarch64le-release
    • clean build
    • scp /home/iwatake/ide-8.0-workspace/hello_momentics/build/aarch64le-release/hello_momentics qnxuser@192.168.1.9:/data/home/qnxuser/.

VSCodeでHello world

準備

  • WSL上にcmakeをインストールしておきます
    • sudo apt install cmake
  • WSL側にVSCodeをインストールします
    • Windows側でVSCodeがインストール済みなら、WSL上で code と実行すればOKです
    • もしもWSLに接続されていなかったら、画面左下をクリックして Connect to WSL してください

image.png

  • 以下のexcensionをインストールします

    • ms-vscode.cpptools
    • eclipse-cdt.vscode-trace-extension
    • qnx.qnx-vscode
      • qnx.sdpPathの設定を聞かれたら、 ~/qnx800 を設定します
  • もしもsdpの場所が見つからないという旨のエラーが出ていたら、先ほどインストールしたパスをしていします。 ~/qnx800

    image.png

プロジェクトの作成

  • VSCodeを開いた状態で、ctrl + shift + p を押して、 QNX: Create new Project... を選びます
  • 適当な設定で作成します
    • プロジェクト名: hello_vscode
    • type of project template: QNX Cmake Project (他のでも良いです)
    • language: c++
    • artifact type: Executable
  • 最後に、Scan for kitsをクリックします

実行

  • F5を押して実行しようとします
  • TargetのIPアドレスを聞かれるので先ほど調べたアドレスを入力します
    • 例。 192.168.1.9
  • 先頭行で自動でブレークがかかった状態で止まるので、再度F5を押して実行します

Releaseビルド

  • Host PCからではなく、完全にRaspberry Pi上で動かしたい場合は、以下でReleaseビルドしてからscpして実行します
    • VSCode上で、ctrl + shift + p -> Tasks: Run Task -> QNX: CMake Configure (release)
    • VSCode上で、ctrl + shift + p -> Tasks: Run Task -> QNX: CMake Build
    • scp /home/iwatake/qnxprojects/hello_vscode/build/hello_vscode qnxuser@192.168.1.9:/data/home/qnxuser/.

System Profiler

サンプルアプリケーション

  • 負荷をかける適当なプログラム (heavy_work) をビルドして、Raspberry Pi上で実行しておきます
  • 10msecのsleepと重い (無駄な) 処理を交互に繰り返すだけのプログラムです
heavy_work
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <sys/neutrino.h>
#include <sys/dispatch.h>

void heavy_work(size_t size)
{
  double *array = malloc(size * sizeof(double));
  for (size_t i = 0; i < size; i++) {
    volatile double value = sin(i * 0.001) * cos(i * 0.0001);
    array[i] = value;
  }
  free(array);
}

int main()
{
  while (1) {
    printf("Run heavy_work\n");
    heavy_work(1000000);
    printf("Sleep 10 msec\n");
    usleep(10*1000);
  }

  return 0;
}

QNX Momentics IDEでSystem Profilerを使う

Kernel event trace

image.png

  • QNX Momentics IDEを開いたら、以下の操作でトレースを行います
    • QNX System Profiler Percepectiveを開く
    • Target Navigator上で作成済みのターゲットを右クリック
    • Log With -> Kernel Event Trace をクリック
    • ウィンドウが開くので、デフォルト設定のまま Log をクリック
  • デフォルト設定だと、3秒で自動的にトレースが完了します
  • その後、QNX Momentics IDE上で自動的に解析結果が表示されます

Summary

image.png

  • トレース期間中の負荷の概要が表示されます
  • 別の解析結果を見るには、画面右上の Switch to the next display type をクリックします

CPU Activity

image.png

  • 時系列で各コアの使用率が表示されます

CPU Usage

image.png

  • 各プロセスのCPU timeがコア別に表示されます

Timeline

image.png

image.png

  • 時系列で各プロセス・スレッドの挙動を確認できます。また、カーネルイベントも表示されます
  • イメージ的には、Linuxのtrace-cmdとkernelsharkのような感じです
  • (今回のサンプルプログラムでは、重い処理とsleepを交互に繰り返しています)

VSCodeでSystem Profilerを使う

Kernel event trace

image.png

  • VSCodeを開いたら、以下の操作でトレースを行います
    • サイドバーからQNXを開く
    • QNX TARGETSから先ほど作成したRaspberry Piを右クリックする
    • Capture QNX Kernel Event Trace (with tracelogger) をクリックする
  • デフォルト設定だと、3秒で自動的にトレースが完了します
  • その後、VSCode上で自動的に解析結果が表示されます

CPU Usage

image.png

  • QNX SYSTEM PROFILER -> DASHBOARDS -> CPU Usage
  • 各プロセスのCPU timeがコア別に表示されます

Timeline

image.png

  • QNX SYSTEM PROFILER -> DASHBOARDS -> Timeline
  • 時系列で各プロセス・スレッドの挙動を確認できます
  • また、カーネルイベントも表示されます

Application Profiler

  • Application profilerを使うことで、個別のアプリケーションの性能分析ができます
  • 本機能はQNX Momentics IDEでしか使えないようです(VSCodeでも出来るかもしれないですが、やり方不明)
  • 先ほど作成した適当な負荷をかけるheavy_workプログラムをQNX Momentics IDEで開いて実行できるようにしておきます

ボトルネック解析

  • Launch modeを Profile にして、 Profile ボタンをクリックします
  • 数秒後、実行停止します

image.png

  • 実行停止すると自動的に実行時間の計測結果が表示されるはずです。もしも表示されない場合はQNX Analysis perspectiveを開いてください
  • 本解析によってどこの処理で時間がかかっているかが分かります。また、その関数自体で時間がかかっているのか、呼び出し先で時間がかかっているかの区別もつきます
  • 今回の場合だと文字通りですが heavy_work 関数で時間がかかっていることが分かります

image.png

メモリ解析

  • Launch modeを Memory にして、 Memory ボタンをクリックします
  • 数秒後、実行停止します
  • 本解析によって、メモリ確保と開放がどのように行われているかが可視化されます
  • 今回の場合だと、allodとfreeが交互に行われて、取得したメモリが正しく開放されていることが分かります

image.png

その他

  • 本記事で挙げた以外にも以下のような解析機能があるようです
    • 性能のリアルタイムモニタリング
    • Valgrindを使ったメモリ解析
    • 等々
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?