123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- #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;
- }
- }
|