Resource profiling with yappi instead of cprofile
This commit is contained in:
		
							parent
							
								
									3013c10180
								
							
						
					
					
						commit
						6bfd0bf4eb
					
				@ -32,11 +32,14 @@ c_rns = None
 | 
			
		||||
def init_rns(caller=None):
 | 
			
		||||
    global c_rns
 | 
			
		||||
    if c_rns == None:
 | 
			
		||||
        targets_job(caller)
 | 
			
		||||
        time.sleep(2)
 | 
			
		||||
        if caller != None:
 | 
			
		||||
            targets_job(caller)
 | 
			
		||||
            time.sleep(2)
 | 
			
		||||
        print("Starting local RNS instance...")
 | 
			
		||||
        c_rns = RNS.Reticulum("./tests/rnsconfig")
 | 
			
		||||
        c_rns.m_proc = caller.process
 | 
			
		||||
        if caller != None:
 | 
			
		||||
            c_rns.m_proc = caller.process
 | 
			
		||||
 | 
			
		||||
        print("Done starting local RNS instance...")
 | 
			
		||||
 | 
			
		||||
def close_rns():
 | 
			
		||||
@ -88,7 +91,7 @@ class TestLink(unittest.TestCase):
 | 
			
		||||
        b = 0
 | 
			
		||||
        pr_t = 0
 | 
			
		||||
        receipts = []
 | 
			
		||||
        if RNS.Cryptography.backend() == "internal":
 | 
			
		||||
        if RNS.Cryptography.backend() == "internal" or RNS.Reticulum.MTU > 500:
 | 
			
		||||
            num_packets = 50
 | 
			
		||||
        else:
 | 
			
		||||
            num_packets = 500
 | 
			
		||||
@ -304,12 +307,30 @@ if __name__ == '__main__':
 | 
			
		||||
    unittest.main(verbosity=1)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def targets():
 | 
			
		||||
def targets(yp=False):
 | 
			
		||||
    if yp:
 | 
			
		||||
        import yappi
 | 
			
		||||
 | 
			
		||||
    def resource_started(resource):
 | 
			
		||||
        print("Resource started")
 | 
			
		||||
        if yp:
 | 
			
		||||
            yappi.start()
 | 
			
		||||
 | 
			
		||||
    def resource_concluded(resource):
 | 
			
		||||
        print("Resource concluded")
 | 
			
		||||
        if yp:
 | 
			
		||||
            try:
 | 
			
		||||
                yappi.stop()
 | 
			
		||||
                yappi.get_func_stats().save("receiver_main_calls.data", type="pstat")
 | 
			
		||||
                threads = yappi.get_thread_stats()
 | 
			
		||||
                for thread in threads:
 | 
			
		||||
                    print(
 | 
			
		||||
                        "Function stats for (%s) (%d)" % (thread.name, thread.id)
 | 
			
		||||
                    )  # it is the Thread.__class__.__name__
 | 
			
		||||
                    yappi.get_func_stats(ctx_id=thread.id).save("receiver_thread_"+str(thread.id)+".data", type="pstat")
 | 
			
		||||
            except Exception as e:
 | 
			
		||||
                print("Error: "+str(e))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        if hasattr(resource.link.attached_interface, "rxptime"):
 | 
			
		||||
            rx_pr = (resource.link.attached_interface.rxb*8)/resource.link.attached_interface.rxptime
 | 
			
		||||
@ -330,24 +351,24 @@ def targets():
 | 
			
		||||
    while True:
 | 
			
		||||
        time.sleep(1)
 | 
			
		||||
 | 
			
		||||
def targets_profiling():
 | 
			
		||||
    targets()
 | 
			
		||||
def targets_profiling(yp=False):
 | 
			
		||||
    targets(yp)
 | 
			
		||||
 | 
			
		||||
def profile_resource():
 | 
			
		||||
    import cProfile
 | 
			
		||||
    import pstats
 | 
			
		||||
    from pstats import SortKey
 | 
			
		||||
    cProfile.runctx("entry()", {"entry": resource_profiling, "size_str": size_str}, {}, "profile-resource.data")
 | 
			
		||||
    p = pstats.Stats("profile-resource.data")
 | 
			
		||||
    # p.strip_dirs().sort_stats(SortKey.TIME, SortKey.CUMULATIVE).print_stats()
 | 
			
		||||
    # import cProfile
 | 
			
		||||
    # import pstats
 | 
			
		||||
    # from pstats import SortKey
 | 
			
		||||
    # cProfile.runctx("entry()", {"entry": resource_profiling, "size_str": size_str}, {}, "profile-resource.data")
 | 
			
		||||
    # p = pstats.Stats("profile-resource.data")
 | 
			
		||||
 | 
			
		||||
    resource_profiling()
 | 
			
		||||
 | 
			
		||||
def profile_targets():
 | 
			
		||||
    import cProfile
 | 
			
		||||
    import pstats
 | 
			
		||||
    from pstats import SortKey
 | 
			
		||||
    cProfile.runctx("entry()", {"entry": targets_profiling, "size_str": size_str}, {}, "profile-targets.data")
 | 
			
		||||
    p = pstats.Stats("profile-targets.data")
 | 
			
		||||
    p.strip_dirs().sort_stats(SortKey.TIME, SortKey.CUMULATIVE).print_stats()
 | 
			
		||||
    
 | 
			
		||||
    targets_profiling(yp=True)
 | 
			
		||||
    # cProfile.runctx("entry()", {"entry": targets_profiling, "size_str": size_str}, {}, "profile-targets.data")
 | 
			
		||||
    # p = pstats.Stats("profile-targets.data")
 | 
			
		||||
    # p.strip_dirs().sort_stats(SortKey.TIME, SortKey.CUMULATIVE).print_stats()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def resource_profiling():
 | 
			
		||||
@ -366,6 +387,10 @@ def resource_profiling():
 | 
			
		||||
    resource_size = 5*1000*1000
 | 
			
		||||
    data = os.urandom(resource_size)
 | 
			
		||||
    print("Sending "+size_str(resource_size)+" resource...")
 | 
			
		||||
 | 
			
		||||
    import yappi
 | 
			
		||||
    yappi.start()
 | 
			
		||||
    
 | 
			
		||||
    resource = RNS.Resource(data, l1, timeout=resource_timeout)
 | 
			
		||||
    start = time.time()
 | 
			
		||||
 | 
			
		||||
@ -377,6 +402,17 @@ def resource_profiling():
 | 
			
		||||
    t = time.time() - start
 | 
			
		||||
    print("Resource completed at "+size_str(resource_size/t, "b")+"ps")
 | 
			
		||||
 | 
			
		||||
    yappi.get_func_stats().save("sender_main_calls.data", type="pstat")
 | 
			
		||||
    threads = yappi.get_thread_stats()
 | 
			
		||||
    for thread in threads:
 | 
			
		||||
        print(
 | 
			
		||||
            "Function stats for (%s) (%d)" % (thread.name, thread.id)
 | 
			
		||||
        )  # it is the Thread.__class__.__name__
 | 
			
		||||
        yappi.get_func_stats(ctx_id=thread.id).save("sender_thread_"+str(thread.id)+".data", type="pstat")
 | 
			
		||||
 | 
			
		||||
    # t_pstats = yappi.convert2pstats(tstats)
 | 
			
		||||
    # t_pstats.save("resource_tstat.data", type="pstat")
 | 
			
		||||
 | 
			
		||||
    if hasattr(resource.link.attached_interface, "rxptime"):
 | 
			
		||||
        rx_pr = (resource.link.attached_interface.rxb*8)/resource.link.attached_interface.rxptime
 | 
			
		||||
        print("Average RX proccessing rate: "+size_str(rx_pr, "b")+"ps")
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user