ebpf_disk.h 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. // SPDX-License-Identifier: GPL-3.0-or-later
  2. #ifndef NETDATA_EBPF_DISK_H
  3. #define NETDATA_EBPF_DISK_H 1
  4. // Module name & description
  5. #define NETDATA_EBPF_MODULE_NAME_DISK "disk"
  6. #define NETDATA_EBPF_DISK_MODULE_DESC "Monitor disk latency independent of filesystem."
  7. #include "libnetdata/avl/avl.h"
  8. #include "libnetdata/ebpf/ebpf.h"
  9. #define NETDATA_EBPF_PROC_PARTITIONS "/proc/partitions"
  10. // Process configuration name
  11. #define NETDATA_DISK_CONFIG_FILE "disk.conf"
  12. // Decode function extracted from: https://elixir.bootlin.com/linux/v5.10.8/source/include/linux/kdev_t.h#L7
  13. #define MINORBITS 20
  14. #define MKDEV(ma,mi) (((ma) << MINORBITS) | (mi))
  15. enum netdata_latency_disks_flags {
  16. NETDATA_DISK_ADDED_TO_PLOT_LIST = 1,
  17. NETDATA_DISK_CHART_CREATED = 2,
  18. NETDATA_DISK_IS_HERE = 4,
  19. NETDATA_DISK_HAS_EFI = 8
  20. };
  21. /*
  22. * The definition (DISK_NAME_LEN) has been a stable value since Kernel 3.0,
  23. * I decided to bring it as internal definition, to avoid include linux/genhd.h.
  24. */
  25. #define NETDATA_DISK_NAME_LEN 32
  26. typedef struct netdata_ebpf_disks {
  27. // Search
  28. avl_t avl;
  29. uint32_t dev;
  30. uint32_t major;
  31. uint32_t minor;
  32. uint32_t bootsector_key;
  33. uint64_t start; // start sector
  34. uint64_t end; // end sector
  35. // Print information
  36. char family[NETDATA_DISK_NAME_LEN + 1];
  37. char *boot_chart;
  38. netdata_ebpf_histogram_t histogram;
  39. uint32_t flags;
  40. time_t last_update;
  41. struct netdata_ebpf_disks *main;
  42. struct netdata_ebpf_disks *boot_partition;
  43. struct netdata_ebpf_disks *next;
  44. } netdata_ebpf_disks_t;
  45. enum ebpf_disk_tables { NETDATA_DISK_IO };
  46. typedef struct block_key {
  47. uint32_t bin;
  48. uint32_t dev;
  49. } block_key_t;
  50. typedef struct netdata_ebpf_publish_disk {
  51. netdata_ebpf_disks_t *plot;
  52. struct netdata_ebpf_publish_disk *next;
  53. } ebpf_publish_disk_t;
  54. extern struct config disk_config;
  55. void *ebpf_disk_thread(void *ptr);
  56. #endif /* NETDATA_EBPF_DISK_H */