1#!/usr/bin/env python3 2# 3# USAGE: test_usdt.py 4# 5# Copyright 2018 Facebook, Inc 6# Licensed under the Apache License, Version 2.0 (the "License") 7 8from __future__ import print_function 9from bcc import BPF 10from unittest import main, skipUnless, TestCase 11from subprocess import Popen, PIPE 12from utils import kernel_version_ge 13import os 14 15class TestFreeLLVMMemory(TestCase): 16 def getRssFile(self): 17 with Popen(["cat", "/proc/" + str(os.getpid()) + "/status"], 18 stdout=PIPE) as p: 19 rss = None 20 unit = None 21 for line in p.stdout.readlines(): 22 if (line.find(b'RssFile') >= 0): 23 rss = line.split(b' ')[-2] 24 unit = line.split(b' ')[-1].rstrip() 25 break 26 27 return [rss, unit] 28 29 @skipUnless(kernel_version_ge(4,5), "requires kernel >= 4.5") 30 def testFreeLLVMMemory(self): 31 text = b"int test() { return 0; }" 32 b = BPF(text=text) 33 34 # get the RssFile before freeing bcc memory 35 [rss1, unit1] = self.getRssFile() 36 self.assertTrue(rss1 != None) 37 38 # free the bcc memory 39 self.assertTrue(b.free_bcc_memory() == 0) 40 41 # get the RssFile after freeing bcc memory 42 [rss2, unit2] = self.getRssFile() 43 self.assertTrue(rss2 != None) 44 45 self.assertTrue(unit1 == unit2) 46 47 print("Before freeing llvm memory: RssFile: ", rss1, unit1) 48 print("After freeing llvm memory: RssFile: ", rss2, unit2) 49 self.assertTrue(rss1 > rss2) 50 51if __name__ == "__main__": 52 main() 53