{"id":20432194,"url":"https://github.com/ikatsov/rebenchr","last_synced_at":"2025-08-29T16:09:12.185Z","repository":{"id":3346136,"uuid":"4390827","full_name":"ikatsov/RebenchR","owner":"ikatsov","description":"An IO benchmarking toolkit for SSDs and HDDs.","archived":false,"fork":false,"pushed_at":"2013-04-18T13:30:31.000Z","size":701,"stargazers_count":5,"open_issues_count":0,"forks_count":6,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-04-12T20:52:19.579Z","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":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ikatsov.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":"2012-05-21T07:11:52.000Z","updated_at":"2024-01-08T12:11:04.000Z","dependencies_parsed_at":"2022-09-04T02:12:08.703Z","dependency_job_id":null,"html_url":"https://github.com/ikatsov/RebenchR","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/ikatsov%2FRebenchR","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ikatsov%2FRebenchR/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ikatsov%2FRebenchR/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ikatsov%2FRebenchR/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ikatsov","download_url":"https://codeload.github.com/ikatsov/RebenchR/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248631728,"owners_count":21136560,"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-15T08:14:07.956Z","updated_at":"2025-04-12T20:52:24.277Z","avatar_url":"https://github.com/ikatsov.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"RebenchR is an advanced disk IO benchmarking toolkit. This toolkit is able to simulate various workload patterns,\nsupport five different APIs with the full control of call parameters, collect detailed statistics and \nvisualize it using R.\n\n# Usage: \n\t./rebench [OPTIONS] DEVICE\n\n\tAlternatively, if no arguments are passed on the command line, ./rebench will read\n\tstandard input and read its arguments from there. Multiple lines may be used\n\tto specify multiple concurrent workloads.\n\n# Arguments:\n\tDEVICE - device or file name to perform operations on.\n\n# Options:\n\t-d, --duration\n                Duration of the benchmark in seconds.\n                Duration can be specified in KB, MB, and GB (add 'k', 'm', or 'g'\n                to the end of the number. The benchmark will stop when that much\n                data has been processed. If the number is followed by '%',\n                the size will be that percentage of the device. If duration is\n                set to 'i', rebench will run commands interactively (useful for\n                debugging with btrace, and only available in single-threaded mode).\n\t-c, --threads\n                Numbers of threads used to run the benchmark.\n\t-b, --block_size\n                Size of blocks in bytes to use for IO operations.\n                Block size can also be specified in units other than bytes by appending\n                'k', 'm', 'g', or '%'.\n\t-s, --stride\n                Size of stride in bytes (only applies to sequential workloads).\n                Stride can also be specified in units other than bytes by appending\n                'k', 'm', 'g', or '%'.\n\t-w, --workload\n                Description of a workload to perform.\n                Valid options are 'rnd' for a random load, and 'seq' for a sequential load.\n\t-t, --type\n                Type of IO calls to use.\n                Valid options are 'stateful' for read/write IO,\n                'stateless' for pread/pwrite type of IO, 'mmap' for\n                memory mapping, 'paio' for POSIX asynchronous IO,\n                and 'naio' for native OS asynchronous IO.\n\t-q, --queue-depth\n                The number of simultaneous AIO calls.\n                Valid only during 'paio', and 'naio' type of runs.\n\t--eventfd\n                Use eventfd for aio completion notification.\n                Valid only during 'naio' type of runs. Useful for measuring eventfd overhead.\n\t-r, --direction\n                Direction in which the operations are performed.\n                Valid options are 'formward' and 'backward'.\n                This option is only applicable to sequential workloads.\n\t-o, --operation\n                The operation to be performed.\n                Valid options are 'read', 'write', and 'trim'.\n                Note that trim is only available on SSD devices\n                via a stateful interface.\n\t-p, --paged\n                This options turns off direct IO (which is on by default).\n\t-f, --buffered\n                This options turns off flushing (flushing is on by default).\n                This option is only applicable for write operations.\n\t-m, --do-atime\n                This options turns on atime updates (off by default).\n\t-a, --append\n                Open the file in append-only mode (off by default).\n                This option is only applicable for sequential writes.\n\t-u, --dist\n                The distribution used for random workloads (uniform by default).\n                Valid options are 'uniform', 'normal', 'pow' (for power law) and const\n                (for accessing one block). This option is only applicable for random workloads.\n\t-i, --sigma\n                Controls the random distribution.\n                For normal distribution, it is the percent of the data one standard deviation away\n                from the mean (5 by default). If sigma = 5, roughly 68% of the time only 10%\n                of the data will be accessed. This option is only applicable when distribution is\n                set to 'normal'.\n                For power distribution, it is the percentage of the size of the device that will\n                be the mean accessed location (5 by default).\n\t-l, --local-fd\n                Use a thread local file descriptor (by default file descriptors\n                are shared across threads).\n\t-n, --silent\n                Non-interactive mode. Won't ask for write confirmation, and will\n                print machine readable output in the following format:\n                [ops per second] [MB/sec] [min ops per second] [max ops per second] [standard deviation]\n\t-j, --offset\n                The offset in the file to start operations from.\n                By default, this value is set to zero.\n                Offset can also be specified in units other than bytes by appending 'k', 'm', 'g',\n                or '%'.\n\t-e, --length\n                The length from the offset in the file to perform operations on.\n                By default, this value is set to the length of the file or the device.\n                Length can also be specified in units other than bytes by appending 'k', 'm', 'g',\n                or '%'.\n\t-g, --sample-step\n                The timestep between IOPS report samples (in milliseconds).\n                Defaults to 1000ms. If set to zero, reports latency of every operation.\n\t-z, --pause\n                The timestep to wait between a completion of an operation and execution\n                of the next operation in microseconds. Defaults to zero.\n\t--drop-caches\n                Asks the kernel to drop the cache before running the benchmark.\n\t--output\n                A file name to write detailed data output to at each sample step.\n\n# R Script\ndescribe.R visualizes latency and throughput statistics. \n\n\tRscript describe.R \u003ctrace1 filename\u003e \u003ctrace1 name\u003e \u003ctrace2 filename\u003e \u003ctrace2 name\u003e ...\n\n# Sample Plots\n\n![Throughput Time Plot](https://github.com/ikatsov/RebenchR/raw/master/examples/throughput_time_plot.png)\n![Latency Time Plot](https://github.com/ikatsov/RebenchR/raw/master/examples/latency_dist_time_plot-2-threads.png)\n![Throughput Distribution Plot](https://github.com/ikatsov/RebenchR/raw/master/examples/throughput_hist_time_plot.png)\n![Latency Distribution Plot](https://github.com/ikatsov/RebenchR/raw/master/examples/latency_hist_time_plot.png)\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fikatsov%2Frebenchr","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fikatsov%2Frebenchr","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fikatsov%2Frebenchr/lists"}