{"id":50506436,"url":"https://github.com/njenia/dpdk-top","last_synced_at":"2026-06-02T16:30:53.948Z","repository":{"id":343031481,"uuid":"1174974372","full_name":"njenia/dpdk-top","owner":"njenia","description":"Easily monitor your DPDK apps","archived":false,"fork":false,"pushed_at":"2026-03-10T18:55:58.000Z","size":719,"stargazers_count":7,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-19T23:57:35.624Z","etag":null,"topics":["dpdk","networking","ratatui","rust"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/njenia.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-07T04:01:43.000Z","updated_at":"2026-04-13T11:03:52.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/njenia/dpdk-top","commit_stats":null,"previous_names":["njenia/dpdk-top"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/njenia/dpdk-top","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/njenia%2Fdpdk-top","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/njenia%2Fdpdk-top/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/njenia%2Fdpdk-top/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/njenia%2Fdpdk-top/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/njenia","download_url":"https://codeload.github.com/njenia/dpdk-top/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/njenia%2Fdpdk-top/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33831622,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-02T02:00:07.132Z","response_time":109,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","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":["dpdk","networking","ratatui","rust"],"created_at":"2026-06-02T16:30:52.107Z","updated_at":"2026-06-02T16:30:53.940Z","avatar_url":"https://github.com/njenia.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# dpdk-top\n\nReal-time terminal monitoring for [DPDK](https://www.dpdk.org/) applications.\n\nConnects to any running DPDK process via the telemetry Unix socket and displays live port stats, throughput rates, per-queue distribution, mempool utilization, and historical charts — without modifying the monitored application or linking against DPDK.\n\nWorks with **testpmd**, **l3fwd**, and any custom DPDK application that has telemetry enabled (default since DPDK 19.11).\n\n![demo](screenshots/demo.gif)\n\n## Install\n\n**Pre-built binary (Linux / macOS):**\n```bash\ncurl -sSL https://raw.githubusercontent.com/njenia/dpdk-top/main/install.sh | bash\n```\nDownloads a static binary from [GitHub Releases](https://github.com/njenia/dpdk-top/releases) — no dependencies, no Rust toolchain needed.\n\n**With cargo:**\n```bash\ncargo install dpdk-top\n```\n\n**From source:**\n```bash\ngit clone https://github.com/njenia/dpdk-top.git\ncd dpdk-top\ncargo build --release\nsudo cp target/release/dpdk-top /usr/local/bin/\n```\n\n## Quick start\n\n```bash\n# Auto-detect DPDK socket and launch TUI\nsudo dpdk-top\n\n# Point to a specific socket\ndpdk-top -s /var/run/dpdk/rte/dpdk_telemetry.v2\n\n# One-shot JSON output (for scripting)\ndpdk-top --once\n\n# Stream JSON every 500ms\ndpdk-top --json -i 0.5\n```\n\n## TUI views\n\n| Key | View | Description |\n|-----|------|-------------|\n| `d` | Dashboard | Overview of all ports and mempools |\n| `p` | Port detail | Counters, rates, and per-queue distribution for selected port |\n| `g` | Graphs | Rolling sparkline charts for pps, throughput, errors |\n| `m` | Mempools | Detailed mempool utilization with color-coded bars |\n| `x` | Xstats | Full extended statistics table |\n| `?` | Help | All keybindings |\n\n**Navigation:**\n- `↑`/`↓` or `j`/`k` — select port\n- `Tab` / `Shift-Tab` — cycle views forward / backward\n- `[` / `]` or `1`–`9` — switch DPDK instance (when multiple are discovered)\n- `q` or `Esc` — quit\n\n## Multi-instance support\n\nWhen multiple DPDK processes are running (e.g. separate `testpmd` instances with different `--file-prefix`), dpdk-top auto-discovers all telemetry sockets and lets you switch between them:\n\n```\nFound 3 DPDK processes:\n  [1] /var/run/dpdk/pmd0/dpdk_telemetry.v2\n  [2] /var/run/dpdk/pmd1/dpdk_telemetry.v2\n  [3] /var/run/dpdk/pmd2/dpdk_telemetry.v2\n```\n\nPress `1`, `2`, `3` or `[` / `]` to switch between instances in the TUI.\n\n## CLI options\n\n| Option | Description |\n|--------|-------------|\n| `-s, --socket \u003cPATH\u003e` | Telemetry socket path (default: auto-detect) |\n| `-i, --interval \u003cSECS\u003e` | Poll interval in seconds (default: 1.0) |\n| `--port \u003cID\u003e` | Start with this port selected |\n| `--once` | Print one snapshot with rates and exit |\n| `--json` | Stream JSON to stdout |\n| `--smooth \u003cALPHA\u003e` | EMA smoothing 0.0–1.0 (default: 0.8) |\n| `--no-color` | Disable colors |\n| `-a, --alert \u003cRULE\u003e` | Alert rule, e.g. `rx_missed_errors\u003e0` |\n\n## How it works\n\ndpdk-top communicates with the [DPDK telemetry](https://doc.dpdk.org/guides/howto/telemetry.html) Unix socket (`/var/run/dpdk/\u003cprefix\u003e/dpdk_telemetry.v2`). This socket is exposed by any DPDK application that calls `rte_eal_init()` with telemetry enabled (the default).\n\nIt queries these endpoints:\n\n| Endpoint | Data |\n|----------|------|\n| `/ethdev/list` | Port IDs |\n| `/ethdev/info,\u003cid\u003e` | Port configuration (driver, MAC, queues) |\n| `/ethdev/stats,\u003cid\u003e` | Packet/byte counters |\n| `/ethdev/xstats,\u003cid\u003e` | Extended per-queue stats |\n| `/mempool/list` | Mempool names |\n| `/mempool/info,\u003cname\u003e` | Mempool size and utilization |\n\nRates are computed as deltas between polls with configurable EMA smoothing.\n\n## Requirements\n\n- A running DPDK application with telemetry enabled\n- Access to the telemetry socket (may require `sudo` if the DPDK app runs as root)\n- Linux (primary) or macOS (for development; socket connection uses fallback mode)\n\n## License\n\nApache-2.0 OR MIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnjenia%2Fdpdk-top","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnjenia%2Fdpdk-top","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnjenia%2Fdpdk-top/lists"}