Slight growth of memory detected

Open
#55 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
35/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Stale
Tech stack
c, python
Domain
networking

Research direction

Start by reproducing the supplied memory test with get_active_devices and get_interfaces_info, including the invalid interface name case. Trace these entry points through the repository's Python bindings and native implementation, then repeat the measurements after any investigation. Done means repeated calls no longer show measurable memory growth.

Written by the indexing model from the issue text.

Description

help wanted

Get this script (GPLv2 Copyright (c) 2011 Red Hat):

import ethtool
import subprocess, sys, os

max = int(sys.argv[1])
nic = sys.argv[2]
total = 0

def memory():
    """ Get current memory usage in MB """
    command = "ps --no-header -o rss -p %s" % os.getpid()
    p = subprocess.Popen(command.split(), stdout=subprocess.PIPE)
    stdout, stderr = p.communicate()
    return int(stdout) / 1024

def measure(fun, arg):
    """ Run given function on given arg max times """
    global total
    print("\n%s on %s" % (fun, arg))
    start = None

    for i in range(max + 1):
        result = fun(arg)
        if i % (max / 10) == 0:
            current = memory()
            # note the memory after the first round warm-up
            if start is None:
                start = current
            print("%s %% ... %s MB" % \
                    (str(100 * i / max).rjust(3), str(current).rjust(3)))
    increase = current - start
    print("Memory increase: %s MB" % increase)
    total += increase

measure(ethtool.get_active_devices, None)
measure(ethtool.get_interfaces_info, nic)
measure(ethtool.get_interfaces_info, 'bad interface name')

print("\nTotal memory increase: %s MB" % total)
if total > 0:
    sys.exit(1)

And run:

$ python3.6 ~/tmp/memory.py 1000000 ens3
<built-in function get_active_devices> on None
0.0 % ... 10.1328125 MB
10.0 % ... 10.13671875 MB
20.0 % ... 10.13671875 MB
30.0 % ... 10.13671875 MB
40.0 % ... 10.13671875 MB
50.0 % ... 10.13671875 MB
60.0 % ... 10.13671875 MB
70.0 % ... 10.13671875 MB
80.0 % ... 10.13671875 MB
90.0 % ... 10.13671875 MB
100.0 % ... 10.13671875 MB
Memory increase: 0.00390625 MB

<built-in function get_interfaces_info> on ens3
0.0 % ... 10.13671875 MB
10.0 % ... 10.13671875 MB
20.0 % ... 10.13671875 MB
30.0 % ... 10.13671875 MB
40.0 % ... 10.13671875 MB
50.0 % ... 10.13671875 MB
60.0 % ... 10.13671875 MB
70.0 % ... 10.13671875 MB
80.0 % ... 10.13671875 MB
90.0 % ... 10.140625 MB
100.0 % ... 10.140625 MB
Memory increase: 0.00390625 MB

<built-in function get_interfaces_info> on bad interface name
0.0 % ... 10.140625 MB
10.0 % ... 10.140625 MB
20.0 % ... 10.140625 MB
30.0 % ... 10.140625 MB
40.0 % ... 10.140625 MB
50.0 % ... 10.140625 MB
60.0 % ... 10.140625 MB
70.0 % ... 10.140625 MB
80.0 % ... 10.140625 MB
90.0 % ... 10.140625 MB
100.0 % ... 10.140625 MB
Memory increase: 0.0 MB

Total memory increase: 0.0078125 MB
Dominant language
C
Stars
16
Forks
11
PR merge metrics
No merged PRs in 30d

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from fedora-python/python-ethtool

All issues in fedora-python/python-ethtool

Similar issues

More C issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.