141 auto fd =
throwcall::badval(open(
"/dev/urandom", O_RDONLY), -1,
"open /dev/urandom");
149 for (
unsigned i = 0;
true; i++) {
150 auto number = std::to_string(i);
166 struct stat statData;
168 content.resize(statData.st_size);
172 std::vector<clockType::duration> times;
175 for (
unsigned i = 0; i <
repeat; i++) {
177 auto now = std::chrono::system_clock::now();
178 auto seconds = std::chrono::duration_cast<std::chrono::microseconds>(now.time_since_epoch()).count();
179 auto divresult = std::div(seconds,
syncus);
180 auto then = std::chrono::system_clock::time_point(std::chrono::microseconds(divresult.quot *
syncus +
syncus + (i %
syncus) *
skewus));
181 std::this_thread::sleep_until(then);
183 auto tStart = clockType::now();
185 auto tStop = clockType::now();
186 auto dt = tStop - tStart;
191 std::cout <<
"removing " << file <<
"\n";
197 std::cout <<
"took " << times.at(0) <<
"s\n";
199 auto minMax = std::minmax_element(times.begin(), times.end());
200 std::cout <<
"minimum time: " << *(minMax.first) <<
"s\n";
201 std::cout <<
"maximum time: " << *(minMax.second) <<
"s\n";
202 auto sum = std::accumulate(times.begin(), times.end(), clockType::duration::zero());
203 auto mean = std::chrono::duration_cast<std::chrono::duration<double>>(sum).count() /
repeat;
204 std::cout <<
"average time: " << mean <<
"s\n";
205 std::map<double, unsigned long> histogram;
207 auto range = std::chrono::duration_cast<std::chrono::duration<double>>(*(minMax.second) - * (minMax.first)).count();
208 auto lowBorder = std::chrono::duration_cast<std::chrono::duration<double>>(*(minMax.first)).count();
209 if (mean < lowBorder + range / 10) {
210 auto border = lowBorder;
211 histogram[border] = 0;
212 auto factor = std::pow(std::chrono::duration_cast<std::chrono::duration<double>>(*(minMax.second)).count() / lowBorder,
214 for (
unsigned i = 0; i < bins; i++) {
216 histogram[border] = 0;
219 lowBorder -= range / (2 * bins);
223 for (
unsigned i = 0; i < bins + 1; i++) {
224 histogram[lowBorder + i * range / bins] = 0;
227 for (
auto t : times) {
228 auto bin = histogram.begin();
229 for (
auto testBin = bin; testBin != histogram.end(); ++testBin) {
230 if (std::chrono::duration_cast<std::chrono::duration<double>>(t).count() < testBin->first) {
237 for (
auto& bin : histogram) {
238 std::cout << bin.first <<
": " << bin.second <<
"\n";