12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- // SPDX-License-Identifier: GPL-3.0-or-later
- #ifndef NETDATA_EBPF_DISK_H
- #define NETDATA_EBPF_DISK_H 1
- // Module name
- #define NETDATA_EBPF_MODULE_NAME_DISK "disk"
- #include "libnetdata/avl/avl.h"
- #include "libnetdata/ebpf/ebpf.h"
- #define NETDATA_EBPF_PROC_PARTITIONS "/proc/partitions"
- // Process configuration name
- #define NETDATA_DISK_CONFIG_FILE "disk.conf"
- // Decode function extracted from: https://elixir.bootlin.com/linux/v5.10.8/source/include/linux/kdev_t.h#L7
- #define MINORBITS 20
- #define MKDEV(ma,mi) (((ma) << MINORBITS) | (mi))
- enum netdata_latency_disks_flags {
- NETDATA_DISK_ADDED_TO_PLOT_LIST = 1,
- NETDATA_DISK_CHART_CREATED = 2,
- NETDATA_DISK_IS_HERE = 4,
- NETDATA_DISK_HAS_EFI = 8
- };
- /*
- * The definition (DISK_NAME_LEN) has been a stable value since Kernel 3.0,
- * I decided to bring it as internal definition, to avoid include linux/genhd.h.
- */
- #define NETDATA_DISK_NAME_LEN 32
- typedef struct netdata_ebpf_disks {
- // Search
- avl_t avl;
- uint32_t dev;
- uint32_t major;
- uint32_t minor;
- uint32_t bootsector_key;
- uint64_t start; // start sector
- uint64_t end; // end sector
- // Print information
- char family[NETDATA_DISK_NAME_LEN + 1];
- char *boot_chart;
- netdata_ebpf_histogram_t histogram;
- uint32_t flags;
- time_t last_update;
- struct netdata_ebpf_disks *main;
- struct netdata_ebpf_disks *boot_partition;
- struct netdata_ebpf_disks *next;
- } netdata_ebpf_disks_t;
- enum ebpf_disk_tables {
- NETDATA_DISK_READ
- };
- typedef struct block_key {
- uint32_t bin;
- uint32_t dev;
- } block_key_t;
- typedef struct netdata_ebpf_publish_disk {
- netdata_ebpf_disks_t *plot;
- struct netdata_ebpf_publish_disk *next;
- } ebpf_publish_disk_t;
- extern struct config disk_config;
- void *ebpf_disk_thread(void *ptr);
- #endif /* NETDATA_EBPF_DISK_H */
|