Setup a negative feedback system when vCPU thread handling KVM_EXIT_DIRTY_RING_FULL exit by introducing throttle_us_per_full field in struct CPUState. Sleep throttle_us_per_full microseconds to throttle vCPU if dirtylimit is in service. Signed-off-by: Hyman Huang(黄勇) <huangy81@chinatelecom.cn> Reviewed-by: Peter Xu <peterx@redhat.com> Message-Id: <977e808e03a1cef5151cae75984658b6821be618.1656177590.git.huangy81@chinatelecom.cn> Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
		
			
				
	
	
		
			41 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			41 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| # See docs/devel/tracing.rst for syntax documentation.
 | |
| 
 | |
| # balloon.c
 | |
| # Since requests are raised via monitor, not many tracepoints are needed.
 | |
| balloon_event(void *opaque, unsigned long addr) "opaque %p addr %lu"
 | |
| 
 | |
| # ioport.c
 | |
| cpu_in(unsigned int addr, char size, unsigned int val) "addr 0x%x(%c) value %u"
 | |
| cpu_out(unsigned int addr, char size, unsigned int val) "addr 0x%x(%c) value %u"
 | |
| 
 | |
| # memory.c
 | |
| memory_region_ops_read(int cpu_index, void *mr, uint64_t addr, uint64_t value, unsigned size, const char *name) "cpu %d mr %p addr 0x%"PRIx64" value 0x%"PRIx64" size %u name '%s'"
 | |
| memory_region_ops_write(int cpu_index, void *mr, uint64_t addr, uint64_t value, unsigned size, const char *name) "cpu %d mr %p addr 0x%"PRIx64" value 0x%"PRIx64" size %u name '%s'"
 | |
| memory_region_subpage_read(int cpu_index, void *mr, uint64_t offset, uint64_t value, unsigned size) "cpu %d mr %p offset 0x%"PRIx64" value 0x%"PRIx64" size %u"
 | |
| memory_region_subpage_write(int cpu_index, void *mr, uint64_t offset, uint64_t value, unsigned size) "cpu %d mr %p offset 0x%"PRIx64" value 0x%"PRIx64" size %u"
 | |
| memory_region_ram_device_read(int cpu_index, void *mr, uint64_t addr, uint64_t value, unsigned size) "cpu %d mr %p addr 0x%"PRIx64" value 0x%"PRIx64" size %u"
 | |
| memory_region_ram_device_write(int cpu_index, void *mr, uint64_t addr, uint64_t value, unsigned size) "cpu %d mr %p addr 0x%"PRIx64" value 0x%"PRIx64" size %u"
 | |
| memory_region_sync_dirty(const char *mr, const char *listener, int global) "mr '%s' listener '%s' synced (global=%d)"
 | |
| flatview_new(void *view, void *root) "%p (root %p)"
 | |
| flatview_destroy(void *view, void *root) "%p (root %p)"
 | |
| flatview_destroy_rcu(void *view, void *root) "%p (root %p)"
 | |
| global_dirty_changed(unsigned int bitmask) "bitmask 0x%"PRIx32
 | |
| 
 | |
| # softmmu.c
 | |
| vm_stop_flush_all(int ret) "ret %d"
 | |
| 
 | |
| # vl.c
 | |
| vm_state_notify(int running, int reason, const char *reason_str) "running %d reason %d (%s)"
 | |
| load_file(const char *name, const char *path) "name %s location %s"
 | |
| runstate_set(int current_state, const char *current_state_str, int new_state, const char *new_state_str) "current_run_state %d (%s) new_state %d (%s)"
 | |
| system_wakeup_request(int reason) "reason=%d"
 | |
| qemu_system_shutdown_request(int reason) "reason=%d"
 | |
| qemu_system_powerdown_request(void) ""
 | |
| 
 | |
| #dirtylimit.c
 | |
| dirtylimit_state_initialize(int max_cpus) "dirtylimit state initialize: max cpus %d"
 | |
| dirtylimit_state_finalize(void)
 | |
| dirtylimit_throttle_pct(int cpu_index, uint64_t pct, int64_t time_us) "CPU[%d] throttle percent: %" PRIu64 ", throttle adjust time %"PRIi64 " us"
 | |
| dirtylimit_set_vcpu(int cpu_index, uint64_t quota) "CPU[%d] set dirty page rate limit %"PRIu64
 | |
| dirtylimit_vcpu_execute(int cpu_index, int64_t sleep_time_us) "CPU[%d] sleep %"PRIi64 " us"
 |