Generate profiling data: Difference between revisions

From dreamcast.wiki
Jump to navigation Jump to search
No edit summary
No edit summary
 
Line 3: Line 3:
Every Simulant application allows the user to change various settings exposed in the '''AppConfig''' struct.
Every Simulant application allows the user to change various settings exposed in the '''AppConfig''' struct.


In order to enable the profiler, the build needs to be run in '''DEBUG''' mode and the following lines should be added to
In order to enable the profiler, the build needs to be run in '''DEBUG''' mode and the following lines should be added to <syntaxhighlight lang="c" inline>int main()</syntaxhighlight>:
int main()


#ifndef NDEBUG
<syntaxhighlight lang="c">#ifndef NDEBUG
        config.log_level = smlt::LOG_LEVEL_DEBUG;
      config.log_level = smlt::LOG_LEVEL_DEBUG;
        config.development.force_profiling = true;
      config.development.force_profiling = true;
#endif
#endif</syntaxhighlight>


== How to generate the actual profiling data ==
== How to generate the actual profiling data ==
Once the user decides to run the application via [[Using dcload-ip with Linux|dcload-ip]], e.g.
Once the user decides to run the application via [[Using dcload-ip with Linux|dcload-ip]], e.g.:
sudo dc-tool -t 192.168.0.123 -x myCoolGame.elf -c ./assets
<syntaxhighlight lang="bash">sudo dc-tool -t 192.168.0.123 -x myCoolGame.elf -c ./assets</syntaxhighlight>


a file named '''gmon.out''' will be created in '''./build/dreamcast-sh4-gcc/debug/assets'''
a file named '''gmon.out''' will be created in '''./build/dreamcast-sh4-gcc/debug/assets'''
Line 42: Line 41:


Open the terminal, navigate into the ''debug directory'' and execute the following line:
Open the terminal, navigate into the ''debug directory'' and execute the following line:
docker run -v `pwd`:`pwd`:Z kazade/dreamcast-sdk /bin/bash -c "source /etc/bash.bashrc; cd `pwd`; sh-elf-gprof myCoolGame.elf.debug gmon.out" > ~/Desktop/gprof.out
<syntaxhighlight lang="bash">docker run -v `pwd`:`pwd`:Z kazade/dreamcast-sdk /bin/bash -c "source /etc/bash.bashrc; cd `pwd`; sh-elf-gprof myCoolGame.elf.debug gmon.out" > ~/Desktop/gprof.out</syntaxhighlight>


This will essentially convert the profiling data into a human readable file on your Desktop, which can be viewed with any text editing program.  
This will essentially convert the profiling data into a human readable file on your Desktop, which can be viewed with any text editing program.  


Before moving/reading '''gprof.out''' though, the following line should be executed as a '''final step''':
Before moving/reading '''gprof.out''' though, the following line should be executed as a '''final step''':
cat ~/Desktop/gprof.out | gprof2dot -n 0.001 | dot -Tsvg -o output.svg
<syntaxhighlight lang="bash">cat ~/Desktop/gprof.out | gprof2dot -n 0.001 | dot -Tsvg -o output.svg</syntaxhighlight>


A new file named '''output.svg''' will appear in the ''debug directory''.  
A new file named '''output.svg''' will appear in the ''debug directory''.  

Latest revision as of 12:57, 30 May 2020

How to enable Simulant's profiler

Every Simulant application allows the user to change various settings exposed in the AppConfig struct.

In order to enable the profiler, the build needs to be run in DEBUG mode and the following lines should be added to int main():

#ifndef NDEBUG
       config.log_level = smlt::LOG_LEVEL_DEBUG;
       config.development.force_profiling = true;
#endif

How to generate the actual profiling data

Once the user decides to run the application via dcload-ip, e.g.:

sudo dc-tool -t 192.168.0.123 -x myCoolGame.elf -c ./assets

a file named gmon.out will be created in ./build/dreamcast-sh4-gcc/debug/assets

The file must not be opened while the application is running!

During the profiling process the terminal will display how many arcs haven been processed. The output will look like this:

-- 1000 arcs recorded...
-- 2000 arcs recorded...
-- 3000 arcs recorded...

Best profiling results can be achieved, if the amount of arcs reaches about 6000 - 7000 entries.

IMPORTANT: To flush the profiling data into gmon.out, the application needs to be properly terminated (e.g. ESC key). Shutting down the console or terminal prematurely will NOT WORK.

The profiling was successful, if the terminal displays something like this:

Stopping profiling...
-- Writing 6750 arcs
-- Profiler thread finished!

How to process the profiling data

The file gmon.out is encoded in a binary file format and needs to be converted into a text file.

Copy or move gmon.out into ./build/dreamcast-sh4-gcc/debug (debug directory)

If your game is named myCoolGame, you should also find these 2 files in the debug directory: myCoolGame.elf and myCoolGame.elf.debug

Open the terminal, navigate into the debug directory and execute the following line:

docker run -v `pwd`:`pwd`:Z kazade/dreamcast-sdk /bin/bash -c "source /etc/bash.bashrc; cd `pwd`; sh-elf-gprof myCoolGame.elf.debug gmon.out" > ~/Desktop/gprof.out

This will essentially convert the profiling data into a human readable file on your Desktop, which can be viewed with any text editing program.

Before moving/reading gprof.out though, the following line should be executed as a final step:

cat ~/Desktop/gprof.out | gprof2dot -n 0.001 | dot -Tsvg -o output.svg

A new file named output.svg will appear in the debug directory.

It will visualize the data contained in gprof.out as a graph, making it easier for the developer to understand relations between different areas of Simulant's engine code. It can be opened with e.g. GIMP or any modern Internet Browser.