{"id":2591,"name":"PowerJoular","description":"Allows monitoring power consumption of multiple platforms and processes.","url":"https://github.com/joular/powerjoular","last_synced_at":"2026-04-07T17:00:59.454Z","repository":{"id":45728140,"uuid":"350253423","full_name":"joular/powerjoular","owner":"joular","description":"PowerJoular allows monitoring power consumption of multiple platforms and processes","archived":false,"fork":false,"pushed_at":"2026-02-13T11:19:45.000Z","size":11312,"stargazers_count":102,"open_issues_count":10,"forks_count":23,"subscribers_count":4,"default_branch":"develop","last_synced_at":"2026-03-25T03:44:02.650Z","etag":null,"topics":["ada","energy","green","joular","power","powerjoular","software"],"latest_commit_sha":null,"homepage":"https://www.noureddine.org/research/joular/powerjoular","language":"Ada","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/joular.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":"CITATION.cff","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":"2021-03-22T07:49:31.000Z","updated_at":"2026-03-12T04:03:43.000Z","dependencies_parsed_at":"2023-09-21T19:14:26.838Z","dependency_job_id":"4aeeb249-624a-4c03-9e4c-ef04eb014685","html_url":"https://github.com/joular/powerjoular","commit_stats":{"total_commits":159,"total_committers":7,"mean_commits":"22.714285714285715","dds":0.5849056603773585,"last_synced_commit":"baa84b1512b72385cc4a3970a21ae643c921c16b"},"previous_names":[],"tags_count":22,"template":false,"template_full_name":null,"purl":"pkg:github/joular/powerjoular","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joular%2Fpowerjoular","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joular%2Fpowerjoular/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joular%2Fpowerjoular/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joular%2Fpowerjoular/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/joular","download_url":"https://codeload.github.com/joular/powerjoular/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joular%2Fpowerjoular/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31520577,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-07T16:28:08.000Z","status":"ssl_error","status_checked_at":"2026-04-07T16:28:06.951Z","response_time":105,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: 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"}},"owner":{"login":"joular","name":"The Joular Project","uuid":"78238145","kind":"organization","description":"The Joular project aims to advance knowledge in software energy efficiency throughout the life cycle of software, and across a variety of software systems","email":null,"website":"https://www.noureddine.org/research/joular","location":null,"twitter":"adelnoureddine","company":null,"icon_url":"https://avatars.githubusercontent.com/u/78238145?v=4","repositories_count":3,"last_synced_at":"2023-10-13T04:31:43.952Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/joular","funding_links":[],"total_stars":null,"followers":null,"following":null,"created_at":"2023-10-13T04:31:44.408Z","updated_at":"2023-10-13T04:31:44.408Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/joular","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/joular/repositories"},"packages":[{"id":13073080,"name":"powerjoular","ecosystem":"nixpkgs","description":"CLI software to monitor the power consumption of software and hardware components","homepage":"https://github.com/joular/powerjoular","licenses":"GPL-3.0-or-later","normalized_licenses":["GPL-3.0-or-later"],"repository_url":"https://github.com/joular/powerjoular","keywords_array":[],"namespace":null,"versions_count":1,"first_release_published_at":"2026-02-01T17:24:31.046Z","latest_release_published_at":"2026-02-01T17:24:31.046Z","latest_release_number":"1.0.4","last_synced_at":"2026-03-06T00:29:37.539Z","created_at":"2026-02-01T17:24:20.151Z","updated_at":"2026-03-06T00:31:53.154Z","registry_url":"https://search.nixos.org/packages?channel=24.11\u0026query=powerjoular","install_command":"nix-env -iA nixpkgs.powerjoular","documentation_url":"https://github.com/NixOS/nixpkgs/blob/nixos-24.11/pkgs/by-name/po/powerjoular/package.nix#L39","metadata":{"nix_attribute":"powerjoular-1.0.4","position":"pkgs/by-name/po/powerjoular/package.nix:39","platforms":["aarch64-linux","armv5tel-linux","armv6l-linux","armv7a-linux","armv7l-linux","i686-linux","loongarch64-linux","m68k-linux","microblaze-linux","microblazeel-linux","mips-linux","mips64-linux","mips64el-linux","mipsel-linux","powerpc64-linux","powerpc64le-linux","riscv32-linux","riscv64-linux","s390-linux","s390x-linux","x86_64-linux"],"broken":false,"insecure":false,"unfree":false,"outputs":["out"]},"repo_metadata":{},"repo_metadata_updated_at":null,"dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":0.0,"dependent_packages_count":0.0,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":100},"purl":"pkg:nix/powerjoular?channel=24.11\u0026repository_url=https://channels.nixos.org/nixos-24.11","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/nixpkgs/powerjoular","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/nixpkgs/powerjoular","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/nixpkgs/powerjoular/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":null,"versions_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-24.11/packages/powerjoular/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-24.11/packages/powerjoular/version_numbers","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-24.11/packages/powerjoular/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-24.11/packages/powerjoular/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-24.11/packages/powerjoular/codemeta","maintainers":[{"uuid":"JulienMalka","login":null,"name":"Julien Malka","email":"julien.malka@me.com","url":"https://github.com/JulienMalka","packages_count":9,"html_url":null,"role":null,"created_at":"2026-03-06T00:29:37.709Z","updated_at":"2026-03-06T00:29:37.709Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-24.11/maintainers/JulienMalka/packages"}],"registry":{"name":"nixpkgs-24.11","url":"https://channels.nixos.org/nixos-24.11","ecosystem":"nixpkgs","default":false,"packages_count":121983,"maintainers_count":3777,"namespaces_count":0,"keywords_count":0,"github":"NixOS","metadata":{"funded_packages_count":228},"icon_url":"https://github.com/NixOS.png","created_at":"2026-01-25T22:30:53.059Z","updated_at":"2026-04-03T06:22:14.703Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-24.11/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-24.11/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-24.11/namespaces"}},{"id":12856920,"name":"powerjoular","ecosystem":"nixpkgs","description":"CLI software to monitor the power consumption of software and hardware components","homepage":"https://github.com/joular/powerjoular","licenses":"GPL-3.0-or-later","normalized_licenses":["GPL-3.0-or-later"],"repository_url":"https://github.com/joular/powerjoular","keywords_array":[],"namespace":null,"versions_count":1,"first_release_published_at":"2026-01-27T00:18:55.067Z","latest_release_published_at":"2026-01-27T00:18:55.067Z","latest_release_number":"1.1.1","last_synced_at":"2026-03-03T21:10:35.315Z","created_at":"2026-01-27T00:18:54.850Z","updated_at":"2026-03-03T21:10:35.863Z","registry_url":"https://search.nixos.org/packages?channel=unstable\u0026query=powerjoular","install_command":"nix-env -iA nixpkgs.powerjoular","documentation_url":"https://github.com/NixOS/nixpkgs/blob/nixos-unstable/pkgs/by-name/po/powerjoular/package.nix#L39","metadata":{"nix_attribute":"powerjoular-1.1.1","position":"pkgs/by-name/po/powerjoular/package.nix:39","platforms":["aarch64-linux","armv5tel-linux","armv6l-linux","armv7a-linux","armv7l-linux","i686-linux","loongarch64-linux","m68k-linux","microblaze-linux","microblazeel-linux","mips-linux","mips64-linux","mips64el-linux","mipsel-linux","powerpc-linux","powerpc64-linux","powerpc64le-linux","riscv32-linux","riscv64-linux","s390-linux","s390x-linux","x86_64-linux"],"broken":false,"insecure":false,"unfree":false,"outputs":["out"]},"repo_metadata":{},"repo_metadata_updated_at":null,"dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{},"purl":"pkg:nix/powerjoular?channel=unstable","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/nixpkgs/powerjoular","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/nixpkgs/powerjoular","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/nixpkgs/powerjoular/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":null,"versions_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-unstable/packages/powerjoular/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-unstable/packages/powerjoular/version_numbers","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-unstable/packages/powerjoular/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-unstable/packages/powerjoular/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-unstable/packages/powerjoular/codemeta","maintainers":[{"uuid":"JulienMalka","login":null,"name":"Julien Malka","email":"julien.malka@me.com","url":"https://github.com/JulienMalka","packages_count":11,"html_url":null,"role":null,"created_at":"2026-03-03T21:10:35.770Z","updated_at":"2026-03-03T21:10:35.770Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-unstable/maintainers/JulienMalka/packages"}],"registry":{"name":"nixpkgs-unstable","url":"https://channels.nixos.org/nixos-unstable","ecosystem":"nixpkgs","default":true,"packages_count":144946,"maintainers_count":4602,"namespaces_count":0,"keywords_count":1,"github":"NixOS","metadata":{"funded_packages_count":1507},"icon_url":"https://github.com/NixOS.png","created_at":"2026-01-25T22:30:52.762Z","updated_at":"2026-04-03T06:06:13.150Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-unstable/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-unstable/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-unstable/namespaces"}}],"commits":{"id":1319232,"full_name":"joular/powerjoular","default_branch":"develop","total_commits":180,"total_committers":9,"total_bot_commits":0,"total_bot_committers":0,"mean_commits":20.0,"dds":0.5444444444444445,"past_year_total_commits":6,"past_year_total_committers":2,"past_year_total_bot_commits":0,"past_year_total_bot_committers":0,"past_year_mean_commits":3.0,"past_year_dds":0.33333333333333337,"last_synced_at":"2026-03-31T14:06:33.090Z","last_synced_commit":"382ef395cb16549e1c6163dc727a428de4e2b3e8","created_at":"2023-09-11T14:41:11.569Z","updated_at":"2026-03-31T14:05:17.827Z","committers":[{"name":"Adel Noureddine","email":"adelnoureddine","login":"adelnoureddine","count":82},{"name":"Adel Noureddine","email":"7352066-adelnoureddine@users.noreply.gitlab.com","login":null,"count":48},{"name":"Axel TERRIER","email":"47625927+axelterrier","login":"axelterrier","count":39},{"name":"Gary Corrall","email":"4834451+gcorrall","login":"gcorrall","count":5},{"name":"afonsoCarreira1","email":"afonso1carreira@gmail.com","login":"afonsoCarreira1","count":2},{"name":"Thomas Reuter","email":"thomasreuter83@gmail.com","login":"red2342","count":1},{"name":"Man Ngo","email":"man.ngo@web.de","login":"Borakleon","count":1},{"name":"Benjamin Antunes","email":"39274929+benjaminantunes","login":"benjaminantunes","count":1},{"name":"Benjamin Antunes","email":"39274929+LeBane63","login":"LeBane63","count":1}],"past_year_committers":[{"name":"Adel Noureddine","email":"adelnoureddine","login":"adelnoureddine","count":4},{"name":"Gary Corrall","email":"4834451+gcorrall","login":"gcorrall","count":2}],"commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/joular%2Fpowerjoular/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-04-07T00:00:11.408Z","repositories_count":6211550,"commits_count":918089627,"contributors_count":35587537,"owners_count":1142705,"icon_url":"https://github.com/github.png","host_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories"}},"issues_stats":{"full_name":"joular/powerjoular","html_url":"https://github.com/joular/powerjoular","last_synced_at":"2026-03-14T23:58:48.614Z","status":"error","issues_count":41,"pull_requests_count":72,"avg_time_to_close_issue":4152833.3571428573,"avg_time_to_close_pull_request":1278917.2461538462,"issues_closed_count":28,"pull_requests_closed_count":65,"pull_request_authors_count":12,"issue_authors_count":13,"avg_comments_per_issue":1.4146341463414633,"avg_comments_per_pull_request":0.4027777777777778,"merged_pull_requests_count":60,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":6,"past_year_pull_requests_count":11,"past_year_avg_time_to_close_issue":5844019.0,"past_year_avg_time_to_close_pull_request":379939.28571428574,"past_year_issues_closed_count":2,"past_year_pull_requests_closed_count":7,"past_year_pull_request_authors_count":4,"past_year_issue_authors_count":4,"past_year_avg_comments_per_issue":0.6666666666666666,"past_year_avg_comments_per_pull_request":0.36363636363636365,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":7,"created_at":"2023-09-11T14:41:27.335Z","updated_at":"2026-03-14T23:58:48.615Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/joular%2Fpowerjoular","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/joular%2Fpowerjoular/issues","issue_labels_count":{"enhancement":27,"bug":5,"question":4,"documentation":3,"help wanted":1},"pull_request_labels_count":{"bug":3,"enhancement":3},"issue_author_associations_count":{"MEMBER":22,"NONE":13,"CONTRIBUTOR":6},"pull_request_author_associations_count":{"MEMBER":44,"CONTRIBUTOR":16,"NONE":12},"issue_authors":{"adelnoureddine":22,"gcorrall":7,"mabed-fr":2,"korontanis":1,"atahmih":1,"akather":1,"Looong01":1,"Apoorvanp":1,"patricgruber":1,"charles-typ":1,"sdenboer":1,"somak-chatterjee":1,"y-ykcir":1},"pull_request_authors":{"adelnoureddine":44,"gcorrall":6,"axelterrier":5,"afonsoCarreira1":5,"benjaminantunes":2,"Stapuck":2,"Borakleon":2,"papiche":2,"ZiQuwi":1,"fossabot":1,"red2342":1,"LeBane63":1},"host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-03-29T00:00:10.666Z","repositories_count":13981847,"issues_count":34562972,"pull_requests_count":113026336,"authors_count":11211981,"icon_url":"https://github.com/github.png","host_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories","owners_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/owners","authors_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors"},"past_year_issue_labels_count":{"enhancement":3,"documentation":1,"bug":1},"past_year_pull_request_labels_count":{"enhancement":1,"bug":1},"past_year_issue_author_associations_count":{"MEMBER":3,"CONTRIBUTOR":1,"NONE":1},"past_year_pull_request_author_associations_count":{"MEMBER":6,"CONTRIBUTOR":3,"NONE":2},"past_year_issue_authors":{"adelnoureddine":3,"gcorrall":1,"korontanis":1},"past_year_pull_request_authors":{"adelnoureddine":6,"gcorrall":2,"Stapuck":2,"ZiQuwi":1},"maintainers":[{"login":"adelnoureddine","count":66,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/adelnoureddine"}],"active_maintainers":[{"login":"adelnoureddine","count":9,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/adelnoureddine"}]},"events":{"total":{"ReleaseEvent":3,"DeleteEvent":6,"PullRequestEvent":25,"ForkEvent":4,"IssuesEvent":13,"WatchEvent":28,"IssueCommentEvent":28,"PushEvent":26,"PullRequestReviewCommentEvent":1,"CreateEvent":10},"last_year":{"ReleaseEvent":2,"DeleteEvent":2,"PullRequestEvent":8,"ForkEvent":2,"IssuesEvent":3,"WatchEvent":15,"IssueCommentEvent":7,"PushEvent":12,"PullRequestReviewCommentEvent":1,"CreateEvent":6}},"keywords":["ada","energy","green","joular","power","powerjoular","software"],"dependencies":[{"ecosystem":"actions","filepath":".github/workflows/ada.yml","sha":null,"kind":"manifest","created_at":"2023-02-15T09:16:51.181Z","updated_at":"2023-02-15T09:16:51.181Z","repository_link":"https://github.com/joular/powerjoular/blob/develop/.github/workflows/ada.yml","dependencies":[{"id":7681313073,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false}]}],"score":6.915723448631313,"created_at":"2023-09-11T14:32:17.396Z","updated_at":"2026-04-07T17:00:59.460Z","avatar_url":"https://github.com/joular.png","language":"Ada","category":"Consumption","sub_category":"Computation and Communication","monthly_downloads":0,"total_dependent_repos":0,"total_dependent_packages":0,"readme":"# \u003ca href=\"https://www.noureddine.org/research/joular/\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/joular/.github/main/profile/joular.png\" alt=\"Joular Project\" width=\"64\" /\u003e\u003c/a\u003e PowerJoular :zap:\n\n[![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue)](https://www.gnu.org/licenses/gpl-3.0)\n[![Ada](https://img.shields.io/badge/Made%20with-Ada-blue)](https://www.adaic.org)\n\n![PowerJoular Logo](powerjoular.png)\n\nPowerJoular is a command line software to monitor, in real time, the power consumption of software and hardware components.\n\nDetailed documentation (including user and reference guides) are available at: [https://joular.github.io/powerjoular/](https://joular.github.io/powerjoular/).\n\n## :rocket: Features\n\n- Monitor power consumption of CPU and GPU of PC/servers\n- Monitor power consumption inside virtual machines\n- Monitor power consumption of individual processes in GNU/Linux\n- Expose power consumption to the terminal and CSV files\n- Provides a systemd service (daemon) to continuously monitor power of devices\n- Low overhead (written in Ada and compiled to native code)\n\n## :satellite: Supported platforms\n\nPowerJoular monitors the following platforms:\n- :computer: PC/Servers using a RAPL supported Intel processor (since Sandy Bridge) or a RAPL supported AMD processor (Ryzen or EPYC), and optionally an Nvidia graphic card.\n- :radio: Raspberry Pi devices (multiple models) and Asus Tinker Board.\n- :computer: Inside virtual machines in all supported host platforms.\n\nIn all platforms, PowerJoular works currently only on GNU/Linux.\n\nOn PC/Servers, PowerJoular uses powercap Linux interface to read Intel RAPL (Running Average Power Limit) energy consumption.\n\nPowerJoular supports RAPL package domain (core, including integrated graphics, and dram), and for more recent processors, we support Psys package (which covers the energy consumption of the entire SoC).\n\nOn virtual machines, PowerJoular requires two steps:\n- Installing PowerJoular itself or another power monitoring tool in the host machine.\nThen monitoring the virtual machine power consumption every second and writing it to a file (to be shared with the guest VM).\n- Installing PowerJoular in the guest VM, then running PowerJoular while specifying the path of the power file shared with the host and its format.\n\nOn Raspberry Pi and Asus Tinker Board, PowerJoular uses its own research-based empirical regression models to estimate the power consumption of the ARM processor.\n\nThe supported list of Raspberry Pi and Asus Tinker Board models are listed below.\nWe support all revisions of each model lineup. However, the model is generated and trained on a specific revision (listed between brackets), and the accuracy is best on this particular revision.\n\nWe currently support the following Raspberry Pi and Asus Tinker Board models:\n- Model Zero W (rev 1.1), for 32 bits OS\n- Model 1 B (rev 2), for 32 bits OS\n- Model 1 B+ (rev 1.2), for 32 bits OS\n- Model 2 B (rev 1.1), for 32 bits OS\n- Model 3 B (rev 1.2), for 32 bits OS\n- Model 3 B+ (rev 1.3), for 32 bits OS\n- Model 4 B (rev 1.1, and rev 1.2), for both 32 bits and 64 bits OS\n- Model 400 (rev 1.0), for 64 bits OS\n- Model 5 B (rev 1.0), for 64 bits OS\n- Asus Tinker Board (S)\n\n## :package: Installation\n\nPowerJoular is written in Ada and can be easily compiled, and its unique binary added to your system PATH.\n\nEasy-to-use installation scripts are available in the ```installer``` folder.\nJust open the installer folder and run the appropriate file to build and/or install or uninstall the program and systemd service.\n\n- ```build-install.sh```: will build (using ```gprbuild```) and install the program binary to ```/usr/bin``` and systemd service. It requires having installed GNAT and gprbuild (see [Compilation](#floppy_disk-compilation)).\n- ```uninstall.sh```: deletes the program binary and systemd service.\n\n## :bulb: Usage\n\nTo use PowerJoular, just run the command ```powerjoular```.\nOn PC/servers, PowerJoular uses Intel's RAPL through the Linux powercap sysfs, and therefore requires root/sudo access on the latest Linux kernels (5.10 and newer): ```sudo powerjoular```.\n\nBy default, the software will show the power consumption of the CPU and its utilization.\nThe difference (increase or decrease) of power consumption from last metric will also be shown.\n\nThe following options are available:\n- ```-h```: show the help message\n- ```-v```: show version number\n- ```-p pid```: specifiy a particular PID to monitor\n- ```-a appName```: specifiy a particular application name to monitor (will monitor all PIDs of the application)\n- ```-f filename```: save monitoring data to the given filename path\n- ```-o filename```: save only last monitoring data to the given filename path (file overwritten with only latest power measures)\n- ```-t```: print energy data to the terminal\n- ```-d```: print debug info to the terminal\n- ```-l```: use linear regression models (less accurate than the default polynomial models) for Raspberry Pi energy models\n- ```-m```: specify a filename for the power consumption of the virtual machine\n- ```-s```: specify the format of the VM power, either ```powerjoular``` format (generated with the ```-o``` option: 3 columns csv file with the 3rd containing the power consumption the VM), or ```watts``` format (1 column containing just the power consumption of the VM)\n- ```-k```: use TIDs to calculate PID stats instead of PID stat directly (Experimental feature)\n- ```-c```: save timestamps in milliseconds (instead of just seconds) in the written CSV files\n \nYou can mix options, i.e., ```powerjoular -tp 144``` will monitor PID 144 and will print to the terminal.\n\n## :floppy_disk: Compilation\n\nPowerJoular is written with Ada, and requires a modern Ada compiler, such as GNAT.\n\nPowerJoular depends on the following commands and libraries for certain of its functions, but can function without them:\n- nvidia-smi: for monitoring power consumption of Nvidia graphic cards\n- Linux powercap with Intel RAPL support: for monitoring power consumption of Intel processors and SoC\n\nOn a modern GNU/Linux distribution, just install the GNAT compiler (and GPRBuild), usually available from the distribution's repositories:\n\n```\nFedora:\nsudo dnf install fedora-gnat-project-common gprbuild gcc-gnat\n\nDebian, Ubuntu or Raspberry Pi OS:\nsudo apt install gnat gprbuild\n```\n\nFor other distributions, use their package manager to download the compiler, or check [this article for easy instruction for various distributions](https://www.noureddine.org/articles/ada-on-windows-and-linux-an-installation-guide), including RHEL and its clones which does not ship with Ada support in GCC.\n\n### Compilation with the GNAT compiler and GPRBuild\n\nTo compile the project, just type ```gprbuild``` if using the latest GPRBuild versions.\n\nOr, on older versions, create the ```/obj``` folder first, then type ```gprbuild powerjoular.gpr```.\n\nThe PowerJoular binary will be created in the ```obj/``` folder.\n\nBy default, the project will statically link the required libraries, and therefore the PowerJoular binary can be copied to any compatible system and used as-is.\n\nTo build with dynamic linking, remove or comment the static switch in the ```powerjoular.gpr``` file, in particular these lines:\n\n```\npackage Binder is\n    for Switches (\"Ada\") use (\"-static\");\nend Binder;\n```\n\n### Compilation with the GNAT compiler only\n\nYou can also compile PowerJoular with the GNAT compiler only (without the need for GPRBuild).\n\nJust compile using gnatmake. For example, to compile from ```obj/``` folder (so .o and .ali files are generated there), type the following:\n\n```\nmkdir -p obj\ncd obj\ngnatmake ../src/powerjoular.adb\n```\n\n### Compilation with Alire\n\nIf you have [Alire](https://alire.ada.dev/) installed, you can use it to build PowerJoular with:\n\n```\nalr build\n```\n\n### Cross-compilation and package generation\n\nThe ```release-version.sh``` script cross-compiles PowerJoular to multiple platforms (for now x86_64 and aarch64, but can be tweaked to add other platforms).\nThe script then generates RPM and DEB binary installation packages for these platforms.\n\nThe script needs a x86_64 and an aarch64 gnat compiler, along with deb and rpm packaging tools.\n\nInstall them according to your distribution. For example, in Ubuntu 22.04 x86_64 :\n\n```\nsudo apt install gnat gnat-12-aarch64-linux-gnu dpkg rpm\n```\n\n## :hourglass: Systemd service\n\nA systemd service is provided and can be installed (by copying ```powerjoular.service``` in ```systemd``` folder to ```/etc/systemd/system/```).\nThe service will run the program with the ```-o``` option (which only saves the latest power data) and saves data to ```/tmp/powerjoular-service.csv```.\nThe service can be enabled to run automatically on boot.\n\nThe systemd service is automatically installed when installing PowerJoular using the GNU/Linux provided packages.\n\n## :bookmark_tabs: Cite this work\n\nTo cite our work in a research paper, please cite our paper in the 18th International Conference on Intelligent Environments (IE2022).\n\n- **PowerJoular and JoularJX: Multi-Platform Software Power Monitoring Tools**. Adel Noureddine. In the 18th International Conference on Intelligent Environments (IE2022). Biarritz, France, 2022.\n\n```\n@inproceedings{noureddine-ie-2022,\n  title = {PowerJoular and JoularJX: Multi-Platform Software Power Monitoring Tools},\n  author = {Noureddine, Adel},\n  booktitle = {18th International Conference on Intelligent Environments (IE2022)},\n  address = {Biarritz, France},\n  year = {2022},\n  month = {Jun},\n  keywords = {Power Monitoring; Measurement; Power Consumption; Energy Analysis}\n}\n```\n\n## :newspaper: License\n\nPowerJoular is licensed under the GNU GPL 3 license only (GPL-3.0-only).\n\nCopyright (c) 2020-2025, Adel Noureddine, Université de Pau et des Pays de l'Adour.\nAll rights reserved. This program and the accompanying materials are made available under the terms of the GNU General Public License v3.0 only (GPL-3.0-only) which accompanies this distribution, and is available at: https://www.gnu.org/licenses/gpl-3.0.en.html\n\nAuthor : Adel Noureddine\n","funding_links":[],"readme_doi_urls":[],"works":{},"citation_counts":{},"total_citations":0,"keywords_from_contributors":[],"project_url":"https://ost.ecosyste.ms/api/v1/projects/2591","html_url":"https://ost.ecosyste.ms/projects/2591"}