dmm_adaptor.c 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #include "dmm_adaptor.h"
  2. #include "heap.h"
  3. void state_refresh(heap_t *heap) {
  4. float fragmentation;
  5. knob_state_t state;
  6. fragmentation = (float) heap->dmm_stats.mem_allocated /
  7. (float) heap->dmm_stats.mem_requested - 1.0;
  8. // TODO Constant for the threshold, contraints for the memory threshold
  9. if(fragmentation <= 0.05) {
  10. state = 0;
  11. set_fragmentation_params(heap, state);
  12. }
  13. }
  14. void set_fragmentation_params(heap_t *heap, knob_state_t state) {
  15. switch(state) {
  16. default :
  17. heap->dmm_knobs.max_coalesce_size = -1;
  18. heap->dmm_knobs.min_split_size = 0;
  19. heap->dmm_knobs.empty_threshold = 1.5;
  20. break;
  21. case 1 :
  22. heap->dmm_knobs.max_coalesce_size = 20;
  23. heap->dmm_knobs.min_split_size = 400;
  24. heap->dmm_knobs.empty_threshold = 1200;
  25. break;
  26. case 2 :
  27. heap->dmm_knobs.max_coalesce_size = 40;
  28. heap->dmm_knobs.min_split_size = 800;
  29. heap->dmm_knobs.empty_threshold = 1000;
  30. break;
  31. case 3 :
  32. heap->dmm_knobs.max_coalesce_size = 60;
  33. heap->dmm_knobs.min_split_size = 1200;
  34. heap->dmm_knobs.empty_threshold = 800;
  35. break;
  36. case 4 :
  37. heap->dmm_knobs.max_coalesce_size = 80;
  38. heap->dmm_knobs.min_split_size = 1600;
  39. heap->dmm_knobs.empty_threshold = 600;
  40. break;
  41. case 5 :
  42. heap->dmm_knobs.max_coalesce_size = 100;
  43. heap->dmm_knobs.min_split_size = 2000;
  44. heap->dmm_knobs.empty_threshold = 300;
  45. break;
  46. }
  47. }