{"id":21965851,"url":"https://github.com/dasebe/webtracereplay","last_synced_at":"2025-04-24T03:47:39.006Z","repository":{"id":92430087,"uuid":"84307456","full_name":"dasebe/webtracereplay","owner":"dasebe","description":"Replay http request traces to evaluate the performance of webservers or caching systems.","archived":false,"fork":false,"pushed_at":"2019-05-28T20:19:22.000Z","size":16,"stargazers_count":7,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-24T03:47:32.448Z","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":"bsd-2-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dasebe.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-03-08T10:18:28.000Z","updated_at":"2023-05-05T12:51:29.000Z","dependencies_parsed_at":"2023-05-05T02:07:15.037Z","dependency_job_id":null,"html_url":"https://github.com/dasebe/webtracereplay","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/dasebe%2Fwebtracereplay","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dasebe%2Fwebtracereplay/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dasebe%2Fwebtracereplay/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dasebe%2Fwebtracereplay/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dasebe","download_url":"https://codeload.github.com/dasebe/webtracereplay/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250560009,"owners_count":21450168,"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-29T12:52:48.648Z","updated_at":"2025-04-24T03:47:38.999Z","avatar_url":"https://github.com/dasebe.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# webtracereplay\n\nThis project provides simple tools to replay http request traces to evaluate the performance of caching systems and webservers.\n\nThere are three components:\n\n - the client: which reads in the trace file and generates valid http requests\n - the server which you are trying to benchmark, e.g., nginx, Varnish, Apache TS, etc.\n - the origin: which emulates a database or storage server\n\nThese tools were built for the [AdaptSize project](https://github.com/dasebe/AdaptSize), see [References](#references) for more information.\n\n## Install webtracereplay\n\nPlease install\n\n - development versions of these three libraries: curl, fcgi, and fcgi++\n - spawn-fcgi\n - gcc with a version \u003e 5.0, ideally 6.0+\n\nThere are Makefiles for the client and origin:\n\n    cd client\n    make\n    cd ..\n\n    cd origin\n    make\n\n\nAlso compile and install a webserver/caching system, such as nginx. The example config in the server subfolder assumes we are using nginx. You can either point nginx to use the configuration file server/nginx.conf or copy the directory to /usr/share/nginx .\n\n\n## Request traces\n\nWe will need request traces for the client (to request objects) and the origin (to emulate objects).\n\n### Client request trace\n\nRequest traces must be given in a space-separated format with three colums\n- time is an unisgned int; not used currently, but can be used to schedule the replay\n- url/key should be a long long int, used to uniquely identify web objects\n\n| time |  id |\n| ---- | --- |\n|   1  |  1  |\n|   2  |  2  |\n|   3  |  1  |\n|   4  |  3  |\n|   4  |  1 |\n\n\n### Origin request trace\n\nThe origin request trace is simply a mapping of ids/urls to object sizes.\n\nRequest traces must be given in a space-separated format with two colums\n- url/key should be a long long int, used to uniquely identify web objects\n- size should be a long long int, this is the object's size in bytes\n\n|  id | size |\n| --- | ---- |\n|  1  |  120 |\n|  2  |   64 |\n|  1  |  120 |\n|  3  |  14  |\n|  1 |  120 |\n\n\n## Run an experiment with webtracereplay\n\nThis example assumes you have nginx installed and everything set up.\nThe client request trace is called \"client.tr\" and the origin request trace is called \"origin.tr\".\n\nWe will need three VMs, or different terminals/screens on the same box.\nStart these one after another.\n\n#### Start nginx\n\n    sudo nginx -c server/nginx.conf\n\n#### Start the origin\n\n    spawn-fcgi -a 127.0.0.1 -p 9000 -n origin/origin origin.tr\n\n#### Start trace replaying and write throughput and delay measurements to through.log and histogram.log respectively\n\n     client/client client.tr 20 127.0.0.1:7000 throughput.log histogram.log\n\n\n\n## Contributors are welcome\n\nWant to contribute? Great! We follow the [Github contribution work flow](https://help.github.com/articles/github-flow/).\nThis means that submissions should fork and use a Github pull requests to get merged into this code base.\n\nIf you come across a bug in webcachesim, please file a bug report by [creating a new issue](https://github.com/dasebe/webcachesim/issues/new).\n\n## References\n\nWe ask academic works, which built on this code, to reference the AdaptSize paper:\n\n    AdaptSize: Orchestrating the Hot Object Memory Cache in a CDN\n    Daniel S. Berger, Ramesh K. Sitaraman, Mor Harchol-Balter\n    To appear in USENIX NSDI in March 2017.\n    \nYou can find more information on [USENIX NSDI 2017 here.](https://www.usenix.org/conference/nsdi17/technical-sessions)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdasebe%2Fwebtracereplay","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdasebe%2Fwebtracereplay","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdasebe%2Fwebtracereplay/lists"}