oeAware-manager/0009-add-analysis-args-check.patch
fly_1997 1857f64a9a add analysis args check
(cherry picked from commit 1240b95d6244446cc59e94a46642436a14bbe308)
2025-03-25 20:09:24 +08:00

87 lines
3.0 KiB
Diff

From be52353bd6781be33ddcd5a665f94c2b3a01908c Mon Sep 17 00:00:00 2001
From: fly_1997 <flylove7@outlook.com>
Date: Mon, 24 Mar 2025 23:15:11 +0800
Subject: [PATCH] add analysis args check
---
src/client/analysis/analysis_cli.cpp | 1 +
src/client/analysis/analysis_report.cpp | 3 +++
src/client/analysis/config.cpp | 18 ++++++++++++++++++
3 files changed, 22 insertions(+)
diff --git a/src/client/analysis/analysis_cli.cpp b/src/client/analysis/analysis_cli.cpp
index 47736a6..6497da6 100644
--- a/src/client/analysis/analysis_cli.cpp
+++ b/src/client/analysis/analysis_cli.cpp
@@ -65,6 +65,7 @@ void AnalysisCli::Run()
{
auto &analysisReport = oeaware::AnalysisReport::GetInstance();
analysisReport.Init(std::vector<std::string>{MEMORY_ANALYSIS}, config);
+ std::cout << "Analyzing... Please wait " << analysisTime << "s.\n";
sleep(analysisTime);
analysisReport.AnalyzeResult();
analysisReport.Print();
diff --git a/src/client/analysis/analysis_report.cpp b/src/client/analysis/analysis_report.cpp
index 801a81e..3f5c92e 100644
--- a/src/client/analysis/analysis_report.cpp
+++ b/src/client/analysis/analysis_report.cpp
@@ -67,6 +67,9 @@ void AnalysisReport::MemoryAnalyze()
memoryTable.SetColumnWidth(DEFAULT_SUGGESTION_WIDTH);
const TlbMiss &tlbMiss = tlbMissAnalysis.tlbMiss;
int cnt = tlbMissAnalysis.cnt;
+ if (cnt == 0) {
+ cnt = 1;
+ }
double l1dTlbMiss = tlbMiss.l1dTlbMiss * PERCENT / cnt;
double l1iTlbMiss = tlbMiss.l1iTlbMiss * PERCENT / cnt;
double l2dTlbMiss = tlbMiss.l2dTlbMiss * PERCENT / cnt;
diff --git a/src/client/analysis/config.cpp b/src/client/analysis/config.cpp
index 5760b91..ca4407f 100644
--- a/src/client/analysis/config.cpp
+++ b/src/client/analysis/config.cpp
@@ -11,6 +11,8 @@
******************************************************************************/
#include "config.h"
+#include <regex>
+
void Config::PrintHelp()
{
std::string usage = "";
@@ -40,6 +42,12 @@ bool Config::ParseTime(const char *arg)
return true;
}
+static bool IsNum(const std::string &s)
+{
+ std::regex num(R"(^[+]?\d+(\.\d+)?$)");
+ return std::regex_match(s, num);
+}
+
bool Config::Init(int argc, char **argv)
{
if (argv == nullptr) {
@@ -61,9 +69,19 @@ bool Config::Init(int argc, char **argv)
showVerbose = true;
break;
case L1_MISS_THRESHOLD:
+ if (!IsNum(optarg)) {
+ std::cerr << "Error: Invalid l1-miss-threshold: '" << optarg << "'\n";
+ PrintHelp();
+ return false;
+ }
l1MissThreshold = atof(optarg);
break;
case L2_MISS_THRESHOLD:
+ if (!IsNum(optarg)) {
+ std::cerr << "Error: Invalid l2-miss-threshold: '" << optarg << "'\n";
+ PrintHelp();
+ return false;
+ }
l2MissThreshold = atof(optarg);
break;
case 'h':
--
2.33.0