{"id":17249937,"url":"https://github.com/igaw/jitterdebugger","last_synced_at":"2025-07-23T18:09:24.488Z","repository":{"id":33451081,"uuid":"154820007","full_name":"igaw/jitterdebugger","owner":"igaw","description":"jitterdebugger - real time response messaurement tool","archived":false,"fork":false,"pushed_at":"2024-06-07T07:35:16.000Z","size":134,"stargazers_count":30,"open_issues_count":0,"forks_count":13,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-04-14T05:51:51.547Z","etag":null,"topics":["linux","preempt-rt"],"latest_commit_sha":null,"homepage":null,"language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/igaw.png","metadata":{"files":{"readme":"README.rst","changelog":"CHANGELOG.md","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":"2018-10-26T10:50:03.000Z","updated_at":"2025-01-13T12:06:22.000Z","dependencies_parsed_at":"2024-03-25T08:46:20.709Z","dependency_job_id":"be6b8de3-0dfb-4d62-976f-ca501e1af9ef","html_url":"https://github.com/igaw/jitterdebugger","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/igaw/jitterdebugger","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/igaw%2Fjitterdebugger","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/igaw%2Fjitterdebugger/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/igaw%2Fjitterdebugger/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/igaw%2Fjitterdebugger/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/igaw","download_url":"https://codeload.github.com/igaw/jitterdebugger/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/igaw%2Fjitterdebugger/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266726679,"owners_count":23974928,"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","status":"online","status_checked_at":"2025-07-23T02:00:09.312Z","response_time":66,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"robots_txt_url":"https://github.com/robots.txt","online":true,"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":["linux","preempt-rt"],"created_at":"2024-10-15T06:45:43.141Z","updated_at":"2025-07-23T18:09:24.472Z","avatar_url":"https://github.com/igaw.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":".. SPDX-License-Identifier: MIT\n\n==============\njitterdebugger\n==============\n\njitterdebugger measures wake up latencies. jitterdebugger starts a\nthread on each CPU which programs a timer and measures the time it\ntakes from the timer expiring until the thread which set the timer\nruns again.\n\nThis tool is a re-implementation of cyclictest. It doesn't have all the\ncommand line options as cyclictest which results are easy to get wrong\nand therefore an invalid latency report.\n\nThe default settings of jitterdebugger will produce a correct\nmeasurement out of the box.\n\nFurthermore, the tool supports storing all samples for post\nprocessing.\n\n#################\nRuntime Depenency\n#################\n\njitterdebugger has only dependency to glibc (incl pthread).\n\n- glibc \u003e= 2.24\n\njitterplot and jittersamples have additional dependency to\n\n- Python3\n- Matlibplot\n- Pandas\n- HDF5 \u003e= 1.8.17\n\n#####\nUsage\n#####\n\nWhen running jitterdebugger without any command line options, there\nwont be any output until terminated by sending CTRL-C. It will print\nout the wake up latency for each CPU including a histogram of all\nlatencies as JSON. The output can direclty be saved into a file using\nthe -f command line option.\n\n::\n\n  # jitterdebugger\n  ^C\n  {\n    \"cpu\": {\n      \"0\": {\n        \"histogram\": {\n          \"3\": 3678,\n          \"4\": 220,\n          \"5\": 1,\n          \"8\": 1,\n          \"11\": 1\n        },\n        \"count\": 3901,\n        \"min\": 3,\n        \"max\": 11,\n        \"avg\": 3.06\n      },\n      \"1\": {\n        \"histogram\": {\n          \"3\": 3690,\n          \"4\": 188,\n          \"5\": 2,\n          \"8\": 3,\n          \"9\": 2,\n          \"18\": 1\n        },\n        \"count\": 3886,\n        \"min\": 3,\n        \"max\": 18,\n        \"avg\": 3.06\n      }\n    }\n  }\n\nWhen providing '-v', jitterdebugger will live update all counters:\n\n::\n\n  # jitterdebugger  -v\n  affinity: 0,1 = 2 [0x3]\n  T: 0 (  614) A: 0 C:     13476 Min:         3 Avg:    3.08 Max:        10\n  T: 1 (  615) A: 1 C:     13513 Min:         3 Avg:    3.10 Max:        20\n  ^C\n  {\n    \"cpu\": {\n      \"0\": {\n        \"histogram\": {\n          \"3\": 4070,\n          \"4\": 269,\n          \"5\": 26,\n          \"6\": 5,\n          \"7\": 1,\n          \"8\": 1,\n          \"9\": 2,\n          \"10\": 1\n        },\n        \"count\": 4375,\n        \"min\": 3,\n        \"max\": 10,\n        \"avg\": 3.08\n      },\n      \"1\": {\n        \"histogram\": {\n          \"3\": 4002,\n          \"4\": 320,\n          \"5\": 22,\n          \"6\": 4,\n          \"7\": 2,\n          \"8\": 1,\n          \"10\": 2,\n          \"11\": 1,\n          \"16\": 2,\n          \"20\": 1\n        },\n        \"count\": 4357,\n        \"min\": 3,\n        \"max\": 20,\n        \"avg\": 3.10\n      }\n    }\n  }\n\n\nField explanation:\n\n- T:   Thread id (PID)\n- A:   CPU affinity\n- C:   Number of measurement cycles\n- Min: Smallest wake up latency observed\n- Max: Biggest wake up latency observed\n- Avg: Arithmetic average of all observed wake up latencies.\n\n\n################\nMeasurement loop\n################\n\nThe tool will start a measurement thread on each available CPU.\n\nThe measurement loop does following:\n\n::\n\n  next = clock_gettime(CLOCK_MONOTONIC) + 1000us\n  while not terminated:\n    next = next + 1000us\n\n    clock_nanosleep(CLOCK_MONOTONIC, TIMER_ABSTIME, next)\n\n    now = clock_gettime()\n    diff = now - next\n\n    store(diff)\n\n\n##############\nHistogram plot\n##############\n\nThis project provides a very simple analisys tool to a\nhistogram. First let jitterdebugger collect some data and store the\noutput into a file.\n\n::\n\n  # jitterdebugger -f results.json\n  ^C\n  # jitterplot hist results.json\n\n\n#################\nExporting samples\n#################\n\njitterdebugger is able to store all samples to a binary file. For post\nprocessing use jittersamples to print data as normal ASCII output:\n\n::\n\n  # jitterdebugger -o samples.raw\n  ^C\n  # jittersamples samples.raw | head\n  0;1114.936950838;9\n  0;1114.937204763;3\n  0;1114.937458457;3\n  0;1114.937711970;3\n  0;1114.937965595;3\n  0;1114.938218986;3\n  0;1114.938472416;3\n  0;1114.938725788;3\n  0;1114.938979191;3\n  0;1114.939232594;3\n\nThe fields are:\n\n1. CPUID\n2. Timestamp in seconds\n3. Wake up latency in micro seconds\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Figaw%2Fjitterdebugger","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Figaw%2Fjitterdebugger","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Figaw%2Fjitterdebugger/lists"}