Fix some bugs when testing opensds ansible
[stor4nfv.git] / src / ceph / src / test / test_rewrite_latency.cc
1
2 #include <unistd.h>
3 #include <map>
4 #include <errno.h>
5
6 #include "include/utime.h"
7 #include "common/Clock.h"
8 #include "common/errno.h"
9
10 using namespace std;
11
12 int main(int argc, const char **argv)
13 {
14   const char *fn = argv[1];
15   multimap<utime_t, utime_t> latency;
16   unsigned max = 10;
17
18   int fd = ::open(fn, O_CREAT|O_RDWR, 0644);
19   if (fd < 1) {
20     int err = errno;
21     cerr << "failed to open " << fn << " with " << cpp_strerror(err) << std::endl;
22     return -1;
23   }
24
25   while (true) {
26     utime_t now = ceph_clock_now();
27     int r = ::pwrite(fd, fn, strlen(fn), 0);
28     assert(r >= 0);
29     utime_t lat = ceph_clock_now();
30     lat -= now;
31     utime_t oldmin;
32     if (!latency.empty())
33       oldmin = latency.begin()->first;
34     latency.insert(make_pair(lat, now));
35     utime_t newmin = latency.begin()->first;
36     while (latency.size() > max)
37       latency.erase(latency.begin());
38     if (oldmin == newmin) {
39       cout << "latency\tat" << std::endl;
40       for (multimap<utime_t,utime_t>::reverse_iterator p = latency.rbegin();
41            p != latency.rend();
42            ++p) {
43         cout << p->first << "\t" << p->second << std::endl;
44       }
45     }
46   }
47 }