I brought up something similar to this recently. We notice this with VM metadata and passwords in the code. The virtual router does not properly clean up after itself, so there are leftover entries that the update_config.py script must continually update which are no longer relevant. If you make a script that continually creates and destroys machines while watching the management server/agent (depending on hypervisor) logs for the amount of time it takes to run update_config.py, you will see a linear increase in time. In the beginning configuring a router takes maybe 2 seconds. A few hundred VMs later and it's easily up to 30+ seconds. It is actually quite easy to essentially deadlock the deployment of VMs because the router takes so long to configure itself.
We are working on adding some code to the release step of the VirtualRouterElement that will send a router command to remove VM metadata/password entries, and hopefully that will speed things up a bit too. *Jeff Hair* Technical Lead and Software Developer Tel: (+354) 415 0200 j...@greenqloud.com www.greenqloud.com On Sat, Aug 20, 2016 at 5:30 AM, Gust <digitalg...@163.com> wrote: > A port forward rule operation spent: > > not optimized 5min > optimized 3min > optmized+cProfile 8min > > top 30 : > > Fri Aug 19 11:27:50 2016 d:\temp\py_pro.data > > 614887355 function calls (614884838 primitive calls) in 548.846 > seconds > > Ordered by: cumulative time > List reduced from 404 to 30 due to restriction <30> > > ncalls tottime percall cumtime percall filename:lineno(function) > 1 0.000 0.000 548.846 548.846 <string>:1(<module>) > 1 0.000 0.000 548.846 548.846 update_config.py:114(mainp) > 1 0.000 0.000 548.846 548.846 update_config.py:50(process_ > file) > 1 0.001 0.001 548.837 548.837 update_config.py:44(finish_ > config) > 1 0.000 0.000 548.836 548.836 configure.py:903(main) > 1 0.000 0.000 546.228 546.228 configure.py:717(process) > 1088 53.936 0.050 536.665 0.493 > CsAddress.py:145(ip_in_subnet) > 16 0.000 0.000 364.540 22.784 configure.py:766( > processForwardRule) > 16 0.001 0.000 364.540 22.784 configure.py:772(forward_vr) > 32 5.869 0.183 351.378 10.981 configure.py:747( > getNetworkByIp) > 68170816 65.435 0.000 342.427 0.000 __init__.py:1682(iter_iprange) > 68177344 182.925 0.000 277.051 0.000 __init__.py:248(__init__) > 48 3.685 0.077 194.845 4.059 configure.py:741( > getDeviceByIp) > 16 0.001 0.000 181.689 11.356 configure.py:882( > processStaticNatRule) > 68170816 54.655 0.000 140.186 0.000 __init__.py:63(__hash__) > 68170976 48.577 0.000 69.112 0.000 __init__.py:439(key) > 68187121 42.976 0.000 42.976 0.000 {hasattr} > 68188576 26.202 0.000 26.205 0.000 {isinstance} > 68178432 24.945 0.000 24.945 0.000 __init__.py:34(__init__) > 68177504 20.537 0.000 20.537 0.000 __init__.py:232(version) > 68170816 16.419 0.000 16.419 0.000 {hash} > 1 0.020 0.020 1.522 1.522 CsNetfilter.py:134(compare) > 329 0.007 0.000 1.513 0.005 CsHelper.py:182(execute) > 329 0.002 0.000 1.060 0.003 > subprocess.py:768(communicate) > 329 0.004 0.000 1.057 0.003 subprocess.py:1400(_ > communicate) > 329 0.012 0.000 1.046 0.003 subprocess.py:1433(_ > communicate_with_poll) > 2352 1.021 0.000 1.021 0.000 {built-in method poll} > 1 0.001 0.001 1.005 1.005 CsAddress.py:99(process) > 22 0.001 0.000 0.989 0.045 CsAddress.py:271(configure) > 22 0.001 0.000 0.937 0.043 CsAddress.py:285(post_ > configure) > > > > > 在 2016年8月20日,09:41,ilya <ilya.mailing.li...@gmail.com> 写道: > > > > Hi Gust > > > > Are you proposing solution "optimized CsAddress.py in VR" or just > > analysis on where time is being spent? > > > > Regards > > ilya > > On 8/18/16 9:34 PM, Gust wrote: > >> > >> Hi,all > >> > >> we constructed a advance network in cloudstack , it work fine early , > but when I added some VR rules ,it execute slow more and more. > >> > >> About total 100 rules already exist , I add a port forward rule , it > would execute about 3 minutes , that we changed the agent source set more > seconds timeout ,else agent will timeout at 120s, and optimized > CsAddress.py in VR. > >> > >> So I login to VR vm , and modify the update_config.py with > cProfile , and print out execute result . because add cProfile , python > execute more than 8 min. > >> > >> It shows too many netaddr object init invoked. > >> > >> vr hypervisor hardware : E3 1230v2 3.4GHz , vr alloc 3GHz > >> > >> ---------------------------------------------------------------------- > >> Optimized CsAddress.py , execute 3 min, else 5 min > >> > >> CsAddress.py (line 145) > >> def ip_in_subnet(self, ip): > >> ipo = IPAddress(ip) > >> net = IPNetwork("%s/%s" % (self.get_ip(), self.get_size())) > >> aset = set(net) > >> return ipo in aset > >> > >> ---------------------------------------------------------------------- > >> def mainp(): > >> if not (os.path.isfile(jsonCmdConfigPath) and > os.access(jsonCmdConfigPath, os.R_OK)): > >> print "[ERROR] update_config.py :: You are telling me to process > %s, but i can't access it" % jsonCmdConfigPath > >> sys.exit(1) > >> > >> # If the command line json file is unprocessed process it > >> # This is important or, the control interfaces will get deleted! > >> if os.path.isfile(jsonPath % "cmd_line.json"): > >> qf = QueueFile() > >> qf.setFile("cmd_line.json") > >> qf.load(None) > >> > >> # If the guest network is already configured and have the same IP, do > not try to configure it again otherwise it will break > >> if sys.argv[1] == "guest_network.json": > >> if os.path.isfile(currentGuestNetConfig): > >> file = open(currentGuestNetConfig) > >> guestnet_dict = json.load(file) > >> > >> if not is_guestnet_configured(guestnet_dict, ['eth1', > 'eth2', 'eth3', 'eth4', 'eth5', 'eth6', 'eth7', 'eth8', 'eth9']): > >> print "[INFO] update_config.py :: Processing Guest > Network." > >> process_file() > >> else: > >> print "[INFO] update_config.py :: No need to process > Guest Network." > >> finish_config() > >> else: > >> print "[INFO] update_config.py :: No GuestNetwork configured > yet. Configuring first one now." > >> process_file() > >> else: > >> print "[INFO] update_config.py :: Processing incoming file => %s" > % sys.argv[1] > >> process_file() > >> > >> cProfile.run("mainp()", "/var/log/py_pro.data”) > >> > >> ---------------------------------------------------------------------- > >> > >> Fri Aug 19 11:27:50 2016 d:\temp\py_pro.data > >> > >> 614887355 function calls (614884838 primitive calls) in 548.846 > seconds > >> > >> Ordered by: internal time > >> > >> ncalls tottime percall cumtime percall filename:lineno(function) > >> 68177344 182.925 0.000 277.051 0.000 __init__.py:248(__init__) > >> 68170816 65.435 0.000 342.427 0.000 > __init__.py:1682(iter_iprange) > >> 68170816 54.655 0.000 140.186 0.000 __init__.py:63(__hash__) > >> 1088 53.936 0.050 536.665 0.493 > CsAddress.py:145(ip_in_subnet) > >> 68170976 48.577 0.000 69.112 0.000 __init__.py:439(key) > >> 68187121 42.976 0.000 42.976 0.000 {hasattr} > >> 68188576 26.202 0.000 26.205 0.000 {isinstance} > >> 68178432 24.945 0.000 24.945 0.000 __init__.py:34(__init__) > >> 68177504 20.537 0.000 20.537 0.000 __init__.py:232(version) > >> 68170816 16.419 0.000 16.419 0.000 {hash} > >> 32 5.869 0.183 351.378 10.981 configure.py:747( > getNetworkByIp) > >> 48 3.685 0.077 194.845 4.059 configure.py:741( > getDeviceByIp) > >> 2352 1.021 0.000 1.021 0.000 {built-in method poll} > >> 245441 0.352 0.000 0.510 0.000 CsNetfilter.py:296(__eq__) > >> 2149 0.251 0.000 0.251 0.000 {posix.read} > >> 798 0.111 0.000 0.608 0.001 CsNetfilter.py:116(has_rule) > >> 493585 0.098 0.000 0.098 0.000 > CsNetfilter.py:258(get_table) > >> 329 0.077 0.000 0.077 0.000 {posix.fork} > >> 2444 0.059 0.000 0.059 0.000 {method 'flush' of 'file' > objects} > >> 2444 0.039 0.000 0.074 0.000 __init__.py:243(__init__) > >> 113950 0.030 0.000 0.030 0.000 > CsNetfilter.py:270(get_chain) > >> 329 0.028 0.000 0.367 0.001 subprocess.py:1195(_execute_ > child) > >> 2444 0.021 0.000 0.078 0.000 __init__.py:458(format) > >> 2069 0.021 0.000 0.039 0.000 > CsNetfilter.py:236(__convert_to_dict) > >> 1 0.020 0.020 1.522 1.522 CsNetfilter.py:134(compare) > >> 2444 0.017 0.000 0.024 0.000 __init__.py:1226(findCaller) > >> 2444 0.016 0.000 0.017 0.000 __init__.py:318(getMessage) > >> 41763 0.015 0.000 0.015 0.000 {method 'items' of 'dict' > objects} > >> 2444 0.015 0.000 0.015 0.000 {time.localtime} > >> 1088 0.014 0.000 0.028 0.000 __init__.py:737(parse_ip_ > network) > >> 2444 0.013 0.000 0.036 0.000 __init__.py:411(formatTime) > >> 4889 0.013 0.000 0.018 0.000 threading.py:187(release) > >> 2444 0.013 0.000 0.194 0.000 __init__.py:847(emit) > >> 4889 0.013 0.000 0.018 0.000 threading.py:147(acquire) > >> 329 0.012 0.000 1.046 0.003 subprocess.py:1433(_ > communicate_with_poll) > >> 14709 0.011 0.000 0.011 0.000 {method 'replace' of > 'unicode' objects} > >> 47110 0.011 0.000 0.011 0.000 CsNetfilter.py:273(get_rule) > >> 162 0.009 0.000 0.011 0.000 CsNetfilter.py:276(to_str) > >> 2444 0.009 0.000 0.362 0.000 __init__.py:1260(_log) > >> 47397/47389 0.009 0.000 0.009 0.000 {len} > >> 2444 0.008 0.000 0.090 0.000 __init__.py:836(flush) > >> 3458 0.008 0.000 0.008 0.000 {method 'write' of 'file' > objects} > >> 2082 0.008 0.000 0.312 0.000 __init__.py:1138(debug) > >> 1088 0.008 0.000 0.031 0.000 __init__.py:648(__iter__) > >> 2444 0.008 0.000 0.243 0.000 > __init__.py:1313(callHandlers) > >> 329 0.008 0.000 0.397 0.001 subprocess.py:650(__init__) > >> 2176 0.008 0.000 0.016 0.000 ipv4.py:123(str_to_int) > >> 2444 0.008 0.000 0.008 0.000 {time.strftime} > >> 329 0.007 0.000 1.513 0.005 CsHelper.py:182(execute) > >> 2444 0.007 0.000 0.235 0.000 __init__.py:744(handle) > >> 3221 0.007 0.000 0.007 0.000 {method 'split' of > 'unicode' objects} > >> 2082 0.007 0.000 0.319 0.000 __init__.py:1624(debug) > >> 4888 0.007 0.000 0.024 0.000 __init__.py:708(release) > >> 1088 0.007 0.000 0.039 0.000 __init__.py:855(__init__) > >> 3948 0.007 0.000 0.007 0.000 {fcntl.fcntl} > >> 2444 0.007 0.000 0.200 0.000 __init__.py:941(emit) > >> 658 0.007 0.000 0.007 0.000 {posix.fdopen} > >> 2309 0.006 0.000 0.006 0.000 CsAddress.py:167(get_attr) > >> 4888 0.006 0.000 0.024 0.000 __init__.py:701(acquire) > >> 2444 0.006 0.000 0.079 0.000 __init__.py:1247(makeRecord) > >> 2444 0.005 0.000 0.006 0.000 > __init__.py:154(getLevelName) > >> 2444 0.005 0.000 0.006 0.000 genericpath.py:85(_splitext) > >> 2444 0.005 0.000 0.249 0.000 __init__.py:1281(handle) > >> 2444 0.004 0.000 0.006 0.000 > __init__.py:1353(isEnabledFor) > >> 1088 0.004 0.000 0.004 0.000 {_socket.inet_aton} > >> 14666 0.004 0.000 0.004 0.000 {thread.get_ident} > >> 21 0.004 0.000 0.018 0.001 CsNetfilter.py:212(delete) > >> 329 0.004 0.000 1.057 0.003 subprocess.py:1400(_ > communicate) > >> 9778 0.004 0.000 0.004 0.000 threading.py:64(_note) > >> 1088 0.003 0.000 0.010 0.000 __init__.py:1003(hostmask) > >> 1316 0.003 0.000 0.003 0.000 {posix.close} > >> 987 0.003 0.000 0.003 0.000 {posix.pipe} > >> 4888 0.003 0.000 0.003 0.000 __init__.py:605(filter) > >> 1 0.003 0.003 0.019 0.019 CsNetfilter.py:89(get_all_ > rules) > >> 7332 0.003 0.000 0.003 0.000 {method 'rfind' of 'str' > objects} > >> 1974 0.003 0.000 0.010 0.000 subprocess.py:1156(_set_ > cloexec_flag) > >> 2444 0.003 0.000 0.081 0.000 __init__.py:721(format) > >> 2444 0.003 0.000 0.009 0.000 posixpath.py:104(splitext) > >> 1 0.003 0.003 0.269 0.269 > CsNetfilter.py:125(get_unseen) > >> 329 0.003 0.000 0.003 0.000 {posix.waitpid} > >> 2444 0.003 0.000 0.003 0.000 threading.py:1152( > currentThread) > >> 112 0.003 0.000 0.004 0.000 CsAddress.py:37(get_ > interfaces) > >> 753 0.003 0.000 0.003 0.000 {method 'close' of 'file' > objects} > >> 987 0.003 0.000 0.016 0.000 subprocess.py:1169(pipe_ > cloexec) > >> 2069 0.003 0.000 0.042 0.000 CsNetfilter.py:227(parse) > >> 2444 0.003 0.000 0.004 0.000 posixpath.py:119(basename) > >> 1088 0.003 0.000 0.013 0.000 __init__.py:980(first) > >> 2444 0.003 0.000 0.004 0.000 __init__.py:452(usesTime) > >> 658 0.003 0.000 0.004 0.000 > subprocess.py:1216(_close_in_parent) > >> 2444 0.002 0.000 0.004 0.000 __init__.py:82(<lambda>) > >> 329 0.002 0.000 0.015 0.000 subprocess.py:1107(_get_ > handles) > >> 2069 0.002 0.000 0.002 0.000 CsNetfilter.py:220(__init__) > >> 2444 0.002 0.000 0.002 0.000 threading.py:967(name) > >> 329 0.002 0.000 0.007 0.000 subprocess.py:1379(wait) > >> 658 0.002 0.000 0.005 0.000 subprocess.py:1444(close_ > unregister_and_remove) > >> 231 0.002 0.000 0.002 0.000 {open} > >> 6407 0.002 0.000 0.002 0.000 {method 'get' of 'dict' > objects} > >> 64 0.002 0.000 0.005 0.000 CsHelper.py:92(updatefile) > >> 6526 0.002 0.000 0.002 0.000 {method 'keys' of 'dict' > objects} > >> 1088 0.002 0.000 0.002 0.000 {_socket.inet_pton} > >> 658 0.002 0.000 0.252 0.000 subprocess.py:473(_eintr_ > retry_call) > >> 658 0.002 0.000 0.003 0.000 subprocess.py:1440(register_ > and_append) > >> 329 0.002 0.000 1.060 0.003 > subprocess.py:768(communicate) > >> 2010 0.002 0.000 0.007 0.000 re.py:143(search) > >> 2011 0.002 0.000 0.004 0.000 re.py:230(_compile) > >> 2069 0.002 0.000 0.002 0.000 {zip} > >> 361 0.002 0.000 0.068 0.000 __init__.py:1616(info) > >> 2176 0.002 0.000 0.002 0.000 {_struct.unpack} > >> 2444 0.002 0.000 0.002 0.000 {sys._getframe} > >> 7349 0.002 0.000 0.002 0.000 {method 'append' of 'list' > objects} > >> 3310/1692 0.002 0.000 0.003 0.000 > encoder.py:341(_iterencode_dict) > >> 1120 0.002 0.000 0.006 0.000 CsAddress.py:130(get_ip) > >> 2444 0.002 0.000 0.002 0.000 __init__.py:1339( > getEffectiveLevel) > >> 361 0.002 0.000 0.066 0.000 __init__.py:1150(info) > >> 2506 0.002 0.000 0.002 0.000 {method 'find' of 'str' > objects} > >> 840 0.002 0.000 0.002 0.000 CsNetfilter.py:54(has_chain) > >> 824/1 0.001 0.000 0.003 0.003 copy.py:145(deepcopy) > >> 202 0.001 0.000 0.003 0.000 > abc.py:128(__instancecheck__) > >> 2445 0.001 0.000 0.001 0.000 {method 'acquire' of > 'thread.lock' objects} > >> 1088 0.001 0.000 0.001 0.000 __init__.py:988(last) > >> 42 0.001 0.000 0.005 0.000 > CsHelper.py:156(definedinfile) > >> 6 0.001 0.000 0.006 0.001 CsFile.py:119(search) > >> 2445 0.001 0.000 0.001 0.000 {time.time} > >> 840 0.001 0.000 0.007 0.000 > CsNetfilter.py:182(add_chain) > >> 2445 0.001 0.000 0.001 0.000 {method 'release' of > 'thread.lock' objects} > >> 5977 0.001 0.000 0.001 0.000 {method 'lstrip' of 'str' > objects} > >> 21 0.001 0.000 0.002 0.000 CsAddress.py:356(fw_router) > >> 7 0.001 0.000 0.001 0.000 decoder.py:372(raw_decode) > >> 22 0.001 0.000 0.937 0.043 CsAddress.py:285(post_ > configure) > >> 2033 0.001 0.000 0.001 0.000 {getattr} > >> 4888 0.001 0.000 0.001 0.000 posixpath.py:51(normcase) > >> 1501 0.001 0.000 0.001 0.000 {method 'split' of 'str' > objects} > >> 2743 0.001 0.000 0.001 0.000 {method 'replace' of 'str' > objects} > >> 21 0.001 0.000 0.065 0.003 CsRule.py:39(findMark) > >> 329 0.001 0.000 0.001 0.000 subprocess.py:754(__del__) > >> 16 0.001 0.000 364.540 22.784 configure.py:772(forward_vr) > >> 1088 0.001 0.000 0.002 0.000 CsAddress.py:154(get_size) > >> 329 0.001 0.000 0.001 0.000 {gc.enable} > >> 389 0.001 0.000 0.001 0.000 > _weakrefset.py:70(__contains__) > >> 513 0.001 0.000 0.001 0.000 CsNetfilter.py:40(add_rule) > >> 2444 0.001 0.000 0.001 0.000 {posix.getpid} > >> 1 0.001 0.001 1.005 1.005 CsAddress.py:99(process) > >> 2069 0.001 0.000 0.001 0.000 > CsNetfilter.py:253(set_table) > >> 24 0.001 0.000 0.001 0.000 CsAddress.py:226(buildlist) > >> 32 0.001 0.000 0.003 0.000 configure.py:728(getGuestIp) > >> 2485 0.001 0.000 0.001 0.000 CsAddress.py:126(__init__) > >> 2010 0.001 0.000 0.001 0.000 {method 'search' of > '_sre.SRE_Pattern' objects} > >> 3161 0.001 0.000 0.001 0.000 {method 'startswith' of > 'str' objects} > >> 4774 0.001 0.000 0.001 0.000 {method 'strip' of 'str' > objects} > >> 42 0.001 0.000 0.014 0.000 CsRoute.py:32(add_table) > >> 704 0.001 0.000 0.001 0.000 CsAddress.py:186(is_guest) > >> 329 0.001 0.000 0.001 0.000 subprocess.py:458(_cleanup) > >> 329 0.001 0.000 0.001 0.000 subprocess.py:1338(_handle_ > exitstatus) > >> 658 0.001 0.000 0.001 0.000 {built-in method unregister} > >> 21 0.001 0.000 0.001 0.000 CsAddress.py:693(cpus) > >> 668 0.001 0.000 0.001 0.000 {method 'remove' of 'set' > objects} > >> 2176 0.001 0.000 0.001 0.000 __init__.py:452(__int__) > >> 1692 0.001 0.000 0.003 0.000 encoder.py:417(_iterencode) > >> 22 0.001 0.000 0.989 0.045 CsAddress.py:271(configure) > >> 33 0.001 0.000 0.005 0.000 configure.py:114(add_rule) > >> 21 0.001 0.000 0.014 0.001 CsAddress.py:668(enable) > >> 329 0.001 0.000 0.001 0.000 {method 'splitlines' of > 'str' objects} > >> 16 0.001 0.000 181.689 11.356 configure.py:882( > processStaticNatRule) > >> 658 0.001 0.000 0.001 0.000 {built-in method register} > >> 1 0.001 0.001 548.837 548.837 update_config.py:44(finish_ > config) > >> 689 0.001 0.000 0.001 0.000 copy.py:267(_keep_alive) > >> 22 0.001 0.000 0.058 0.003 CsRoute.py:85(defaultroute_ > exists) > >> 840 0.001 0.000 0.002 0.000 > CsNetfilter.py:113(has_chain) > >> 21 0.001 0.000 0.074 0.004 > CsAddress.py:516(post_config_change) > >> 1974 0.001 0.000 0.001 0.000 {method 'fileno' of 'file' > objects} > >> 510 0.001 0.000 0.001 0.000 CsDatabag.py:55(idata) > >> 658 0.001 0.000 0.001 0.000 {method 'update' of 'set' > objects} > >> 71 0.000 0.000 0.000 0.000 {method 'read' of 'file' > objects} > >> 695 0.000 0.000 0.000 0.000 > CsNetfilter.py:233(mark_seen) > >> 950 0.000 0.000 0.000 0.000 {method 'lstrip' of > 'unicode' objects} > >> 660 0.000 0.000 0.000 0.000 {method 'join' of 'str' > objects} > >> 34/1 0.000 0.000 0.003 0.003 copy.py:253(_deepcopy_dict) > >> 329 0.000 0.000 0.000 0.000 {method 'count' of 'list' > objects} > >> 12/11 0.000 0.000 0.001 0.000 sre_parse.py:388(_parse) > >> 798 0.000 0.000 0.000 0.000 CsNetfilter.py:107(get) > >> 658 0.000 0.000 0.000 0.000 {method 'pop' of 'dict' > objects} > >> 24 0.000 0.000 0.002 0.000 CsAddress.py:207(__init__) > >> 179 0.000 0.000 0.001 0.000 CsConfig.py:60(is_vpc) > >> 2 0.000 0.000 0.010 0.005 > CsHelper.py:190(save_iptables) > >> 1 0.000 0.000 0.004 0.004 encoder.py:186(encode) > >> 58 0.000 0.000 0.000 0.000 {posix.stat} > >> 21 0.000 0.000 0.050 0.002 CsRoute.py:54(set_route) > >> 329 0.000 0.000 0.000 0.000 {select.poll} > >> 21 0.000 0.000 0.053 0.003 CsRoute.py:45(add_route) > >> 66 0.000 0.000 0.000 0.000 {sorted} > >> 21 0.000 0.000 0.045 0.002 CsHelper.py:35(reconfigure_ > interfaces) > >> 184 0.000 0.000 0.001 0.000 CsDatabag.py:82(get_type) > >> 21 0.000 0.000 0.668 0.032 CsAddress.py:598(arpPing) > >> 47 0.000 0.000 0.001 0.000 genericpath.py:26(isfile) > >> 329 0.000 0.000 0.000 0.000 > subprocess.py:1352(_internal_poll) > >> 33 0.000 0.000 0.005 0.000 configure.py:86(__init__) > >> 1696 0.000 0.000 0.000 0.000 {id} > >> 21 0.000 0.000 0.000 0.000 CsAddress.py:320(set_mark) > >> 11 0.000 0.000 0.000 0.000 sre_compile.py:433(_compile_ > info) > >> 252 0.000 0.000 0.000 0.000 encoder.py:288(_iterencode_ > list) > >> 129 0.000 0.000 0.000 0.000 CsAddress.py:325(get_type) > >> 410 0.000 0.000 0.000 0.000 CsNetfilter.py:104(save) > >> 42 0.000 0.000 0.006 0.000 > CsHelper.py:164(addifmissing) > >> 695 0.000 0.000 0.000 0.000 > CsNetfilter.py:267(get_count) > >> 21 0.000 0.000 0.005 0.000 CsAddress.py:683(inKernel) > >> 179 0.000 0.000 0.000 0.000 sre_parse.py:191(__next) > >> 123 0.000 0.000 0.000 0.000 {method 'add' of 'set' > objects} > >> 329 0.000 0.000 0.000 0.000 {posix.WIFSIGNALED} > >> 1 0.000 0.000 548.836 548.836 configure.py:903(main) > >> 20/11 0.000 0.000 0.000 0.000 sre_compile.py:64(_compile) > >> 2 0.000 0.000 0.010 0.005 configure.py:272(process) > >> 80 0.000 0.000 0.000 0.000 __init__.py:69(__eq__) > >> 329 0.000 0.000 0.000 0.000 {posix.WEXITSTATUS} > >> 61 0.000 0.000 0.000 0.000 CsConfig.py:45(cmdline) > >> 410 0.000 0.000 0.000 0.000 CsNetfilter.py:48(get_count) > >> 10 0.000 0.000 0.004 0.000 merge.py:49(load) > >> 66 0.000 0.000 0.000 0.000 CsAddress.py:589(ip) > >> 64 0.000 0.000 0.000 0.000 configure.py:759( > portsToString) > >> 21 0.000 0.000 0.000 0.000 CsRule.py:28(__init__) > >> 1 0.000 0.000 0.019 0.019 CsNetfilter.py:188(del_ > standard) > >> 537 0.000 0.000 0.000 0.000 {_json.encode_basestring_ > ascii} > >> 69 0.000 0.000 0.000 0.000 CsAddress.py:158(get_device) > >> 28/19 0.000 0.000 0.000 0.000 sre_parse.py:149(getwidth) > >> 6 0.000 0.000 0.014 0.002 CsAddress.py:255(__init__) > >> 6 0.000 0.000 0.014 0.002 CsAddress.py:555(list) > >> 329 0.000 0.000 0.000 0.000 {gc.isenabled} > >> 1 0.000 0.000 546.228 546.228 configure.py:717(process) > >> 465 0.000 0.000 0.000 0.000 CsNetfilter.py:76(last) > >> 57 0.000 0.000 0.000 0.000 copy.py:226(_deepcopy_list) > >> 9/8 0.000 0.000 0.003 0.000 CsDatabag.py:24(__init__) > >> 1 0.000 0.000 0.000 0.000 CsFile.py:30(load) > >> 410 0.000 0.000 0.000 0.000 > CsNetfilter.py:264(set_count) > >> 598 0.000 0.000 0.000 0.000 > copy.py:198(_deepcopy_atomic) > >> 410 0.000 0.000 0.000 0.000 > CsNetfilter.py:261(set_chain) > >> 21 0.000 0.000 0.067 0.003 CsRule.py:33(addMark) > >> 25 0.000 0.000 0.000 0.000 > CsDatabag.py:68(is_redundant) > >> 44 0.000 0.000 0.000 0.000 stat.py:49(S_ISREG) > >> 22 0.000 0.000 0.000 0.000 CsAddress.py:571(configured) > >> 10/5 0.000 0.000 0.000 0.000 > abc.py:148(__subclasscheck__) > >> 63 0.000 0.000 0.000 0.000 CsRoute.py:29(get_tablename) > >> 167 0.000 0.000 0.000 0.000 sre_parse.py:210(get) > >> 391 0.000 0.000 0.000 0.000 CsNetfilter.py:230(unseen) > >> 56 0.000 0.000 0.000 0.000 CsNetfilter.py:31(add) > >> 329 0.000 0.000 0.000 0.000 {posix.WIFEXITED} > >> 11 0.000 0.000 0.002 0.000 sre_compile.py:567(compile) > >> 371 0.000 0.000 0.000 0.000 encoder.py:361(<lambda>) > >> 137 0.000 0.000 0.000 0.000 sre_parse.py:147(append) > >> 115 0.000 0.000 0.000 0.000 CsConfig.py:48(address) > >> 22 0.000 0.000 0.058 0.003 CsRoute.py:69(add_ > defaultroute) > >> 11 0.000 0.000 0.001 0.000 sre_parse.py:686(parse) > >> 21 0.000 0.000 0.018 0.001 CsNetfilter.py:206(del_rule) > >> 1 0.000 0.000 0.009 0.009 merge.py:93(process) > >> 329 0.000 0.000 0.000 0.000 {gc.disable} > >> 44 0.000 0.000 0.000 0.000 > CsDatabag.py:147(get_gateway) > >> 19 0.000 0.000 0.000 0.000 _weakrefset.py:58(__iter__) > >> 2 0.000 0.000 0.015 0.007 CsHelper.py:211(service) > >> 50 0.000 0.000 0.000 0.000 > sre_parse.py:139(__getitem__) > >> 22 0.000 0.000 0.000 0.000 > CsAddress.py:343(setup_router_control) > >> 1 0.000 0.000 0.000 0.000 {__import__} > >> 1 0.000 0.000 0.000 0.000 CsFile.py:42(is_changed) > >> 33 0.000 0.000 0.005 0.000 configure.py:110(create) > >> 43 0.000 0.000 0.000 0.000 CsRoute.py:26(__init__) > >> 1 0.000 0.000 0.006 0.006 CsApp.py:43(setup) > >> 16 0.000 0.000 364.540 22.784 configure.py:766( > processForwardRule) > >> 7 0.000 0.000 0.001 0.000 __init__.py:257(load) > >> 1 0.000 0.000 0.000 0.000 ascii.py:8(<module>) > >> 44 0.000 0.000 0.000 0.000 stat.py:24(S_IFMT) > >> 12/11 0.000 0.000 0.001 0.000 sre_parse.py:310(_parse_sub) > >> 21 0.000 0.000 0.000 0.000 {format} > >> 7 0.000 0.000 0.001 0.000 decoder.py:361(decode) > >> 32 0.000 0.000 0.000 0.000 > CsAddress.py:133(get_network) > >> 11 0.000 0.000 0.001 0.000 sre_compile.py:552(_code) > >> 2 0.000 0.000 0.000 0.000 {posix.listdir} > >> 1 0.000 0.000 0.018 0.018 > CsRedundant.py:74(_redundant_off) > >> 61 0.000 0.000 0.000 0.000 CsConfig.py:39(get_cmdline_ > instance) > >> 1 0.000 0.000 0.007 0.007 CsProcess.py:61(grep) > >> 14 0.000 0.000 0.000 0.000 {method 'match' of > '_sre.SRE_Pattern' objects} > >> 71 0.000 0.000 0.000 0.000 CsConfig.py:51(get_fw) > >> 40 0.000 0.000 0.000 0.000 {min} > >> 1 0.000 0.000 0.007 0.007 CsAddress.py:32(compare) > >> 1 0.000 0.000 0.000 0.000 {posix.rename} > >> 1 0.000 0.000 548.846 548.846 update_config.py:50(process_ > file) > >> 21 0.000 0.000 0.000 0.000 CsAddress.py:665(__init__) > >> 22 0.000 0.000 0.000 0.000 CsAddress.py:237( > waitfordevice) > >> 43 0.000 0.000 0.000 0.000 {hex} > >> 1 0.000 0.000 0.003 0.003 CsHelper.py:55(is_mounted) > >> 125 0.000 0.000 0.000 0.000 {ord} > >> 1 0.000 0.000 0.000 0.000 shutil.py:210(rmtree) > >> 11 0.000 0.000 0.000 0.000 {_sre.compile} > >> 1 0.000 0.000 0.003 0.003 > cs_firewallrules.py:22(merge) > >> 7 0.000 0.000 0.001 0.000 __init__.py:293(loads) > >> 3 0.000 0.000 0.000 0.000 CsAddress.py:604(compare) > >> 1 0.000 0.000 0.013 0.013 configure.py:266( > flushAllowAllEgressRules) > >> 11 0.000 0.000 0.000 0.000 genericpath.py:15(exists) > >> 10 0.000 0.000 0.000 0.000 _weakrefset.py:26(__exit__) > >> 1 0.000 0.000 0.018 0.018 CsRedundant.py:67(set) > >> 1 0.000 0.000 0.000 0.000 posixpath.py:139(islink) > >> 23 0.000 0.000 0.000 0.000 CsAddress.py:592(getDevice) > >> 21 0.000 0.000 0.000 0.000 > CsAddress.py:430(fw_vpcrouter) > >> 1 0.000 0.000 548.846 548.846 update_config.py:114(mainp) > >> 22 0.000 0.000 0.000 0.000 sre_compile.py:546(isstring) > >> 1 0.000 0.000 0.004 0.004 __init__.py:193(dumps) > >> 10 0.000 0.000 0.000 0.000 _weakrefset.py:20(__enter__) > >> 1 0.000 0.000 0.000 0.000 encoder.py:212(iterencode) > >> 8 0.000 0.000 0.000 0.000 sre_compile.py:428(_simple) > >> 14/5 0.000 0.000 0.000 0.000 {issubclass} > >> 10 0.000 0.000 0.000 0.000 _weakrefset.py:83(add) > >> 1 0.000 0.000 0.000 0.000 CsRedundant.py:62(__init__) > >> 11 0.000 0.000 0.000 0.000 sre_parse.py:187(__init__) > >> 1 0.000 0.000 0.009 0.009 merge.py:87(__init__) > >> 78 0.000 0.000 0.000 0.000 {method 'iteritems' of > 'dict' objects} > >> 1 0.000 0.000 0.000 0.000 configure.py:446(process) > >> 22 0.000 0.000 0.000 0.000 CsAddress.py:265(setAddress) > >> 32 0.000 0.000 0.000 0.000 sre_parse.py:135(__len__) > >> 1 0.000 0.000 0.009 0.009 merge.py:273(load) > >> 23 0.000 0.000 0.000 0.000 sre_parse.py:204(match) > >> 1 0.000 0.000 0.000 0.000 __init__.py:71(search_ > function) > >> 11 0.000 0.000 0.000 0.000 sre_parse.py:67(__init__) > >> 1 0.000 0.000 0.000 0.000 merge.py:306(__moveFile) > >> 1 0.000 0.000 0.000 0.000 > sre_compile.py:256(_optimize_charset) > >> 1 0.000 0.000 0.000 0.000 > __init__.py:211(_acquireLock) > >> 10 0.000 0.000 0.000 0.000 merge.py:46(__init__) > >> 1 0.000 0.000 0.000 0.000 {method 'split' of > '_sre.SRE_Pattern' objects} > >> 18 0.000 0.000 0.000 0.000 {method 'extend' of 'list' > objects} > >> 1 0.000 0.000 0.007 0.007 CsApp.py:77(start) > >> 10 0.000 0.000 0.000 0.000 _weakrefset.py:16(__init__) > >> 2 0.000 0.000 0.000 0.000 CsHelper.py:73(rm) > >> 1 0.000 0.000 0.000 0.000 CsApp.py:97(add_firewall_ > rules) > >> 1 0.000 0.000 0.003 0.003 CsHelper.py:68(umount_tmpfs) > >> 1 0.000 0.000 0.000 0.000 {posix.rmdir} > >> 1 0.000 0.000 0.000 0.000 codecs.py:77(__new__) > >> 1 0.000 0.000 0.004 0.004 merge.py:65(save) > >> 20 0.000 0.000 0.000 0.000 sre_parse.py:90(__init__) > >> 2 0.000 0.000 0.000 0.000 CsConfig.py:78(use_extdns) > >> 1 0.000 0.000 0.000 0.000 {posix.lstat} > >> 1 0.000 0.000 0.019 0.019 CsNetfilter.py:82(__init__) > >> 1 0.000 0.000 0.000 0.000 CsHelper.py:77(rmdir) > >> 9 0.000 0.000 0.000 0.000 {method '__subclasses__' of > 'type' objects} > >> 10 0.000 0.000 0.000 0.000 > _abcoll.py:98(__subclasshook__) > >> 10 0.000 0.000 0.000 0.000 _weakrefset.py:52(_commit_ > removals) > >> 14 0.000 0.000 0.000 0.000 {method 'end' of > '_sre.SRE_Match' objects} > >> 1 0.000 0.000 0.000 0.000 __init__.py:1590(error) > >> 1 0.000 0.000 0.000 0.000 re.py:168(split) > >> 1 0.000 0.000 0.000 0.000 __init__.py:1176(error) > >> 1 0.000 0.000 0.000 0.000 {posix.access} > >> 1 0.000 0.000 0.000 0.000 sre_compile.py:228(_compile_ > charset) > >> 1 0.000 0.000 0.000 0.000 > CsAddress.py:219(configure_rp) > >> 10 0.000 0.000 0.000 0.000 merge.py:79(setKey) > >> 2 0.000 0.000 0.000 0.000 CsApp.py:26(__init__) > >> 3 0.000 0.000 0.000 0.000 CsNetfilter.py:68(add) > >> 8 0.000 0.000 0.000 0.000 > sre_parse.py:143(__setitem__) > >> 1 0.000 0.000 0.000 0.000 CsConfig.py:72(has_metadata) > >> 1 0.000 0.000 0.000 0.000 ascii.py:41(getregentry) > >> 1 0.000 0.000 548.846 548.846 <string>:1(<module>) > >> 2 0.000 0.000 0.000 0.000 CsConfig.py:69(has_dns) > >> 1 0.000 0.000 0.000 0.000 CsHelper.py:235(copy_if_ > needed) > >> 1 0.000 0.000 0.000 0.000 {round} > >> 10 0.000 0.000 0.000 0.000 merge.py:76(getDataBag) > >> 2 0.000 0.000 0.000 0.000 CsAddress.py:335(get_ip_ > address) > >> 4 0.000 0.000 0.000 0.000 {method 'update' of 'dict' > objects} > >> 1 0.000 0.000 0.000 0.000 sre_parse.py:83(closegroup) > >> 2 0.000 0.000 0.000 0.000 _weakrefset.py:36(__init__) > >> 1 0.000 0.000 0.000 0.000 {method 'translate' of > 'str' objects} > >> 1 0.000 0.000 0.000 0.000 encoder.py:272(_make_ > iterencode) > >> 1 0.000 0.000 0.000 0.000 configure.py:615(process) > >> 1 0.000 0.000 0.000 0.000 > __init__.py:1500(basicConfig) > >> 1 0.000 0.000 0.001 0.001 CsConfig.py:36(set_address) > >> 2 0.000 0.000 0.000 0.000 CsConfig.py:63(is_router) > >> 1 0.000 0.000 0.000 0.000 CsConfig.py:75(get_domain) > >> 1 0.000 0.000 0.000 0.000 > __init__.py:220(_releaseLock) > >> 1 0.000 0.000 0.000 0.000 __init__.py:49(normalize_ > encoding) > >> 1 0.000 0.000 0.000 0.000 CsNetfilter.py:64(__init__) > >> 1 0.000 0.000 0.000 0.000 > CsLoadBalancer.py:32(process) > >> 1 0.000 0.000 0.000 0.000 {built-in method __new__ of > type object at 0x93c580} > >> 3 0.000 0.000 0.000 0.000 {method 'setdefault' of > 'dict' objects} > >> 1 0.000 0.000 0.003 0.003 merge.py:179(process_ > firewallrules) > >> 1 0.000 0.000 0.000 0.000 encoder.py:101(__init__) > >> 1 0.000 0.000 0.000 0.000 sre_parse.py:266(_escape) > >> 1 0.000 0.000 0.000 0.000 CsFile.py:26(__init__) > >> 1 0.000 0.000 0.000 0.000 CsAddress.py:249(list) > >> 1 0.000 0.000 0.000 0.000 ascii.py:28(StreamWriter) > >> 1 0.000 0.000 0.000 0.000 CsConfig.py:33(__init__) > >> 1 0.000 0.000 0.000 0.000 CsApp.py:74(__init__) > >> 1 0.000 0.000 0.000 0.000 CsNetfilter.py:26(__init__) > >> 1 0.000 0.000 0.000 0.000 {method 'find' of > 'bytearray' objects} > >> 1 0.000 0.000 0.000 0.000 ascii.py:13(Codec) > >> 1 0.000 0.000 0.000 0.000 ascii.py:20( > IncrementalEncoder) > >> 1 0.000 0.000 0.000 0.000 CsConfig.py:54(get_logger) > >> 1 0.000 0.000 0.000 0.000 merge.py:294(setFile) > >> 1 0.000 0.000 0.000 0.000 sre_parse.py:72(opengroup) > >> 2 0.000 0.000 0.000 0.000 shutil.py:222(onerror) > >> 1 0.000 0.000 0.000 0.000 CsProcess.py:27(__init__) > >> 1 0.000 0.000 0.000 0.000 {sys.exit} > >> 1 0.000 0.000 0.000 0.000 ascii.py:24( > IncrementalDecoder) > >> 1 0.000 0.000 0.000 0.000 CsDatabag.py:88(get_domain) > >> 1 0.000 0.000 0.000 0.000 ascii.py:34(StreamConverter) > >> 1 0.000 0.000 0.000 0.000 {method 'remove' of 'list' > objects} > >> 2 0.000 0.000 0.000 0.000 {sys.exc_info} > >> 1 0.000 0.000 0.000 0.000 CsConfig.py:66(is_dhcp) > >> 1 0.000 0.000 0.000 0.000 {any} > >> 1 0.000 0.000 0.000 0.000 CsConfig.py:57(get_level) > >> 1 0.000 0.000 0.000 0.000 {method 'disable' of > '_lsprof.Profiler' objects} > >> 1 0.000 0.000 0.000 0.000 ascii.py:31(StreamReader) > >> 1 0.000 0.000 0.000 0.000 CsConfig.py:95(get_format) > >> > >> > >> Fri Aug 19 11:27:50 2016 d:\temp\py_pro.data > >> > >> 614887355 function calls (614884838 primitive calls) in 548.846 > seconds > >> > >> Ordered by: cumulative time > >> List reduced from 404 to 3 due to restriction <3> > >> > >> ncalls tottime percall cumtime percall filename:lineno(function) > >> 1 0.000 0.000 548.846 548.846 <string>:1(<module>) > >> 1 0.000 0.000 548.846 548.846 update_config.py:114(mainp) > >> 1 0.000 0.000 548.846 548.846 update_config.py:50(process_ > file) > >> > >> > >> > >> > >> > >> > > > >