Blame SOURCES/pflags-Add-command-line-utility-to-print-processor-f.patch

c682bc
From 8dc7ac166c30435d87a76bb5067724497a7ba592 Mon Sep 17 00:00:00 2001
c682bc
From: Arnaldo Carvalho de Melo <acme@redhat.com>
c682bc
Date: Thu, 11 Jun 2015 16:45:33 -0300
c682bc
Subject: [PATCH 6/7] pflags: Add command line utility to print processor flags
c682bc
c682bc
E.g.:
c682bc
c682bc
  $ ./pflags-cmd.py  ssh*,bash,6941
c682bc
    1278 sshd RANDOMIZE|SUPERPRIV|USED_ASYNC|USED_MATH
c682bc
    2692 bash RANDOMIZE|USED_ASYNC|USED_MATH
c682bc
    2919 bash RANDOMIZE|SUPERPRIV|USED_ASYNC|USED_MATH
c682bc
    3116 bash RANDOMIZE|USED_ASYNC|USED_MATH
c682bc
    3149 bash RANDOMIZE|USED_ASYNC|USED_MATH
c682bc
    3384 bash RANDOMIZE|USED_ASYNC|USED_MATH
c682bc
    3579 bash RANDOMIZE|USED_ASYNC|USED_MATH
c682bc
    3834  ssh RANDOMIZE|USED_ASYNC|USED_MATH
c682bc
    4372 bash RANDOMIZE|USED_ASYNC|USED_MATH
c682bc
    5024 bash RANDOMIZE|USED_ASYNC|USED_MATH
c682bc
    6339 bash RANDOMIZE|USED_ASYNC|USED_MATH
c682bc
    6941  vim FREEZER_SKIP|RANDOMIZE|USED_ASYNC|USED_MATH
c682bc
  $
c682bc
c682bc
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
c682bc
Signed-off-by: John Kacur <jkacur@redhat.com>
c682bc
---
c682bc
 pflags-cmd.py | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
c682bc
 1 file changed, 65 insertions(+)
c682bc
 create mode 100755 pflags-cmd.py
c682bc
c682bc
diff --git a/pflags-cmd.py b/pflags-cmd.py
c682bc
new file mode 100755
c682bc
index 000000000000..9228c688e7a2
c682bc
--- /dev/null
c682bc
+++ b/pflags-cmd.py
c682bc
@@ -0,0 +1,65 @@
c682bc
+#! /usr/bin/python
c682bc
+# -*- python -*-
c682bc
+# -*- coding: utf-8 -*-
c682bc
+#   print process flags
c682bc
+#   Copyright (C) 2015 Red Hat Inc.
c682bc
+#   Arnaldo Carvalho de Melo <acme@redhat.com>
c682bc
+#
c682bc
+#   This application is free software; you can redistribute it and/or
c682bc
+#   modify it under the terms of the GNU General Public License
c682bc
+#   as published by the Free Software Foundation; version 2.
c682bc
+#
c682bc
+#   This application is distributed in the hope that it will be useful,
c682bc
+#   but WITHOUT ANY WARRANTY; without even the implied warranty of
c682bc
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
c682bc
+#   General Public License for more details.
c682bc
+
c682bc
+import procfs, re, fnmatch, sys
c682bc
+
c682bc
+ps = None
c682bc
+
c682bc
+def thread_mapper(s):
c682bc
+	global ps
c682bc
+
c682bc
+	try:
c682bc
+		return [ int(s), ]
c682bc
+	except:
c682bc
+		pass
c682bc
+	try:
c682bc
+		return ps.find_by_regex(re.compile(fnmatch.translate(s)))
c682bc
+	except:
c682bc
+		return ps.find_by_name(s)
c682bc
+
c682bc
+def main(argv):
c682bc
+
c682bc
+	global ps
c682bc
+	ps = procfs.pidstats()
c682bc
+
c682bc
+	if (len(argv) > 1):
c682bc
+		pids = reduce(lambda i, j: i + j, map(thread_mapper, argv[1].split(",")))
c682bc
+	else:
c682bc
+		pids = ps.processes.keys()
c682bc
+
c682bc
+	pids.sort()
c682bc
+	len_comms = map(lambda pid: len(ps[pid]["stat"]["comm"]), pids)
c682bc
+	max_comm_len = max(len_comms)
c682bc
+	del(len_comms)
c682bc
+
c682bc
+	for pid in pids:
c682bc
+		flags = ps[pid].stat.process_flags()
c682bc
+		# Remove flags that were superseeded
c682bc
+		if "PF_THREAD_BOUND" in flags and "PF_NO_SETAFFINITY" in flags:
c682bc
+			flags.remove("PF_THREAD_BOUND")
c682bc
+		if "PF_FLUSHER" in flags and "PF_NPROC_EXCEEDED" in flags:
c682bc
+			flags.remove("PF_FLUSHER")
c682bc
+		if "PF_SWAPOFF" in flags and "PF_MEMALLOC_NOIO" in flags:
c682bc
+			flags.remove("PF_SWAPOFF")
c682bc
+		if "PF_FREEZER_NOSIG" in flags and "PF_SUSPEND_TASK" in flags:
c682bc
+			flags.remove("PF_FREEZER_NOSIG")
c682bc
+		comm = ps[pid].stat["comm"]
c682bc
+		flags.sort()
c682bc
+		sflags = reduce(lambda i, j: "%s|%s" % (i, j), map(lambda a: a[3:],flags))
c682bc
+		print "%6d %*s %s" %(pid, max_comm_len, comm, sflags)
c682bc
+
c682bc
+if __name__ == '__main__':
c682bc
+	main(sys.argv)
c682bc
-- 
c682bc
1.8.3.1
c682bc