ebpf_disk.h 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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. NETDATA_DISK_TMP
  47. };
  48. typedef struct block_key {
  49. uint32_t bin;
  50. uint32_t dev;
  51. } block_key_t;
  52. typedef struct netdata_ebpf_publish_disk {
  53. netdata_ebpf_disks_t *plot;
  54. struct netdata_ebpf_publish_disk *next;
  55. } ebpf_publish_disk_t;
  56. extern struct config disk_config;
  57. void *ebpf_disk_thread(void *ptr);
  58. #endif /* NETDATA_EBPF_DISK_H */