-
Notifications
You must be signed in to change notification settings - Fork 2
/
timediff.c
110 lines (87 loc) · 3.39 KB
/
timediff.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
/*
* Copyright 2016 Information Systems Group, Saarland University
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
/*
* timediff.c
*
* Created on: Jan 30, 2015
* Author: Felix Martin Schuhknecht, Pankaj Khanchandani
*/
#include "timediff.h"
void measure(timeval_t* time) {
gettimeofday(time, NULL);
}
void measureHighRes(timespec_t* time) {
clock_gettime(CLOCK_REALTIME, time);
}
double timeDifference(const timeval_t* first, const timeval_t* second) {
double total_time = (second->tv_sec - first->tv_sec) * 1000000 + (second->tv_usec - first->tv_usec);
// return seconds
return total_time / 1000000;
}
double timeDifferenceHighRes(const timespec_t* first, const timespec_t* second) {
double total_time = (second->tv_sec - first->tv_sec) * 1000000000 + (second->tv_nsec - first->tv_nsec);
// return microseconds
return total_time / 1000;
}
void printTimeDifference(timeval_t* start,
timeval_t* end,
const field_t field,
measurement_t* const measurement) {
double diff = timeDifference(start, end);
measurement->dimensions[field] = diff;
printf("%f,%s\n", diff, getFieldName(field));
}
void printTimeDifferenceChecksum(timeval_t* start,
timeval_t* end,
const field_t field,
const entry_t total,
measurement_t* const measurement) {
double diff = timeDifference(start, end);
measurement->dimensions[field] = diff;
printf("%f,%s //total=%ld\n", diff, getFieldName(field), (uint64_t) total);
}
void printTimeDifferenceSelectivityChecksum(timeval_t* start,
timeval_t* end,
const field_t field,
const double selectivity,
const entry_t total,
measurement_t* const measurement) {
double diff = timeDifference(start, end);
measurement->dimensions[field] = diff;
printf("%f,%s,%f //total=%ld\n", diff, getFieldName(field), selectivity, (uint64_t) total);
}
void printTimeDifferenceSelectivityPercentChecksum(timeval_t* start,
timeval_t* end,
const field_t field,
const size_t effective_size,
const double selectivity,
const entry_t total,
measurement_t* const measurement) {
double diff = timeDifference(start, end);
measurement->dimensions[field] = diff;
printf("%f,%s //effective_size=%ld, selectivity=%f%%, total=%ld\n", diff, getFieldName(field), effective_size, selectivity, (uint64_t) total);
}
void collectDetailedTimeDifference(timespec_t* start,
timespec_t* end,
const size_t iteration,
const field_t field,
measurement_t* const measurement) {
double diff = timeDifferenceHighRes(start, end);
measurement->detailedDimensions[field].dimension[iteration] = diff;
}
void collectDetailedTime(const double diff,
const size_t iteration,
const field_t field,
measurement_t* const measurement) {
measurement->detailedDimensions[field].dimension[iteration] = diff;
}