You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
1.8 KiB
64 lines
1.8 KiB
#!/usr/bin/env python
|
|
#
|
|
# USAGE: test_usdt.py
|
|
#
|
|
# Copyright 2018 Facebook, Inc
|
|
# Licensed under the Apache License, Version 2.0 (the "License")
|
|
|
|
from __future__ import print_function
|
|
from bcc import BPF
|
|
from unittest import main, skipUnless, TestCase
|
|
from subprocess import Popen, PIPE
|
|
import distutils.version
|
|
import os
|
|
|
|
def kernel_version_ge(major, minor):
|
|
# True if running kernel is >= X.Y
|
|
version = distutils.version.LooseVersion(os.uname()[2]).version
|
|
if version[0] > major:
|
|
return True
|
|
if version[0] < major:
|
|
return False
|
|
if minor and version[1] < minor:
|
|
return False
|
|
return True
|
|
|
|
class TestFreeLLVMMemory(TestCase):
|
|
def getRssFile(self):
|
|
p = Popen(["cat", "/proc/" + str(os.getpid()) + "/status"],
|
|
stdout=PIPE)
|
|
rss = None
|
|
unit = None
|
|
for line in p.stdout.readlines():
|
|
if (line.find(b'RssFile') >= 0):
|
|
rss = line.split(b' ')[-2]
|
|
unit = line.split(b' ')[-1].rstrip()
|
|
break
|
|
|
|
return [rss, unit]
|
|
|
|
@skipUnless(kernel_version_ge(4,5), "requires kernel >= 4.5")
|
|
def testFreeLLVMMemory(self):
|
|
text = "int test() { return 0; }"
|
|
b = BPF(text=text)
|
|
|
|
# get the RssFile before freeing bcc memory
|
|
[rss1, unit1] = self.getRssFile()
|
|
self.assertTrue(rss1 != None)
|
|
|
|
# free the bcc memory
|
|
self.assertTrue(b.free_bcc_memory() == 0)
|
|
|
|
# get the RssFile after freeing bcc memory
|
|
[rss2, unit2] = self.getRssFile()
|
|
self.assertTrue(rss2 != None)
|
|
|
|
self.assertTrue(unit1 == unit2)
|
|
|
|
print("Before freeing llvm memory: RssFile: ", rss1, unit1)
|
|
print("After freeing llvm memory: RssFile: ", rss2, unit2)
|
|
self.assertTrue(rss1 > rss2)
|
|
|
|
if __name__ == "__main__":
|
|
main()
|