What does a JVM warm-up setting cost, in watts, at the scale of a video platform?
An energy and carbon study of GPU video transcoding across JVM JIT compilation profiles, measured under sustained load against a Spring Boot transcoding server and extrapolated to the daily footprint of a commercial video service. Group 7, Designing Sustainable ICT Systems, TU Delft.
Final report · Plots · Experiment harness
We here document our repository structure and main files used for the experiment.
The following diagram is a summary of the experiment workflow and used scripts, together with their role in the run.

As other important code files we consider:
-
Server Side:
EncodeController.java: server's controller that exposes the endpoint for a video transcoding request.FfmpegCommandBuilder: responsible for contructing the appropriate ffmpeg command based on input parametersEncodingService.java: resposible for execution of ffmpeg commands
-
Tools and scripts:
one_run_ffmpeg.py: script used to monitor a single ffmpeg runrun_ffmpeg_speed.sh: script used to obtain average transcoding speed and power with GPUplots_scripts: python module used to create comparison diagrams available in /plots
-
Results:
- Main experimental results are stored in
/results, which contains:h264-gpu/→ 7 JIT compiler profiles (baseline, c1-only, c2-only, interpret, heap, low-threshold, double-thread);hevc-gpu/→ baseline profile;av1-gpu/→ baseline profile.
- Retrieved Carbon Intensity Factors can be found in /emission-data
- Main experimental results are stored in
Before running, make sure to have executed a sudo command in the launching terminal to insert the password, beacause it is then used authomatically by the monitoring scripts.
To recreate the experiment, you have to run the run_profile.sh script specifying the necessary parameters. To run what we did use the following command:
./run_profiles.sh -- --monitor-sudo --runSec 180 --timeout 90 --numberOfRepetitions 30 --warmupSec 90 --codec h264 --resolution 1080 --use-gpu trueMake sure to have the python dependencies installed on your local machine or on a virtual enviroment with:
pip install requirements.txtFFmpeg must be installed and accessible from the command line.
ffmpeg --versionIn order to reproduce our experiment the video we used can be found at: https://www.youtube.com/watch?v=iHdviZkM7S4
GPU-accelerated transcoding (--use-gpu true) is only supported on NVIDIA GPUs with NVENC hardware encoder support.