Skip to content

Commit ef18042

Browse files
committed
Refactoring: softirq-net-rx-top rewriten in python.
1 parent 9c64c98 commit ef18042

File tree

14 files changed

+176
-30
lines changed

14 files changed

+176
-30
lines changed

netutils_linux/softirqs.py

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import os
2+
import time
3+
4+
5+
class Softirqs(object):
6+
def __init__(self, filename='/proc/softirqs'):
7+
self.filename = filename
8+
9+
def file2data(self):
10+
with open(self.filename) as fd:
11+
metrics = [line.strip().split(':') for line in fd.readlines() if ':' in line]
12+
return dict((k, map(int, v.strip().split())) for k, v in metrics)
13+
14+
@staticmethod
15+
def __active_cpu_count__(data):
16+
return len([metric for metric in data.get('TIMER') if metric > 0])
17+
18+
@staticmethod
19+
def __list_diff__(cur, prev):
20+
return [cur[i] - prev[i] for i in xrange(len(cur))]
21+
22+
@staticmethod
23+
def __list_print__(data):
24+
print "Press CTRL-C to exit..."
25+
print
26+
for n, v in enumerate(data):
27+
print 'CPU{0}: {1}'.format(n, v)
28+
29+
def __loop__(self):
30+
net_rx = None
31+
while True:
32+
data = self.file2data()
33+
cpu_count = self.__active_cpu_count__(data)
34+
net_rx_cur = data.get('NET_RX')[:cpu_count]
35+
if net_rx:
36+
os.system('clear')
37+
self.__list_print__(self.__list_diff__(net_rx_cur, net_rx))
38+
net_rx = net_rx_cur
39+
time.sleep(1)
40+
41+
def loop(self):
42+
try:
43+
self.__loop__()
44+
except KeyboardInterrupt as err:
45+
print
46+
exit(0)

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ def read(*paths):
1414

1515
setuptools.setup(
1616
name='netutils-linux',
17-
version='1.1.8',
17+
version='1.1.9',
1818
author='Oleg Strizhechenko',
1919
author_email='[email protected]',
2020
license='MIT',

tests/softirq_net_rx_top_test.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
#!/usr/bin/env python
2+
3+
import unittest
4+
from netutils_linux.softirqs import Softirqs
5+
6+
7+
class SoftirqsTest(unittest.TestCase):
8+
9+
def test_file2data(self):
10+
for cpu in ('dualcore', 'i7'):
11+
for i in xrange(1, 6):
12+
self.assertIn('NET_RX', Softirqs('tests/softirqs/{0}/softirqs{1}'.format(cpu, i)).file2data())
13+
14+
if __name__ == '__main__':
15+
unittest.main()

tests/softirqs/dualcore/softirqs1

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
CPU0 CPU1 CPU2 CPU3
2+
HI: 0 0 0 0
3+
TIMER: 76443125 79104655 0 0
4+
NET_TX: 98717 98515 0 0
5+
NET_RX: 183741596 182082160 0 0
6+
BLOCK: 1708911 1708437 0 0
7+
BLOCK_IOPOLL: 0 0 0 0
8+
TASKLET: 445 467 0 0
9+
SCHED: 6542836 7745750 0 0
10+
HRTIMER: 13949 11230 0 0
11+
RCU: 108461005 106880834 0 0

tests/softirqs/dualcore/softirqs2

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
CPU0 CPU1 CPU2 CPU3
2+
HI: 0 0 0 0
3+
TIMER: 76443200 79105854 0 0
4+
NET_TX: 98718 98515 0 0
5+
NET_RX: 183741939 182082575 0 0
6+
BLOCK: 1708915 1708439 0 0
7+
BLOCK_IOPOLL: 0 0 0 0
8+
TASKLET: 445 467 0 0
9+
SCHED: 6542856 7745754 0 0
10+
HRTIMER: 13949 11230 0 0
11+
RCU: 108461112 106882033 0 0

tests/softirqs/dualcore/softirqs3

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
CPU0 CPU1 CPU2 CPU3
2+
HI: 0 0 0 0
3+
TIMER: 76443352 79107051 0 0
4+
NET_TX: 98718 98515 0 0
5+
NET_RX: 183742219 182082903 0 0
6+
BLOCK: 1708924 1708445 0 0
7+
BLOCK_IOPOLL: 0 0 0 0
8+
TASKLET: 445 467 0 0
9+
SCHED: 6542890 7745759 0 0
10+
HRTIMER: 13949 11230 0 0
11+
RCU: 108461307 106883230 0 0

tests/softirqs/dualcore/softirqs4

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
CPU0 CPU1 CPU2 CPU3
2+
HI: 0 0 0 0
3+
TIMER: 76443427 79108249 0 0
4+
NET_TX: 98718 98515 0 0
5+
NET_RX: 183742495 182083181 0 0
6+
BLOCK: 1708928 1708450 0 0
7+
BLOCK_IOPOLL: 0 0 0 0
8+
TASKLET: 445 467 0 0
9+
SCHED: 6542907 7745764 0 0
10+
HRTIMER: 13949 11230 0 0
11+
RCU: 108461410 106884428 0 0

tests/softirqs/dualcore/softirqs5

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
CPU0 CPU1 CPU2 CPU3
2+
HI: 0 0 0 0
3+
TIMER: 76443532 79109450 0 0
4+
NET_TX: 98719 98515 0 0
5+
NET_RX: 183742853 182083533 0 0
6+
BLOCK: 1708938 1708459 0 0
7+
BLOCK_IOPOLL: 0 0 0 0
8+
TASKLET: 445 467 0 0
9+
SCHED: 6542919 7745768 0 0
10+
HRTIMER: 13949 11230 0 0
11+
RCU: 108461543 106885629 0 0

tests/softirqs/i7/softirqs1

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
CPU0 CPU1 CPU2 CPU3 CPU4 CPU5 CPU6 CPU7
2+
HI: 0 0 0 0 0 0 0 0
3+
TIMER: 676581837 454936990 342237869 284137112 439554067 306423872 339472976 302794091
4+
NET_TX: 20940277 4040 2917 1538 16915 338057 1696 1191
5+
NET_RX: 1180153410 1833061539 1361075413 1155074300 3497390485 1428609067 958921598 894237858
6+
BLOCK: 319547005 11 21 12 37 19 31 10
7+
BLOCK_IOPOLL: 0 0 0 0 0 0 0 0
8+
TASKLET: 411038 138 193 143 217 63 221 267
9+
SCHED: 155307884 105880292 84103615 72216095 124160873 98299805 101374252 98116687
10+
HRTIMER: 2530530 1315799 929573 883816 2463970 1074736 808460 810882
11+
RCU: 706527144 473284690 350582010 289754731 465750377 325817035 383560086 332547269

tests/softirqs/i7/softirqs2

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
CPU0 CPU1 CPU2 CPU3 CPU4 CPU5 CPU6 CPU7
2+
HI: 0 0 0 0 0 0 0 0
3+
TIMER: 676581970 454937615 342237900 284137159 439554154 306424615 339473049 302794175
4+
NET_TX: 20940277 4040 2917 1538 16915 338057 1696 1191
5+
NET_RX: 1180153489 1833080731 1361075474 1155074300 3497390485 1428628213 958921624 894237858
6+
BLOCK: 319547114 11 21 12 37 19 31 10
7+
BLOCK_IOPOLL: 0 0 0 0 0 0 0 0
8+
TASKLET: 411038 138 193 143 217 63 221 267
9+
SCHED: 155307945 105880324 84103650 72216135 124160917 98299836 101374298 98116742
10+
HRTIMER: 2530530 1315804 929573 883817 2463970 1074746 808460 810883
11+
RCU: 706527284 473285305 350582042 289754779 465750464 325817773 383560161 332547352

tests/softirqs/i7/softirqs3

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
CPU0 CPU1 CPU2 CPU3 CPU4 CPU5 CPU6 CPU7
2+
HI: 0 0 0 0 0 0 0 0
3+
TIMER: 676582210 454938204 342237977 284137183 439554300 306425057 339473209 302794330
4+
NET_TX: 20940277 4040 2917 1538 16915 338057 1696 1191
5+
NET_RX: 1180153702 1833094571 1361075538 1155074301 3497390493 1428642052 958922329 894237873
6+
BLOCK: 319547225 11 21 12 37 19 31 10
7+
BLOCK_IOPOLL: 0 0 0 0 0 0 0 0
8+
TASKLET: 411038 138 193 143 217 63 221 267
9+
SCHED: 155308077 105880336 84103707 72216154 124160985 98299850 101374397 98116831
10+
HRTIMER: 2530530 1315819 929573 883817 2463970 1074753 808460 810883
11+
RCU: 706527544 473285893 350582122 289754804 465750613 325818208 383560336 332547534

tests/softirqs/i7/softirqs4

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
CPU0 CPU1 CPU2 CPU3 CPU4 CPU5 CPU6 CPU7
2+
HI: 0 0 0 0 0 0 0 0
3+
TIMER: 676582478 454938718 342238156 284137213 439554452 306425642 339473333 302794512
4+
NET_TX: 20940277 4040 2917 1538 16915 338057 1696 1191
5+
NET_RX: 1180155200 1833104983 1361075983 1155074304 3497390499 1428651369 958922340 894237875
6+
BLOCK: 319547292 11 21 12 37 19 31 10
7+
BLOCK_IOPOLL: 0 0 0 0 0 0 0 0
8+
TASKLET: 411038 138 193 143 217 63 221 267
9+
SCHED: 155308200 105880373 84103787 72216171 124161051 98299928 101374448 98116909
10+
HRTIMER: 2530531 1315825 929573 883817 2463971 1074758 808460 810883
11+
RCU: 706527837 473286406 350582310 289754834 465750773 325818796 383560475 332547747

tests/softirqs/i7/softirqs5

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
CPU0 CPU1 CPU2 CPU3 CPU4 CPU5 CPU6 CPU7
2+
HI: 0 0 0 0 0 0 0 0
3+
TIMER: 676582806 454939313 342238287 284137348 439554666 306426313 339473540 302794662
4+
NET_TX: 20940277 4040 2917 1538 16915 338058 1696 1191
5+
NET_RX: 1180155737 1833119266 1361075983 1155074321 3497390508 1428665657 958922351 894237887
6+
BLOCK: 319547392 11 21 12 37 19 31 10
7+
BLOCK_IOPOLL: 0 0 0 0 0 0 0 0
8+
TASKLET: 411038 138 193 143 217 63 221 267
9+
SCHED: 155308363 105880411 84103842 72216243 124161180 98300076 101374562 98116981
10+
HRTIMER: 2530532 1315832 929573 883817 2463971 1074766 808460 810883
11+
RCU: 706528197 473286999 350582440 289754971 465750998 325819461 383560710 332547931

utils/softirq-net-rx-top

Lines changed: 4 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,6 @@
1-
#!/bin/bash
1+
#!/usr/bin/env python
22

3-
TMPDIR=/tmp/softirq-net-rx-top/
4-
CUR="$TMPDIR/cur"
5-
PREV="$TMPDIR/prev"
6-
DIFF="$TMPDIR/diff"
3+
from netutils_linux.softirqs import Softirqs
74

8-
mkdir -p $TMPDIR
9-
rm -f "$CUR" "$PREV" "$DIFF"
10-
11-
while sleep 1; do
12-
for i in $(grep NET_RX /proc/softirqs); do
13-
echo "$i"
14-
done | grep [0-9] > "$CUR"
15-
16-
if [ ! -f "$PREV" ]; then
17-
mv "$CUR" "$PREV"
18-
continue
19-
fi
20-
21-
for i in $(seq 1 $(wc -l < "$CUR")); do
22-
printf "%s\t%s\n" CPU$((i-1)) $(($(sed -n "${i}p" "$CUR") - $(sed -n "${i}p" "$PREV")))
23-
done > "$DIFF"
24-
25-
echo
26-
clear
27-
echo "Press CTRL-C to exit..."
28-
uptime | sed 's/.*:/Load average: /g'
29-
cat "$DIFF"
30-
mv "$CUR" "$PREV"
31-
done
5+
if __name__ == '__main__':
6+
Softirqs().loop()

0 commit comments

Comments
 (0)