################################################################################
# BSD LICENSE
#
# Copyright(c) 2019-2020 Intel Corporation. All rights reserved.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in
# the documentation and/or other materials provided with the
# distribution.
# * Neither the name of Intel Corporation nor the names of its
# contributors may be used to endorse or promote products derived
# from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
################################################################################
import argparse
from pqos import Pqos
from pqos.allocation import PqosAlloc
from pqos.cpuinfo import PqosCpuInfo
from pqos.l3ca import PqosCatL3
def reset_allocation():
"""
Resets allocation configuration.
"""
alloc = PqosAlloc()
try:
alloc.reset('any', 'any', 'any')
print("Allocation reset successful")
except:
print("Allocation reset failed!")
def print_allocation_config():
"""
Prints allocation configuration.
"""
l3ca = PqosCatL3()
alloc = PqosAlloc()
cpuinfo = PqosCpuInfo()
sockets = cpuinfo.get_sockets()
for socket in sockets:
try:
coses = l3ca.get(socket)
print("L3CA COS definitions for Socket %u:" % socket)
for cos in coses:
cos_params = (cos.class_id, cos.mask)
print(" L3CA COS%u => MASK 0x%x" % cos_params)
except:
print("Error")
raise
for socket in sockets:
try:
print("Core information for socket %u:" % socket)
cores = cpuinfo.get_cores(socket)
for core in cores:
class_id = alloc.assoc_get(core)
try:
print(" Core %u => COS%u" % (core, class_id))
except:
print(" Core %u => ERROR" % core)
except:
print("Error")
raise
def parse_args():
"""
Parses command line arguments.
Returns:
an object with parsed command line arguments
"""
description = 'PQoS Library Python wrapper - COS reset example'
parser = argparse.ArgumentParser(description=description)
parser.add_argument('-I', dest='interface', action='store_const',
const='OS', default='MSR',
help='select library OS interface')
args = parser.parse_args()
return args
class PqosContextManager:
"""
Helper class for using PQoS library Python wrapper as a context manager
(in a with statement).
"""
def __init__(self, *args, **kwargs):
self.args = args
self.kwargs = kwargs
self.pqos = Pqos()
def __enter__(self):
"Initializes PQoS library."
self.pqos.init(*self.args, **self.kwargs)
return self.pqos
def __exit__(self, *args, **kwargs):
"Finalizes PQoS library."
self.pqos.fini()
return None
def main():
args = parse_args()
try:
with PqosContextManager(args.interface):
reset_allocation()
print_allocation_config()
except:
print("Error!")
raise
if __name__ == "__main__":
main()