Track CPU usage in CI (#1168)
	
		
	
				
					
				
			* run openpilot for 60 seconds and report cpu * Not passive * Set training version * Write cpuset * Add community toggle * Formatting * Refactor * Reorder processes * Add max cpu * Try this * Try this to exit * Does this work? * This should work * now it should work againpull/49/head
							parent
							
								
									5e9daf2471
								
							
						
					
					
						commit
						3d2696c60b
					
				
				 4 changed files with 91 additions and 2 deletions
			
			
		| @ -0,0 +1,50 @@ | |||||||
|  | def cputime_total(ct): | ||||||
|  |   return ct.cpuUser + ct.cpuSystem + ct.cpuChildrenUser + ct.cpuChildrenSystem | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def print_cpu_usage(first_proc, last_proc): | ||||||
|  |   r = 0 | ||||||
|  |   procs = [ | ||||||
|  |       ("selfdrive.controls.controlsd", 59.46), | ||||||
|  |       ("./_modeld", 48.94), | ||||||
|  |       ("./loggerd", 28.49), | ||||||
|  |       ("selfdrive.controls.plannerd", 19.77), | ||||||
|  |       ("selfdrive.controls.radard", 9.54), | ||||||
|  |       ("./_ui", 9.54), | ||||||
|  |       ("./camerad", 7.07), | ||||||
|  |       ("selfdrive.locationd.locationd", 7.13), | ||||||
|  |       ("./_sensord", 6.17), | ||||||
|  |       ("selfdrive.controls.dmonitoringd", 5.48), | ||||||
|  |       ("./boardd", 3.63), | ||||||
|  |       ("./_dmonitoringmodeld", 2.67), | ||||||
|  |       ("selfdrive.logmessaged", 2.71), | ||||||
|  |       ("selfdrive.thermald", 2.41), | ||||||
|  |       ("./paramsd", 2.18), | ||||||
|  |       ("selfdrive.locationd.calibrationd", 1.76), | ||||||
|  |       ("./proclogd", 1.54), | ||||||
|  |       ("./_gpsd", 0.09), | ||||||
|  |       ("./clocksd", 0.02), | ||||||
|  |       ("./ubloxd", 0.02), | ||||||
|  |       ("selfdrive.tombstoned", 0), | ||||||
|  |       ("./logcatd", 0), | ||||||
|  |       ("selfdrive.updated", 0), | ||||||
|  |   ] | ||||||
|  | 
 | ||||||
|  |   dt = (last_proc.logMonoTime - first_proc.logMonoTime) / 1e9 | ||||||
|  |   print("------------------------------------------------") | ||||||
|  |   for proc_name, normal_cpu_usage in procs: | ||||||
|  |     try: | ||||||
|  |       first = [p for p in first_proc.procLog.procs if proc_name in p.cmdline][0] | ||||||
|  |       last = [p for p in last_proc.procLog.procs if proc_name in p.cmdline][0] | ||||||
|  |       cpu_time = cputime_total(last) - cputime_total(first) | ||||||
|  |       cpu_usage = cpu_time / dt * 100. | ||||||
|  |       if cpu_usage > max(normal_cpu_usage * 1.1, normal_cpu_usage + 5.0): | ||||||
|  |         print(f"Warning {proc_name} using more CPU than normal") | ||||||
|  |         r = 1 | ||||||
|  | 
 | ||||||
|  |       print(f"{proc_name.ljust(35)}  {cpu_usage:.2f}%") | ||||||
|  |     except IndexError: | ||||||
|  |       print(f"{proc_name.ljust(35)}  NO METRICS FOUND") | ||||||
|  |   print("------------------------------------------------") | ||||||
|  | 
 | ||||||
|  |   return r | ||||||
					Loading…
					
					
				
		Reference in new issue