Linux-Trace-Devel Archive on lore.kernel.org
 help / color / Atom feed
* [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	[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	[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, back to index

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)

Linux-Trace-Devel Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/linux-trace-devel/0 linux-trace-devel/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 linux-trace-devel linux-trace-devel/ https://lore.kernel.org/linux-trace-devel \
		linux-trace-devel@vger.kernel.org
	public-inbox-index linux-trace-devel

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.linux-trace-devel


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git