Code for DataLoader IO_Uring Implementation
Code & Visualization for IO_Uring Save Model Implementation
Output for Strace and Pytorch Syscall
Tools to parse results from profiler
History of Profiling Commands ran
Our project consisted of 2 parts. The first part is profiling the workload. The workload which is fine-tuning an attention based model for sentiment analysis. We ran the commands in History of Profiling Commands ran for the traces. The results for the traces are in Output for Strace and Pytorch Syscall. Then we parsed and visualized the result using Tools to parse results from profiler. After we visualized the results we decided to explore various ways to reduce syscall overhead.
Part 2 involves in trying out ways to reduce I/O overhead within our workload. We tried to reduce I/O operations on the write model to disk part in Code & Visualization for IO_Uring Save Model Implementation. We also tried to reduce I/O overhead during the data loading phrase in Code for DataLoader IO_Uring Implementation. Finally we tried to optimize for commands like clock_gettime, ioctl, etc.
To run strace profiler on any workload and put the results into the output file "strace_output.txt"
strace -o strace_output.txt -f python <INSERT FILE HERE>
To generate a flame graph of execution
py-spy record --output py_spy_profile.svg -- python <INSERT FILE HERE>
To generate a strace summary
strace -c -o strace_summary.txt python <INSERT FILE HERE>
strace -o strace_output.txt -f python workload/trace_syscalls.py <--trace_copy OR --trace_forward OR --trace_backward> --mode <0 OR 1>
python workload/ECS251.py --profile
Strace Visualization run this file with strace results to generate pie graph and syscall by time visualizations
Strace Parser Parse Strace results into .json file with PID, Syscall, Arguments, and Return Value for further processing.
Clean Logs filter the same strace logs from two different strace outputs so that we can work on different syscalls.