summaryrefslogtreecommitdiff
path: root/src/op_mode/show_acceleration.py
blob: 9f10ee8e541fa8e1315d0f9deb6632301673e1ad (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#!/usr/bin/env python3
#
# Copyright (C) 2019-2020 VyOS maintainers and contributors
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 or later as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

import sys
import os
import re
import argparse
import subprocess
from vyos.config import Config

qat_init_script = '/etc/init.d/qat_service'

def detect_qat_dev():
    ret = subprocess.Popen(['sudo', 'lspci',  '-nn'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
    (output, err) = ret.communicate()
    if not err:
        data = re.findall('(8086:19e2)|(8086:37c8)|(8086:0435)|(8086:6f54)', output.decode("utf-8"))
        #If QAT devices found
        if data:
            return
    print("\t No QAT device found")
    sys.exit(1)

def show_qat_status():
    detect_qat_dev()

    # Check QAT service
    if not os.path.exists(qat_init_script):
        print("\t QAT service not installed")
        sys.exit(1)

    # Show QAT service
    os.system('sudo {} status'.format(qat_init_script))

# Return QAT devices
def get_qat_devices():
    ret = subprocess.Popen(['sudo', qat_init_script,  'status'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
    (output, err) = ret.communicate()
    if not err:
        #print(output)
        data_st = output.decode("utf-8")
        elm_lst = re.findall('qat_dev\d', data_st)
        print('\n'.join(elm_lst))

# Return QAT path in sysfs
def get_qat_proc_path(qat_dev):
    q_type = ""
    q_bsf  = ""
    ret = subprocess.Popen(['sudo', qat_init_script,  'status'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
    (output, err) = ret.communicate()
    if not err:
        # Parse QAT service output
        data_st = output.decode("utf-8").split("\n")
        for elm_str in range(len(data_st)):
            if re.search(qat_dev, data_st[elm_str]):
                elm_list = data_st[elm_str].split(", ")
                for elm in range(len(elm_list)):
                    if re.search('type', elm_list[elm]):
                        q_list = elm_list[elm].split(": ")
                        q_type=q_list[1]
                    elif re.search('bsf', elm_list[elm]):
                        q_list = elm_list[elm].split(": ")
                        q_bsf = q_list[1]
        return "/sys/kernel/debug/qat_"+q_type+"_"+q_bsf+"/"

# Check if QAT service confgured
def check_qat_if_conf():
    if not Config().exists_effective('system acceleration qat'):
        print("\t system acceleration qat is not configured")
        sys.exit(1)

parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group()
group.add_argument("--hw", action="store_true", help="Show Intel QAT HW")
group.add_argument("--dev_list", action="store_true", help="Return Intel QAT devices")
group.add_argument("--flow", action="store_true", help="Show Intel QAT flows")
group.add_argument("--interrupts", action="store_true", help="Show Intel QAT interrupts")
group.add_argument("--status", action="store_true", help="Show Intel QAT status")
group.add_argument("--conf", action="store_true", help="Show Intel QAT configuration")

parser.add_argument("--dev", type=str, help="Selected QAT device")

args = parser.parse_args()

if args.hw:
    detect_qat_dev()
    # Show availible Intel QAT devices
    os.system('sudo lspci -nn | egrep -e \'8086:37c8|8086:19e2|8086:0435|8086:6f54\'')
elif args.flow and args.dev:
    check_qat_if_conf()
    os.system('sudo cat '+get_qat_proc_path(args.dev)+"fw_counters")
elif args.interrupts:
    check_qat_if_conf()
    # Delete _dev from args.dev
    os.system('sudo cat /proc/interrupts | grep qat')
elif args.status:
    check_qat_if_conf()
    show_qat_status()
elif args.conf and args.dev:
    check_qat_if_conf()
    os.system('sudo cat '+get_qat_proc_path(args.dev)+"dev_cfg")
elif args.dev_list:
    get_qat_devices()
else:
    parser.print_help()
    sys.exit(1)