{"id":19662195,"url":"https://github.com/efeslab/ispy-ripple","last_synced_at":"2025-04-28T21:31:58.221Z","repository":{"id":62604141,"uuid":"372649655","full_name":"efeslab/ispy-ripple","owner":"efeslab","description":null,"archived":false,"fork":false,"pushed_at":"2024-07-04T13:29:34.000Z","size":97,"stargazers_count":7,"open_issues_count":0,"forks_count":2,"subscribers_count":8,"default_branch":"main","last_synced_at":"2025-04-05T11:11:13.252Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/efeslab.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-05-31T23:19:42.000Z","updated_at":"2024-12-12T22:50:26.000Z","dependencies_parsed_at":"2022-11-04T00:40:33.379Z","dependency_job_id":null,"html_url":"https://github.com/efeslab/ispy-ripple","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/efeslab%2Fispy-ripple","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/efeslab%2Fispy-ripple/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/efeslab%2Fispy-ripple/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/efeslab%2Fispy-ripple/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/efeslab","download_url":"https://codeload.github.com/efeslab/ispy-ripple/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251391251,"owners_count":21582134,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-11T16:09:54.494Z","updated_at":"2025-04-28T21:31:57.938Z","avatar_url":"https://github.com/efeslab.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ispy-ripple\n\nWe provide a virtualbox image where data center applications used for i-spy and ripple evaluation are pre-installed and set up to run. Please download the VMDK file from [here](https://drive.google.com/file/d/1pP85BDT7wm4--o6NUMMwBqBej6CFKBso/view?usp=sharing). For instructions on how to import VMDK files, see this [blog](https://medium.com/riow/how-to-open-a-vmdk-file-in-virtualbox-e1f711deacc4). We tested this virtualbox image with 8 processor cores and 16GB RAM. The username/password for the virtual machine are `osboxes.org`. Data center application traces used for ispy and ripple can be downloaded from [here](https://drive.google.com/file/d/1tN8Jw1TcZ9CrDzDWK0HFUD-nVLhZDW9e/view?usp=sharing). These traces can be simulated using the [Intel PT frontend of zsim](https://github.com/stanford-mast/zsim/tree/memtrace).\n\n**Update (July 2024): Please download traces from [here](https://drive.google.com/file/d/10i082d0G_xKJYyEgi6MriIemPaPD32fr/view)**\n\n**Update: We also released traces of four more apps [here](https://drive.google.com/file/d/1RJYNbMR4G3m40ZiaflJ2Ox_DFB8vsgWv/view?usp=sharing)**\n\n# Setting up workloads on host/guest environment\n\nThis guide assumes that you are using ubuntu Linux distribution.\n\nThree HHVM applications (Drupal, Mediawiki, Wordpress): https://github.com/facebookarchive/oss-performance\n\nOnce you have installed HHVM (we use HHVM 5 built with gcc, the default ubuntu software manager one did not work for us, we had to follow this guide, https://docs.hhvm.com/hhvm/installation/building-from-source#ubuntu-15.04-vivid) and oss-performance suite along with their prerequisites, you can run the benchmarks using the following commands:\n\n```\nexport HHVM=/path/to/hhvm\npushd .\ncd /path/to/oss-performance\nfor i in drupal7 wordpress mediawiki;\ndo\n  $HHVM perf.php --$i --hhvm=$(echo $HHVM)\ndone\n```\n\nAlternatively, you can use the virtualbox image where HHVM workloads are pre-installed and set up to run. The oss-performance benchmarks are in a folder of the same name that you can cd into right from `~`. You'll have to run the one line shell command from time_wait.md before you get started running benchmarks (if you don't it will tell you to do so). Also, the first run of a benchmark on a given startup will want to login to mysql to set things up- the credentials are `root` and `root`. So, to run the wordpress benchmark, for example, you would boot up the machine, cd into `oss-performance`, `cat time_wait.md` to figure out the one-liner shell command to run, then run `hhvm perf.php --wordpress --hhvm=$(which hhvm)`.\n\nThree DaCapo applications (Cassandra, Kafka, Tomcat): http://dacapobench.org\n\nOnce you have installed jvm (we used GraalVM, installation guide, https://www.graalvm.org/docs/getting-started-with-graalvm/linux/) and dacapo (We download download the file from https://sourceforge.net/projects/dacapobench/files/evaluation/dacapo-evaluation-git%2B309e1fa-java8.jar/download), you can run the benchmarks using the following commands:\n\n```\nfor i in cassandra kafka tomcat;\ndo\n  java -jar /path/to/dacapo-evaluation-git+309e1fa-java8.jar $i -n 10\ndone\n```\n\nTwo Renaissance applications (Finagle-Chirper and Finagle-HTTP): https://renaissance.dev\nOnce you have installed jvm (again, we use GraalVM) and renaissance (we download the file from https://github.com/renaissance-benchmarks/renaissance/releases/download/v0.10.0/renaissance-gpl-0.10.0.jar), you can run the benchmarks using the following commands:\n\n```\nfor i in chirper http;\ndo\n  java -jar /path/to/renaissance.jar finagle-$i -r 10\ndone\n```\n\n# Setting up verilator (originally provided by Scott Beamer)\n\n1) Get the rocket-chip repo\n```\ngit clone https://github.com/freechipsproject/rocket-chip.git\n```\n2) Move to the same commit I was at:\n```\ncd rocket-chip\ngit checkout aca2f0c3b9fb81f42e4d1\n```\n3) Instantiate the appropriate version of riscv-fesvr\n```\ngit submodule update --init riscv-tools\ncd riscv-tools\ngit submodule update --init riscv-tools riscv-fesvr\n```\n4) Create a RISCV directory (to hold relevant software)\n```\nmkdir riscv\nexport RISCV=path to riscv\n```\n5) Build \u0026 install riscv-fesvr\n```\ncd rocket-chip/riscv-tools/riscv-fesvr\nmkdir build\ncd build\n../configure --prefix=$RISCV --target=riscv64-unknown-elf\nmake install\n```\n6) Download and expand the tarball from Google Drive (https://drive.google.com/file/d/1WnrYhhYTGUMpndvoNpnzJOjgxdTOBHyL/view?usp=sharing) into rocket-chip (overwriting emulator)\n\nHopefully make will be able to reuse things, or at least choose to not invoke Chisel to regenerate the verilog files. I would try the binaries right away, and progressively try deleting more things (and rebuilding them for your system) until it works. The instructions below are for the single-core simulator because it is the fastest, but once you have a working methodology, change DefaultConfig to DefaultConfigN8 or DefaultConfigN16 to get more cores.\n\n7) Try executing the single-core simulator that is there:\n```\ncd emulator\n./emulator-freechips.rocketchip.system-DefaultConfig +cycle-count ./dhrystone-head.riscv\n```\n8) (If the above doesn't work), try to encourage make to re-link it all, and try #7 again\n```\nrm emulator-freechips.rocketchip.system-DefaultConfig\nmake CONFIG=DefaultConfig\n```\n9) (If the above doesn't work), try rebuilding all .o files, and try #8 again\n```\nrm generated-src/freechips.rocketchip.system.DefaultConfig/*.o\n```\n10) (If the above doesn't work), try rebuilding verilator (and re-running verilator) by executing #8 again\n```\nrm -rf verilator\nrm -rf generated-src/freechips.rocketchip.system.DefaultConfig\n```\nWhen you start compiling large binaries, you can turn on parallel builds with -j:\n```\nmake MAKEFLAGS=\"$MAKEFLAGS -j4\" CONFIG=DefaultConfigN8\n```\nIf you do need to run the Scala to generate new designs, make sure to install version 8 of the JVM. If when emitting a large design you run out of memory, you can ask for more:\n```\nmake JVM_MEMORY=8G MAKEFLAGS=\"$MAKEFLAGS -j4\" CONFIG=DefaultConfigN8\n```\n\n# Publications\n\n```\n@inproceedings{khan2020ispy,\n  author = {Khan, Tanvir Ahmed and Sriraman, Akshitha and Devietti, Joseph and Pokam, Gilles and Litz, Heiner and Kasikci, Baris},\n  title = {I-SPY: Context-Driven Conditional Instruction Prefetching with Coalescing},\n  booktitle = {Proceedings of the 53rd IEEE/ACM International Symposium on Microarchitecture (MICRO)},\n  series = {MICRO 2020},\n  year = {2020},\n  publisher = {IEEE},\n  url = {https://doi.org/10.1109/MICRO50266.2020.00024},\n  doi = {10.1109/MICRO50266.2020.00024},\n}\n\n@inproceedings{khan2021ripple,\n  author = {Khan, Tanvir Ahmed and Zhang, Dexin and Sriraman, Akshitha and Devietti, Joseph and Pokam, Gilles and Litz, Heiner and Kasikci, Baris},\n  title = {Ripple: Profile-Guided Instruction Cache Replacement for Data Center Applications},\n  booktitle = {Proceedings of the 48th International Symposium on Computer Architecture (ISCA)},\n  series = {ISCA 2021},\n  year = {2021},\n  month = jun,\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fefeslab%2Fispy-ripple","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fefeslab%2Fispy-ripple","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fefeslab%2Fispy-ripple/lists"}