File: mem_sz_for_bw.py

package info (click to toggle)
damo 2.9.4-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 27,424 kB
  • sloc: python: 12,788; sh: 891; makefile: 30; ansic: 13
file content (50 lines) | stat: -rw-r--r-- 1,908 bytes parent folder | download | duplicates (2)
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
# SPDX-License-Identifier: GPL-2.0

'''
Show how much memory is required to fulfill how much of memory bandwidth
consumption.
'''

import math

def bw_consumption(region):
    'Return estimated bandwidth consumption of the region'
    return region.size() * region.nr_accesses.samples

def pr_membw_memsz_percentile(snapshot):
    total_bw_consumption = sum([bw_consumption(r) for r in snapshot.regions])
    if total_bw_consumption == 0:
        print('zero bw')
        return
    # sort regiosn to hot regions come first, since we try to find minimum size
    # of memory that can serve specific portion of the workload's memory
    # bandwidth consumption
    sorted_regions = sorted(snapshot.regions,
                            key=lambda r: r.nr_accesses.samples, reverse=True)
    total_sz = sum([r.size() for r in snapshot.regions])

    next_percentile_to_print = 1
    bw_cumulated = 0
    sz_cumulated = 0
    print('<bw percent>\t<mem sz percent>')
    print(' '.join([
        '<mem sz percent> % of memory is required to serve',
        '<bw percent> % of bandwidth consumption']))
    for r in sorted_regions:
        bw_cumulated += bw_consumption(r)
        sz_cumulated += r.size()
        # todo: split region to show exact bw percentile numbers
        if bw_cumulated / total_bw_consumption * 100 < next_percentile_to_print:
            continue
        print('%.2f\t%.2f' %
              (bw_cumulated / total_bw_consumption * 100, sz_cumulated /
               total_sz * 100))
        next_percentile_to_print = math.floor(bw_cumulated /
                                              total_bw_consumption * 100 + 5)

def main(records, cmdline_fields):
    for ridx, record in enumerate(records):
        print('%d-th record' % ridx)
        for sidx, snapshot in enumerate(record.snapshots):
            print('%d-th snapshot' % sidx)
            pr_membw_memsz_percentile(snapshot)