dmm_adaptor.c 1.6 KB

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