ebpf_disk.h 1.8 KB

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