diff options
author | Bjoern B. Brandenburg <bbb@cs.unc.edu> | 2010-11-09 17:39:24 -0500 |
---|---|---|
committer | Bjoern B. Brandenburg <bbb@cs.unc.edu> | 2010-11-09 17:39:24 -0500 |
commit | 322a95ba8c665414168bbf7b8fc5982e2b7638e7 (patch) | |
tree | f23f66de5dcb8dfc63fc273518caf14181877c2a | |
parent | a8a525979835517c0a13361bf35cab4e4d1b37ad (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.c | 40 |
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 | } |