Linuxをインストールして、AArch64とAArch32の性能をベンチマークしてみよう!

Xilinx Zynq UltraScale+ MPSoCの概要

Xilinx Zynq UltraScale+ MPSoCは、これまでのZynqよりPS(SoC部分)が格段にスケール アップしています。ZynqはArmv7アーキテクチャーのArm Cortex-A9 シングルまたはデュアル コアだったのに対して、MPSoCはArmv8アーキテクチャーのArm Cortex-A53 デュアルまたはクアッド コアでさらにリアルタイム処理用のArm Cortex-R5 デュアル コアやGPUも内蔵されています。

Armv8アーキテクチャーは64bit命令セット アーキテクチャー(AArch64)だけでなくArmv7と互換性のある32bit命令セット アーキテクチャー(AArch32)もサポートするので既存のソフト資産も安心して活用できます。また、ArmのSIMDアーキテクチャーであるNEONは、Armv7ではサポートされなかった64bit Integerをサポートし、AArch64では64bit Floating Pointもサポートするため、より高い処理能力があります。

MPSoCについて、もっと知りたい人はXilinxのサイトで読んでね。
All Programmable ヘテロジニアス MPSoC

PetaLinuxのツールインストール

今回は、MPSoCのArm Cortex-A53上でLinuxを動かしてみましょう!まずは、PetaLinuxのツールをインストールします。

今回使用したツールは、下記からダウンロードできます。
ツールのダウンロードはこちら

今回ダウンロードしたのは下記の2つです。※ダウンロードには、Xilinxのアカウントが必要です。

petalinux-v2017.4-final-installer.run
xilinx-zcu102-v2017.4-final.bsp

ダウンロードが完了したら、インストーラを実行します。※ ~/tools/petalinuxは、インストール パスです。任意に変更してください。

$ chmod 755 petalinux-v2017.4-final-installer.run
$ ./petalinux-v2017.4-final-installer.run ~/tools/petalinux

ホストOSに必要なパッケージがインストールされていない場合、メッセージが表示されるので、適宜インストールしてください。私の環境(Ubuntu 17.10 64bit)の場合、下記をインストールしました。

$ sudo apt install build-essential gawk xvfb chrpath socat xterm autoconf libtool gawk texinfo gcc-multilib libsdl1.2-dev libglib2.0-dev zlib1g:i386 tftpd

PetaLinuxのビルド〜SDカードからのBoot

インストールが完了したら、ビルドしてみましょう。

まずは、ツールの環境変数を設定します。
$ source ~/tools/petalinux/settings.sh

次に、プロジェクトを作成します。
$ petalinux-create -t project -s xilinx-zcu102-v2017.4-final.bsp

xilinx-zcu102-v2017.4というディレクトリーが作成されるので、移動します。
$ cd xilinx-zcu102-v2017.4

さあビルドしてみましょう!※初回のビルドは環境にもよりますが、20分程度掛かると思います。
$ petalinux-build

ビルドが完了したら、下記のコマンドでブート イメージを生成します。
$ petalinux-package --boot --fsbl images/linux/zynqmp_fsbl.elf --fpga images/linux/download.bit --pmufw images/linux/pmufw.elf --u-boot

BOOT.BINとimages/linux/image.ubをSDカードの最初のFATパーティションに格納します。
$ cp -a BOOT.BIN SDCARD_1ST_FATPARTITION
$ cp -a images/linux/image.ub SDCARD_1ST_FATPARTITION

SDカードからのBoot

SDカードをボードに挿して、いよいよブートしてみましょう!

login: root
password: root
でログインできます。

AArchで64bitと32bitの性能をベンチマークしてみる

今回使用したUnixBenchは下記から入手できます。

今回使用したツールは、下記からダウンロードできます。
ツールのダウンロードはこちら

Arm向けにコンパイルするには、MakefileのCC=gccを下記の通り変更してください。

AArch64
CC=aarch64-linux-gnu-gcc

AArch32
CC=arm-linux-gnueabihf-gcc

今回使用したDhrystone2は、pgms/dhry2です。AArch64では10秒間で約65Mループ、AArch32では約55Mループでした。AArch64の性能の高さが実感できましたね!

UnixBenchには他にも様々なベンチマークがあるので、遊んでみてください!