forked from rarias/nixos-riscv
Compare commits
2 Commits
master
...
pl-enhncem
Author | SHA1 | Date | |
---|---|---|---|
f05c04dee8 | |||
492c540bf5 |
9
.gitea/workflows/ci.yaml
Normal file
9
.gitea/workflows/ci.yaml
Normal file
@ -0,0 +1,9 @@
|
||||
name: CI
|
||||
on: push
|
||||
|
||||
jobs:
|
||||
build:qemu-lagarto-ox:
|
||||
runs-on: native
|
||||
steps:
|
||||
- uses: https://gitea.com/ScMi1/checkout@v1.4
|
||||
- run: nix develop -L .#qemu-lagarto-ox --command ./boot.sh bench2
|
11
README.md
11
README.md
@ -58,6 +58,17 @@ Then, simply run boot.sh to start the QEMU system.
|
||||
```
|
||||
$ ./boot.sh
|
||||
```
|
||||
To execute the RISC-V benchmark suite on boot stage 2, run boot.sh with the bench2 option.
|
||||
|
||||
```
|
||||
$ ./boot.sh bench2
|
||||
```
|
||||
|
||||
To open a debug shell on boot stage 2, run boot.sh with the debug2 option.
|
||||
|
||||
```
|
||||
$ ./boot.sh debug2
|
||||
```
|
||||
|
||||
## Lagarto Hun
|
||||
|
||||
|
42
boot.sh
42
boot.sh
@ -2,6 +2,8 @@
|
||||
|
||||
set -ex
|
||||
|
||||
QEMU_KERNEL_PARAMS="$@"
|
||||
|
||||
#export PATH=/nix/store/c5xwy0rllg4lcw61mh20glairjz7ibv4-qemu-8.0.4/bin/:$PATH
|
||||
|
||||
CDIR=$(readlink -f "$PWD")
|
||||
@ -22,8 +24,6 @@ if [ -z "$TMPDIR" ] || [ -z "$USE_TMPDIR" ]; then
|
||||
TMPDIR=$(mktemp -d nix-vm.XXXXXXXXXX --tmpdir)
|
||||
fi
|
||||
|
||||
|
||||
|
||||
# Create a directory for exchanging data with the VM.
|
||||
mkdir -p "$TMPDIR/xchg"
|
||||
|
||||
@ -32,16 +32,15 @@ echo "Booting $system"
|
||||
|
||||
cd "$TMPDIR"
|
||||
|
||||
|
||||
#QEMU_KERNEL_PARAMS="boot.debug1devices"
|
||||
#QEMU_KERNEL_PARAMS="boot.trace boot.debug1"
|
||||
QEMU_KERNEL_PARAMS=bench2
|
||||
#QEMU_KERNEL_PARAMS=bench2
|
||||
#QEMU_KERNEL_PARAMS=debug2
|
||||
|
||||
# Trap the CPU on compressed instructions?
|
||||
#TRAP_COMPRESSED="-cpu rv64,c=false"
|
||||
|
||||
CUSTOM_BIOS="-bios $OPENSBI/share/opensbi/lp64/generic/firmware/fw_payload.bin"
|
||||
#CUSTOM_BIOS="-bios $OPENSBI/share/opensbi/lp64/generic/firmware/fw_payload.bin"
|
||||
#CUSTOM_BIOS="-bios $OPENSBI/share/opensbi/lp64/generic/firmware/fw_jump.elf"
|
||||
#CUSTOM_BIOS="-bios $CDIR/bios-nc.bin"
|
||||
#CUSTOM_BIOS="-bios $CDIR/bios.bin"
|
||||
@ -50,8 +49,9 @@ CUSTOM_BIOS="-bios $OPENSBI/share/opensbi/lp64/generic/firmware/fw_payload.bin"
|
||||
#DEBUG_CPU="-d cpu_reset"
|
||||
#DEBUG_CPU="-d in_asm,cpu,cpu_reset"
|
||||
|
||||
run_qemu () {
|
||||
|
||||
exec qemu-system-riscv64 \
|
||||
CMD='qemu-system-riscv64 \
|
||||
$DEBUG_GDB \
|
||||
$DEBUG_CPU \
|
||||
-name nixos-riscv \
|
||||
@ -70,30 +70,42 @@ exec qemu-system-riscv64 \
|
||||
-device virtio-blk-device,drive=hd0 \
|
||||
-kernel $system/kernel \
|
||||
-initrd $system/initrd \
|
||||
-append "$(cat $system/kernel-params) init=$system/init console=ttyS0,115200n8 loglevel=7 $QEMU_KERNEL_PARAMS" \
|
||||
$QEMU_OPTS \
|
||||
"$@"
|
||||
-device vhost-vsock-pci,id=vhost-vsock-pci0,guest-cid=123 \
|
||||
-serial mon:stdio \
|
||||
-append "$(cat $system/kernel-params) init=$system/init console=ttyS0 loglevel=7 $QEMU_KERNEL_PARAMS" \
|
||||
$QEMU_OPTS'
|
||||
|
||||
if [[ "$QEMU_KERNEL_PARAMS" =~ bench2 ]]; then
|
||||
eval "$CMD &"
|
||||
echo "$!" > qemu.pid
|
||||
else
|
||||
eval "$CMD"
|
||||
fi
|
||||
}
|
||||
|
||||
if [[ "$QEMU_KERNEL_PARAMS" =~ bench2 ]]; then
|
||||
run_qemu | awk -f $CDIR/verify-bench2.awk
|
||||
else
|
||||
run_qemu
|
||||
fi
|
||||
|
||||
# QEMU OPTIONS GRAVEYARD
|
||||
|
||||
# -kernel $system/kernel \
|
||||
# -initrd $system/initrd \
|
||||
# -append "$(cat $system/kernel-params) init=$system/init regInfo=/nix/store/x3zpwfbk2wkiisxhgi7zwsfwbdfxk0w1-closure-info-riscv64-unknown-linux-gnu/registration console=ttyS0,115200n8 loglevel=7 $QEMU_KERNEL_PARAMS"
|
||||
|
||||
|
||||
|
||||
|
||||
# -kernel ${NIXPKGS_QEMU_KERNEL_visionfive_nix:-/nix/store/8n5fakqq44nsmbcn0vdm3mzsvcq9ihbi-nixos-system-visionfive-nix-24.05.20240115.c3e128f/kernel} \
|
||||
# -initrd /nix/store/96058frp51dn0xxfci4kyvzz0rvd5ngy-initrd-linux-riscv64-unknown-linux-gnu-6.1.72/initrd \
|
||||
# -append "$(cat /nix/store/8n5fakqq44nsmbcn0vdm3mzsvcq9ihbi-nixos-system-visionfive-nix-24.05.20240115.c3e128f/kernel-params) init=/nix/store/8n5fakqq44nsmbcn0vdm3mzsvcq9ihbi-nixos-system-visionfive-nix-24.05.20240115.c3e128f/init regInfo=/nix/store/bgqa92gznhcr9aryx6ac4ycx4s2385cr-closure-info-riscv64-unknown-linux-gnu/registration console=ttyS0,115200n8 console=tty0 $QEMU_KERNEL_PARAMS" \
|
||||
|
||||
|
||||
# -drive "file=$NIX_DISK_IMAGE,if=virtio,id=hd0" \
|
||||
# -hda "$NIX_DISK_IMAGE" \
|
||||
#-net nic,model=virtio,macaddr=16:da:11:b4:44:c9 -net user \
|
||||
# -net nic,netdev=user.0,model=virtio -netdev user,id=user.0,"$QEMU_NET_OPTS" \
|
||||
#console=tty0
|
||||
#console=ttyS0,115200n8
|
||||
#
|
||||
# -fsdev local,id=fsdev1,path=/nix/store,security_model=none \
|
||||
|
||||
# -device virtio-9p-pci,fsdev=fsdev1,mount_tag=store,bus=pcie.1 \
|
||||
#
|
||||
# -drive cache=writeback,file="$NIX_DISK_IMAGE",id=drive1,if=none,index=1,werror=report -device virtio-blk-pci,drive=drive1 \
|
||||
|
@ -407,6 +407,16 @@
|
||||
};
|
||||
|
||||
bench2 = final.writeShellScript "bench2" ''
|
||||
#Tests if a benchmark exection was successful
|
||||
function bench_test {
|
||||
$@
|
||||
local status=$?
|
||||
if (( status != 0)); then
|
||||
echo "BENCHMARK-ERROR-STATE"
|
||||
fi
|
||||
return $status
|
||||
}
|
||||
|
||||
echo --------BENCHMARKING PHASE---------
|
||||
# Performs minimal FS setup and runs the SPEC benchmark
|
||||
mkdir /tmp /bin /root
|
||||
@ -420,42 +430,41 @@
|
||||
#cat /tmp/spec/time.csv
|
||||
# hpc_benchmarks
|
||||
set -x
|
||||
axpy-autovect 800 1000
|
||||
axpy-cblas 800 1000
|
||||
axpy-omp-simd 800 1000
|
||||
axpy-scalar 800 1000
|
||||
|
||||
gemm-autovect 256
|
||||
gemm-omp-simd 256
|
||||
gemm-scalar 256
|
||||
bench_test "axpy-autovect 800 1000"
|
||||
bench_test "axpy-cblas 800 1000"
|
||||
bench_test "axpy-omp-simd 800 1000"
|
||||
bench_test "axpy-scalar 800 1000"
|
||||
|
||||
somier-autovect 4 32
|
||||
somier-omp-simd 4 32
|
||||
somier-scalar 4 32
|
||||
bench_test "gemm-autovect 256"
|
||||
bench_test "gemm-omp-simd 256"
|
||||
bench_test "gemm-scalar 256"
|
||||
|
||||
lulesh2.0 -s 4
|
||||
bench_test "somier-autovect 4 32"
|
||||
bench_test "somier-omp-simd 4 32"
|
||||
bench_test "somier-scalar 4 32"
|
||||
|
||||
jacobi2d_scalar_vanilla 16 2
|
||||
bench_test "lulesh2.0 -s 4"
|
||||
|
||||
hacckernels-autovectorisation 10
|
||||
hacckernels-scalar 10
|
||||
bench_test "jacobi2d_scalar_vanilla 16 2"
|
||||
|
||||
bench_test "hacckernels-scalar 10"
|
||||
|
||||
# desktop_benchmarks
|
||||
|
||||
blackscholes_scalar 1 ${final.blackscholesInput} /dev/null
|
||||
bench_test "blackscholes_scalar 1 ${final.blackscholesInput} /dev/null"
|
||||
|
||||
streamcluster_scalar 3 10 16 16 16 10 none output.txt 1
|
||||
bench_test "streamcluster_scalar 3 10 16 16 16 10 none output.txt 1"
|
||||
|
||||
canneal_scalar 1 100 300
|
||||
canneal_vectorial_intrinsics
|
||||
bench_test "pathfinder_serial.exe 64 64 output_64_64.txt"
|
||||
bench_test "pathfinder_vector.exe 64 64 output_64_64.txt"
|
||||
|
||||
pathfinder_serial.exe 64 64 output_64_64.txt
|
||||
pathfinder_vector.exe 64 64 output_64_64.txt
|
||||
|
||||
swaptions_scalar -ns 2 -sm 1024 -nt 1
|
||||
bench_test "swaptions_scalar -ns 2 -sm 1024 -nt 1"
|
||||
|
||||
# micro_benchmarks (NO WORKING BENCHMARKS FOR NOW...)
|
||||
|
||||
echo "BENCHMARK-SUCESS-STATE"
|
||||
|
||||
# Give me a shell at the end
|
||||
bash -l
|
||||
'';
|
||||
|
19
overlay.nix
19
overlay.nix
@ -43,8 +43,8 @@ final: prev:
|
||||
};
|
||||
|
||||
bitstreams = builtins.fetchGit {
|
||||
url = "git@bscpm03.bsc.es:rarias/bitstreams.git";
|
||||
rev = "2f899627a226890c6f9820aa44e34c2ecea03faf";
|
||||
url = "git@gitlab-internal.bsc.es:rarias/bitstreams.git";
|
||||
rev = "14a41bae426e8d2a870d335492a552981941a529";
|
||||
};
|
||||
|
||||
# Baremetal tests for standalone FPGA
|
||||
@ -57,8 +57,8 @@ final: prev:
|
||||
};
|
||||
dontConfigure = true;
|
||||
patches = [
|
||||
#./patches/sa-fpga-crt.patch
|
||||
#./patches/sa-fpga-text-address.patch
|
||||
./patches/sa-fpga-crt.patch
|
||||
./patches/sa-fpga-text-address.patch
|
||||
./patches/sa-fpga-uart.patch
|
||||
./patches/sa-fpga-plic-registers.patch
|
||||
./patches/sa-fpga-add-plic-claim-test.patch
|
||||
@ -96,4 +96,15 @@ final: prev:
|
||||
dontFixup = true;
|
||||
hardeningDisable = [ "all" ];
|
||||
};
|
||||
|
||||
#pythonPackagesExtensions = prev.pythonPackagesExtensions ++ [(python-final: python-prev: {
|
||||
# numpy = python-prev.numpy.overridePythonAttrs (oldAttrs: {
|
||||
# disabledTests = [
|
||||
# "TestStuff::test_many_source_for_filename_calls"
|
||||
# ] ++ oldAttrs.disabledTests;
|
||||
# });
|
||||
# cherrypy = python-prev.cherrypy.overridePythonAttrs (oldAttrs: {
|
||||
# doCheck = false;
|
||||
# });
|
||||
#})];
|
||||
}
|
||||
|
@ -10,7 +10,7 @@
|
||||
, autoPatchelfHook
|
||||
, libxcrypt-legacy
|
||||
, lib
|
||||
, benchSize ? "test"
|
||||
, benchSize ? "train"
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
|
71
pkgs/spec-cpu/launcher-vm.sh
Normal file
71
pkgs/spec-cpu/launcher-vm.sh
Normal file
@ -0,0 +1,71 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
if [ -z "$SPEC" ]; then
|
||||
SPEC=$(spec-cpu-mini)
|
||||
fi
|
||||
|
||||
if [ -z "$SPEC" ]; then
|
||||
echo "cannot find spec, set SPEC variable"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
where=$TMPDIR
|
||||
if [ -z "$where" ]; then
|
||||
if [ -d /tmp ]; then
|
||||
where=/tmp
|
||||
else
|
||||
where=$PWD
|
||||
fi
|
||||
fi
|
||||
|
||||
cwd=$(readlink -f $where)
|
||||
# Place the outcome here
|
||||
wd="$cwd/spec"
|
||||
mkdir -p "$wd"
|
||||
|
||||
benchniter=1
|
||||
benchsize=train
|
||||
benchtune=base
|
||||
|
||||
echo "--- Placing output in $wd ---"
|
||||
|
||||
printf 'benchmark\tsize\ttune\titer\ttime_s\n' > "$wd/time.csv"
|
||||
|
||||
for srcbench in $SPEC/benchspec/CPU/*; do
|
||||
name=$(basename $srcbench)
|
||||
bench="$wd/$name"
|
||||
bench_out="$wd/$name.csv"
|
||||
rm -rf "$bench"
|
||||
cp -r "$srcbench" "$bench"
|
||||
chmod +w -R "$bench"
|
||||
|
||||
rundir="$bench/run/run_${benchtune}_${benchsize}_nix-m64.0000"
|
||||
echo $rundir
|
||||
sed -i '/^-C/d' "$rundir/speccmds.cmd"
|
||||
echo "--- Running $name for $benchniter iterations ---"
|
||||
(
|
||||
#set -x
|
||||
#cd $rundir
|
||||
./specinvoke -i $benchniter -E speccmds.cmd > /dev/null
|
||||
#set +x
|
||||
)
|
||||
# Print time
|
||||
awk '/^run [0-9]* elapsed time/{printf \
|
||||
"%s\t%s\t%s\t%s\t%s\n", \
|
||||
"'$name'","'$benchsize'","'$benchtune'",$2,$7}' \
|
||||
"$rundir/speccmds.out" > "$bench_out"
|
||||
|
||||
cat "$bench_out"
|
||||
|
||||
# Accumulate in main CSV
|
||||
cat "$bench_out" >> "$wd/time.csv"
|
||||
|
||||
# Erase intermediate files as they occupy RAM.
|
||||
rm -rf "$bench"
|
||||
done
|
||||
|
||||
echo "--- RESULTS in $wd/time.csv ---"
|
||||
cat "$wd/time.csv"
|
||||
echo "---------------------------------------"
|
@ -26,7 +26,7 @@ wd="$cwd/spec"
|
||||
mkdir -p "$wd"
|
||||
|
||||
benchniter=1
|
||||
benchsize=test
|
||||
benchsize=train
|
||||
benchtune=base
|
||||
|
||||
echo "--- Placing output in $wd ---"
|
||||
@ -42,6 +42,7 @@ for srcbench in $SPEC/benchspec/CPU/*; do
|
||||
chmod +w -R "$bench"
|
||||
|
||||
rundir="$bench/run/run_${benchtune}_${benchsize}_nix-m64.0000"
|
||||
echo $rundir
|
||||
sed -i '/^-C/d' "$rundir/speccmds.cmd"
|
||||
echo "--- Running $name for $benchniter iterations ---"
|
||||
(
|
||||
|
21
pkgs/spec-cpu/speclaunch-vm.nix
Normal file
21
pkgs/spec-cpu/speclaunch-vm.nix
Normal file
@ -0,0 +1,21 @@
|
||||
{
|
||||
stdenv
|
||||
, bash
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation {
|
||||
name = "speclaunch-vm";
|
||||
src = ./launcher-vm.sh;
|
||||
dontUnpack = true;
|
||||
dontConfigure = true;
|
||||
dontBuild = true;
|
||||
installPhase = ''
|
||||
mkdir -p $out/bin
|
||||
cp $src $out/bin/speclaunch
|
||||
chmod +x $out/bin/speclaunch
|
||||
'';
|
||||
buildInputs = [ bash ];
|
||||
enableParallelBuilding = false;
|
||||
hardeningDisable = [ "all" ];
|
||||
dontStrip = true;
|
||||
}
|
20
verify-bench2.awk
Normal file
20
verify-bench2.awk
Normal file
@ -0,0 +1,20 @@
|
||||
BEGIN {
|
||||
bench_success_flag = 0
|
||||
}
|
||||
|
||||
function terminate_qemu() {
|
||||
system("kill $(cat qemu.pid)");
|
||||
|
||||
if (bench_success_flag) {
|
||||
print "Benchmark execution has finished successfully. \n"
|
||||
exit 0;
|
||||
} else {
|
||||
print "Benchmark execution has been interrupted by an error. \n"
|
||||
exit 1;
|
||||
}
|
||||
}
|
||||
|
||||
/^BENCHMARK-SUCESS-STATE/ { bench_success_flag = 1; terminate_qemu()}
|
||||
/^BENCHMARK-ERROR-STATE/ { bench_success_flag = 0; terminate_qemu()}
|
||||
{print $0}
|
||||
|
Loading…
Reference in New Issue
Block a user