{"id":23657794,"url":"https://github.com/aliireza/ddio-bench","last_synced_at":"2026-01-27T10:10:05.894Z","repository":{"id":47338028,"uuid":"260184443","full_name":"aliireza/ddio-bench","owner":"aliireza","description":"Reexamining Direct Cache Access to Optimize I/O Intensive Applications for Multi-hundred-gigabit Networks","archived":false,"fork":false,"pushed_at":"2021-09-02T15:37:04.000Z","size":1292,"stargazers_count":96,"open_issues_count":1,"forks_count":20,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-09-09T04:04:11.675Z","etag":null,"topics":["benchmark","dca","ddio"],"latest_commit_sha":null,"homepage":"https://www.usenix.org/conference/atc20/presentation/farshin","language":"Makefile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aliireza.png","metadata":{"files":{"readme":"README.md","changelog":"change-ddio.c","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":"2020-04-30T10:43:32.000Z","updated_at":"2025-08-29T03:34:38.000Z","dependencies_parsed_at":"2022-08-29T17:30:12.979Z","dependency_job_id":null,"html_url":"https://github.com/aliireza/ddio-bench","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/aliireza/ddio-bench","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aliireza%2Fddio-bench","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aliireza%2Fddio-bench/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aliireza%2Fddio-bench/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aliireza%2Fddio-bench/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aliireza","download_url":"https://codeload.github.com/aliireza/ddio-bench/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aliireza%2Fddio-bench/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28811529,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-27T07:41:26.337Z","status":"ssl_error","status_checked_at":"2026-01-27T07:41:08.776Z","response_time":168,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["benchmark","dca","ddio"],"created_at":"2024-12-28T21:58:04.869Z","updated_at":"2026-01-27T10:10:05.856Z","avatar_url":"https://github.com/aliireza.png","language":"Makefile","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ddio-bench: Understanding Intel Data Direct I/O Technology\n\nThis repository contains information/source code to perform the experiments done in [DDIO paper][ddio-atc-paper] published at [ATC'20][atc20-page].\n\n## Experiments\n\nThis repositoy mainly focuses on the experiments performed in Section 4 and 5 of [DDIO paper][ddio-atc-paper].\n\nThe experiments are located at `experiments/`. Every folder has a `Makefile` and `README.md` that can be used to run the experiment.\n\nFor more information, please check [README](experiments/README.md).\n\n**Note that you have to setup your testbed based on [our guidelines](TESTBED.md) before running any experiment.**\n\n## Tuning DDIO\n\nYou can use [DDIOTune][ddiotune-element] element in Fastclick to enable/disable/tune DDIO. If you want to tune DDIO in a different context, you can use the following guidelines.\n\n- **Tuning**: Our experiments show that changing the values of `IIO LLC WAYS` register, located at `0xC8B`, could improve the performance of DDIO. The default value of this register in our testbed is `0x600`, which has 2 set bits. You can read the current value and write new values to this register via `msr-tools`, as follows:\n\n```bash\nsudo apt-get install msr-tools\nsudo modprobe msr\nsudo rdmsr 0xc8b\nsudo wrmsr 0xc8b 0x7f0\n```\n\n- **Disabling/Enabling DDIO**: DDIO is enabled by default on Intel Xeon processors. DDIO can be disabled globally (i.e.,  by setting the `Disable_All_Allocating_Flows` bit in `iiomiscctrl` register) or per-root PCIe port (i.e., setting bit `NoSnoopOpWrEn` and unsetting bit `Use_Allocating_Flow_Wr` in `perfctrlsts_0` register). You can find more information about these registers in the second volume of your processor's datasheet. For instance, you can check [Haswell][haswell-datasheet] and [Cascade Lake][cascade-datasheet] datasheets.\n\n`change-ddio.c` is a simple C program to change the state of DDIO for a PCIe port. To use `change-ddio`, run the following commands:\n\n```bash\nsudo apt-get install libpci-dev\ngcc change-ddio.c -o change-ddio -lpci\nsudo ./change-ddio\n```\n\nYou need to define the proper value for **nic_bus** and **ddio_state** in the code. For example, if you have a NIC that is mounted on `03:00.0`, you should change **nic_bus** to `0x03`. **ddio_state=0** will disable the DDIO for the PCIe root responsible for that specific NIC.\n\nYou can find the PCIe BDF (Bus Device Function) of your NIC via `lspci`, e.g., try `lspci -vvv | grep Mellanox` if you have a Mellanox card. \n\nYou can also check the implementation of [DDIOTune][ddiotune-cc] element in Fastclick.\n\n## Dynamic Burst Size Reduction\n\nWe have investigated the impact of dynamically reducing the number of RX descriptors in case of congestion in the TX path. Our implementation can be found at [DMAdynamic][dynamic-dma-branch] branch of Fastclick.\n\nIf you want to try it, you have to compile Fastclick with `--enable_dynamic_rxburst` flag.\n\n## Citing our paper\n\nIf you use ddio-bench in any context, please cite our [paper][ddio-atc-paper]:\n\n```bibtex\n@inproceedings {farshin-ddio,\nauthor = {Farshin, Alireza and Roozbeh, Amir and {Maguire Jr.}, Gerald Q. and Kosti\\'{c}, Dejan},\ntitle = {{Reexamining Direct Cache Access to Optimize I/O Intensive Applications for Multi-hundred-gigabit Networks}},\nbooktitle = {2020 {USENIX} Annual Technical Conference ({USENIX} {ATC} 20)},\nyear = {2020},\nisbn = {978-1-939133-14-4},\npages = {673--689},\nurl = {https://www.usenix.org/conference/atc20/presentation/farshin},\npublisher = {{USENIX} Association},\nmonth = jul,\n}\n```\n\n## Getting Help\n\nIf you have any questions regarding our code or the paper, you can contact [Alireza Farshin][alireza-page] (farshin at kth.se) and/or [Amir Roozbeh][amir-page] (amirrsk at kth.se).\n\n[ddio-atc-paper]: https://www.usenix.org/conference/atc20/presentation/farshin\n[atc20-page]: https://www.usenix.org/conference/atc20\n[npf-repo]: https://github.com/tbarbette/npf\n[npf-readme]: https://github.com/tbarbette/npf#network-performance-framework\n[dpdk-page]:https://www.dpdk.org/\n[testpmd-doc]: https://doc.dpdk.org/guides/testpmd_app_ug/intro.html\n[fastclick-repo]: https://github.com/tbarbette/fastclick\n[ddiotune-element]: https://github.com/tbarbette/fastclick/wiki/DDIOTune\n[ddiotune-cc]: https://github.com/tbarbette/fastclick/blob/master/elements/research/ddiotune.cc\n[pcm-page]: https://software.intel.com/content/www/us/en/develop/articles/intel-performance-counter-monitor.html\n[rdt-page]: https://www.intel.com/content/www/us/en/architecture-and-technology/resource-director-technology.html\n[pqos-wiki]: https://github.com/intel/intel-cmt-cat/wiki\n[pcie-events]: https://software.intel.com/en-us/forums/software-tuning-performance-optimization-platform-monitoring/topic/543883\n[mlx5-counters]: https://community.mellanox.com/s/article/understanding-mlx5-ethtool-counters\n[haswell-datasheet]: https://www.intel.com/content/dam/www/public/us/en/documents/datasheets/xeon-e5-v2-datasheet-vol-2.pdf\n[cascade-datasheet]: https://www.intel.com/content/www/us/en/products/docs/processors/xeon/2nd-gen-xeon-scalable-datasheet-vol-2.html\n[dynamic-dma-branch]: https://github.com/tbarbette/fastclick/tree/DMAdynamic\n[alireza-page]: https://www.kth.se/profile/farshin\n[amir-page]: https://www.kth.se/profile/amirrsk\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faliireza%2Fddio-bench","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faliireza%2Fddio-bench","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faliireza%2Fddio-bench/lists"}