{"id":27004502,"url":"https://github.com/tacc/ooops","last_synced_at":"2026-03-11T19:31:31.945Z","repository":{"id":73139345,"uuid":"204974859","full_name":"TACC/ooops","owner":"TACC","description":"ooops, an innovative IO workload managing system that optimally throttles the IO workload from the users' side. ","archived":false,"fork":false,"pushed_at":"2021-11-21T21:06:16.000Z","size":4064,"stargazers_count":13,"open_issues_count":0,"forks_count":3,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-07-06T10:47:43.341Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/TACC.png","metadata":{"files":{"readme":"README.md","changelog":"change_io_on_fly.jpg","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,"zenodo":null}},"created_at":"2019-08-28T16:21:49.000Z","updated_at":"2023-02-16T15:51:00.000Z","dependencies_parsed_at":"2023-02-28T01:31:41.716Z","dependency_job_id":null,"html_url":"https://github.com/TACC/ooops","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/TACC/ooops","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TACC%2Fooops","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TACC%2Fooops/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TACC%2Fooops/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TACC%2Fooops/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/TACC","download_url":"https://codeload.github.com/TACC/ooops/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TACC%2Fooops/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30395595,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-11T18:46:22.935Z","status":"ssl_error","status_checked_at":"2026-03-11T18:46:17.045Z","response_time":84,"last_error":"SSL_read: 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":[],"created_at":"2025-04-04T06:17:00.406Z","updated_at":"2026-03-11T19:31:31.940Z","avatar_url":"https://github.com/TACC.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ooops\nOOOPS, short for Optimal Overloaded IO Protection System, is an innovative IO workload managing system that optimally throttles the IO workload from the users' side. Thank Si Liu for coming up the name of this tool! \u003cbr\u003e\u003cbr\u003e\nPlease feel free to contact [Lei Huang](https://www.tacc.utexas.edu/about/directory/lei-huang) for questions or suggestions. Thank you!\n\nCentralized file system shared by large number of users has been a week point of modern super computers for a while since there is no IO resource provisioning enforced. A small number of nodes could satuate the whole file system easily. Overloading file system could result in global filesystem performance degradation and even unresponsiveness for all users. ooops is designed to proactively protect file system and throttle the nodes with excessive I/O. With some modification, ooops can support user IO resource provisioning to enforce fair sharing. ooops is running on every node, so it can scale up to any arbitrary size of super computers. There is NO need for users to change anything on their side. The work for administrator to deploy ooops is also trivial. \n\nTo compile,\u003cbr\u003e \n`make all`\u003cbr\u003e\n\nTo measure the time needed for open() and stat() function calls on your file system\u003cbr\u003e\nUsage: \u003cbr\u003e\n`./t_open_stat fs_path n_hours` \u003cbr\u003e\n`./cal_threshhold.sh t_log_open.txt` \u003cbr\u003e\n`./cal_threshhold.sh t_log_stat.txt` \u003cbr\u003e\nUpdate config with the parameter you get for T_THRESHOLD_OPEN_x and T_THRESHOLD_LXSTAT_x.\n\nTo deploy ooops, \u003cbr\u003e\n`export IO_LIMIT_CONFIG=${PWD}/config` \u003cbr\u003e\n`export LD_PRELOAD=${PWD}/wrapper.so` \u003cbr\u003e\n Run your apps as usual. \n\nTo modify configurations, you can either change config or dynamically change the setting only on given nodes with set_io_param. Dynamically throttling with set_io_param works well without interrupting users' applications. \n`set_io_param server_idx t_open max_open_freq t_stat max_stat_freq`\u003cbr\u003e\n`or`\u003cbr\u003e\n`set_io_param server_idx [ low / medium / high / unlimit ]`\n\nExample to use ooops to control the level of IO from one compute node. \u003cbr\u003e\n![Alt text](ooops_levels.png?raw=true \"IO under various settings\")\n\nExample to use ooops to adjust the level of IO on-fly when a job is running.\n![Alt text](change_io_on_fly.jpg?raw=true \"Adjust IO level on-fly\")\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftacc%2Fooops","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftacc%2Fooops","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftacc%2Fooops/lists"}