fix proc plugin disk_avgsz (#17718)
* fix proc plugin disk_avgsz * use SECTOR_SIZE define
Ilya Mashchenko committed
May 20, 2024 at 23:24 UTC
c320d715520b288df4511862d35e896876498614
1 file changed
+13
-59
src/collectors/proc.plugin/proc_diskstats.c
+13
-59
@@ -19,6 +19,9 @@
19
#define DEFAULT_PREFERRED_IDS "*"
20
#define DEFAULT_EXCLUDED_DISKS "loop* ram*"
21
22
+// always 512 on Linux (https://github.com/torvalds/linux/blob/daa121128a2d2ac6006159e2c47676e4fcd21eab/include/linux/blk_types.h#L25-L34)
23
+#define SECTOR_SIZE 512
24
+
25
static netdata_mutex_t diskstats_dev_mutex = NETDATA_MUTEX_INITIALIZER;
26
27
static struct disk {
@@ -32,7 +35,6 @@ static struct disk {
35
uint32_t hash;
36
unsigned long major;
37
unsigned long minor;
35
- int sector_size;
38
int type;
39
40
bool excluded;
@@ -178,8 +180,6 @@ static struct disk {
180
181
#define rrdset_obsolete_and_pointer_null(st) do { if(st) { rrdset_is_obsolete___safe_from_collector_thread(st); (st) = NULL; } } while(st)
182
181
-// static char *path_to_get_hw_sector_size = NULL;
182
-// static char *path_to_get_hw_sector_size_partitions = NULL;
183
static char *path_to_sys_dev_block_major_minor_string = NULL;
184
static char *path_to_sys_block_device = NULL;
185
static char *path_to_sys_block_device_bcache = NULL;
@@ -758,7 +758,6 @@ static struct disk *get_disk(unsigned long major, unsigned long minor, char *dis
758
d->major = major;
759
d->minor = minor;
760
d->type = DISK_TYPE_UNKNOWN; // Default type. Changed later if not correct.
761
- d->sector_size = 512; // the default, will be changed below
761
d->next = NULL;
762
763
// append it to the list
@@ -854,45 +853,6 @@ static struct disk *get_disk(unsigned long major, unsigned long minor, char *dis
853
else
854
d->mount_point = NULL;
855
857
- // ------------------------------------------------------------------------
858
- // find the disk sector size
859
-
860
- /*
861
- * sector size is always 512 bytes inside the kernel #3481
862
- *
863
- {
864
- char tf[FILENAME_MAX + 1], *t;
865
- strncpyz(tf, d->device, FILENAME_MAX);
866
-
867
- // replace all / with !
868
- for(t = tf; *t ;t++)
869
- if(unlikely(*t == '/')) *t = '!';
870
-
871
- if(likely(d->type == DISK_TYPE_PARTITION))
872
- snprintfz(buffer, FILENAME_MAX, path_to_get_hw_sector_size_partitions, d->major, d->minor, tf);
873
- else
874
- snprintfz(buffer, FILENAME_MAX, path_to_get_hw_sector_size, tf);
875
-
876
- FILE *fpss = fopen(buffer, "r");
877
- if(likely(fpss)) {
878
- char buffer2[1024 + 1];
879
- char *tmp = fgets(buffer2, 1024, fpss);
880
-
881
- if(likely(tmp)) {
882
- d->sector_size = str2i(tmp);
883
- if(unlikely(d->sector_size <= 0)) {
884
- collector_error("Invalid sector size %d for device %s in %s. Assuming 512.", d->sector_size, d->device, buffer);
885
- d->sector_size = 512;
886
- }
887
- }
888
- else collector_error("Cannot read data for sector size for device %s from %s. Assuming 512.", d->device, buffer);
889
-
890
- fclose(fpss);
891
- }
892
- else collector_error("Cannot read sector size for device %s from %s. Assuming 512.", d->device, buffer);
893
- }
894
- */
895
-
856
// ------------------------------------------------------------------------
857
// check if the device is a bcache
858
@@ -1432,12 +1392,6 @@ int do_proc_diskstats(int update_every, usec_t dt) {
1392
snprintfz(buffer, FILENAME_MAX, "%s%s", netdata_configured_host_prefix, "/sys/dev/block/%lu:%lu/%s");
1393
path_to_sys_dev_block_major_minor_string = config_get(CONFIG_SECTION_PLUGIN_PROC_DISKSTATS, "path to get block device infos", buffer);
1394
1435
- //snprintfz(buffer, FILENAME_MAX, "%s%s", netdata_configured_host_prefix, "/sys/block/%s/queue/hw_sector_size");
1436
- //path_to_get_hw_sector_size = config_get(CONFIG_SECTION_PLUGIN_PROC_DISKSTATS, "path to get h/w sector size", buffer);
1437
-
1438
- //snprintfz(buffer, FILENAME_MAX, "%s%s", netdata_configured_host_prefix, "/sys/dev/block/%lu:%lu/subsystem/%s/../queue/hw_sector_size");
1439
- //path_to_get_hw_sector_size_partitions = config_get(CONFIG_SECTION_PLUGIN_PROC_DISKSTATS, "path to get h/w sector size for partitions", buffer);
1440
-
1395
snprintfz(buffer, FILENAME_MAX, "%s/dev/mapper", netdata_configured_host_prefix);
1396
path_to_device_mapper = config_get(CONFIG_SECTION_PLUGIN_PROC_DISKSTATS, "path to device mapper", buffer);
1397
@@ -1603,8 +1557,8 @@ int do_proc_diskstats(int update_every, usec_t dt) {
1557
// count the global system disk I/O of physical disks
1558
1559
if(unlikely(d->type == DISK_TYPE_PHYSICAL)) {
1606
- system_read_kb += readsectors * d->sector_size / 1024;
1607
- system_write_kb += writesectors * d->sector_size / 1024;
1560
+ system_read_kb += readsectors * SECTOR_SIZE / 1024;
1561
+ system_write_kb += writesectors * SECTOR_SIZE / 1024;
1562
}
1563
1564
// --------------------------------------------------------------------------
@@ -1621,14 +1575,14 @@ int do_proc_diskstats(int update_every, usec_t dt) {
1575
netdata_zero_metrics_enabled == CONFIG_BOOLEAN_YES))) {
1576
d->do_io = CONFIG_BOOLEAN_YES;
1577
1624
- last_readsectors = d->disk_io.rd_io_reads ? d->disk_io.rd_io_reads->collector.last_collected_value : 0;
1625
- last_writesectors = d->disk_io.rd_io_writes ? d->disk_io.rd_io_writes->collector.last_collected_value : 0;
1578
+ last_readsectors = d->disk_io.rd_io_reads ? d->disk_io.rd_io_reads->collector.last_collected_value / SECTOR_SIZE : 0;
1579
+ last_writesectors = d->disk_io.rd_io_writes ? d->disk_io.rd_io_writes->collector.last_collected_value / SECTOR_SIZE : 0;
1580
1581
common_disk_io(&d->disk_io,
1582
d->chart_id,
1583
d->disk,
1630
- readsectors * d->sector_size,
1631
- writesectors * d->sector_size,
1584
+ readsectors * SECTOR_SIZE,
1585
+ writesectors * SECTOR_SIZE,
1586
update_every,
1587
disk_labels_cb,
1588
d);
@@ -1651,7 +1605,7 @@ int do_proc_diskstats(int update_every, usec_t dt) {
1605
, RRDSET_TYPE_AREA
1606
);
1607
1654
- d->rd_io_discards = rrddim_add(d->st_ext_io, "discards", NULL, d->sector_size, 1024, RRD_ALGORITHM_INCREMENTAL);
1608
+ d->rd_io_discards = rrddim_add(d->st_ext_io, "discards", NULL, SECTOR_SIZE, 1024, RRD_ALGORITHM_INCREMENTAL);
1609
1610
add_labels_to_disk(d, d->st_ext_io);
1611
}
@@ -2079,8 +2033,8 @@ int do_proc_diskstats(int update_every, usec_t dt) {
2033
2034
rrdset_flag_set(d->st_avgsz, RRDSET_FLAG_DETAIL);
2035
2082
- d->rd_avgsz_reads = rrddim_add(d->st_avgsz, "reads", NULL, d->sector_size, 1024, RRD_ALGORITHM_ABSOLUTE);
2083
- d->rd_avgsz_writes = rrddim_add(d->st_avgsz, "writes", NULL, d->sector_size * -1, 1024, RRD_ALGORITHM_ABSOLUTE);
2036
+ d->rd_avgsz_reads = rrddim_add(d->st_avgsz, "reads", NULL, SECTOR_SIZE, 1024, RRD_ALGORITHM_ABSOLUTE);
2037
+ d->rd_avgsz_writes = rrddim_add(d->st_avgsz, "writes", NULL, SECTOR_SIZE * -1, 1024, RRD_ALGORITHM_ABSOLUTE);
2038
2039
add_labels_to_disk(d, d->st_avgsz);
2040
}
@@ -2109,7 +2063,7 @@ int do_proc_diskstats(int update_every, usec_t dt) {
2063
2064
rrdset_flag_set(d->st_ext_avgsz, RRDSET_FLAG_DETAIL);
2065
2112
- d->rd_avgsz_discards = rrddim_add(d->st_ext_avgsz, "discards", NULL, d->sector_size, 1024, RRD_ALGORITHM_ABSOLUTE);
2066
+ d->rd_avgsz_discards = rrddim_add(d->st_ext_avgsz, "discards", NULL, SECTOR_SIZE, 1024, RRD_ALGORITHM_ABSOLUTE);
2067
2068
add_labels_to_disk(d, d->st_ext_avgsz);
2069
}