@cryptotaxi247 / netdata-1 / commits / c320d7155

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 }