Linuxのプロファイル
# Linuxはperfやftrace等、プロファイルやトレースを採取するツールが揃っています。ソフトウェアでの実装なので手軽に試せる反面、測定のオーバーヘッドが発生します。今回紹介するTRACE32を使ったプロファイルやトレースはArmコアの機能を使って本番に近い環境で実施することができるので、精度の高い情報を得ることができます。
まずは、今回使用するベンチマーク プログラムのrt-testsのダウンロードとコンパイルを行います。 # ソースのダウンロード $ git clone http://git.kernel.org/pub/scm/linux/kernel/git/clrkwllms/rt-tests.git # 環境変数の設定 $ . /opt/poky/2.1.1/environment-setup-cortexa8hf-neon-poky-linux-gnueabi # コンパイル $ cd rt-tests $ make # 今回使用するhackbenchをSDカードへコピー $ cp hackbench SDカードのrootfsパーティションのマウントポイント/適当なディレクトリー
JTAGのプロファイラ―
TRACE32を使ってプロファイルを採ることができます。JTAG通信のPCレジスタの値をサンプリングするのでオーバーヘッドなく高い精度のプロファイルを生成できます。
ビデオで紹介したコマンドは、こちらです。 メニューのパフォーマンス -> パフォーマンス測定設定 Armのラジオボタンをクリックすると測定を開始します。 下記のコマンドでコア毎にプロファイル結果が確認できます。 B:: perf.list /core 0 B:: perf.list /core 1
Embedded Trace FIFO (ETF)
Embedded Trace FIFO (ETF) は、SoC内のメモリにトレース データを保存します。容量は少ない(Cyclone V SoCは32KB)ですが、ボード上にEmbedded Trace Macrocell (ETM)の配線が不要でJTAGのみでオーバーヘッドのないトレースが取得できます。
ETFの設定 aps_etf.cmm Onchip.DISable Onchip.TraceCONNECT ETF1 Trace.METHOD Onchip Onchip.Init Onchip
Embedded Trace Router (ETR)
Embedded Trace Router (ETR)は、ボード上のDDRにトレース データを保存します。DDRのアクセスが発生するのでバス上にオーバーヘッドが発生しますが、ETMの配線が不要でJTAGのみで大容量のトレースが可能です。トレース データを保存する領域は、カーネル側とデバッガ側の両方の設定が必要です。今回は、DDRがマップされているアドレス0x0~0x3FFF_FFFFの最後の4MBをトレース データ用の領域として設定します。
カーネル側の設定: arch/arm/boot/dts/socfpga_cyclone5_socdk.dts memory { name = "memory"; device_type = "memory"; reg = <0x0 0x40000000>; /* 1GB */ }; ↓ ↓ ↓ ↓ memory { name = "memory"; device_type = "memory"; reg = <0x0 0x3fc00000>; /* 1GB - 4MB for ETR */ };
# dtbのコンパイル $ make dtbs # dtbのコピー $ cp arch/arm/boot/dts/socfpga_cyclone5_socdk.dtb SDカードのFATパーティションのマウントポイント
t32/demo/arm/etc/embedded_trace_router/etr_utility.cmm を実行すると、下記のダイアログが表示されます。
AXIBaseに0x3fc00000
Sizeに0x400000
を指定して、Set & Initボタンを押してください。
トレース設定画面が自動的に表示されます。
ETFと同様のトレースが大容量で取得できます。
メニューのトレース -> トレースデータの保存でトレースデータがPCに保存でき、トレースデータの読込みで保存したデータを読込むことができます。
大容量のトレースデータは後から解析したい内容が出てくることがあったり、画像ファイルにすることも出来るので、レビューのエビデンスとしても活用できます。
アルテラ社製 Cyclone V SoC搭載ボード
アルテラ SoCは、プロセッサ、ペリフェラル、およびメモリ・インタフェースで構成される Armベースのハード・プロセッサ・システム (HPS) と、カスタマイズ可能なFPGA ファブリックを広帯域幅インタコネクタ・バックボーンで統合した製品です。ハードIPには、PCI Express Gen2やマルチメモリポート、ECC、メモリ保護、高速シリアルトランシーバを搭載し、性能および消費電力の低減とプログラマブル・ロジックの柔軟性という特長を兼ね備えました。これまでCPUとFPGAで構成されたシステムボードサイズを大幅に削減することができます。今回の講座では、テラシック社製「DE0-Nano-SoC Kit/Atlas-SoC Kit」を使用します。
日本アルテラ株式会社
ローターバッハ社製 TRACE32
世界中で最も使われているハードウェアアシストデバッガTRACE32。ArmだけでなくNios IIはもちろん、70以上のプロセッサアーキテクチャをサポートしているのが、TRACE32。SMPシステムのマルチコア対応では、複数のコアを同時に制御し、参照コアを切り替えながらシームレスにデバッグを進めることができます。また、Linux等のSMP対応OSのデバッグをサポートする「OS認識機能」が標準装備されていることも特徴です。これにより、デバッグ対象のタスクが何れのコアに割り当てられているかを気にすることなく、ユーザ空間で動作しているプログラムのデバッグをスムーズに進めることができます。
日本ローターバッハ株式会社
組み込みLinux導入/開発支援サービス
組込みLinuxによりお客様の装置開発に新たな価値を提供します。
富士通コンピュータテクノロジーズ
こちらも是非
“もっと見る” 組み込みLinux|Cyclone編
Cyclone V SoCをLinuxでコンフィグしてみよう!
Cyclone V SoCの最大の特徴であるFPGAは、Linux動作中に動的にコンフィグレーションすることができます。カーネルのコンフィグとビルドをして、FPGAのコンフィグレーションをしてみましょう!
Linuxカーネルのコンフィグレーションを変えてみよう!
Cyclone V SoCのカーネルは、すぐにPreempt RTが利用できるようになっているので、動かしてみましょう!まずは、カーネルのコンフィグレーションとビルドを行います。Linuxカーネル ソースをPreempt RTのブランチに切り替えて、コンフィグレーションを有効にして、再ビルドします。
Linuxカーネルをコンパイルしてみよう!
linuxカーネルをコンパイルして、デバッグする方法を紹介します。Linuxカーネルは、必要な機能を選択するコンフィグを行ってから、コンパイルします。カーネル本体はzImage、カーネルが読み込むボード毎の設定がdtbです。