Project Interest in Add Filesystem Benchmarking tools to RTEMS

I am interested in contributing to the RTEMS filesystem benchmarking effort ( Add Filesystem Benchmarking tools to RTEMS (#18) · Issues · RTEMS / Programs / Google Summer of Code · GitLab )

I have started exploring the current FIO port, running workloads locally(linux), and investigating allocation and cleanup paths, where I identified a few small memory leaks using Valgrind. I am continuing to familiarize myself with the codebase and build workflow.

At the moment I do not have access to beaglebone black hardware, so I wanted to ask whether it still makes sense for me to pursue this project at this stage, and what areas I could effectively contribute to without hardware (currently ) .

I would also appreciate guidance on whether FIO benchmarking on RTEMS can be reasonably emulated, or if there are recommended approaches for development and testing in such a setup.

I look forward to your guidance on how best to proceed. @gedare @c-mauderer

I am also open to arranging access to suitable hardware as the project progresses if needed.

Best regards,
Somil Gupta

You should be able to develop the filesystem benchmarking tools using a simulator. I think several of the qemu-based targets can support adding a disk to them. You might need to ask around to get more information.

I also have been thinking about a new project to collect various benchmarks and consolidate them in one repository and provide tools to help build, run, and analyze their results.

This is still a rough idea, but there are several benchmarks (testsuites/rhealstone, testsuites/benchmarks, examples/nbench) and open issues related to benchmarks that I have captured in rtems&17. Beyond that, there are several potentially useful benchmarks like RT-Bench that would be a valuable addition.

This project idea requires quite a bit of research and scoping still, but I’m confident there’s enough worthwhile to be done here for a medium or large scoped project.

I’ve been trying to work with the current FIO port, but getting it running reliably has been a bit troublesome so far, especially while trying to bring it up on simulator targets.

Could you please advise whether I should continue focusing on porting/stabilizing FIO, or if there are other benchmarking related areas where I could contribute more effectively right now? Also, what would you recommend I work on next so I can start making useful contributions at this stage? @gedare

I think that you should continue to explore to decide which direction you might want to focus, either on FIO and improving there, or on building out a framework for benchmarks in general. Those are both suitable GSoC projects to consider.

Either way, you will want to show what you can run already as part of your proposal.

I’ve continued exploring RTEMS and modified an existing sample to run a simple filesystem benchmark in a simulator (mounting a filesystem, running sequential write workloads, and reporting timing results), giving me a working base to develop benchmarks without hardware.

My current understanding is that the project could involve studying tools like fio, extracting useful workload techniques, and implementing them as native RTEMS benchmarks tailored to RTEMS constraints. This also helps avoid compatibility and library issues seen when porting external tools, while allowing benchmarking across filesystems supported in RTEMS on simulators and hardware much more conveniently.

From my side, I am planning a simple shell-based interface, which can also be extended for automation and comparison runs.
Does this direction align with your expectations, and are there other aspects you would recommend including in the scope at this stage? @gedare

It is preferable to port existing benchmarks rather than to try to reinvent them, unless there is very good reason. I would prefer that you focus effort on investigating the suitability of FIO.

While working through the current FIO port, I’ve observed that a number of assumptions appear to be hardcoded for a specific ARM board and configuration. The implementation seems quite tightly coupled to that original environment, and when building it under RTEMS 7 on ARM (in simulation), I’ve been encountering several build and configuration issues.

From this experience, it seems that properly stabilizing and generalizing the port for broader RTEMS targets may require a more systematic effort . In fact, making the FIO integration cleaner, less board-specific, and more robust across RTEMS configurations could potentially be a worthwhile project in itself.

I would be interested in hearing your thoughts on whether you see value in treating this as a focused effort toward making the FIO port more portable and maintainable within RTEMS.

Yes, this could make a focused effort. Writing the proposal should help you to clarify the scope.

After some tinkering around The FIO binary is successfully booting via qemu in the RTEMS shell and responds to basic commands like --help and --version.

However, the actual benchmark jobs aren’t running yet because they trigger a Data Abort (NULL pointer crash). Using addr2line, I traced the crash specifically to log.c:53.
My next steps are to debug this specific memory conflict and generalize the Makefile as the current build requires several board-specific manual changes that need to be cleaned up for a more portable solution.

somil@DESKTOP-A7IFJI7:~/quick-start/app/fio$ qemu-system-arm -M xilinx-zynq-a9 -m 512M -no-reboot -nographic   -serial null -serial mon:stdio   -kernel fio

*** FIO - Flexible I/O tester ***


nexus0: <RTEMS Nexus device>

RTEMS Shell on /dev/console. Use 'help' to list commands.
SHLL [/] # fio --name=t --filename=/mnt/t --size=4k --rw=write --thread
memset called
memset done
memset called
memset done

*** FATAL ***
fatal source: 9 (RTEMS_FATAL_SOURCE_EXCEPTION)

R0   = 0x00000000 R8  = 0x00000000
R1   = 0x00286c04 R9  = 0x00b58bcc
R2   = 0x00000006 R10 = 0x0028add0
R3   = 0x00000000 R11 = 0x00493da8
R4   = 0x004e54e4 R12 = 0x00286c04
R5   = 0x00b58f40 SP  = 0x00b58b88
R6   = 0x00000006 LR  = 0x00000000
R7   = 0x004003a0 PC  = 0x00272224
CPSR = 0x20000173 VEC = 0x00000004
FPEXC = 0x40000000
FPSCR = 0x60000010
D00 = 0x0000000000000000
D01 = 0x0000000000000000
D02 = 0x0000000000000000
D03 = 0x0000000000000000
D04 = 0x0000000000000000
D05 = 0x0000000000000000
D06 = 0x0000000000000000
D07 = 0x004e24a002dbad60
D08 = 0x00493f3800493f38
D09 = 0x0000000000000000
D10 = 0x0000000000000000
D11 = 0x0000000000000000
D12 = 0x0000000000000000
D13 = 0x0000000000000000
D14 = 0x0000000000000000
D15 = 0x0000000000000000
D16 = 0x0000000000000001
D17 = 0x0000000000000000
D18 = 0x4121feb800000000
D19 = 0x0000020100000201
D20 = 0x00b9e5e800b9e5e8
D21 = 0x00b9e5e800b9e5e8
D22 = 0x0000000200000002
D23 = 0x0000000200000002
D24 = 0x00003fff00001fff
D25 = 0x0000ffff00007fff
D26 = 0x000003ff000001ff
D27 = 0x00000fff000007ff
D28 = 0x0000003f0000001f
D29 = 0x000000ff0000007f
D30 = 0x0000000300000001
D31 = 0x0000000f00000007
RTEMS version: 7.0.0.120bc92b0417cab11424e348ff9dc2a3aa870836-modified
RTEMS tools: 15.2.0 20250808 (RTEMS 7, RSB 71faa243ebf4ccf737bf83699f694f39f3b92fef, Newlib 038afec1)
executing thread ID: 0x0a010013
executing thread name: SHLL