summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjoern B. Brandenburg <bbb@cs.unc.edu>2010-11-09 17:39:24 -0500
committerBjoern B. Brandenburg <bbb@cs.unc.edu>2010-11-09 17:39:24 -0500
commit322a95ba8c665414168bbf7b8fc5982e2b7638e7 (patch)
treef23f66de5dcb8dfc63fc273518caf14181877c2a
parenta8a525979835517c0a13361bf35cab4e4d1b37ad (diff)
Make sure we have the same number of migrations and preemptions.
This skips unneeded samples once the desired number of migrations has been observed.
-rw-r--r--bin/cache_cost.c40
1 files changed, 28 insertions, 12 deletions
diff --git a/bin/cache_cost.c b/bin/cache_cost.c
index a33c1a0..808ca33 100644
--- a/bin/cache_cost.c
+++ b/bin/cache_cost.c
@@ -138,7 +138,9 @@ static void do_random_experiment(FILE* outfile,
138 int sleep_min, int sleep_max, 138 int sleep_min, int sleep_max,
139 int write_cycle, int sample_count) 139 int write_cycle, int sample_count)
140{ 140{
141 int last_cpu, next_cpu, delay; 141 int last_cpu, next_cpu, delay, show = 1;
142 unsigned long preempt_counter = 0;
143 unsigned long migration_counter = 0;
142 unsigned long counter = 1; 144 unsigned long counter = 1;
143 145
144 cycles_t start, stop; 146 cycles_t start, stop;
@@ -155,10 +157,17 @@ static void do_random_experiment(FILE* outfile,
155#if defined(__i386__) || defined(__x86_64__) 157#if defined(__i386__) || defined(__x86_64__)
156 iopl(3); 158 iopl(3);
157#endif 159#endif
158 while (!sample_count || sample_count >= counter) { 160 while (!sample_count ||
161 sample_count >= preempt_counter ||
162 sample_count >= migration_counter) {
163
159 delay = sleep_min + random() % (sleep_max - sleep_min + 1); 164 delay = sleep_min + random() % (sleep_max - sleep_min + 1);
160 next_cpu = random() % num_cpus; 165 next_cpu = random() % num_cpus;
161 166
167 if (sample_count)
168 show = (next_cpu == last_cpu && sample_count >= preempt_counter) ||
169 (next_cpu != last_cpu && sample_count >= migration_counter);
170
162 mem = allocate(wss); 171 mem = allocate(wss);
163 172
164#if defined(__i386__) || defined(__x86_64__) 173#if defined(__i386__) || defined(__x86_64__)
@@ -200,18 +209,25 @@ static void do_random_experiment(FILE* outfile,
200#endif 209#endif
201 after_resume = stop - start; 210 after_resume = stop - start;
202 211
212
203 /* run, write ratio, wss, delay, from, to, cold, hot1, hot2, 213 /* run, write ratio, wss, delay, from, to, cold, hot1, hot2,
204 * hot3, after_resume */ 214 * hot3, after_resume */
205 fprintf(outfile, 215 if (show)
206 "%6ld, %3d, %6d, %6d, %3d, %3d, " 216 fprintf(outfile,
207 "%" CYCLES_FMT ", " 217 "%6ld, %3d, %6d, %6d, %3d, %3d, "
208 "%" CYCLES_FMT ", " 218 "%" CYCLES_FMT ", "
209 "%" CYCLES_FMT ", " 219 "%" CYCLES_FMT ", "
210 "%" CYCLES_FMT ", " 220 "%" CYCLES_FMT ", "
211 "%" CYCLES_FMT "\n", 221 "%" CYCLES_FMT ", "
212 counter++, write_cycle, 222 "%" CYCLES_FMT "\n",
213 wss, delay, last_cpu, next_cpu, cold, hot1, hot2, hot3, 223 counter++, write_cycle,
214 after_resume); 224 wss, delay, last_cpu, next_cpu, cold,
225 hot1, hot2, hot3,
226 after_resume);
227 if (next_cpu == last_cpu)
228 preempt_counter++;
229 else
230 migration_counter++;
215 last_cpu = next_cpu; 231 last_cpu = next_cpu;
216 deallocate(mem); 232 deallocate(mem);
217 } 233 }