├── .devcontainer ├── Dockerfile ├── devcontainer.json └── on_create.sh ├── .gitignore ├── .gitmodules ├── .pre-commit-config.yaml ├── .vscode └── settings.json ├── Gemfile ├── LICENSE ├── README.md ├── _config.yml ├── _data └── course.yml ├── _includes ├── footer.html ├── ga.html ├── navigation.html ├── next_in_module.html ├── next_module.html ├── page-toc.html ├── side_toolbar.html └── toc.html ├── _layouts ├── base.html ├── course_page.html ├── index.html ├── page-toc.html └── page.html ├── _sass ├── _custom.scss ├── bootstrap │ └── scss │ │ ├── _alert.scss │ │ ├── _badge.scss │ │ ├── _breadcrumb.scss │ │ ├── _button-group.scss │ │ ├── _buttons.scss │ │ ├── _card.scss │ │ ├── _carousel.scss │ │ ├── _close.scss │ │ ├── _code.scss │ │ ├── _custom-forms.scss │ │ ├── _dropdown.scss │ │ ├── _forms.scss │ │ ├── _functions.scss │ │ ├── _grid.scss │ │ ├── _images.scss │ │ ├── _input-group.scss │ │ ├── _jumbotron.scss │ │ ├── _list-group.scss │ │ ├── _media.scss │ │ ├── _mixins.scss │ │ ├── _modal.scss │ │ ├── _nav.scss │ │ ├── _navbar.scss │ │ ├── _pagination.scss │ │ ├── _popover.scss │ │ ├── _print.scss │ │ ├── _progress.scss │ │ ├── _reboot.scss │ │ ├── _root.scss │ │ ├── _spinners.scss │ │ ├── _tables.scss │ │ ├── _toasts.scss │ │ ├── _tooltip.scss │ │ ├── _transitions.scss │ │ ├── _type.scss │ │ ├── _utilities.scss │ │ ├── _variables.scss │ │ ├── bootstrap-grid.scss │ │ ├── bootstrap-reboot.scss │ │ ├── bootstrap.scss │ │ ├── mixins │ │ ├── _alert.scss │ │ ├── _background-variant.scss │ │ ├── _badge.scss │ │ ├── _border-radius.scss │ │ ├── _box-shadow.scss │ │ ├── _breakpoints.scss │ │ ├── _buttons.scss │ │ ├── _caret.scss │ │ ├── _clearfix.scss │ │ ├── _deprecate.scss │ │ ├── _float.scss │ │ ├── _forms.scss │ │ ├── _gradients.scss │ │ ├── _grid-framework.scss │ │ ├── _grid.scss │ │ ├── _hover.scss │ │ ├── _image.scss │ │ ├── _list-group.scss │ │ ├── _lists.scss │ │ ├── _nav-divider.scss │ │ ├── _pagination.scss │ │ ├── _reset-text.scss │ │ ├── _resize.scss │ │ ├── _screen-reader.scss │ │ ├── _size.scss │ │ ├── _table-row.scss │ │ ├── _text-emphasis.scss │ │ ├── _text-hide.scss │ │ ├── _text-truncate.scss │ │ ├── _transition.scss │ │ └── _visibility.scss │ │ ├── utilities │ │ ├── _align.scss │ │ ├── _background.scss │ │ ├── _borders.scss │ │ ├── _clearfix.scss │ │ ├── _display.scss │ │ ├── _embed.scss │ │ ├── _flex.scss │ │ ├── _float.scss │ │ ├── _interactions.scss │ │ ├── _overflow.scss │ │ ├── _position.scss │ │ ├── _screenreaders.scss │ │ ├── _shadows.scss │ │ ├── _sizing.scss │ │ ├── _spacing.scss │ │ ├── _stretched-link.scss │ │ ├── _text.scss │ │ └── _visibility.scss │ │ └── vendor │ │ └── _rfs.scss └── p2pu-theme │ ├── _buttons.scss │ ├── _custom.scss │ ├── _fonts.scss │ ├── _footer.scss │ ├── _forum.scss │ ├── _layout.scss │ ├── _menu.scss │ ├── _mixins.scss │ ├── _typography.scss │ ├── _utilities.scss │ ├── _variables.scss │ ├── accordion.scss │ └── base.scss ├── assets ├── css │ ├── p2pustrap-custom.scss │ └── site.css ├── img │ ├── 1280px-Haswell_Chip.jpeg │ ├── BasicDeclare.png │ ├── ExecuteTemplate.png │ ├── ISAInd.png │ ├── ISAParser.png │ ├── ROpFormat.png │ ├── decode.png │ ├── favicon.ico │ ├── favicon │ │ ├── android-chrome-192x192.png │ │ ├── android-chrome-384x384.png │ │ ├── apple-touch-icon.png │ │ ├── favicon-16x16.png │ │ ├── favicon-32x32.png │ │ ├── favicon.ico │ │ ├── mstile-150x150.png │ │ ├── safari-pinned-tab.svg │ │ └── site.webmanifest │ ├── gem5CPUs.png │ ├── memTypes.png │ ├── research-cycle.png │ └── thumbnail.png ├── js │ ├── gh_link_helper.js │ ├── init.js │ ├── jquery.dropotron.min.js │ ├── jquery.min.js │ └── modernizr-2.6.2.min.js └── slides │ ├── develop-02-sim-object.pdf │ ├── develop-06-cpu-instructions.pdf │ ├── develop-09-ruby.pdf │ ├── develop-10-ruby-network.pdf │ ├── develop-gem5-tutorial-2022-gpu.pdf │ ├── extra-01-SST.pdf │ ├── extra-02-contributing.pdf │ ├── extra-KVM-with-m5-and-Memory-System.pdf │ ├── intro-02-intro-jason.pdf │ ├── intro-03-simulation-jason.pdf │ ├── intro-04-python3-reminder-hoa.pdf │ ├── intro-05-intro-devel-jason.pdf │ ├── using-gem5-02-gem5-stdlib-tutorial.pdf │ ├── using-gem5-03-gem5-running-tutorial.pdf │ ├── using-gem5-04-gem5-caches-tutorial.pdf │ ├── using-gem5-05-gem5-cpus-tutorial 2.pdf │ ├── using-gem5-08-gem5-fullsystem-tutorial.pdf │ └── using-gem5-09-accelerating-simulation.pdf ├── creating-content.md ├── docker ├── Dockerfile ├── Dockerfile-builder ├── Makefile ├── README.md └── gnu-cross-compilers │ ├── Dockerfile-aarch64 │ ├── Dockerfile-riscv64 │ └── cross-compiler-build.sh ├── gem5_stubgen.py ├── hints.txt ├── index.md ├── materials ├── developing-gem5-models │ ├── 02-simobj │ │ ├── README.md │ │ ├── bootcamp │ │ │ ├── hello-sim-object │ │ │ │ ├── GoodbyeSimObject.py │ │ │ │ ├── HelloSimObject.py │ │ │ │ ├── SConscript │ │ │ │ ├── completed │ │ │ │ │ ├── HelloSimObject.py │ │ │ │ │ ├── hello_sim_object.cc │ │ │ │ │ └── hello_sim_object.hh │ │ │ │ ├── goodbye_sim_object.cc │ │ │ │ ├── goodbye_sim_object.hh │ │ │ │ ├── hello_sim_object.cc │ │ │ │ ├── hello_sim_object.hh │ │ │ │ └── run_hello.py │ │ │ ├── simple-cache-object │ │ │ │ ├── SConscript │ │ │ │ ├── SimpleCacheObject.py │ │ │ │ ├── completed │ │ │ │ │ ├── simple_cache_object.cc │ │ │ │ │ └── simple_cache_object.hh │ │ │ │ ├── simple_cache_object.cc │ │ │ │ └── simple_cache_object.hh │ │ │ └── simple-mem-object │ │ │ │ ├── SConscript │ │ │ │ ├── SimpleMemObject.py │ │ │ │ ├── completed │ │ │ │ ├── simple_mem_object.cc │ │ │ │ └── simple_mem_object.hh │ │ │ │ ├── run_simple_mem_object.py │ │ │ │ ├── simple_mem_object.cc │ │ │ │ └── simple_mem_object.hh │ │ └── complete │ │ │ ├── MySimpleObject.py │ │ │ ├── SConscript │ │ │ ├── my_simple_object.cc │ │ │ ├── my_simple_object.hh │ │ │ └── run_simple.py │ ├── 03-events │ │ ├── MyHelloObject.py │ │ ├── README.md │ │ ├── SConscript │ │ ├── complete │ │ │ ├── MyHelloObject.py │ │ │ ├── SConscript │ │ │ ├── my_goodbye_object.cc │ │ │ ├── my_goodbye_object.hh │ │ │ ├── my_hello_object.cc │ │ │ ├── my_hello_object.hh │ │ │ └── run_hello_goodbye.py │ │ ├── my_goodbye_object.cc │ │ ├── my_goodbye_object.hh │ │ ├── my_hello_object.cc │ │ ├── my_hello_object.hh │ │ └── run_hello_goodbye.py │ ├── 06-cpu-instructions │ │ ├── README.md │ │ ├── add16_test.py │ │ ├── finished-material │ │ │ ├── 0001-arch-riscv-Add-some-RISC-V-packed-SIMD-instructions.patch │ │ │ ├── add16_sample_trace │ │ │ └── sra16_sample_trace │ │ ├── sra16_test.py │ │ └── tests │ │ │ ├── add16_test │ │ │ ├── add16_test.c │ │ │ ├── sra16_test │ │ │ └── sra16_test.c │ ├── 09-ruby │ │ ├── MyMSI-cache.sm │ │ ├── MyMSI-dir.sm │ │ ├── MyMSI-msg.sm │ │ ├── MyMSI.slicc │ │ ├── README.md │ │ ├── SConsopts │ │ └── complete │ │ │ ├── MyMSI-cache.sm │ │ │ ├── MyMSI-dir.sm │ │ │ ├── MyMSI-msg.sm │ │ │ ├── MyMSI.slicc │ │ │ └── SConsopts │ ├── 10-ruby-network │ │ ├── SConscript │ │ ├── garnet_mesh.py │ │ ├── mi_example_cache_network.py │ │ ├── network_config.py │ │ └── topologies │ │ │ ├── garnet_mesh.py │ │ │ └── garnet_pt2pt.py │ └── 11-gpu │ │ └── README.md ├── extra-topics │ ├── 01-sst-examples │ │ ├── gem5_configuration.py │ │ └── sst_configuration.py │ ├── 02-monitor-and-trace │ │ ├── simple.py │ │ ├── simple_comm.py │ │ ├── simple_comm_trace.py │ │ └── simple_retrace.py │ └── 03-cpu-and-caches │ │ ├── extra_topic_cpu_and_cache.py │ │ ├── mm-riscv-gem5 │ │ └── mm.cpp ├── introduction │ ├── 02-gem5-basics │ │ ├── 01-basics │ │ │ ├── 01-gem5-hello-world.py │ │ │ ├── 02-types-examples.py │ │ │ ├── 03-control-flow-examples.py │ │ │ ├── 04-functions-examples.py │ │ │ └── 05-file-examples.py │ │ ├── 02-frequently-used-features │ │ │ ├── 01-classes.py │ │ │ ├── 02-class-variables.py │ │ │ ├── 03-abstract-classes.py │ │ │ ├── 04-import-modules.py │ │ │ ├── 05-vars-function.py │ │ │ ├── 06-f-strings.py │ │ │ ├── 07-list-comprehension.py │ │ │ ├── 08-generators.py │ │ │ ├── 09-argparse.py │ │ │ ├── 10-seaborn.py │ │ │ └── CustomClasses.py │ │ └── 03-using-gem5 │ │ │ ├── 01-m5-library-example-1.py │ │ │ ├── 02-m5-library-example-2.py │ │ │ ├── 03-m5-library-example-3.py │ │ │ └── 04-m5-library-example-4.py │ └── README.md └── using-gem5 │ ├── 02-stdlib │ ├── complete │ │ ├── README.md │ │ ├── cache-hierarchy-comparison-complete.py │ │ ├── clever-simulator-use-complete.py │ │ ├── hello-world-complete.py │ │ ├── hello-world-with-cache-complete.py │ │ ├── hello-world-with-unique-cache.py │ │ ├── private_l1_shared_l2_cache_hierarchy │ │ │ ├── __init__.py │ │ │ ├── l1cache.py │ │ │ ├── l2cache.py │ │ │ └── private_l1_shared_l2_cache_complete.py │ │ ├── simple-simulator-use-complete.py │ │ ├── unique_cache_hierarchy │ │ │ ├── __init__.py │ │ │ ├── l1cache.py │ │ │ └── unique_cache_hierarchy_complete.py │ │ └── x86-full-system-complete.py │ ├── hello-world.py │ ├── m5-exit-example │ │ ├── Makefile │ │ ├── m5-exit-example │ │ └── m5-exit-example.c │ ├── matrix-multiply │ │ ├── Makefile │ │ ├── matrix-multiply │ │ └── matrix-multiply.c │ ├── obtaining-resources.py │ ├── simulator-use.py │ ├── unique_cache_hierarchy │ │ ├── __init__.py │ │ ├── l1cache.py │ │ └── unique_cache_hierarchy.py │ └── x86-full-system.py │ ├── 03-running │ ├── example1 │ │ ├── exampleBin │ │ ├── exampleBin_m5 │ │ ├── exampleBin_m5_arm │ │ └── se_example.cpp │ ├── example2 │ │ ├── dir_example.cpp │ │ └── exampleBin │ ├── example3 │ │ ├── plots.ipynb │ │ ├── traffGenRes │ │ │ ├── m5out_ddr3_R50 │ │ │ │ ├── config.dot │ │ │ │ ├── config.dot.pdf │ │ │ │ ├── config.dot.svg │ │ │ │ ├── config.ini │ │ │ │ ├── config.json │ │ │ │ └── stats.txt │ │ │ ├── m5out_ddr3_RO │ │ │ │ ├── config.dot │ │ │ │ ├── config.dot.pdf │ │ │ │ ├── config.dot.svg │ │ │ │ ├── config.ini │ │ │ │ ├── config.json │ │ │ │ └── stats.txt │ │ │ ├── m5out_ddr3_WO │ │ │ │ ├── config.dot │ │ │ │ ├── config.dot.pdf │ │ │ │ ├── config.dot.svg │ │ │ │ ├── config.ini │ │ │ │ ├── config.json │ │ │ │ └── stats.txt │ │ │ ├── m5out_ddr4_R50 │ │ │ │ ├── config.dot │ │ │ │ ├── config.dot.pdf │ │ │ │ ├── config.dot.svg │ │ │ │ ├── config.ini │ │ │ │ ├── config.json │ │ │ │ └── stats.txt │ │ │ ├── m5out_ddr4_RO │ │ │ │ ├── config.dot │ │ │ │ ├── config.dot.pdf │ │ │ │ ├── config.dot.svg │ │ │ │ ├── config.ini │ │ │ │ ├── config.json │ │ │ │ └── stats.txt │ │ │ ├── m5out_ddr4_WO │ │ │ │ ├── config.dot │ │ │ │ ├── config.dot.pdf │ │ │ │ ├── config.dot.svg │ │ │ │ ├── config.ini │ │ │ │ ├── config.json │ │ │ │ └── stats.txt │ │ │ ├── m5out_nvm_R50 │ │ │ │ ├── config.dot │ │ │ │ ├── config.dot.pdf │ │ │ │ ├── config.dot.svg │ │ │ │ ├── config.ini │ │ │ │ ├── config.json │ │ │ │ └── stats.txt │ │ │ ├── m5out_nvm_RO │ │ │ │ ├── config.dot │ │ │ │ ├── config.dot.pdf │ │ │ │ ├── config.dot.svg │ │ │ │ ├── config.ini │ │ │ │ ├── config.json │ │ │ │ └── stats.txt │ │ │ └── m5out_nvm_WO │ │ │ │ ├── config.dot │ │ │ │ ├── config.dot.pdf │ │ │ │ ├── config.dot.svg │ │ │ │ ├── config.ini │ │ │ │ ├── config.json │ │ │ │ └── stats.txt │ │ ├── traffGen_example.py │ │ └── traffGen_run.sh │ └── simple.py │ ├── 04-cache-models │ └── simple_cache_run.py │ ├── 05-cpu-models │ ├── IntMM │ │ ├── .gitignore │ │ ├── IntMM.c │ │ └── Makefile │ ├── README.md │ ├── cpu-models.py │ └── finished-material │ │ ├── cpu-models-normal-cache.py │ │ ├── cpu-models-small-cache.py │ │ ├── stats-normal-cache │ │ ├── stats-atomic.txt │ │ ├── stats-o3_cpu.txt │ │ └── stats-timing.txt │ │ └── stats-small-cache │ │ ├── stats-atomic.txt │ │ ├── stats-o3_cpu.txt │ │ └── stats-timing.txt │ ├── 08-fullsystem │ ├── riscv-fs.py │ └── x86-npb-benchmarks.py │ └── 09-accelerating-simulations │ ├── 00-prerequisite-runscript │ ├── README.md │ ├── completed │ │ └── base-system.py │ └── template │ │ └── base-system.py │ ├── 01-modifying-runscript │ ├── completed │ │ └── base-system.py │ └── template │ │ └── base-system.py │ ├── 02-annotating-llvm-stanford │ ├── completed │ │ ├── base-system.py │ │ └── llvm_stanford │ │ │ ├── Bubblesort.c │ │ │ ├── FloatMM.c │ │ │ ├── IntMM.c │ │ │ ├── Makefile │ │ │ ├── Oscar.c │ │ │ ├── Perm.c │ │ │ ├── Puzzle.c │ │ │ ├── Queens.c │ │ │ ├── Quicksort.c │ │ │ ├── RealMM.c │ │ │ ├── Towers.c │ │ │ └── Treesort.c │ ├── llvm_stanford │ │ ├── Bubblesort.c │ │ ├── FloatMM.c │ │ ├── IntMM.c │ │ ├── Makefile │ │ ├── Oscar.c │ │ ├── Perm.c │ │ ├── Puzzle.c │ │ ├── Queens.c │ │ ├── Quicksort.c │ │ ├── RealMM.c │ │ ├── Towers.c │ │ └── Treesort.c │ ├── optimized │ │ ├── base-system.py │ │ └── llvm_stanford │ │ │ ├── Bubblesort.c │ │ │ ├── FloatMM.c │ │ │ ├── IntMM.c │ │ │ ├── Makefile │ │ │ ├── Oscar.c │ │ │ ├── Perm.c │ │ │ ├── Puzzle.c │ │ │ ├── Queens.c │ │ │ ├── Quicksort.c │ │ │ ├── RealMM.c │ │ │ ├── Towers.c │ │ │ └── Treesort.c │ └── template │ │ └── base-system.py │ ├── 03-checkpoints │ ├── 0A-adding-checkpoints │ │ ├── complete │ │ │ ├── Makefile │ │ │ ├── base-system.py │ │ │ └── mm_checkpoint.cpp │ │ └── template │ │ │ ├── base-system.py │ │ │ └── mm_base.cpp │ ├── 0B-restoring-checkpoints │ │ ├── checkpoint-directory │ │ │ ├── board.physmem.store0.pmem │ │ │ └── m5.cpt │ │ ├── complete │ │ │ ├── base-system-restore-checkpoint.py │ │ │ └── base-system-take-checkpoint.py │ │ ├── mm_checkpoint │ │ │ ├── Makefile │ │ │ └── mm_ckpt.cpp │ │ └── template │ │ │ └── base-system.py │ └── README.md │ └── data-files │ ├── README.md │ ├── annotated │ ├── Makefile │ └── mm_annotated.cpp │ ├── base │ └── mm_base.cpp │ └── checkpointed │ ├── Makefile │ └── mm_checkpoint.cpp ├── modules ├── Developing gem5 models │ └── _posts │ │ ├── 2000-01-01-index.md │ │ ├── 2000-02-01-simobject.md │ │ ├── 2000-03-01-events.md │ │ ├── 2000-04-01-memoryobj.md │ │ ├── 2000-05-01-cache.md │ │ ├── 2000-06-01-execution-model.md │ │ ├── 2000-07-01-instructions.md │ │ ├── 2000-08-01-memory-system.md │ │ ├── 2000-09-01-ruby-intro.md │ │ ├── 2000-09-02-ruby-decl-cache.md │ │ ├── 2000-09-03-ruby-in-port.md │ │ ├── 2000-09-04-ruby-actions-transitions.md │ │ ├── 2000-09-05-ruby-dir.md │ │ ├── 2000-09-06-ruby-build-run.md │ │ ├── 2000-09-07-ruby-debugging.md │ │ ├── 2000-10-01-ruby-network.md │ │ └── 2000-11-01-gpu.md ├── Extra topics │ └── _posts │ │ ├── 2000-01-01-index.md │ │ ├── 2000-02-01-contributing.md │ │ ├── 2000-03-01-other-sims.md │ │ ├── 2000-04-01-checkpointing-commmonitor.md │ │ ├── 2000-05-01-extra-topics.md │ │ ├── cpu-and-caches.md │ │ └── monitor-and-trace.md ├── Introduction │ └── _posts │ │ ├── 2000-01-01-index.md │ │ ├── 2000-02-01-intro.md │ │ ├── 2000-03-01-simulation.md │ │ ├── 2000-04-01-gem5-basics.md │ │ └── 2000-05-01-gem5-devel.md └── Using gem5 │ └── _posts │ ├── 2000-01-01-index.md │ ├── 2000-02-01-stdlib.md │ ├── 2000-03-01-running.md │ ├── 2000-04-01-models-caches.md │ ├── 2000-05-01-models-cpu.md │ ├── 2000-06-01-models-memory.md │ ├── 2000-07-01-stats.md │ ├── 2000-08-01-full-system.md │ └── 2000-09-01-accelerating.md └── requirements.txt /.devcontainer/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM gcr.io/gem5-test/gem5-tutorial-env:latest 2 | 3 | RUN apt update -y && apt -y install apt-transport-https ca-certificates curl gnupg2 software-properties-common 4 | RUN curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - 5 | RUN add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" 6 | 7 | RUN apt-get update && apt-get -y install docker-ce docker-ce-cli containerd.io docker-compose-plugin 8 | 9 | # "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ 10 | # $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null -------------------------------------------------------------------------------- /.devcontainer/devcontainer.json: -------------------------------------------------------------------------------- 1 | { 2 | "hostRequirements": { 3 | "cpus": 16, 4 | "memory": "8gb", 5 | "storage": "32gb" 6 | }, 7 | "build": { "dockerfile": "Dockerfile" }, 8 | "onCreateCommand" : "bash ./.devcontainer/on_create.sh", 9 | "runArgs": ["--privileged", "-v", "/var/run/docker.sock:/var/run/docker.sock", "--security-opt", "seccomp=unconfined"], 10 | "extensions": [ 11 | "ms-vscode.cpptools", 12 | "streetsidesoftware.code-spell-checker", 13 | "eamodio.gitlens", 14 | "ms-python.vscode-pylance", 15 | "ms-python.python" 16 | ] 17 | } 18 | -------------------------------------------------------------------------------- /.devcontainer/on_create.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Update the submodules 4 | git submodule update --init --recursive 5 | 6 | # Create the stubs 7 | gem5-arm gem5_stubgen.py 8 | gem5-x86 gem5_stubgen.py 9 | gem5-riscv gem5_stubgen.py 10 | 11 | mv out typings 12 | 13 | # Setups the gem5 source directory 14 | cd gem5 15 | 16 | ## We cleanup git's 'blame' feature by ignoring certain commits (typically 17 | ## commits that have reformatted files) 18 | git config --global blame.ignoreRevsFile .git-blame-ignore-revs 19 | 20 | ## `git pull` should rebase by default 21 | git config --global pull.rebase true 22 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Ignore all m5out directories and build directories 2 | **/m5out/ 3 | 4 | # Jekyll stuff 5 | _site/ 6 | .sass-cache/ 7 | Gemfile.lock 8 | 9 | typings/ 10 | 11 | # .vscode stuff 12 | .vscode/*.log 13 | 14 | __pycache__ 15 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "gem5"] 2 | path = gem5 3 | url = https://gem5.googlesource.com/public/gem5 4 | [submodule "gem5-resources"] 5 | path = gem5-resources 6 | url = https://gem5.googlesource.com/public/gem5-resources 7 | -------------------------------------------------------------------------------- /.pre-commit-config.yaml: -------------------------------------------------------------------------------- 1 | repos: 2 | - repo: https://github.com/markdownlint/markdownlint 3 | rev: e31711c0db57df9b350fbaeaae6de745972f3e66 4 | hooks: 5 | - id: markdownlint 6 | args: ["-i", "-r ~MD013,~MD026"] 7 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "python.formatting.provider": "black", 3 | "python.analysis.stubPath": "typings", 4 | "python.analysis.extraPaths": ["gem5/src/python"], 5 | "python.formatting.blackArgs": [ 6 | "--line-length", 7 | "79" 8 | ], 9 | "editor.rulers": [ 10 | 79 11 | ] 12 | } 13 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | gem 'github-pages' 3 | -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | # basic configuration 2 | markdown: kramdown 3 | permalink: /:categories/:title/ 4 | 5 | # Please leave this code here for us to see how Course in a Box get used 6 | p2pu_ga_tracking_code: UA-55722824-1 7 | 8 | # Some files we need to exclude, so Github can build the site 9 | exclude: [Gemfile, Gemfile.lock, README.md] 10 | 11 | kramdown: 12 | parse_block_html: true 13 | math_engine: mathjax 14 | 15 | defaults: 16 | - 17 | scope: 18 | path: "modules" # an empty string here means all files in the project 19 | values: 20 | layout: "course_page" 21 | 22 | prose: 23 | media: /assets/img 24 | ignore: 25 | - /_includes 26 | - /_layouts 27 | - /_sass 28 | - /assets/fonts 29 | - /assets/js 30 | - /assets/css 31 | 32 | exclude: 33 | - /gem5 34 | - /gem5-resources 35 | 36 | # Set some personal styles and logo for your course 37 | # this is a hex value http://www.w3schools.com/tags/ref_colorpicker.asp 38 | jumbotron_color: "#b5b3aa" 39 | jumbotron_image: "img/1280px-Haswell_Chip.jpeg" 40 | -------------------------------------------------------------------------------- /_data/course.yml: -------------------------------------------------------------------------------- 1 | title: "gem5 Bootcamp 2022" 2 | description: "gem5 Bootcamp Summer 2022 at UC Davis offered by the Davis Computer Architecture Research Group" 3 | modules: ["Introduction", "Using gem5", "Developing gem5 models", "Extra topics"] 4 | -------------------------------------------------------------------------------- /_includes/footer.html: -------------------------------------------------------------------------------- 1 | 20 | 21 | -------------------------------------------------------------------------------- /_includes/ga.html: -------------------------------------------------------------------------------- 1 | 20 | -------------------------------------------------------------------------------- /_includes/navigation.html: -------------------------------------------------------------------------------- 1 | 2 | 23 | -------------------------------------------------------------------------------- /_includes/next_in_module.html: -------------------------------------------------------------------------------- 1 | {% assign next=null %} 2 | {% assign prev=null %} 3 | {% assign temp=null %} 4 | 5 | {% for p in site.categories[module] reversed %} 6 | {% if p.url == page.url %} 7 | {% if temp %} 8 | {% assign prev=temp %} 9 | {% endif %} 10 | {% elsif temp.url == page.url %} 11 | {% assign next=p %} 12 | {% endif %} 13 | {% assign temp=p %} 14 | {% endfor %} 15 | -------------------------------------------------------------------------------- /_includes/next_module.html: -------------------------------------------------------------------------------- 1 | {% assign next=null %} 2 | {% assign prev=null %} 3 | {% assign temp=null %} 4 | 5 | {% for m in site.data.course.modules %} 6 | {% if m == module and forloop.first != true %} 7 | {% assign p = forloop.index0 | minus:1 %} 8 | {% assign prev = site.data.course.modules[p] %} 9 | {% assign prev_post = site.categories[prev]|reverse|first %} 10 | {% endif %} 11 | {% if m == module and forloop.last != true %} 12 | {% assign n = forloop.index0 | plus:1 %} 13 | {% assign next = site.data.course.modules[n] %} 14 | {% assign next_post = site.categories[next]|reverse|first %} 15 | {% endif %} 16 | {% endfor %} 17 | 18 | -------------------------------------------------------------------------------- /_includes/page-toc.html: -------------------------------------------------------------------------------- 1 | 2 | {% for post in site.posts %} 3 | {% assign name=post.id | split: '/' | last %} 4 | {% if name != include.name %} 5 | {% continue %} 6 | {% endif %} 7 | {% assign temp = post.content | markdownify %} 8 | {% assign purl = post.url | relative_url %} 9 | {% include toc.html html=temp base_url=purl h_max=3 %} 10 | {% endfor %} 11 | -------------------------------------------------------------------------------- /_includes/side_toolbar.html: -------------------------------------------------------------------------------- 1 | 35 | -------------------------------------------------------------------------------- /_layouts/course_page.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: base 3 | --- 4 | {% assign module=page.categories[1] %} 5 |
6 |
7 | {% include side_toolbar.html %} 8 |
9 |
10 |

{{ page.title }}

11 | 16 | {% if page.livestream_code == null %}
17 | {% else %} 18 | {% endif %} 19 | {% if page.slides_code == null %}
20 | {% else %} 22 | {% endif %} 23 | {{ content }} 24 | {% if page.discussion %} {% include prompt.html content="

General discussion

" %} {% endif %} 25 | {% include next_in_module.html %} 26 | {% if prev or next %}
{% endif %} 27 |
28 |
29 | {% if prev %} 30 |
31 | Previous submodule: 32 |
33 | 35 | {% endif %} 36 |
37 | {% if next %} 38 |
39 |
40 | Next submodule: 41 |
42 | 44 |
45 | {% endif %} 46 |
47 |
48 |
49 |
50 |
51 | -------------------------------------------------------------------------------- /_layouts/index.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: base 3 | --- 4 | 5 | 6 |
7 |
8 | {% if site.jumbotron_icon %} 9 | {{ site.title }} Icon 10 | {% endif %} 11 |

{{ site.data.course.title }}

12 |

{{site.data.course.description}}

13 | 14 |
15 |
16 | 17 |
18 |
19 |
20 |
21 | {{ content }} 22 |
23 |
24 |
25 |
26 | -------------------------------------------------------------------------------- /_layouts/page-toc.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: base 3 | --- 4 |
5 |
6 | 9 |
10 |
11 |

{{ page.title }}

12 | {{ content }} 13 | {% include next_in_module.html %} 14 | {% if prev or next %}
{% endif %} 15 |
16 |
17 |
18 |
19 | -------------------------------------------------------------------------------- /_layouts/page.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: base 3 | --- 4 |
5 |
6 |
7 |
8 |

{{ page.title }}

9 | {{ content }} 10 |
11 |
12 |
13 |
14 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/_alert.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Base styles 3 | // 4 | 5 | .alert { 6 | position: relative; 7 | padding: $alert-padding-y $alert-padding-x; 8 | margin-bottom: $alert-margin-bottom; 9 | border: $alert-border-width solid transparent; 10 | @include border-radius($alert-border-radius); 11 | } 12 | 13 | // Headings for larger alerts 14 | .alert-heading { 15 | // Specified to prevent conflicts of changing $headings-color 16 | color: inherit; 17 | } 18 | 19 | // Provide class for links that match alerts 20 | .alert-link { 21 | font-weight: $alert-link-font-weight; 22 | } 23 | 24 | 25 | // Dismissible alerts 26 | // 27 | // Expand the right padding and account for the close button's positioning. 28 | 29 | .alert-dismissible { 30 | padding-right: $close-font-size + $alert-padding-x * 2; 31 | 32 | // Adjust close link position 33 | .close { 34 | position: absolute; 35 | top: 0; 36 | right: 0; 37 | padding: $alert-padding-y $alert-padding-x; 38 | color: inherit; 39 | } 40 | } 41 | 42 | 43 | // Alternate styles 44 | // 45 | // Generate contextual modifier classes for colorizing the alert. 46 | 47 | @each $color, $value in $theme-colors { 48 | .alert-#{$color} { 49 | @include alert-variant(theme-color-level($color, $alert-bg-level), theme-color-level($color, $alert-border-level), theme-color-level($color, $alert-color-level)); 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/_badge.scss: -------------------------------------------------------------------------------- 1 | // Base class 2 | // 3 | // Requires one of the contextual, color modifier classes for `color` and 4 | // `background-color`. 5 | 6 | .badge { 7 | display: inline-block; 8 | padding: $badge-padding-y $badge-padding-x; 9 | @include font-size($badge-font-size); 10 | font-weight: $badge-font-weight; 11 | line-height: 1; 12 | text-align: center; 13 | white-space: nowrap; 14 | vertical-align: baseline; 15 | @include border-radius($badge-border-radius); 16 | @include transition($badge-transition); 17 | 18 | @at-root a#{&} { 19 | @include hover-focus() { 20 | text-decoration: none; 21 | } 22 | } 23 | 24 | // Empty badges collapse automatically 25 | &:empty { 26 | display: none; 27 | } 28 | } 29 | 30 | // Quick fix for badges in buttons 31 | .btn .badge { 32 | position: relative; 33 | top: -1px; 34 | } 35 | 36 | // Pill badges 37 | // 38 | // Make them extra rounded with a modifier to replace v3's badges. 39 | 40 | .badge-pill { 41 | padding-right: $badge-pill-padding-x; 42 | padding-left: $badge-pill-padding-x; 43 | @include border-radius($badge-pill-border-radius); 44 | } 45 | 46 | // Colors 47 | // 48 | // Contextual variations (linked badges get darker on :hover). 49 | 50 | @each $color, $value in $theme-colors { 51 | .badge-#{$color} { 52 | @include badge-variant($value); 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/_breadcrumb.scss: -------------------------------------------------------------------------------- 1 | .breadcrumb { 2 | display: flex; 3 | flex-wrap: wrap; 4 | padding: $breadcrumb-padding-y $breadcrumb-padding-x; 5 | margin-bottom: $breadcrumb-margin-bottom; 6 | @include font-size($breadcrumb-font-size); 7 | list-style: none; 8 | background-color: $breadcrumb-bg; 9 | @include border-radius($breadcrumb-border-radius); 10 | } 11 | 12 | .breadcrumb-item { 13 | display: flex; 14 | 15 | // The separator between breadcrumbs (by default, a forward-slash: "/") 16 | + .breadcrumb-item { 17 | padding-left: $breadcrumb-item-padding; 18 | 19 | &::before { 20 | display: inline-block; // Suppress underlining of the separator in modern browsers 21 | padding-right: $breadcrumb-item-padding; 22 | color: $breadcrumb-divider-color; 23 | content: escape-svg($breadcrumb-divider); 24 | } 25 | } 26 | 27 | // IE9-11 hack to properly handle hyperlink underlines for breadcrumbs built 28 | // without ` -------------------------------------------------------------------------------- /modules/Developing gem5 models/_posts/2000-06-01-execution-model.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Instruction execution in gem5" 3 | author: Ayaz Akram 4 | slides_code: "develop-06-cpu-instructions.pdf" 5 | livestream_code: Z5B02jkNpck 6 | example_code: /materials/developing-gem5-models/06-cpu-instructions 7 | --- 8 | 9 | The below is in no particular order. 10 | 11 | ## Translation in CPUs 12 | 13 | ## Overview of O3 14 | 15 | ## Steps to execute instruction (decode, execute/initiateAcc) 16 | 17 | ## Execution context 18 | 19 | ## Thread context 20 | 21 | ## Branch predictor 22 | -------------------------------------------------------------------------------- /modules/Developing gem5 models/_posts/2000-08-01-memory-system.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Extending the memory system 3 | author: Marjan Fariborz 4 | --- 5 | 6 | ## How classic caches work 7 | 8 | - The coherence protocol (MOESI with a snoop filter) 9 | - MSHRs 10 | - Debugging 11 | - How to add a new replacement policy 12 | - How to add a new tag policy 13 | 14 | ## About Request, MemCmd, and Packets 15 | 16 | - How to add a new `MemCmd` 17 | - How to add information to packets (SenderState) 18 | -------------------------------------------------------------------------------- /modules/Developing gem5 models/_posts/2000-10-01-ruby-network.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ruby network and Garnet 3 | author: Marjan Fariborz 4 | slides_code: "develop-10-ruby-network.pdf" 5 | livestream_code: rZ-AYaKBK4M 6 | example_code: /materials/developing-gem5-models/10-ruby-network 7 | --- 8 | 9 | - What is Garnet and how is it different from Simple network? 10 | - How is it connected to Ruby and memory controllers 11 | - Garnet components: 12 | - Network configuration 13 | - Building blocks: 14 | - Links (External and internal links) 15 | - Routers 16 | - Interconnection topology 17 | - Mesh, crossbar 18 | - Routing algorithms 19 | - Flow Control 20 | - Life cycle of message through Garnet 21 | - Synthetic traffic 22 | - Example: Using Garnet Synthetic traffic 23 | - Understanding the statistics 24 | -------------------------------------------------------------------------------- /modules/Developing gem5 models/_posts/2000-11-01-gpu.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: gem5's GPGPU model 3 | author: Matt Sinclair 4 | livestream_code: 1a9Yj-QaQoo 5 | slides_code: "develop-gem5-tutorial-2022-gpu.pdf" 6 | example_code: /materials/developing-gem5-models/11-gpu 7 | --- 8 | 9 | This is all about how to use and develop for the GPU. 10 | -------------------------------------------------------------------------------- /modules/Extra topics/_posts/2000-01-01-index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Extra topics 3 | author: Jason Lowe-Power 4 | --- 5 | 6 | This section provides some extra topics about gem5. 7 | 8 | -------------------------------------------------------------------------------- /modules/Extra topics/_posts/2000-03-01-other-sims.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Using other simulators with gem5 3 | author: Hoa Nguyen 4 | slides_code: "extra-01-SST.pdf" 5 | livestream_code: gpDoDTPPkHU 6 | example_code: /materials/extra-topics/01-sst-examples 7 | --- 8 | 9 | ## Interfaces for connecting other simulators 10 | 11 | - How to deal with multiple event queues 12 | 13 | ## Example connections 14 | 15 | - DRAMSim3 16 | - SST 17 | - SystemC (gem5 in SystemC) 18 | 19 | ## The SystemC implementation in gem5 20 | 21 | - How this is different than gem5 in SystemC 22 | - How to use it 23 | 24 | ### TLM in gem5 25 | 26 | - How TLM relates to requestor/responder ports 27 | - How to use the TLM bridge 28 | -------------------------------------------------------------------------------- /modules/Extra topics/_posts/2000-04-01-checkpointing-commmonitor.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Checkpointing and CommMonitor 3 | author: ["Kaustav Goswami", "Mahyar Samani"] 4 | slides_code: EV1NBrSaIddEq-3CX3Ryb7wBTMaGQT7CFxacKoNN-wbmBQ?e=WUjMo9 5 | livestream_code: TeHKMVOWUAY 6 | --- 7 | 8 | - Completing checkpointing in gem5. 9 | - Introduction to CommMonitor and its uses. 10 | -------------------------------------------------------------------------------- /modules/Extra topics/_posts/2000-05-01-extra-topics.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Extra Topics 3 | author: ["Kaustav Goswami", "Maryam Babaie", "Hoa Nguyen"] 4 | slides_code: "extra-KVM-with-m5-and-Memory-System.pdf" 5 | livestream_code: hciJ9rguats 6 | --- 7 | 8 | - An overview of branch predictors and other useful components of gem5. 9 | - An introduction into KVM and its utilities. 10 | - A tutorial on how to use the stats libraries and add your own stats. 11 | - A brief look at LupIO. 12 | -------------------------------------------------------------------------------- /modules/Extra topics/_posts/cpu-and-caches.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 3 | author: Kaustav Goswami 4 | slides_code: 5 | livestream_code: 6 | example_code: /materials/extra-topics/03-cpu-and-caches 7 | --- -------------------------------------------------------------------------------- /modules/Extra topics/_posts/monitor-and-trace.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 3 | author: Mahyar Samani 4 | slides_code: 5 | livestream_code: 6 | example_code: /materials/extra-topics/02-monitor-and-trace 7 | --- -------------------------------------------------------------------------------- /modules/Introduction/_posts/2000-01-01-index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Introduction to gem5 3 | author: Jason Lowe-Power 4 | --- 5 | 6 | Welcome to the gem5 Bootcamp! 7 | 8 | 22 | -------------------------------------------------------------------------------- /modules/Introduction/_posts/2000-02-01-intro.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: About the bootcamp 3 | author: Jason Lowe-Power 4 | slides_code: "intro-02-intro-jason.pdf" 5 | livestream_code: orASbQ02pDw 6 | --- 7 | 8 | ## Outline 9 | 10 | - These are the people who will be presenting the bootcamp 11 | - This is a bit about the bootcamp attendees 12 | - This is how the bootcamp is going to work 13 | - We'll be using codespaces, make sure everyone can access 14 | - This is the outline for the week 15 | 16 | ### Day 1: Intro and getting started 17 | 18 | Morning: Basics of using gem5, first scripts, and some background on software development and computer architecture simulation. 19 | 20 | Afternoon: Using the gem5 standard library 21 | 22 | Evening: Reception at [Dunloe Brewing](https://dunloebrewing.com/) 23 | -------------------------------------------------------------------------------- /modules/Introduction/_posts/2000-05-01-gem5-devel.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Getting started with gem5 development 3 | author: Jason Lowe-Power 4 | slides_code: "intro-05-intro-devel-jason.pdf" 5 | livestream_code: U4xThpRC1AI 6 | --- 7 | 8 | ## Why develop gem5? 9 | 10 | - Add new models 11 | - Extend current models 12 | - Fix things and contribute back! 13 | 14 | ### A bit about the difference between C++ and python 15 | 16 | - The *models* are in C++ 17 | - The parameters that you can change are declared in `src/`, but in a "python" file (SimObject description file) 18 | - You have an "instance" or "configuration" which sets the parameters. 19 | 20 | - An analogy 21 | - The model is "An out of order CPU" 22 | - The parameters are the size of the reorder buffer and the issue width 23 | - The "instance" or "configuration" is an i7-7700 24 | 25 | ### What is a SimObject? 26 | 27 | - Main thing that gem5 uses as the bridge from the C++ models to the python configuration 28 | - Things in `src/` and in the SimObjects should be the *model* not the configuration. 29 | 30 | ### gem5's event queue 31 | 32 | - A bit about event-driven programming 33 | - What it means for events to execute 34 | - Relation between SimObjects and events 35 | 36 | ## Building gem5 37 | 38 | - Dependencies 39 | - Build system: [SCons](https://scons.org/) 40 | - Build parameters 41 | - Two types: gem5 features and compiler parameters 42 | - Opt/fast, profiling, linker 43 | - ISA, GPU, Ruby protocol, others 44 | 45 | ## Making modifications and using git 46 | 47 | - Install the hooks! 48 | - Use the style checker! Don't ignore it! 49 | - Create a branch for yourself 50 | - Use good commit messages... it's worth the time! 51 | -------------------------------------------------------------------------------- /modules/Using gem5/_posts/2000-01-01-index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Using gem5 3 | author: Jason Lowe-Power 4 | --- 5 | 6 | This is an introduction to this section. 7 | 8 | -------------------------------------------------------------------------------- /modules/Using gem5/_posts/2000-03-01-running.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Running things in gem5" 3 | author: Maryam Babaie 4 | slides_code: "using-gem5-03-gem5-running-tutorial.pdf" 5 | livestream_code: 7QX-QdBtFGY 6 | example_code: /materials/using-gem5/03-running 7 | --- 8 | 9 | ## Non-code-based execution 10 | 11 | - Traffic generators 12 | - Show how to connet 13 | - Maybe an assignment 14 | 15 | ## SE mode 16 | 17 | - What's needed for SE mode 18 | - SE mode uses the *host* for many things 19 | - Demonstrate that printf takes 0 time in gem5? 20 | - Maybe an example where you see the size of a file and/or list a directory to show that gem5 is using the host FS 21 | - Show the syscall implementation in `src/sim/syscall..` 22 | - SE mode file services and redirects 23 | 24 | ## m5 magic utility 25 | 26 | - How magic instructions work (and why magic instructions) 27 | - How to build the library 28 | - How to link to it 29 | - How to build the utility (to be used in FS mode...) 30 | - Might want to look at where they are implemented. 31 | 32 | ## Cross compiling from one arch to another 33 | 34 | ## Building gem5 for different ISAs 35 | 36 | - x86 37 | - Arm 38 | - RISC-V 39 | - Also, PPC/SPARC 40 | 41 | ## How to change the parameters of sim object 42 | - mentioned by Jason 43 | - e.g., traffGen 44 | 45 | ## Other things not covered 46 | 47 | - How to use traces 48 | - Run a workload, save the memory trace 49 | - Replay the memory trace 50 | - SE mode drivers 51 | - SE mode page tables/mmap 52 | -------------------------------------------------------------------------------- /modules/Using gem5/_posts/2000-04-01-models-caches.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "gem5 models: Caches" 3 | author: Marjan Fariborz 4 | slides_code: "using-gem5-04-gem5-caches-tutorial.pdf" 5 | livestream_code: ai2y4xj-fOs 6 | example_code: /materials/using-gem5/04-cache-models 7 | --- 8 | 9 | ## Classic caches 10 | 11 | ## Ruby caches 12 | 13 | ### SLICC 14 | 15 | - This is just talking about the idea of slicc, no details. 16 | - Just "you have to compile different protocols" and "this is where you find them" 17 | 18 | ## On-chip Network in Ruby 19 | 20 | ### Simple 21 | 22 | ### Garnet 23 | 24 | - Use classic caches in a simulation 25 | - Use Ruby caches in a simulation (understand the different coherence protocols, how to compile them and how to create a cache hierarchy via a simple network) 26 | -------------------------------------------------------------------------------- /modules/Using gem5/_posts/2000-06-01-models-memory.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "gem5 models: Memory" 3 | --- 4 | -------------------------------------------------------------------------------- /modules/Using gem5/_posts/2000-07-01-stats.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Understand gem5 statistics 3 | --- 4 | 5 | More on stats in future iterations of this bootcamp. 6 | -------------------------------------------------------------------------------- /modules/Using gem5/_posts/2000-08-01-full-system.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Using gem5 for full-system simulation 3 | author: Maryam Babaie 4 | slides_code: "using-gem5-08-gem5-fullsystem-tutorial.pdf" 5 | livestream_code: dMVrNyYqfMA 6 | example_code: /materials/using-gem5/08-fullsystem 7 | --- 8 | 9 | ## Things you need for full system 10 | 11 | - Disk 12 | - Kernel 13 | - DTB 14 | 15 | ## Tools for FS 16 | 17 | - m5term 18 | - How to communicate 19 | 20 | ### How to get these things from gem5-resources 21 | 22 | ### How to create your own disks/kernels/etc. 23 | 24 | - How to extend/modify a gem5 resource 25 | - How to create a new resource 26 | - How to use QEMU to modify disks 27 | - How to mount a disk to modify it. 28 | - How to use the `CustomResource` 29 | 30 | ## The m5 utility 31 | 32 | - `m5 exit` 33 | - `m5 readfile` and loading scripts 34 | -------------------------------------------------------------------------------- /modules/Using gem5/_posts/2000-09-01-accelerating.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Accelerating gem5 simulation 3 | author: Kaustav Goswami 4 | slides_code: "using-gem5-09-accelerating-simulation.pdf" 5 | livestream_code: 0Gxuc8lel3Y 6 | example_code: /materials/using-gem5/09-accelerating-simulations 7 | --- 8 | 9 | ## Checkpoints 10 | 11 | - How to create a checkpoint 12 | - How to load a checkpoint 13 | 14 | ## Fast forwarding in atomic mode 15 | 16 | - Switching CPUs 17 | 18 | ## Fast forwarding in KVM mode 19 | 20 | - What's required for KVM 21 | - This will be more show and less example since students won't have access to KVM 22 | 23 | ## How to use probe points? 24 | 25 | Not sure if this will be covered here or not. Would be good, though. 26 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | pre-commit 2 | --------------------------------------------------------------------------------