void deallocate_start_memory() { tlb_shootdown(get_active_page(), 0, 0x200000); memset((void*)physical_to_virtual((uintptr_t)get_active_page()), 0, 256*sizeof(uintptr_t)); tlb_shootdown_end(); }
void payload_benchmark() { /* * count and collect all processors (collective barrier) */ if (CPU_ID == 0) smm_deactivate(); // ...and (try to) deactivate SMM /* * Memory allocation */ init_buffers(); barrier(&global_barrier); /* * Benchmarks */ bench_hourglass(); bench_hourglass_worker(p_contender); bench_hourglass_hyperthread(); barrier(&global_barrier); bench_worker(p_buffer, p_contender); bench_worker_cut(p_buffer, p_contender, 16*KB); if (CPU_ID == 0) { heap_reconfig(p_buffer, buffer_size, 0); heap_reconfig(p_contender, contender_size, MM_CACHE_DISABLE); barrier(&global_barrier); printf("======== Benchmark: WB / Load: CD ===================================\n"); } else { barrier(&global_barrier); tlb_shootdown(p_buffer, buffer_size); tlb_shootdown(p_contender, contender_size); } barrier(&global_barrier); bench_worker_cut(p_buffer, p_contender, 16*KB); bench_worker_cut(p_buffer, p_contender, 128*KB); if (CPU_ID == 0) { heap_reconfig(p_buffer, buffer_size, 0); heap_reconfig(p_contender, contender_size, MM_WRITE_THROUGH); barrier(&global_barrier); printf("======== Benchmark: WB / Load: WT ===================================\n"); } else { barrier(&global_barrier); tlb_shootdown(p_buffer, buffer_size); tlb_shootdown(p_contender, contender_size); } barrier(&global_barrier); bench_worker_cut(p_buffer, p_contender, 16*KB); bench_worker_cut(p_buffer, p_contender, 128*KB); barrier(&global_barrier); bench_mem(p_buffer, p_contender); bench_rangestride(p_buffer); }