Пример #1
0
    def test_set(self, lib):
        "Tests set() method."

        def pqos_mba_set_mock(socket, num_cos, cos_arr, actual_arr):
            "Mock pqos_mba_set()."

            self.assertEqual(socket, 0)
            self.assertEqual(num_cos, 1)
            self.assertEqual(len(cos_arr), num_cos)
            self.assertEqual(len(actual_arr), num_cos)
            self.assertEqual(cos_arr[0].class_id, 1)
            self.assertEqual(cos_arr[0].mb_max, 40)
            self.assertEqual(cos_arr[0].ctrl, 0)

            actual_arr[0].class_id = cos_arr[0].class_id
            actual_arr[0].mb_max = 50
            actual_arr[0].ctrl = cos_arr[0].ctrl

            return 0

        lib.pqos_mba_set = MagicMock(side_effect=pqos_mba_set_mock)

        mba = PqosMba()
        cos = mba.COS(1, 40)
        actual = mba.set(0, [cos])

        self.assertEqual(len(actual), 1)
        self.assertEqual(actual[0].class_id, 1)
        self.assertEqual(actual[0].mb_max, 50)
        self.assertEqual(actual[0].ctrl, 0)

        lib.pqos_mba_set.assert_called_once()
Пример #2
0
    def init(self, iface, force_iface=False):
        """
        Initializes libpqos

        Returns:
            0 on success
            -1 otherwise
        """

        if not force_iface and not iface in self.supported_iface():
            log.error("RDT does not support '%s' interface!" % (iface))
            return -1

        # deinitialize lib first
        if self.shared_dict['current_iface']:
            self.fini()

        # umount restcrl to improve caps detection
        if platform.system() == 'FreeBSD':
            result = os.system(
                "/sbin/umount -a -t resctrl")  # nosec - string literal
        else:
            result = os.system(
                "/bin/umount -a -t resctrl")  # nosec - string literal
        if result:
            log.error("Failed to umount resctrl fs! status code: %d"\
                    % (os.WEXITSTATUS(result)))
            return -1

        # attempt to initialize libpqos
        try:
            self.pqos.init(iface.upper())
            self.cap = PqosCap()
            self.l3ca = PqosCatL3()
            self.mba = PqosMba()
            self.alloc = PqosAlloc()
            self.cpuinfo = PqosCpuInfo()
        except Exception as ex:
            log.error(str(ex))
            return -1

        # save current interface type in shared dict
        self.shared_dict['current_iface'] = iface

        # Reread MBA BW status from libpqos
        self.refresh_mba_bw_status()

        return 0
Пример #3
0
    def test_get(self, lib):
        "Tests get() method."

        def pqos_mba_cos_num_mock(_p_cap, num_cos_ref):
            "Mock pqos_mba_get_cos_num()."

            ctypes_ref_set_int(num_cos_ref, 2)
            return 0

        def pqos_mba_get_mock(socket, max_num_cos, num_cos_ref, cos_arr):
            "Mock pqos_mba_get()."

            self.assertEqual(socket, 1)
            self.assertEqual(max_num_cos, 2)
            self.assertEqual(len(cos_arr), max_num_cos)

            ctypes_ref_set_int(num_cos_ref, 2)

            cos_arr[0].class_id = 0
            cos_arr[0].mb_max = 4000
            cos_arr[0].ctrl = 1

            cos_arr[1].class_id = 1
            cos_arr[1].mb_max = 8000
            cos_arr[1].ctrl = 1

            return 0

        lib.pqos_cap_get = MagicMock(return_value=0)
        lib.pqos_mba_get_cos_num = MagicMock(side_effect=pqos_mba_cos_num_mock)
        lib.pqos_mba_get = MagicMock(side_effect=pqos_mba_get_mock)

        mba = PqosMba()
        coses = mba.get(1)

        self.assertEqual(len(coses), 2)

        self.assertEqual(coses[0].class_id, 0)
        self.assertEqual(coses[0].mb_max, 4000)
        self.assertTrue(coses[0].ctrl)

        self.assertEqual(coses[1].class_id, 1)
        self.assertEqual(coses[1].mb_max, 8000)
        self.assertTrue(coses[1].ctrl)

        lib.pqos_mba_get.assert_called_once()
        lib.pqos_mba_get_cos_num.assert_called_once()
Пример #4
0
def set_allocation_class(sockets, class_id, mb_max):
    """
    Sets up allocation classes of service on selected CPU sockets

    Parameters:
        sockets: array with socket IDs
        class_id: class of service ID
        mb_max: COS rate in percent
    """

    mba = PqosMba()
    cos = mba.COS(class_id, mb_max)

    for socket in sockets:
        try:
            actual = mba.set(socket, [cos])

            params = (socket, class_id, mb_max, actual[0].mb_max)
            print("SKT%u: MBA COS%u => %u%% requested, %u%% applied" % params)
        except:
            print("Setting up cache allocation class of service failed!")
Пример #5
0
    def init(self):
        """
        Initializes libpqos

        Returns:
            0 on success
            -1 otherwise
        """

        try:
            self.pqos.init('MSR')
            self.cap = PqosCap()
            self.l3ca = PqosCatL3()
            self.mba = PqosMba()
            self.alloc = PqosAlloc()
            self.cpuinfo = PqosCpuInfo()
        except Exception as ex:
            log.error(str(ex))
            return -1

        return 0
Пример #6
0
def print_allocation_config(sockets):
    """
    Prints allocation configuration.

    Parameters:
        sockets: array with socket IDs
    """

    mba = PqosMba()

    for socket in sockets:
        try:
            coses = mba.get(socket)

            print("MBA COS definitions for Socket %u:" % socket)

            for cos in coses:
                cos_params = (cos.class_id, cos.mb_max)
                print("    MBA COS%u => %u%% available" % cos_params)
        except:
            print("Error")
            raise
Пример #7
0
pqos = Pqos()
pqos.init('OS')

# Check if MBA is supported
cap = PqosCap()
mba_supported = False
try:
    cap.get_type('mba')
    mba_supported = True
except:
    pass

print('Is MBA supported? %s' % ('Yes' if mba_supported else 'No'))

if mba_supported:
    mba = PqosMba()

    # Get MBA configuration for socket 0
    coses = mba.get(0)

    print('MBA configuration for socket 0:')
    for cos in coses:
        print('COS: %d' % cos.class_id)
        print('MB max: %d' % cos.mb_max)
        print('CTRL: %s' % cos.ctrl)
        print('')

    # Configure MBA, 50% of available bandwidth for COS 0
    cos = mba.COS(0, 50)
    # Apply for socket 0
    actual = mba.set(0, [cos])