#include "dmm_adaptor.h" #include "heap.h" void state_refresh(heap_t *heap) { float fragmentation; knob_state_t state; fragmentation = (float) heap->dmm_stats.mem_allocated / (float) heap->dmm_stats.mem_requested - 1.0; // TODO Constant for the threshold, contraints for the memory threshold if(fragmentation <= 0.05) { state = 0; set_fragmentation_params(heap, state); } } void set_fragmentation_params(heap_t *heap, knob_state_t state) { switch(state) { default : heap->dmm_knobs.max_coalesce_size = -1; heap->dmm_knobs.min_split_size = 0; heap->dmm_knobs.empty_threshold = 1.5; break; case 1 : heap->dmm_knobs.max_coalesce_size = 20; heap->dmm_knobs.min_split_size = 400; heap->dmm_knobs.empty_threshold = 1200; break; case 2 : heap->dmm_knobs.max_coalesce_size = 40; heap->dmm_knobs.min_split_size = 800; heap->dmm_knobs.empty_threshold = 1000; break; case 3 : heap->dmm_knobs.max_coalesce_size = 60; heap->dmm_knobs.min_split_size = 1200; heap->dmm_knobs.empty_threshold = 800; break; case 4 : heap->dmm_knobs.max_coalesce_size = 80; heap->dmm_knobs.min_split_size = 1600; heap->dmm_knobs.empty_threshold = 600; break; case 5 : heap->dmm_knobs.max_coalesce_size = 100; heap->dmm_knobs.min_split_size = 2000; heap->dmm_knobs.empty_threshold = 300; break; } }