From 3790f7bb070078da4b101ad8d33a176c9096e3ba Mon Sep 17 00:00:00 2001 From: Paul Vaduva Date: Thu, 25 Aug 2016 13:18:22 +0200 Subject: ARM64: Add support for aarch64 architecture Added support for arm64 architecture so that yardstick framework can be ran on arm-pod1 the armband CI pod. The modifications include testing for presence of arm64 architecture nodes in the pod and running arm64 specific code (building yardstick server image on arm64 version of ubuntu cloud. Openstack doesn't boot 3.13 kernel(arm64) so it was replaced with 3.19 kernel(also arm64), available for vivid cloud image of ubuntu. The Dockerfile for building the ci image was also mofied to add necessary tools for cross-building an arm64 image on amd64 host (the jumpserver) The jira case for this commit is ARMBAND-40. Change-Id: I906d4adbcf2ec2c0f1d695d9916ede42f4151080 Signed-off-by: Paul Vaduva --- tools/ubuntu-server-cloudimg-modify.sh | 50 +++++++++++++++++++++++++++++----- tools/yardstick-img-modify | 47 ++++++++++++++++++++++++++------ 2 files changed, 82 insertions(+), 15 deletions(-) (limited to 'tools') diff --git a/tools/ubuntu-server-cloudimg-modify.sh b/tools/ubuntu-server-cloudimg-modify.sh index 2e8399a9b..3ef060847 100755 --- a/tools/ubuntu-server-cloudimg-modify.sh +++ b/tools/ubuntu-server-cloudimg-modify.sh @@ -24,9 +24,13 @@ if [ $# -eq 1 ]; then fi # iperf3 only available for trusty in backports -grep trusty /etc/apt/sources.list && \ - echo "deb http://archive.ubuntu.com/ubuntu/ trusty-backports main restricted universe multiverse" >> /etc/apt/sources.list - +if [grep -q trusty /etc/apt/sources.list ]; then + if [ $YARD_IMG_ARCH = "arm64" ]; then + echo "deb [arch=arm64] http://ports.ubuntu.com/ trusty-backports main restricted universe multiverse" >> /etc/apt/sources.list + else + echo "deb http://archive.ubuntu.com/ubuntu/ trusty-backports main restricted universe multiverse" >> /etc/apt/sources.list + fi +fi # Workaround for building on CentOS (apt-get is not working with http sources) # sed -i 's/http/ftp/' /etc/apt/sources.list @@ -41,8 +45,18 @@ password: RANDOM chpasswd: { expire: False } ssh_pwauth: True EOF - apt-get update +if [ $YARD_IMG_ARCH = "arm64" ]; then +apt-get install -y \ + linux-headers-$(echo $VIVID_KERNEL_VERSION | cut -d'-' -f3,4,5) \ + unzip +#resize root parition (/dev/vdb1) It is supposed to be default but the image is booted differently for arm64 +cat </etc/cloud/cloud.cfg.d/15_growpart.cfg +#cloud-config +bootcmd: + - [growpart, /dev/vdb, 1] +EOF +fi apt-get install -y \ fio \ git \ @@ -59,15 +73,37 @@ apt-get install -y \ stress \ sysstat -git clone https://github.com/kdlucas/byte-unixbench.git /opt/tempT +if [ $YARD_IMG_ARCH = "arm64" ]; then + wget https://github.com/kdlucas/byte-unixbench/archive/master.zip + unzip master.zip && rm master.zip + mkdir /opt/tempT + mv byte-unixbench-master/UnixBench /opt/tempT + sed -i -e 's/OPTON += -march=native -mtune=native/OPTON += -march=armv8-a -mtune=generic/g' \ + -e 's/OPTON += -march=native/OPTON += -march=armv8-a/g' /opt/tempT/UnixBench/Makefile +else + git clone https://github.com/kdlucas/byte-unixbench.git /opt/tempT +fi make --directory /opt/tempT/UnixBench/ -git clone https://github.com/beefyamoeba5/ramspeed.git /opt/tempT/RAMspeed +if [ $YARD_IMG_ARCH = "arm64" ]; then + wget https://github.com/beefyamoeba5/ramspeed/archive/master.zip + unzip master.zip && rm master.zip + mkdir /opt/tempT/RAMspeed + mv ramspeed-master/* /opt/tempT/RAMspeed/ +else + git clone https://github.com/beefyamoeba5/ramspeed.git /opt/tempT/RAMspeed +fi cd /opt/tempT/RAMspeed/ramspeed-2.6.0 mkdir temp bash build.sh -git clone https://github.com/beefyamoeba5/cachestat.git /opt/tempT/Cachestat +if [ $YARD_IMG_ARCH = "arm64" ]; then + wget https://github.com/beefyamoeba5/cachestat/archive/master.zip + unzip master.zip && rm master.zip + mv cachestat-master/cachestat /opt/tempT +else + git clone https://github.com/beefyamoeba5/cachestat.git /opt/tempT/Cachestat +fi # restore symlink ln -sf /run/resolvconf/resolv.conf /etc/resolv.conf diff --git a/tools/yardstick-img-modify b/tools/yardstick-img-modify index 13d4360d9..b9ecbddd8 100755 --- a/tools/yardstick-img-modify +++ b/tools/yardstick-img-modify @@ -38,11 +38,10 @@ test $(id -u) -eq 0 || die "should invoke using sudo" cmd=$1 test -x $cmd mountdir="/mnt/yardstick" - workspace=${WORKSPACE:-"/tmp/workspace/yardstick"} host=${HOST:-"cloud-images.ubuntu.com"} release=${RELEASE:-"trusty"} -image_path="${release}/current/${release}-server-cloudimg-amd64-disk1.img" +image_path="${release}/current/${release}-server-cloudimg-${YARD_IMG_ARCH}-disk1.img" image_url=${IMAGE_URL:-"https://${host}/${image_path}"} md5sums_path="${release}/current/MD5SUMS" md5sums_url=${MD5SUMS_URL:-"https://${host}/${md5sums_path}"} @@ -64,30 +63,61 @@ download() { wget -nc --progress=dot:giga $image_url grep $filename MD5SUMS | md5sum -c fi + + for i in $(seq 0 9); do + [ -a /dev/loop$i ] || mknod -m 660 /dev/loop$i b 7 $i + done + + if [ $YARD_IMG_ARCH = "arm64" ]; then + cd /tmp + if [ ! -f /tmp/vivid-server-cloudimg-arm64-kernel-info.txt ]; then + wget http://cloud-images.ubuntu.com/vivid/current/vivid-server-cloudimg-arm64-kernel-info.txt + fi + export VIVID_KERNEL_VERSION=$(cut -d$'\t' -f4 vivid-server-cloudimg-arm64-kernel-info.txt) + mkdir -p /tmp/vivid-modules + if [ ! -f "/tmp/vivid-server-cloudimg-arm64.tar.gz" ]; then + wget $VIVID_IMG_URL + fi + if [ ! -f "/tmp/vivid-server-cloudimg-arm64.img" ]; then + tar zxvf vivid-server-cloudimg-arm64.tar.gz vivid-server-cloudimg-arm64.img + fi + mkdir -p /mnt/vivid + mount /tmp/vivid-server-cloudimg-arm64.img /mnt/vivid + cp -r /mnt/vivid/lib/modules/$(echo $VIVID_KERNEL_VERSION | cut -d'-' -f3,4,5) /tmp/vivid-modules + umount /mnt/vivid + rm /tmp/vivid-server-cloudimg-arm64.img + cd $workspace + fi qemu-img convert $filename $raw_imgfile cd - } # mount image setup() { + # qemu-img resize $raw_imgfile +5GB + if [ $YARD_IMG_ARCH = "arm64" ]; then + echo -e "d\nn\np\n1\n\n\nw" | fdisk $raw_imgfile + fi mkdir -p $mountdir - for i in $(seq 0 9); do - [ -a /dev/loop$i ] || mknod -m 660 /dev/loop$i b 7 $i - done - loopdevice=$(kpartx -l $raw_imgfile | head -1 | cut -f1 -d ' ') kpartx -av $raw_imgfile - + if [ $YARD_IMG_ARCH = "arm64" ]; then + e2fsck -f /dev/mapper/$loopdevice + resize2fs /dev/mapper/$loopdevice + fi # for trouble shooting sleep 2 dmsetup ls fdisk -l /dev/${loopdevice:0:5} || true - mount /dev/mapper/$loopdevice $mountdir mount -t proc none $mountdir/proc + if [ $YARD_IMG_ARCH = "arm64" ]; then + cp -r /tmp/vivid-modules/$(echo $VIVID_KERNEL_VERSION | cut -d'-' -f3,4,5) "$mountdir/lib/modules" + cp $(which "qemu-aarch64-static") "$mountdir/usr/bin" + fi cp $cmd $mountdir/$(basename $cmd) } @@ -120,6 +150,7 @@ cleanup() { # designed to be idempotent mount | grep $mountdir/proc && umount $mountdir/proc mount | grep $mountdir && umount $mountdir + mount | grep "/mnt/vivid" && umount "/mnt/vivid" if [ -f $raw_imgfile ]; then kpartx -dv $raw_imgfile || true fi -- cgit 1.2.3-korg