|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 5 of 8] xenalyze: Rework math to remove two 64-bit divisions
abs_cycles_to_time is called on every record for dump mode; it has
four 64-bit divisions (well, 3 divisions and 1 mod), which map to
library functions on a 32-bit platform. A simple rework of the math
can eliminate two of those.
Signed-off-by: George Dunlap <george.dunlap@xxxxxxxxxxxxx>
diff -r 0663e3e8f69d -r 4b3639bd3255 xenalyze.c
--- a/xenalyze.c Thu Jan 26 17:16:59 2012 +0000
+++ b/xenalyze.c Thu Jan 26 17:17:19 2012 +0000
@@ -1976,16 +1976,19 @@ void cpumask_union(cpu_mask_t *d, const
/* -- Time code -- */
void cycles_to_time(unsigned long long c, struct time_struct *t) {
- t->time = ((c) * 1000) / (opt.cpu_hz / 1000000 );
- t->s = t->time / 1000000000;
- t->ns = t->time % 1000000000;
+ t->time = ((c - P.f.first_tsc) * 1000 * 1000000) / opt.cpu_hz;
+ t->s = t->time / 1000000000;
+ t->ns = t->time - (t->s * 1000000000);
}
void abs_cycles_to_time(unsigned long long ac, struct time_struct *t) {
if(ac > P.f.first_tsc) {
- t->time = ((ac - P.f.first_tsc) * 1000) / (opt.cpu_hz / 1000000 );
- t->s = t->time / 1000000000;
- t->ns = t->time % 1000000000;
+ /* t->time = ((ac - P.f.first_tsc) * 1000) / (opt.cpu_hz / 1000000 );
*/
+ /* t->s = t->time / 1000000000; */
+ /* t->ns = t->time % 1000000000; */
+ t->time = ((ac - P.f.first_tsc) * 1000 * 1000000) / opt.cpu_hz;
+ t->s = t->time / 1000000000;
+ t->ns = t->time - (t->s * 1000000000);
} else {
t->time = t->s = t->ns = 0;
}
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |