This is an automated email from the ASF dual-hosted git repository. marklau99 pushed a commit to branch IOTDB-5517 in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 715c1a01922e58d4d66644d6d9030a6bb0fce015 Author: liuxuxin <[email protected]> AuthorDate: Mon Feb 13 15:04:22 2023 +0800 edit metrics computation --- .../iotdb/commons/service/metric/enums/Metric.java | 1 + .../iotdb/db/service/metrics/DiskMetrics.java | 28 ++++++++-------- .../metrics/io/LinuxDiskMetricsManager.java | 37 ++++++++++++++++------ 3 files changed, 43 insertions(+), 23 deletions(-) diff --git a/node-commons/src/main/java/org/apache/iotdb/commons/service/metric/enums/Metric.java b/node-commons/src/main/java/org/apache/iotdb/commons/service/metric/enums/Metric.java index acff8839f6..18cad095b0 100644 --- a/node-commons/src/main/java/org/apache/iotdb/commons/service/metric/enums/Metric.java +++ b/node-commons/src/main/java/org/apache/iotdb/commons/service/metric/enums/Metric.java @@ -29,6 +29,7 @@ public enum Metric { DISK_IO_SIZE, DISK_IO_OPS, DISK_IO_TIME, + DISK_IO_AVG_TIME, DISK_IO_SECTOR_NUM, PROCESS_IO_SIZE, PROCESS_IO_OPS, diff --git a/server/src/main/java/org/apache/iotdb/db/service/metrics/DiskMetrics.java b/server/src/main/java/org/apache/iotdb/db/service/metrics/DiskMetrics.java index 3ac3f087ec..c09b9b8542 100644 --- a/server/src/main/java/org/apache/iotdb/db/service/metrics/DiskMetrics.java +++ b/server/src/main/java/org/apache/iotdb/db/service/metrics/DiskMetrics.java @@ -43,7 +43,7 @@ public class DiskMetrics implements IMetricSet { MetricLevel.IMPORTANT, diskMetricsManager, x -> x.getReadDataSizeForDisk().getOrDefault(diskID, 0L), - Tag.NAME.toString(), + Tag.TYPE.toString(), "read", Tag.NAME.toString(), diskID); @@ -52,7 +52,7 @@ public class DiskMetrics implements IMetricSet { MetricLevel.IMPORTANT, diskMetricsManager, x -> x.getWriteDataSizeForDisk().getOrDefault(diskID, 0L), - Tag.NAME.toString(), + Tag.TYPE.toString(), "write", Tag.NAME.toString(), diskID); @@ -61,7 +61,7 @@ public class DiskMetrics implements IMetricSet { MetricLevel.IMPORTANT, diskMetricsManager, x -> x.getReadOperationCountForDisk().getOrDefault(diskID, 0), - Tag.NAME.toString(), + Tag.TYPE.toString(), "read", Tag.NAME.toString(), diskID); @@ -70,7 +70,7 @@ public class DiskMetrics implements IMetricSet { MetricLevel.IMPORTANT, diskMetricsManager, x -> x.getWriteOperationCountForDisk().getOrDefault(diskID, 0), - Tag.NAME.toString(), + Tag.TYPE.toString(), "write", Tag.NAME.toString(), diskID); @@ -79,7 +79,7 @@ public class DiskMetrics implements IMetricSet { MetricLevel.IMPORTANT, diskMetricsManager, x -> x.getReadCostTimeForDisk().getOrDefault(diskID, 0L), - Tag.NAME.toString(), + Tag.TYPE.toString(), "read", Tag.NAME.toString(), diskID); @@ -88,26 +88,26 @@ public class DiskMetrics implements IMetricSet { MetricLevel.IMPORTANT, diskMetricsManager, x -> x.getWriteCostTimeForDisk().getOrDefault(diskID, 0L), - Tag.NAME.toString(), + Tag.TYPE.toString(), "write", Tag.NAME.toString(), diskID); metricService.createAutoGauge( - Metric.DISK_IO_TIME.toString(), + Metric.DISK_IO_AVG_TIME.toString(), MetricLevel.IMPORTANT, diskMetricsManager, x -> x.getAvgReadCostTimeOfEachOpsForDisk().getOrDefault(diskID, 0.0).longValue(), - Tag.NAME.toString(), - "avg_read", + Tag.TYPE.toString(), + "read", Tag.NAME.toString(), diskID); metricService.createAutoGauge( - Metric.DISK_IO_TIME.toString(), + Metric.DISK_IO_AVG_TIME.toString(), MetricLevel.IMPORTANT, diskMetricsManager, x -> x.getAvgWriteCostTimeOfEachOpsForDisk().getOrDefault(diskID, 0.0).longValue(), - Tag.NAME.toString(), - "avg_write", + Tag.TYPE.toString(), + "write", Tag.NAME.toString(), diskID); metricService.createAutoGauge( @@ -115,7 +115,7 @@ public class DiskMetrics implements IMetricSet { MetricLevel.IMPORTANT, diskMetricsManager, x -> x.getAvgSectorCountOfEachReadForDisk().getOrDefault(diskID, 0.0).longValue(), - Tag.NAME.toString(), + Tag.TYPE.toString(), "read", Tag.NAME.toString(), diskID); @@ -124,7 +124,7 @@ public class DiskMetrics implements IMetricSet { MetricLevel.IMPORTANT, diskMetricsManager, x -> x.getAvgSectorCountOfEachWriteForDisk().getOrDefault(diskID, 0.0).longValue(), - Tag.NAME.toString(), + Tag.TYPE.toString(), "write", Tag.NAME.toString(), diskID); diff --git a/server/src/main/java/org/apache/iotdb/db/service/metrics/io/LinuxDiskMetricsManager.java b/server/src/main/java/org/apache/iotdb/db/service/metrics/io/LinuxDiskMetricsManager.java index 14e4a27600..f724f801dc 100644 --- a/server/src/main/java/org/apache/iotdb/db/service/metrics/io/LinuxDiskMetricsManager.java +++ b/server/src/main/java/org/apache/iotdb/db/service/metrics/io/LinuxDiskMetricsManager.java @@ -45,9 +45,10 @@ public class LinuxDiskMetricsManager extends AbstractDiskMetricsManager { private final int DISK_SECTOR_WRITE_COUNT_OFFSET = 10; private final int DISK_WRITE_TIME_COST_OFFSET = 11; private final int DISK_IO_TOTAL_TIME_OFFSET = 13; - private final long UPDATE_INTERVAL = 10000L; + private final long UPDATE_SMALLEST_INTERVAL = 10000L; private Set<String> diskIDSet; private long lastUpdateTime = 0L; + private long updateInterval = 1L; private String[] dataNodeProcessId; private String[] configNodeProcessId; private final Map<String, Integer> lastReadOperationCountForDisk = new HashMap<>(); @@ -71,7 +72,7 @@ public class LinuxDiskMetricsManager extends AbstractDiskMetricsManager { Map<String, Long> readDataMap = new HashMap<>(); for (Map.Entry<String, Long> entry : incrementReadSectorCountForDisk.entrySet()) { // the data size in each sector is 512 byte - readDataMap.put(entry.getKey(), entry.getValue() * 512L / 1024L); + readDataMap.put(entry.getKey(), entry.getValue() * 512L / 1024L / updateInterval * 1000L); } return readDataMap; } @@ -82,7 +83,7 @@ public class LinuxDiskMetricsManager extends AbstractDiskMetricsManager { Map<String, Long> writeDataMap = new HashMap<>(); for (Map.Entry<String, Long> entry : incrementWriteSectorCountForDisk.entrySet()) { // the data size in each sector is 512 byte - writeDataMap.put(entry.getKey(), entry.getValue() * 512L / 1024L); + writeDataMap.put(entry.getKey(), entry.getValue() * 512L / 1024L / updateInterval * 1000L); } return writeDataMap; } @@ -90,22 +91,38 @@ public class LinuxDiskMetricsManager extends AbstractDiskMetricsManager { @Override public Map<String, Integer> getReadOperationCountForDisk() { checkUpdate(); - return incrementReadOperationCountForDisk; + Map<String, Integer> incrementMapPerSecond = new HashMap<>(); + for (Map.Entry<String, Integer> entry : incrementReadOperationCountForDisk.entrySet()) { + incrementMapPerSecond.put(entry.getKey(), (int) (entry.getValue() / updateInterval * 1000L)); + } + return incrementMapPerSecond; } @Override public Map<String, Integer> getWriteOperationCountForDisk() { - return incrementWriteOperationCountForDisk; + Map<String, Integer> incrementMapPerSecond = new HashMap<>(); + for (Map.Entry<String, Integer> entry : incrementWriteOperationCountForDisk.entrySet()) { + incrementMapPerSecond.put(entry.getKey(), (int) (entry.getValue() / updateInterval * 1000L)); + } + return incrementMapPerSecond; } @Override public Map<String, Long> getReadCostTimeForDisk() { - return incrementReadTimeCostForDisk; + Map<String, Long> incrementMapPerSecond = new HashMap<>(); + for (Map.Entry<String, Long> entry : incrementReadTimeCostForDisk.entrySet()) { + incrementMapPerSecond.put(entry.getKey(), entry.getValue() / updateInterval * 1000L); + } + return incrementMapPerSecond; } @Override public Map<String, Long> getWriteCostTimeForDisk() { - return incrementWriteTimeCostForDisk; + Map<String, Long> incrementMapPerSecond = new HashMap<>(); + for (Map.Entry<String, Long> entry : incrementWriteTimeCostForDisk.entrySet()) { + incrementMapPerSecond.put(entry.getKey(), entry.getValue() / updateInterval * 1000L); + } + return incrementMapPerSecond; } @Override @@ -213,7 +230,9 @@ public class LinuxDiskMetricsManager extends AbstractDiskMetricsManager { } private void updateDiskInfo() { - lastUpdateTime = System.currentTimeMillis(); + long currentTime = System.currentTimeMillis(); + updateInterval = currentTime - lastUpdateTime; + lastUpdateTime = currentTime; File diskStatsFile = new File(DISK_STATS_FILE_PATH); if (!diskStatsFile.exists()) { return; @@ -293,7 +312,7 @@ public class LinuxDiskMetricsManager extends AbstractDiskMetricsManager { } private void checkUpdate() { - if (System.currentTimeMillis() - lastUpdateTime > UPDATE_INTERVAL) { + if (System.currentTimeMillis() - lastUpdateTime > UPDATE_SMALLEST_INTERVAL) { updateDiskInfo(); } }
