diff --git a/Makefile b/Makefile index 1af4840aeed565072ff81a9710af9531b0f29402..bfa9efc9e9e3c7bb5356e3314513e1d6a794bf14 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ BINARY_DIR = /usr/bin SYSTEMD_DIR = /etc/systemd/system DAEMON = daemon -CLIENTS = dummy cpu_temp +CLIENTS = dummy cpu_temp mem_usage SYSTEM_NAME = sibyl diff --git a/clients/CMakeLists.txt b/clients/CMakeLists.txt index b2abca374ba8ae98875041c30d1782e7ecd55fce..bc5c339dbea9470357b947efbfa19de940a79a1f 100644 --- a/clients/CMakeLists.txt +++ b/clients/CMakeLists.txt @@ -1,2 +1,3 @@ add_subdirectory(cpu_temp) add_subdirectory(dummy) +add_subdirectory(mem_usage) diff --git a/clients/mem_usage/CMakeLists.txt b/clients/mem_usage/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..8d70dcb22a3f4843ba6757ee9f8f01bb117405ca --- /dev/null +++ b/clients/mem_usage/CMakeLists.txt @@ -0,0 +1,7 @@ +add_executable(mem_usage + src/mem_usage.c +) + +target_link_libraries(mem_usage + PRIVATE common +) diff --git a/clients/mem_usage/src/mem_usage.c b/clients/mem_usage/src/mem_usage.c new file mode 100644 index 0000000000000000000000000000000000000000..c54f8fa828897be57edb7de36a3fdb636ae3c4e9 --- /dev/null +++ b/clients/mem_usage/src/mem_usage.c @@ -0,0 +1,54 @@ +#include "../../../common/include/measurement.h" +#include "../../../common/include/userspace_comm.h" +#include <errno.h> +#include <fcntl.h> +#include <linux/sysinfo.h> +#include <stdio.h> +#include <stdlib.h> +#include <sys/stat.h> +#include <sys/sysinfo.h> +#include <sys/types.h> +#include <unistd.h> + +int main(int argc, char *argv[]) { + if (argc < 3 || argc > 3) { + printf("Invalid arguments provided"); + return EXIT_FAILURE; + } + + userspace_send_handle_t userspace_send_handle; + if (create_userspace_send_handle(&userspace_send_handle) == -1) { + perror("Failed to open message queue"); + return EXIT_FAILURE; + } + + int id = atoi(argv[1]); + int sleep_ms = atoi(argv[2]); + + printf("Started mem usage (id: %d, delay: %dms)\n", id, sleep_ms); + + while (1) { + struct sysinfo meminfo; + sysinfo(&meminfo); + + measurement_t measurement = { + .data.uint64 = meminfo.totalram - meminfo.freeram, + .datatype = UINT64, + .id = id, + }; + + if (send_userspace_message(&userspace_send_handle, measurement) == -1) { + if (errno == EIDRM || errno == EINVAL) { + printf("Message queue got closed\n"); + break; + } + perror("Failed to send message"); + } + + usleep(sleep_ms * 1000); + } + + destroy_userspace_send_handle(&userspace_send_handle); + + return EXIT_SUCCESS; +} diff --git a/systemd/clients/sibyl-mem-usage.service b/systemd/clients/sibyl-mem-usage.service new file mode 100644 index 0000000000000000000000000000000000000000..58ae2bf903ed0a7fff78b0b9af489b3d8ddeb698 --- /dev/null +++ b/systemd/clients/sibyl-mem-usage.service @@ -0,0 +1,11 @@ +[Unit] +Description=Sibyl Client Memory Usage (incl. Caches & Buffers) +Wants=sibyl-daemon.service +After=sibyl-daemon.service + +[Service] +ExecStart=/usr/bin/sibyl-mem-usage 3 250 +Restart=always + +[Install] +WantedBy=multi-user.target