memtest.c 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. /*
  2. * $Id$
  3. *
  4. * Copyright (C) 2001-2003 FhG Fokus
  5. *
  6. * This file is part of sip-router, a free SIP server.
  7. *
  8. * Permission to use, copy, modify, and distribute this software for any
  9. * purpose with or without fee is hereby granted, provided that the above
  10. * copyright notice and this permission notice appear in all copies.
  11. *
  12. * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
  13. * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
  14. * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
  15. * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
  16. * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
  17. * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  18. * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  19. */
  20. #ifdef DBG_QM_MALLOC
  21. #include <stdio.h>
  22. #include <string.h>
  23. #include <stdlib.h>
  24. #include "../globals.h"
  25. #include "../config.h"
  26. #if 0
  27. #ifdef PKG_MALLOC
  28. # include "q_malloc.h"
  29. # define MY_MALLOC qm_malloc
  30. # define MY_FREE qm_free
  31. # define MY_INIT qm_malloc_init
  32. # define MY_BLOCK qm_block
  33. # define MY_STATUS qm_status
  34. #endif
  35. void memtest()
  36. {
  37. #define TEST_SIZE 1024*1024
  38. #define TEST_RUN 1024
  39. #define LONG_RUN 100000
  40. #define ma(s) MY_MALLOC(mem_block, (s),__FILE__, __FUNCTION__, \
  41. __LINE__);
  42. #define mf(p) MY_FREE(mem_block, (p), __FILE__, __FUNCTION__, \
  43. __LINE__);
  44. char tst_mem[TEST_SIZE];
  45. struct MY_BLOCK* mem_block;
  46. char *p0,*p1,*p2,*p3,*p4,*p5,*p6/*,*p7,*p8,*p9*/;
  47. int i, j, f;
  48. char *p[TEST_RUN];
  49. int t;
  50. debug=7;
  51. log_stderr=1;
  52. printf("entering test\n");
  53. mem_block=MY_INIT( tst_mem, TEST_SIZE );
  54. /* coalescing test w/big fragments */
  55. p0=ma(8194);
  56. p1=ma(8194);
  57. p2=ma(8194);
  58. MY_STATUS(mem_block);
  59. mf(p1);
  60. mf(p0);
  61. MY_STATUS(mem_block);
  62. mf(p2);
  63. MY_STATUS(mem_block);
  64. /* reuse test w/big fragments */
  65. p0=ma(8194);
  66. p1=ma(4196);
  67. mf(p0);
  68. p0=ma(8190);
  69. MY_STATUS(mem_block);
  70. mf(p1);
  71. mf(p0);
  72. MY_STATUS(mem_block);
  73. exit(0);
  74. p0=ma(8);
  75. p1=ma(24);
  76. p2=ma(32);
  77. p3=ma(32);
  78. p4=ma(32);
  79. p5=ma(1024);
  80. p6=ma(2048);
  81. // MY_STATUS(mem_block);
  82. // *(p0+9)=0;
  83. mf(p0);
  84. mf(p2);
  85. mf(p5);
  86. mf(p6);
  87. // MY_STATUS(mem_block);
  88. mf(p1);
  89. mf(p4);
  90. mf(p3);
  91. // mf(p3);
  92. // MY_STATUS(mem_block);
  93. for (i=0;i<TEST_RUN;i++)
  94. p[i]=ma( random() & 1023 );
  95. // MY_STATUS(mem_block);
  96. for (i=0;i<TEST_RUN;i++)
  97. mf( p[i] );
  98. // MY_STATUS(mem_block);
  99. f = 0;
  100. #define GRANULARITY 100
  101. for (j=0; j<LONG_RUN; j++) {
  102. for (i=0;i<TEST_RUN;i++) {
  103. t=random() & 1023;
  104. if (! (t%24) ) t=(t+4096)*2;
  105. p[i]=ma( random() & 1023 );
  106. }
  107. for (i=TEST_RUN/3;i<2*TEST_RUN/3;i++)
  108. mf( p[i] );
  109. for (i=TEST_RUN/3;i<2*TEST_RUN/3;i++) {
  110. t=random() & 1023;
  111. if (! (t%24) ) t=(t+4096)*2;
  112. p[i]=ma( random() & 1023 );
  113. }
  114. for (i=0;i<TEST_RUN;i++)
  115. mf( p[i] );
  116. if ( GRANULARITY*j/LONG_RUN > f ) {
  117. f=GRANULARITY*j/LONG_RUN ;
  118. printf("%d%% done\n", f);
  119. }
  120. }
  121. printf("now I'm really done\n");
  122. MY_STATUS(mem_block);
  123. printf("And I'm done with dumping final report too\n");
  124. exit(0);
  125. }
  126. #endif
  127. #endif