Lines Matching +full:protect +full:- +full:exec

10  * See the COPYING file in the top-level directory.
14 #include "qemu/error-report.h"
17 #include "exec/ramblock.h"
18 #include "exec/target_page.h"
20 #include "qemu/main-loop.h"
21 #include "qapi/qapi-commands-migration.h"
30 #include "exec/memory.h"
56 if ((current_time - initial_time) >= msec) { in dirty_stat_wait()
57 msec = current_time - initial_time; in dirty_stat_wait()
59 g_usleep((msec + initial_time - current_time) * 1000); in dirty_stat_wait()
61 msec = qemu_clock_get_ms(QEMU_CLOCK_REALTIME) - initial_time; in dirty_stat_wait()
71 dirty_pages[cpu->cpu_index].start_pages = cpu->dirty_pages; in record_dirtypages()
73 dirty_pages[cpu->cpu_index].end_pages = cpu->dirty_pages; in record_dirtypages()
81 dirty_pages.end_pages - dirty_pages.start_pages; in do_calculate_dirtyrate()
132 stat->nvcpu = nvcpu; in vcpu_dirty_stat_alloc()
133 stat->rates = g_new0(DirtyRateVcpu, nvcpu); in vcpu_dirty_stat_alloc()
176 g_free(stat->rates); in vcpu_calculate_dirtyrate()
183 for (i = 0; i < stat->nvcpu; i++) { in vcpu_calculate_dirtyrate()
186 stat->rates[i].id = i; in vcpu_calculate_dirtyrate()
187 stat->rates[i].dirty_rate = dirtyrate; in vcpu_calculate_dirtyrate()
219 return -1; in dirtyrate_set_state()
230 return -3; in time_unit_to_power()
239 int power = time_unit_to_power(unit_from) - in convert_time_unit()
247 power -= 1; in convert_time_unit()
261 info->status = CalculatingState; in query_dirty_rate_info()
262 info->start_time = DirtyStat.start_time; in query_dirty_rate_info()
263 info->calc_time = convert_time_unit(DirtyStat.calc_time_ms, in query_dirty_rate_info()
266 info->calc_time_unit = calc_time_unit; in query_dirty_rate_info()
267 info->sample_pages = DirtyStat.sample_pages; in query_dirty_rate_info()
268 info->mode = dirtyrate_mode; in query_dirty_rate_info()
271 info->has_dirty_rate = true; in query_dirty_rate_info()
272 info->dirty_rate = dirty_rate; in query_dirty_rate_info()
279 info->sample_pages = 0; in query_dirty_rate_info()
280 info->has_vcpu_dirty_rate = true; in query_dirty_rate_info()
283 rate->id = DirtyStat.dirty_ring.rates[i].id; in query_dirty_rate_info()
284 rate->dirty_rate = DirtyStat.dirty_ring.rates[i].dirty_rate; in query_dirty_rate_info()
287 info->vcpu_dirty_rate = head; in query_dirty_rate_info()
291 info->sample_pages = 0; in query_dirty_rate_info()
302 DirtyStat.dirty_rate = -1; in init_dirtyrate_stat()
314 DirtyStat.dirty_ring.nvcpu = -1; in init_dirtyrate_stat()
324 /* last calc-dirty-rate qmp use dirty ring mode */ in cleanup_dirtyrate_stat()
333 DirtyStat.page_sampling.total_dirty_samples += info->sample_dirty_count; in update_dirtyrate_stat()
334 DirtyStat.page_sampling.total_sample_count += info->sample_pages_count; in update_dirtyrate_stat()
337 qemu_target_pages_to_MiB(info->ramblock_pages); in update_dirtyrate_stat()
367 v4 = QEMU_XXHASH_SEED - XXH_PRIME64_1; in compute_page_hash()
390 hash = compute_page_hash(info->ramblock_addr + in get_ramblock_vfn_hash()
393 trace_get_ramblock_vfn_hash(info->idstr, vfn, hash); in get_ramblock_vfn_hash()
403 sample_pages_count = info->sample_pages_count; in save_ramblock_hash()
406 if (unlikely(info->ramblock_pages == 0 || sample_pages_count == 0)) { in save_ramblock_hash()
410 info->hash_result = g_try_malloc0_n(sample_pages_count, in save_ramblock_hash()
412 if (!info->hash_result) { in save_ramblock_hash()
416 info->sample_page_vfn = g_try_malloc0_n(sample_pages_count, in save_ramblock_hash()
418 if (!info->sample_page_vfn) { in save_ramblock_hash()
419 g_free(info->hash_result); in save_ramblock_hash()
425 info->sample_page_vfn[i] = g_rand_int_range(rand, 0, in save_ramblock_hash()
426 info->ramblock_pages - 1); in save_ramblock_hash()
427 info->hash_result[i] = get_ramblock_vfn_hash(info, in save_ramblock_hash()
428 info->sample_page_vfn[i]); in save_ramblock_hash()
439 uint64_t sample_pages_per_gigabytes = config->sample_pages_per_gigabytes; in get_ramblock_dirty_info()
443 info->sample_pages_count = (qemu_ram_get_used_length(block) * in get_ramblock_dirty_info()
446 info->ramblock_pages = qemu_ram_get_used_length(block) >> in get_ramblock_dirty_info()
448 info->ramblock_addr = qemu_ram_get_host_addr(block); in get_ramblock_dirty_info()
449 len = g_strlcpy(info->idstr, qemu_ram_get_idstr(block), in get_ramblock_dirty_info()
450 sizeof(info->idstr)); in get_ramblock_dirty_info()
451 g_assert(len < sizeof(info->idstr)); in get_ramblock_dirty_info()
475 trace_skip_sample_ramblock(block->idstr, in skip_sample_ramblock()
533 for (i = 0; i < info->sample_pages_count; i++) { in calc_page_dirty_rate()
534 hash = get_ramblock_vfn_hash(info, info->sample_page_vfn[i]); in calc_page_dirty_rate()
535 if (hash != info->hash_result[i]) { in calc_page_dirty_rate()
536 trace_calc_page_dirty_rate(info->idstr, hash, info->hash_result[i]); in calc_page_dirty_rate()
537 info->sample_dirty_count++; in calc_page_dirty_rate()
561 trace_find_page_matched(block->idstr); in find_block_matched()
597 dirty_pages->start_pages = total_dirty_pages; in record_dirtypages_bitmap()
599 dirty_pages->end_pages = total_dirty_pages; in record_dirtypages_bitmap()
609 memory_region_clear_dirty_bitmap(block->mr, 0, in dirtyrate_manual_reset_protect()
610 block->used_length); in dirtyrate_manual_reset_protect()
635 * reset page protect manually and unconditionally. in calculate_dirtyrate_dirty_bitmap()
739 if (ret == -1) { in get_dirtyrate_thread()
748 if (ret == -1) { in get_dirtyrate_thread()
794 error_setg(errp, "sample-pages is used only in page-sampling mode"); in qmp_calc_dirty_rate()
800 error_setg(errp, "sample-pages is out of range[%d, %d].", in qmp_calc_dirty_rate()
827 if (ret == -1) { in qmp_calc_dirty_rate()
865 DirtyRateStatus_str(info->status)); in hmp_info_dirty_rate()
867 info->start_time); in hmp_info_dirty_rate()
868 if (info->mode == DIRTY_RATE_MEASURE_MODE_PAGE_SAMPLING) { in hmp_info_dirty_rate()
870 info->sample_pages); in hmp_info_dirty_rate()
873 info->calc_time); in hmp_info_dirty_rate()
875 DirtyRateMeasureMode_str(info->mode)); in hmp_info_dirty_rate()
877 if (info->has_dirty_rate) { in hmp_info_dirty_rate()
878 monitor_printf(mon, "%"PRIi64" (MB/s)\n", info->dirty_rate); in hmp_info_dirty_rate()
879 if (info->has_vcpu_dirty_rate) { in hmp_info_dirty_rate()
880 DirtyRateVcpuList *rate, *head = info->vcpu_dirty_rate; in hmp_info_dirty_rate()
881 for (rate = head; rate != NULL; rate = rate->next) { in hmp_info_dirty_rate()
883 " (MB/s)\n", rate->value->id, in hmp_info_dirty_rate()
884 rate->value->dirty_rate); in hmp_info_dirty_rate()
891 qapi_free_DirtyRateVcpuList(info->vcpu_dirty_rate); in hmp_info_dirty_rate()
898 int64_t sample_pages = qdict_get_try_int(qdict, "sample_pages_per_GB", -1); in hmp_calc_dirty_rate()
899 bool has_sample_pages = (sample_pages != -1); in hmp_calc_dirty_rate()
922 qmp_calc_dirty_rate(sec, /* calc-time */ in hmp_calc_dirty_rate()
923 false, TIME_UNIT_SECOND, /* calc-time-unit */ in hmp_calc_dirty_rate()