@@ -136,77 +136,6 @@ struct test_params {
136136 bool random_access ;
137137};
138138
139- static void toggle_dirty_logging (struct kvm_vm * vm , int slots , bool enable )
140- {
141- int i ;
142-
143- for (i = 0 ; i < slots ; i ++ ) {
144- int slot = MEMSTRESS_MEM_SLOT_INDEX + i ;
145- int flags = enable ? KVM_MEM_LOG_DIRTY_PAGES : 0 ;
146-
147- vm_mem_region_set_flags (vm , slot , flags );
148- }
149- }
150-
151- static inline void enable_dirty_logging (struct kvm_vm * vm , int slots )
152- {
153- toggle_dirty_logging (vm , slots , true);
154- }
155-
156- static inline void disable_dirty_logging (struct kvm_vm * vm , int slots )
157- {
158- toggle_dirty_logging (vm , slots , false);
159- }
160-
161- static void get_dirty_log (struct kvm_vm * vm , unsigned long * bitmaps [], int slots )
162- {
163- int i ;
164-
165- for (i = 0 ; i < slots ; i ++ ) {
166- int slot = MEMSTRESS_MEM_SLOT_INDEX + i ;
167-
168- kvm_vm_get_dirty_log (vm , slot , bitmaps [i ]);
169- }
170- }
171-
172- static void clear_dirty_log (struct kvm_vm * vm , unsigned long * bitmaps [],
173- int slots , uint64_t pages_per_slot )
174- {
175- int i ;
176-
177- for (i = 0 ; i < slots ; i ++ ) {
178- int slot = MEMSTRESS_MEM_SLOT_INDEX + i ;
179-
180- kvm_vm_clear_dirty_log (vm , slot , bitmaps [i ], 0 , pages_per_slot );
181- }
182- }
183-
184- static unsigned long * * alloc_bitmaps (int slots , uint64_t pages_per_slot )
185- {
186- unsigned long * * bitmaps ;
187- int i ;
188-
189- bitmaps = malloc (slots * sizeof (bitmaps [0 ]));
190- TEST_ASSERT (bitmaps , "Failed to allocate bitmaps array." );
191-
192- for (i = 0 ; i < slots ; i ++ ) {
193- bitmaps [i ] = bitmap_zalloc (pages_per_slot );
194- TEST_ASSERT (bitmaps [i ], "Failed to allocate slot bitmap." );
195- }
196-
197- return bitmaps ;
198- }
199-
200- static void free_bitmaps (unsigned long * bitmaps [], int slots )
201- {
202- int i ;
203-
204- for (i = 0 ; i < slots ; i ++ )
205- free (bitmaps [i ]);
206-
207- free (bitmaps );
208- }
209-
210139static void run_test (enum vm_guest_mode mode , void * arg )
211140{
212141 struct test_params * p = arg ;
@@ -236,7 +165,7 @@ static void run_test(enum vm_guest_mode mode, void *arg)
236165 host_num_pages = vm_num_host_pages (mode , guest_num_pages );
237166 pages_per_slot = host_num_pages / p -> slots ;
238167
239- bitmaps = alloc_bitmaps (p -> slots , pages_per_slot );
168+ bitmaps = memstress_alloc_bitmaps (p -> slots , pages_per_slot );
240169
241170 if (dirty_log_manual_caps )
242171 vm_enable_cap (vm , KVM_CAP_MANUAL_DIRTY_LOG_PROTECT2 ,
@@ -277,7 +206,7 @@ static void run_test(enum vm_guest_mode mode, void *arg)
277206
278207 /* Enable dirty logging */
279208 clock_gettime (CLOCK_MONOTONIC , & start );
280- enable_dirty_logging (vm , p -> slots );
209+ memstress_enable_dirty_logging (vm , p -> slots );
281210 ts_diff = timespec_elapsed (start );
282211 pr_info ("Enabling dirty logging time: %ld.%.9lds\n\n" ,
283212 ts_diff .tv_sec , ts_diff .tv_nsec );
@@ -306,7 +235,7 @@ static void run_test(enum vm_guest_mode mode, void *arg)
306235 iteration , ts_diff .tv_sec , ts_diff .tv_nsec );
307236
308237 clock_gettime (CLOCK_MONOTONIC , & start );
309- get_dirty_log (vm , bitmaps , p -> slots );
238+ memstress_get_dirty_log (vm , bitmaps , p -> slots );
310239 ts_diff = timespec_elapsed (start );
311240 get_dirty_log_total = timespec_add (get_dirty_log_total ,
312241 ts_diff );
@@ -315,7 +244,8 @@ static void run_test(enum vm_guest_mode mode, void *arg)
315244
316245 if (dirty_log_manual_caps ) {
317246 clock_gettime (CLOCK_MONOTONIC , & start );
318- clear_dirty_log (vm , bitmaps , p -> slots , pages_per_slot );
247+ memstress_clear_dirty_log (vm , bitmaps , p -> slots ,
248+ pages_per_slot );
319249 ts_diff = timespec_elapsed (start );
320250 clear_dirty_log_total = timespec_add (clear_dirty_log_total ,
321251 ts_diff );
@@ -334,7 +264,7 @@ static void run_test(enum vm_guest_mode mode, void *arg)
334264
335265 /* Disable dirty logging */
336266 clock_gettime (CLOCK_MONOTONIC , & start );
337- disable_dirty_logging (vm , p -> slots );
267+ memstress_disable_dirty_logging (vm , p -> slots );
338268 ts_diff = timespec_elapsed (start );
339269 pr_info ("Disabling dirty logging time: %ld.%.9lds\n" ,
340270 ts_diff .tv_sec , ts_diff .tv_nsec );
@@ -359,7 +289,7 @@ static void run_test(enum vm_guest_mode mode, void *arg)
359289 clear_dirty_log_total .tv_nsec , avg .tv_sec , avg .tv_nsec );
360290 }
361291
362- free_bitmaps (bitmaps , p -> slots );
292+ memstress_free_bitmaps (bitmaps , p -> slots );
363293 arch_cleanup_vm (vm );
364294 memstress_destroy_vm (vm );
365295}
@@ -402,17 +332,7 @@ static void help(char *name)
402332 " so -w X means each page has an X%% chance of writing\n"
403333 " and a (100-X)%% chance of reading.\n"
404334 " (default: 100 i.e. all pages are written to.)\n" );
405- printf (" -c: Pin tasks to physical CPUs. Takes a list of comma separated\n"
406- " values (target pCPU), one for each vCPU, plus an optional\n"
407- " entry for the main application task (specified via entry\n"
408- " <nr_vcpus + 1>). If used, entries must be provided for all\n"
409- " vCPUs, i.e. pinning vCPUs is all or nothing.\n\n"
410- " E.g. to create 3 vCPUs, pin vCPU0=>pCPU22, vCPU1=>pCPU23,\n"
411- " vCPU2=>pCPU24, and pin the application task to pCPU50:\n\n"
412- " ./dirty_log_perf_test -v 3 -c 22,23,24,50\n\n"
413- " To leave the application task unpinned, drop the final entry:\n\n"
414- " ./dirty_log_perf_test -v 3 -c 22,23,24\n\n"
415- " (default: no pinning)\n" );
335+ kvm_print_vcpu_pinning_help ();
416336 puts ("" );
417337 exit (0 );
418338}
0 commit comments