Skip to content

Project 2 of SJTU CS356 Operating System Projects

License

Notifications You must be signed in to change notification settings

skyzh/oom_killer

Repository files navigation

OS Project 2

TL;DR

First of all, you need to patch the original kernel. Here I provide 2 ways.

  1. Use kernel_space/patch.diff. Apply it on goldfish-3.4 from AOSP project.
  2. Copy all files from kernel_space/archive.zip. They are kept to have the same structure as in Linux kernel.

Then, you may build and run the kernel. After the emulator is boot with new kernel, use Makefile in user_land to run tests.

make notifier # run user-space daemon
make test

This will automatically build test program, push it to /data/local, and run it with 10070 user.

Project Structure

.
├── kernel_space                files modified in Linux Kernel
│   ├── archive.zip             all modified files in original folder structure
│   ├── patch.diff              patch file, should be applied on git repo
│   └── patch.sh                script used to generate patch file
└── user_land
    ├── Makefile
    ├── benchmark               benchmark program
    │   ├── jni
    │   │   ├── Android.mk
    │   │   └── benchmark.c
    │   ├── out
    │   │   └── dummy.txt
    │   └── result              benchmark raw result
    │       ├── goldfish_3.4.out
    │       ├── kernel_log.txt
    │       ├── kernel_log_notifier.txt
    │       ├── kernel_log_timer.txt
    │       ├── kernel_log_trivial.txt
    │       ├── oom_killer_disabled.out
    │       ├── oom_killer_enabled.out
    │       ├── oom_killer_trivial.out
    │       ├── oom_killer_with_limit.out
    │       └── original.out
    ├── benchmark_analysis      benchmark analysis scripts
    │   ├── analysis.Rmd
    │   ├── analysis_overcommit.Rmd
    │   ├── kernel_log_parser.py
    │   ├── parse.sh
    │   ├── parser.py
    │   ├── result.csv
    │   └── result_overcommit.csv
    ├── common.h                contains all syscall wrapper and tmalloc
    ├── mm_get_limit            program to get all limit in system
    │   └── jni
    │       ├── Android.mk
    │       └── mm_get_limit.c
    ├── mm_notifier             the user-space daemon
    │   └── jni
    │       ├── Android.mk
    │       ├── Application.mk
    │       └── mm_notifier.cpp
    ├── mm_set_limit            program to set a user limit
    │   └── jni
    │       ├── Android.mk
    │       └── mm_set_limit.c
    ├── project2_test           test program provided by TA
    │   └── jni
    │       ├── Android.mk
    │       └── project2_test.c
    └── trace                   debug scripts for event tracing
        ├── Makefile
        ├── enable_trace.sh
        └── test.cpp

Acknowledgement

The design of this OOM killer is inspired by a lot of things. This includes:

  1. Linux kernel documentation. In that, I find a lot of tools useful for tracing.
  2. Linux community. Some un-merged patches inspired me of OOM design.
  3. My classmates. When discussing about and solving problems they encountered, I also came up with some new ideas. Thanks Zefu Wang, Bugen Zhao, and Yimin Zhao for their open-minded sharing.

About

Project 2 of SJTU CS356 Operating System Projects

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published