Cirrus-CI: use makefs if root size exceeds QEMU's virtual FAT limit
We use QEMU's virtual FAT support to avoid having to create a disk image because it is much faster, but it has a limit of about 500MB. Artifacts produced by the GCC 12 CI job exceeded this size. Add support for creating a FAT partition image and MBR-partitioned disk image and use it when the file system is too large for QEMU. In one run the Cirrus-CI LLVM test task took 1m33s using QEMU's virtual FAT while the GCC task took 6m48s using makefs+mkimg. Reviewed by: imp Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D38589
This commit is contained in:
parent
28137bdb19
commit
7b0593fdcb
@ -21,7 +21,7 @@ die()
|
||||
tempdir_cleanup()
|
||||
{
|
||||
trap - EXIT SIGINT SIGHUP SIGTERM SIGQUIT
|
||||
rm -rf ${ROOTDIR}
|
||||
rm -rf ${WORKDIR}
|
||||
}
|
||||
|
||||
tempdir_setup()
|
||||
@ -99,18 +99,31 @@ arm64)
|
||||
esac
|
||||
|
||||
# Create a temp dir to hold the boot image.
|
||||
ROOTDIR=$(mktemp -d -t ci-qemu-test-fat-root)
|
||||
WORKDIR=$(mktemp -d -t ci-qemu-test-fat-root)
|
||||
ROOTDIR=${WORKDIR}/stage-root
|
||||
trap tempdir_cleanup EXIT SIGINT SIGHUP SIGTERM SIGQUIT
|
||||
|
||||
# Populate the boot image in a temp dir.
|
||||
( cd ${SRCTOP} && tempdir_setup )
|
||||
|
||||
# Using QEMU's virtual FAT support is much faster than creating a disk image,
|
||||
# but only supports about 500MB. Fall back to creating a disk image if the
|
||||
# staged root is too large.
|
||||
hda="fat:${ROOTDIR}"
|
||||
rootsize=$(du -skA ${ROOTDIR} | sed 's/[[:space:]].*$//')
|
||||
if [ $rootsize -gt 512000 ]; then
|
||||
echo "Root size ${rootsize}K too large for QEMU virtual FAT" >&2
|
||||
makefs -t msdos -s 1g $WORKDIR/image.fat $ROOTDIR
|
||||
mkimg -s mbr -p efi:=$WORKDIR/image.fat -o $WORKDIR/image.mbr
|
||||
hda="$WORKDIR/image.mbr"
|
||||
fi
|
||||
|
||||
# And, boot in QEMU.
|
||||
: ${BOOTLOG:=${TMPDIR:-/tmp}/ci-qemu-test-boot.log}
|
||||
timeout 300 \
|
||||
$QEMU -m 256M -nodefaults \
|
||||
-serial stdio -vga none -nographic -monitor none \
|
||||
-snapshot -hda fat:${ROOTDIR} 2>&1 | tee ${BOOTLOG}
|
||||
-snapshot -hda $hda 2>&1 | tee ${BOOTLOG}
|
||||
|
||||
# Check whether we succesfully booted...
|
||||
if grep -q 'Hello world.' ${BOOTLOG}; then
|
||||
|
Loading…
Reference in New Issue
Block a user