00001 /* Checks that recent_cpu is calculated properly for the case of 00002 a single ready process. 00003 00004 The expected output is this (some margin of error is allowed): 00005 00006 After 2 seconds, recent_cpu is 6.40, load_avg is 0.03. 00007 After 4 seconds, recent_cpu is 12.60, load_avg is 0.07. 00008 After 6 seconds, recent_cpu is 18.61, load_avg is 0.10. 00009 After 8 seconds, recent_cpu is 24.44, load_avg is 0.13. 00010 After 10 seconds, recent_cpu is 30.08, load_avg is 0.15. 00011 After 12 seconds, recent_cpu is 35.54, load_avg is 0.18. 00012 After 14 seconds, recent_cpu is 40.83, load_avg is 0.21. 00013 After 16 seconds, recent_cpu is 45.96, load_avg is 0.24. 00014 After 18 seconds, recent_cpu is 50.92, load_avg is 0.26. 00015 After 20 seconds, recent_cpu is 55.73, load_avg is 0.29. 00016 After 22 seconds, recent_cpu is 60.39, load_avg is 0.31. 00017 After 24 seconds, recent_cpu is 64.90, load_avg is 0.33. 00018 After 26 seconds, recent_cpu is 69.27, load_avg is 0.35. 00019 After 28 seconds, recent_cpu is 73.50, load_avg is 0.38. 00020 After 30 seconds, recent_cpu is 77.60, load_avg is 0.40. 00021 After 32 seconds, recent_cpu is 81.56, load_avg is 0.42. 00022 After 34 seconds, recent_cpu is 85.40, load_avg is 0.44. 00023 After 36 seconds, recent_cpu is 89.12, load_avg is 0.45. 00024 After 38 seconds, recent_cpu is 92.72, load_avg is 0.47. 00025 After 40 seconds, recent_cpu is 96.20, load_avg is 0.49. 00026 After 42 seconds, recent_cpu is 99.57, load_avg is 0.51. 00027 After 44 seconds, recent_cpu is 102.84, load_avg is 0.52. 00028 After 46 seconds, recent_cpu is 106.00, load_avg is 0.54. 00029 After 48 seconds, recent_cpu is 109.06, load_avg is 0.55. 00030 After 50 seconds, recent_cpu is 112.02, load_avg is 0.57. 00031 After 52 seconds, recent_cpu is 114.89, load_avg is 0.58. 00032 After 54 seconds, recent_cpu is 117.66, load_avg is 0.60. 00033 After 56 seconds, recent_cpu is 120.34, load_avg is 0.61. 00034 After 58 seconds, recent_cpu is 122.94, load_avg is 0.62. 00035 After 60 seconds, recent_cpu is 125.46, load_avg is 0.64. 00036 After 62 seconds, recent_cpu is 127.89, load_avg is 0.65. 00037 After 64 seconds, recent_cpu is 130.25, load_avg is 0.66. 00038 After 66 seconds, recent_cpu is 132.53, load_avg is 0.67. 00039 After 68 seconds, recent_cpu is 134.73, load_avg is 0.68. 00040 After 70 seconds, recent_cpu is 136.86, load_avg is 0.69. 00041 After 72 seconds, recent_cpu is 138.93, load_avg is 0.70. 00042 After 74 seconds, recent_cpu is 140.93, load_avg is 0.71. 00043 After 76 seconds, recent_cpu is 142.86, load_avg is 0.72. 00044 After 78 seconds, recent_cpu is 144.73, load_avg is 0.73. 00045 After 80 seconds, recent_cpu is 146.54, load_avg is 0.74. 00046 After 82 seconds, recent_cpu is 148.29, load_avg is 0.75. 00047 After 84 seconds, recent_cpu is 149.99, load_avg is 0.76. 00048 After 86 seconds, recent_cpu is 151.63, load_avg is 0.76. 00049 After 88 seconds, recent_cpu is 153.21, load_avg is 0.77. 00050 After 90 seconds, recent_cpu is 154.75, load_avg is 0.78. 00051 After 92 seconds, recent_cpu is 156.23, load_avg is 0.79. 00052 After 94 seconds, recent_cpu is 157.67, load_avg is 0.79. 00053 After 96 seconds, recent_cpu is 159.06, load_avg is 0.80. 00054 After 98 seconds, recent_cpu is 160.40, load_avg is 0.81. 00055 After 100 seconds, recent_cpu is 161.70, load_avg is 0.81. 00056 After 102 seconds, recent_cpu is 162.96, load_avg is 0.82. 00057 After 104 seconds, recent_cpu is 164.18, load_avg is 0.83. 00058 After 106 seconds, recent_cpu is 165.35, load_avg is 0.83. 00059 After 108 seconds, recent_cpu is 166.49, load_avg is 0.84. 00060 After 110 seconds, recent_cpu is 167.59, load_avg is 0.84. 00061 After 112 seconds, recent_cpu is 168.66, load_avg is 0.85. 00062 After 114 seconds, recent_cpu is 169.69, load_avg is 0.85. 00063 After 116 seconds, recent_cpu is 170.69, load_avg is 0.86. 00064 After 118 seconds, recent_cpu is 171.65, load_avg is 0.86. 00065 After 120 seconds, recent_cpu is 172.58, load_avg is 0.87. 00066 After 122 seconds, recent_cpu is 173.49, load_avg is 0.87. 00067 After 124 seconds, recent_cpu is 174.36, load_avg is 0.88. 00068 After 126 seconds, recent_cpu is 175.20, load_avg is 0.88. 00069 After 128 seconds, recent_cpu is 176.02, load_avg is 0.88. 00070 After 130 seconds, recent_cpu is 176.81, load_avg is 0.89. 00071 After 132 seconds, recent_cpu is 177.57, load_avg is 0.89. 00072 After 134 seconds, recent_cpu is 178.31, load_avg is 0.89. 00073 After 136 seconds, recent_cpu is 179.02, load_avg is 0.90. 00074 After 138 seconds, recent_cpu is 179.72, load_avg is 0.90. 00075 After 140 seconds, recent_cpu is 180.38, load_avg is 0.90. 00076 After 142 seconds, recent_cpu is 181.03, load_avg is 0.91. 00077 After 144 seconds, recent_cpu is 181.65, load_avg is 0.91. 00078 After 146 seconds, recent_cpu is 182.26, load_avg is 0.91. 00079 After 148 seconds, recent_cpu is 182.84, load_avg is 0.92. 00080 After 150 seconds, recent_cpu is 183.41, load_avg is 0.92. 00081 After 152 seconds, recent_cpu is 183.96, load_avg is 0.92. 00082 After 154 seconds, recent_cpu is 184.49, load_avg is 0.92. 00083 After 156 seconds, recent_cpu is 185.00, load_avg is 0.93. 00084 After 158 seconds, recent_cpu is 185.49, load_avg is 0.93. 00085 After 160 seconds, recent_cpu is 185.97, load_avg is 0.93. 00086 After 162 seconds, recent_cpu is 186.43, load_avg is 0.93. 00087 After 164 seconds, recent_cpu is 186.88, load_avg is 0.94. 00088 After 166 seconds, recent_cpu is 187.31, load_avg is 0.94. 00089 After 168 seconds, recent_cpu is 187.73, load_avg is 0.94. 00090 After 170 seconds, recent_cpu is 188.14, load_avg is 0.94. 00091 After 172 seconds, recent_cpu is 188.53, load_avg is 0.94. 00092 After 174 seconds, recent_cpu is 188.91, load_avg is 0.95. 00093 After 176 seconds, recent_cpu is 189.27, load_avg is 0.95. 00094 After 178 seconds, recent_cpu is 189.63, load_avg is 0.95. 00095 After 180 seconds, recent_cpu is 189.97, load_avg is 0.95. 00096 */ 00097 00098 #include <stdio.h> 00099 #include "tests/threads/tests.h" 00100 #include "threads/init.h" 00101 #include "threads/malloc.h" 00102 #include "threads/synch.h" 00103 #include "threads/thread.h" 00104 #include "devices/timer.h" 00105 00106 /* Sensitive to assumption that recent_cpu updates happen exactly 00107 when timer_ticks() % TIMER_FREQ == 0. */ 00108 00109 void 00110 test_mlfqs_recent_1 (void) 00111 { 00112 int64_t start_time; 00113 int last_elapsed = 0; 00114 00115 ASSERT (thread_mlfqs); 00116 00117 do 00118 { 00119 msg ("Sleeping 10 seconds to allow recent_cpu to decay, please wait..."); 00120 start_time = timer_ticks (); 00121 timer_sleep (DIV_ROUND_UP (start_time, TIMER_FREQ) - start_time 00122 + 10 * TIMER_FREQ); 00123 } 00124 while (thread_get_recent_cpu () > 700); 00125 00126 start_time = timer_ticks (); 00127 for (;;) 00128 { 00129 int elapsed = timer_elapsed (start_time); 00130 if (elapsed % (TIMER_FREQ * 2) == 0 && elapsed > last_elapsed) 00131 { 00132 int recent_cpu = thread_get_recent_cpu (); 00133 int load_avg = thread_get_load_avg (); 00134 int elapsed_seconds = elapsed / TIMER_FREQ; 00135 msg ("After %d seconds, recent_cpu is %d.%02d, load_avg is %d.%02d.", 00136 elapsed_seconds, 00137 recent_cpu / 100, recent_cpu % 100, 00138 load_avg / 100, load_avg % 100); 00139 if (elapsed_seconds >= 180) 00140 break; 00141 } 00142 last_elapsed = elapsed; 00143 } 00144 }