#!/bin/bash

set -e

profile () {
    local TYPE=$1
    local DIR=$2

    sync

    echo "$TYPE - uncached"
    hyperfine -p "echo 3 > /proc/sys/vm/drop_caches" "ls -lR $DIR"

    echo "$TYPE - cached"
    hyperfine -w 1 "ls -lR $DIR"
}

profile_overlay () {
    local fs=$1
    local source=$2

    mount -t overlay -o "metacopy=on,redirect_dir=follow,lowerdir=$source:test-objects" overlay mnt-ovl

    profile "overlayfs + $fs" mnt-ovl

    umount mnt-ovl
}

mkdir -p mnt-fs mnt-ovl

for fs in squashfs ext4 erofs; do
    mount -o loop large.$fs mnt-fs
    profile_overlay "loopback $fs" mnt-fs
    umount mnt-fs
done

profile_overlay direct tmpdir

mount -t composefs -o basedir=test-objects large.composefs mnt-fs
profile composefs mnt-fs
umount mnt-fs
