87 lines
3.0 KiB
Diff
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
|
|
|