* [PATCH 0/2] Command line options for selecting plots
@ 2020-04-24 13:25 Yordan Karadzhov (VMware)
2020-04-24 13:25 ` [PATCH 1/2] kernel-shark: Add methods for selecting the plots to be shown Yordan Karadzhov (VMware)
2020-04-24 13:25 ` [PATCH 2/2] kernel-shark: Add command line options for selecting " Yordan Karadzhov (VMware)
0 siblings, 2 replies; 6+ messages in thread
From: Yordan Karadzhov (VMware) @ 2020-04-24 13:25 UTC (permalink / raw)
To: rostedt; +Cc: linux-trace-devel, julia.lawall, Yordan Karadzhov (VMware)
The patch-set implements new commandline options for KernelShark that
can be used to pre-select the CPU and Task plots to be shown, before
opening the GUI. The idea was suggested by Julia Lawall.
Yordan Karadzhov (VMware) (2):
kernel-shark: Add methods for selecting the plots to be shown
kernel-shark: Add command line options for selecting plots to be shown
kernel-shark/src/KsGLWidget.cpp | 6 ++---
kernel-shark/src/KsMainWindow.cpp | 39 +++++++++++++++++++++++++++++++
kernel-shark/src/KsMainWindow.hpp | 4 ++++
kernel-shark/src/KsUtils.cpp | 24 +++++++++++++++++++
kernel-shark/src/KsUtils.hpp | 2 ++
kernel-shark/src/kernelshark.cpp | 32 ++++++++++++++++++++++---
6 files changed, 101 insertions(+), 6 deletions(-)
--
2.20.1
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 1/2] kernel-shark: Add methods for selecting the plots to be shown
2020-04-24 13:25 [PATCH 0/2] Command line options for selecting plots Yordan Karadzhov (VMware)
@ 2020-04-24 13:25 ` Yordan Karadzhov (VMware)
2020-04-24 13:25 ` [PATCH 2/2] kernel-shark: Add command line options for selecting " Yordan Karadzhov (VMware)
1 sibling, 0 replies; 6+ messages in thread
From: Yordan Karadzhov (VMware) @ 2020-04-24 13:25 UTC (permalink / raw)
To: rostedt; +Cc: linux-trace-devel, julia.lawall, Yordan Karadzhov (VMware)
The methods are added to the public interface of the KsMainWindow class
and can be used to pre-select the CPU and Task plots to be shown, before
opening the GUI.
Signed-off-by: Yordan Karadzhov (VMware) <y.karadz@gmail.com>
---
kernel-shark/src/KsGLWidget.cpp | 6 ++---
kernel-shark/src/KsMainWindow.cpp | 39 +++++++++++++++++++++++++++++++
kernel-shark/src/KsMainWindow.hpp | 4 ++++
3 files changed, 46 insertions(+), 3 deletions(-)
diff --git a/kernel-shark/src/KsGLWidget.cpp b/kernel-shark/src/KsGLWidget.cpp
index e930006..f5a96ac 100644
--- a/kernel-shark/src/KsGLWidget.cpp
+++ b/kernel-shark/src/KsGLWidget.cpp
@@ -369,9 +369,9 @@ void KsGLWidget::loadData(KsDataStore *data)
_model.fill(_data->rows(), _data->size());
/* Make a default CPU list. All CPUs will be plotted. */
- _cpuList = {};
- for (int i = 0; i < nCPUs; ++i)
- _cpuList.append(i);
+ if (_cpuList.isEmpty())
+ for (int i = 0; i < nCPUs; ++i)
+ _cpuList.append(i);
/* Make a default task list. No tasks will be plotted. */
_taskList = {};
diff --git a/kernel-shark/src/KsMainWindow.cpp b/kernel-shark/src/KsMainWindow.cpp
index a5a399c..333e14b 100644
--- a/kernel-shark/src/KsMainWindow.cpp
+++ b/kernel-shark/src/KsMainWindow.cpp
@@ -172,6 +172,45 @@ KsMainWindow::~KsMainWindow()
kshark_free(kshark_ctx);
}
+/** Set the list ot CPU cores to be plotted. */
+void KsMainWindow::setCPUPlots(QVector<int> cpus)
+{
+ int nCPUs = tep_get_cpus(_data.tep());
+ auto lamCPUCheck = [=] (int cpu) {
+ if (cpu >= nCPUs) {
+ qWarning() << "Warning: No CPU" << cpu << "found in the data.";
+ return true;
+ }
+
+ return false;
+ };
+
+ cpus.erase(std::remove_if(cpus.begin(), cpus.end(), lamCPUCheck),
+ cpus.end());
+
+ _graph.cpuReDraw(cpus);
+}
+
+/** Set the list ot tasks (pids) to be plotted. */
+void KsMainWindow::setTaskPlots(QVector<int> pids)
+{
+ QVector<int> allPids = KsUtils::getPidList();
+ auto lamPidCheck = [=] (int pid) {
+ int i = allPids.indexOf(pid);
+ if (i < 0) {
+ qWarning() << "Warning: No Pid" << pid << "found in the data.";
+ return true;
+ }
+
+ return false;
+ };
+
+ pids.erase(std::remove_if(pids.begin(), pids.end(), lamPidCheck),
+ pids.end());
+
+ _graph.taskReDraw(pids);
+}
+
/**
* Reimplemented event handler used to update the geometry of the window on
* resize events.
diff --git a/kernel-shark/src/KsMainWindow.hpp b/kernel-shark/src/KsMainWindow.hpp
index eef4f96..774e1c9 100644
--- a/kernel-shark/src/KsMainWindow.hpp
+++ b/kernel-shark/src/KsMainWindow.hpp
@@ -61,6 +61,10 @@ public:
_plugins.unregisterPlugin(plugin);
}
+ void setCPUPlots(QVector<int> cpus);
+
+ void setTaskPlots(QVector<int> pids);
+
void resizeEvent(QResizeEvent* event);
/** Set the Full Screen mode. */
--
2.20.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 2/2] kernel-shark: Add command line options for selecting plots to be shown
2020-04-24 13:25 [PATCH 0/2] Command line options for selecting plots Yordan Karadzhov (VMware)
2020-04-24 13:25 ` [PATCH 1/2] kernel-shark: Add methods for selecting the plots to be shown Yordan Karadzhov (VMware)
@ 2020-04-24 13:25 ` Yordan Karadzhov (VMware)
2020-05-04 19:13 ` Steven Rostedt
1 sibling, 1 reply; 6+ messages in thread
From: Yordan Karadzhov (VMware) @ 2020-04-24 13:25 UTC (permalink / raw)
To: rostedt; +Cc: linux-trace-devel, julia.lawall, Yordan Karadzhov (VMware)
Example:
kernelshark -i mytrace.dat --cpu '1 4-7' --pid 11
This will show CPUs: 1, 4, 5, 6, 7 and task(PID): 11.
Signed-off-by: Yordan Karadzhov (VMware) <y.karadz@gmail.com>
Suggested-by: Julia Lawall <julia.lawall@inria.fr>
---
kernel-shark/src/KsUtils.cpp | 24 ++++++++++++++++++++++++
kernel-shark/src/KsUtils.hpp | 2 ++
kernel-shark/src/kernelshark.cpp | 32 +++++++++++++++++++++++++++++---
3 files changed, 55 insertions(+), 3 deletions(-)
diff --git a/kernel-shark/src/KsUtils.cpp b/kernel-shark/src/KsUtils.cpp
index e99509f..4a46014 100644
--- a/kernel-shark/src/KsUtils.cpp
+++ b/kernel-shark/src/KsUtils.cpp
@@ -298,6 +298,30 @@ QStringList splitArguments(QString cmd)
return argv;
}
+/** Parse a string containing Ids. The string can be of the form "1 4-7 9". */
+QVector<int> parseIdList(QString v_str)
+{
+ QStringList list = v_str.split(" ", QString::SkipEmptyParts);
+ QVector<int> v;
+
+ for (auto item: list) {
+ int i = item.indexOf('-');
+ if (i > 0) {
+ /* This item is an interval. */
+ int from = item.left(i).toInt();
+ int n = item.right(i).toInt() - from + 1;
+ int size = v.size();
+
+ v.resize(size + n);
+ std::iota(v.begin() + size, v.end(), from);
+ } else {
+ v.append(item.toInt());
+ }
+ }
+
+ return v;
+}
+
}; // KsUtils
/** A stream operator for converting QColor into KsPlot::Color. */
diff --git a/kernel-shark/src/KsUtils.hpp b/kernel-shark/src/KsUtils.hpp
index db1bf5e..2efc01c 100644
--- a/kernel-shark/src/KsUtils.hpp
+++ b/kernel-shark/src/KsUtils.hpp
@@ -132,6 +132,8 @@ QString getSaveFile(QWidget *parent,
QStringList splitArguments(QString cmd);
+QVector<int> parseIdList(QString v_str);
+
}; // KsUtils
/** Identifier of the Dual Marker active state. */
diff --git a/kernel-shark/src/kernelshark.cpp b/kernel-shark/src/kernelshark.cpp
index 1ec6678..55b5831 100644
--- a/kernel-shark/src/kernelshark.cpp
+++ b/kernel-shark/src/kernelshark.cpp
@@ -29,20 +29,43 @@ void usage(const char *prog)
printf(" -u unregister plugin, use plugin name or absolute path\n");
printf(" -s import a session\n");
printf(" -l import the last session\n");
+ puts(" --cpu show plots for CPU cores, default is \"show all\"");
+ puts(" --pid show plots for tasks, default is \"do not show\"");
+ puts("\n example:");
+ puts(" kernelshark -i mytrace.dat --cpu \'1 4-7\' --pid 11 -p path/to/my/plugin/myplugin.so\n");
}
+#define KS_LONG_OPTS 0
+static option longOptions[] = {
+ {"help", no_argument, nullptr, 'h'},
+ {"pid", required_argument, nullptr, KS_LONG_OPTS},
+ {"cpu", required_argument, nullptr, KS_LONG_OPTS},
+ {nullptr, 0, nullptr, 0}
+};
+
int main(int argc, char **argv)
{
QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QApplication a(argc, argv);
+ QVector<int> cpuPlots, taskPlots;
+ bool fromSession = false;
+ int optionIndex = 0;
KsMainWindow ks;
-
int c;
- bool fromSession = false;
- while ((c = getopt(argc, argv, "hvi:p:u:s:l")) != -1) {
+ while ((c = getopt_long(argc, argv, "hvi:p:u:s:l",
+ longOptions,
+ &optionIndex)) != -1) {
switch(c) {
+ case KS_LONG_OPTS:
+ if (strcmp(longOptions[optionIndex].name, "cpu") == 0)
+ cpuPlots = KsUtils::parseIdList(QString(optarg));
+ else if (strcmp(longOptions[optionIndex].name, "pid") == 0)
+ taskPlots = KsUtils::parseIdList(QString(optarg));
+
+ break;
+
case 'h':
usage(argv[0]);
return 0;
@@ -95,6 +118,9 @@ int main(int argc, char **argv)
ks.loadDataFile(QString(input_file));
}
+ ks.setCPUPlots(cpuPlots);
+ ks.setTaskPlots(taskPlots);
+
ks.show();
return a.exec();
}
--
2.20.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH 2/2] kernel-shark: Add command line options for selecting plots to be shown
2020-04-24 13:25 ` [PATCH 2/2] kernel-shark: Add command line options for selecting " Yordan Karadzhov (VMware)
@ 2020-05-04 19:13 ` Steven Rostedt
2020-05-04 19:17 ` Julia Lawall
0 siblings, 1 reply; 6+ messages in thread
From: Steven Rostedt @ 2020-05-04 19:13 UTC (permalink / raw)
To: Yordan Karadzhov (VMware); +Cc: linux-trace-devel, julia.lawall
On Fri, 24 Apr 2020 16:25:42 +0300
"Yordan Karadzhov (VMware)" <y.karadz@gmail.com> wrote:
> Example:
> kernelshark -i mytrace.dat --cpu '1 4-7' --pid 11
Can we change this to use a comma instead of a space. Then we don't need to
worry about quotes.
kernelshark -i mytrace.dat --cpu 1,4-7
That's the common format for other unix command lines. See taskset for
instance.
-- Steve
>
> This will show CPUs: 1, 4, 5, 6, 7 and task(PID): 11.
>
> Signed-off-by: Yordan Karadzhov (VMware) <y.karadz@gmail.com>
> Suggested-by: Julia Lawall <julia.lawall@inria.fr>
> ---
> kernel-shark/src/KsUtils.cpp | 24 ++++++++++++++++++++++++
> kernel-shark/src/KsUtils.hpp | 2 ++
> kernel-shark/src/kernelshark.cpp | 32 +++++++++++++++++++++++++++++---
> 3 files changed, 55 insertions(+), 3 deletions(-)
>
>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 2/2] kernel-shark: Add command line options for selecting plots to be shown
2020-05-04 19:13 ` Steven Rostedt
@ 2020-05-04 19:17 ` Julia Lawall
2020-05-08 13:11 ` Yordan Karadzhov (VMware)
0 siblings, 1 reply; 6+ messages in thread
From: Julia Lawall @ 2020-05-04 19:17 UTC (permalink / raw)
To: Steven Rostedt; +Cc: Yordan Karadzhov (VMware), linux-trace-devel
On Mon, 4 May 2020, Steven Rostedt wrote:
> On Fri, 24 Apr 2020 16:25:42 +0300
> "Yordan Karadzhov (VMware)" <y.karadz@gmail.com> wrote:
>
> > Example:
> > kernelshark -i mytrace.dat --cpu '1 4-7' --pid 11
>
> Can we change this to use a comma instead of a space. Then we don't need to
> worry about quotes.
This seems like a good idea. I was away from it a few days, and my first
intuition was to use a comma.
julia
>
> kernelshark -i mytrace.dat --cpu 1,4-7
>
> That's the common format for other unix command lines. See taskset for
> instance.
>
> -- Steve
>
>
> >
> > This will show CPUs: 1, 4, 5, 6, 7 and task(PID): 11.
> >
> > Signed-off-by: Yordan Karadzhov (VMware) <y.karadz@gmail.com>
> > Suggested-by: Julia Lawall <julia.lawall@inria.fr>
> > ---
> > kernel-shark/src/KsUtils.cpp | 24 ++++++++++++++++++++++++
> > kernel-shark/src/KsUtils.hpp | 2 ++
> > kernel-shark/src/kernelshark.cpp | 32 +++++++++++++++++++++++++++++---
> > 3 files changed, 55 insertions(+), 3 deletions(-)
> >
> >
>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 2/2] kernel-shark: Add command line options for selecting plots to be shown
2020-05-04 19:17 ` Julia Lawall
@ 2020-05-08 13:11 ` Yordan Karadzhov (VMware)
0 siblings, 0 replies; 6+ messages in thread
From: Yordan Karadzhov (VMware) @ 2020-05-08 13:11 UTC (permalink / raw)
To: Julia Lawall, Steven Rostedt; +Cc: linux-trace-devel
On 4.05.20 г. 22:17 ч., Julia Lawall wrote:
>
>
> On Mon, 4 May 2020, Steven Rostedt wrote:
>
>> On Fri, 24 Apr 2020 16:25:42 +0300
>> "Yordan Karadzhov (VMware)" <y.karadz@gmail.com> wrote:
>>
>>> Example:
>>> kernelshark -i mytrace.dat --cpu '1 4-7' --pid 11
>>
>> Can we change this to use a comma instead of a space. Then we don't need to
>> worry about quotes.
>
> This seems like a good idea. I was away from it a few days, and my first
> intuition was to use a comma.
>
> julia
>
OK, I will send new version of the patches.
Thanks a lot!
Yordan
>>
>> kernelshark -i mytrace.dat --cpu 1,4-7
>>
>> That's the common format for other unix command lines. See taskset for
>> instance.
>>
>> -- Steve
>>
>>
>>>
>>> This will show CPUs: 1, 4, 5, 6, 7 and task(PID): 11.
>>>
>>> Signed-off-by: Yordan Karadzhov (VMware) <y.karadz@gmail.com>
>>> Suggested-by: Julia Lawall <julia.lawall@inria.fr>
>>> ---
>>> kernel-shark/src/KsUtils.cpp | 24 ++++++++++++++++++++++++
>>> kernel-shark/src/KsUtils.hpp | 2 ++
>>> kernel-shark/src/kernelshark.cpp | 32 +++++++++++++++++++++++++++++---
>>> 3 files changed, 55 insertions(+), 3 deletions(-)
>>>
>>>
>>
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2020-05-08 13:11 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-04-24 13:25 [PATCH 0/2] Command line options for selecting plots Yordan Karadzhov (VMware)
2020-04-24 13:25 ` [PATCH 1/2] kernel-shark: Add methods for selecting the plots to be shown Yordan Karadzhov (VMware)
2020-04-24 13:25 ` [PATCH 2/2] kernel-shark: Add command line options for selecting " Yordan Karadzhov (VMware)
2020-05-04 19:13 ` Steven Rostedt
2020-05-04 19:17 ` Julia Lawall
2020-05-08 13:11 ` Yordan Karadzhov (VMware)
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).