From a67c29d2773779de4ef98c7cf84b21a66876e5b2 Mon Sep 17 00:00:00 2001 From: sageweil Date: Thu, 22 Mar 2007 00:38:24 +0000 Subject: [PATCH] * clock_tare arg to allow wall clock time * cleaned out some old build targets git-svn-id: https://ceph.svn.sf.net/svnroot/ceph@1283 29311d96-e01e-0410-9327-a35deaab8ce9 --- trunk/ceph/cfuse.cc | 2 + trunk/ceph/cmds.cc | 1 + trunk/ceph/cmon.cc | 4 +- trunk/ceph/common/Clock.h | 5 +- trunk/ceph/common/Logger.cc | 4 +- trunk/ceph/config.cc | 3 + trunk/ceph/config.h | 1 + trunk/ceph/cosd.cc | 2 + trunk/ceph/csyn.cc | 2 + trunk/ceph/fakefuse.cc | 2 + trunk/ceph/fakemon.cc | 178 ---------------------- trunk/ceph/fakesyn.cc | 3 +- trunk/ceph/newsyn.cc | 18 ++- trunk/ceph/tcpfuse.cc | 80 ---------- trunk/ceph/tcpsyn.cc | 292 ------------------------------------ 15 files changed, 39 insertions(+), 558 deletions(-) delete mode 100644 trunk/ceph/fakemon.cc delete mode 100644 trunk/ceph/tcpfuse.cc delete mode 100644 trunk/ceph/tcpsyn.cc diff --git a/trunk/ceph/cfuse.cc b/trunk/ceph/cfuse.cc index 4b7e490c26b76..a9b47f1270afb 100644 --- a/trunk/ceph/cfuse.cc +++ b/trunk/ceph/cfuse.cc @@ -46,6 +46,8 @@ int main(int argc, char **argv, char *envp[]) { // FUSE will chdir("/"); be ready. g_conf.use_abspaths = true; + if (g_conf.clock_tare) g_clock.tare(); + // load monmap MonMap monmap; int r = monmap.read(".ceph_monmap"); diff --git a/trunk/ceph/cmds.cc b/trunk/ceph/cmds.cc index 8faf6a5bc6049..aeeb42e87488a 100644 --- a/trunk/ceph/cmds.cc +++ b/trunk/ceph/cmds.cc @@ -74,6 +74,7 @@ int main(int argc, char **argv) } } + if (g_conf.clock_tare) g_clock.tare(); // load monmap MonMap monmap; diff --git a/trunk/ceph/cmon.cc b/trunk/ceph/cmon.cc index 442b584f02abd..8fd627986a240 100644 --- a/trunk/ceph/cmon.cc +++ b/trunk/ceph/cmon.cc @@ -73,7 +73,9 @@ int main(int argc, char **argv) return -1; } } - + + if (g_conf.clock_tare) g_clock.tare(); + MonMap monmap; if (whoami < 0) { diff --git a/trunk/ceph/common/Clock.h b/trunk/ceph/common/Clock.h index 92a2b2bddf6d0..106e9e9f23701 100644 --- a/trunk/ceph/common/Clock.h +++ b/trunk/ceph/common/Clock.h @@ -144,7 +144,7 @@ class Clock { public: Clock() { // set offset - tare(); + //tare(); } // real time. @@ -159,6 +159,9 @@ class Clock { void tare() { gettimeofday(&zero.timeval(), NULL); } + void tare(utime_t z) { + zero = z; + } utime_t now() { //lock.Lock(); utime_t n; diff --git a/trunk/ceph/common/Logger.cc b/trunk/ceph/common/Logger.cc index 91164658a80e5..e789d64a6ce47 100644 --- a/trunk/ceph/common/Logger.cc +++ b/trunk/ceph/common/Logger.cc @@ -52,7 +52,9 @@ Logger::Logger(string fn, LogType *type) //cout << "log " << filename << endl; interval = g_conf.log_interval; - //start = g_clock.now(); // time 0! + if (!g_conf.clock_tare) + start = g_clock.now(); // time 0! otherwise g_clock does it for us. + last_logged = 0; wrote_header = -1; open = false; diff --git a/trunk/ceph/config.cc b/trunk/ceph/config.cc index dab88f47ea8ae..ed5bb3eeb3ca7 100644 --- a/trunk/ceph/config.cc +++ b/trunk/ceph/config.cc @@ -109,6 +109,7 @@ md_config_t g_conf = { // --- clock --- clock_lock: false, + clock_tare: true, // --- messenger --- ms_single_dispatch: false, @@ -560,6 +561,8 @@ void parse_config_options(std::vector& args) else if (strcmp(args[i], "--clock_lock") == 0) g_conf.clock_lock = atoi(args[++i]); + else if (strcmp(args[i], "--clock_tare") == 0) + g_conf.clock_tare = atoi(args[++i]); else if (strcmp(args[i], "--objecter_buffer_uncommitted") == 0) g_conf.objecter_buffer_uncommitted = atoi(args[++i]); diff --git a/trunk/ceph/config.h b/trunk/ceph/config.h index 897258135ff06..d88e6d6c664b2 100644 --- a/trunk/ceph/config.h +++ b/trunk/ceph/config.h @@ -88,6 +88,7 @@ struct md_config_t { // clock bool clock_lock; + bool clock_tare; // messenger diff --git a/trunk/ceph/cosd.cc b/trunk/ceph/cosd.cc index ae23a667a32da..ff1e24b63b905 100644 --- a/trunk/ceph/cosd.cc +++ b/trunk/ceph/cosd.cc @@ -62,6 +62,8 @@ int main(int argc, char **argv) if (g_conf.debug_after) g_timer.add_event_after(g_conf.debug_after, new C_Debug); + if (g_conf.clock_tare) g_clock.tare(); + // osd specific args char *dev; int whoami = -1; diff --git a/trunk/ceph/csyn.cc b/trunk/ceph/csyn.cc index 0f95ee56b2602..afec2f81724b0 100644 --- a/trunk/ceph/csyn.cc +++ b/trunk/ceph/csyn.cc @@ -45,6 +45,8 @@ int main(int argc, char **argv, char *envp[]) { // args for fuse vec_to_argv(args, argc, argv); + if (g_conf.clock_tare) g_clock.tare(); + // load monmap MonMap monmap; int r = monmap.read(".ceph_monmap"); diff --git a/trunk/ceph/fakefuse.cc b/trunk/ceph/fakefuse.cc index 2edf3c7930e7a..ed2e90a8d5625 100644 --- a/trunk/ceph/fakefuse.cc +++ b/trunk/ceph/fakefuse.cc @@ -78,6 +78,8 @@ int main(int argc, char **argv) { // FUSE will chdir("/"); be ready. g_conf.use_abspaths = true; + if (g_conf.clock_tare) g_clock.tare(); + MonMap *monmap = new MonMap(g_conf.num_mon); Monitor *mon[g_conf.num_mon]; diff --git a/trunk/ceph/fakemon.cc b/trunk/ceph/fakemon.cc deleted file mode 100644 index 28cad55c071ca..0000000000000 --- a/trunk/ceph/fakemon.cc +++ /dev/null @@ -1,178 +0,0 @@ -// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- -/* - * Ceph - scalable distributed file system - * - * Copyright (C) 2004-2006 Sage Weil - * - * This is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License version 2.1, as published by the Free Software - * Foundation. See file COPYING. - * - */ - - - -#include -#include -#include -using namespace std; - -#include "config.h" - -#include "mds/MDCluster.h" - -#include "mds/MDS.h" -#include "osd/OSD.h" -#include "mon/Monitor.h" -#include "client/Client.h" - -#include "client/SyntheticClient.h" - -#include "msg/FakeMessenger.h" - -#include "common/Timer.h" - -#define NUMMDS g_conf.num_mds -#define NUMOSD g_conf.num_osd -#define NUMCLIENT g_conf.num_client - -class C_Test : public Context { -public: - void finish(int r) { - cout << "C_Test->finish(" << r << ")" << endl; - } -}; - - -int main(int argc, char **argv) -{ - cerr << "fakesyn start" << endl; - - //cerr << "inode_t " << sizeof(inode_t) << endl; - - vector args; - argv_to_vec(argc, argv, args); - - parse_config_options(args); - - int start = 0; - - parse_syn_options(args); - - vector nargs; - - for (unsigned i=0; iinit(); - } - for (int i=0; iinit(); - if (g_conf.mds_local_osd) - mdsosd[i]->init(); - } - - for (int i=0; iinit(); - } - - - // create client(s) - for (int i=0; iinit(); - - // use my argc, argv (make sure you pass a mount point!) - //cout << "mounting" << endl; - client[i]->mount(); - - //cout << "starting synthetic client " << endl; - syn[i] = new SyntheticClient(client[i]); - - syn[i]->start_thread(); - } - - - for (int i=0; ijoin_thread(); - delete syn[i]; - - client[i]->unmount(); - //cout << "unmounted" << endl; - client[i]->shutdown(); - } - - - // wait for it to finish - fakemessenger_wait(); - - // cleanup - for (int i=0; i mpi_bootstrap_new(int& argc, char**& argv, MonMap *monmap) MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank); // first, synchronize clocks. - MPI_Barrier(MPI_COMM_WORLD); - //dout(-10) << "tare" << endl; - g_clock.tare(); + if (g_conf.clock_tare) { + if (1) { + // use an MPI barrier. probably not terribly precise. + MPI_Barrier(MPI_COMM_WORLD); + g_clock.tare(); + } else { + // use wall clock; assume NTP has all nodes synchronized already. + // FIXME someday: this hangs for some reason. whatever. + utime_t z = g_clock.now(); + MPI_Bcast( &z, sizeof(z), MPI_CHAR, + 0, MPI_COMM_WORLD); + cout << "z is " << z << endl; + g_clock.tare(z); + } + } // start up all monitors at known addresses. entity_inst_t moninst[mpi_world]; // only care about first g_conf.num_mon of these. diff --git a/trunk/ceph/tcpfuse.cc b/trunk/ceph/tcpfuse.cc deleted file mode 100644 index 3d7be50d377d6..0000000000000 --- a/trunk/ceph/tcpfuse.cc +++ /dev/null @@ -1,80 +0,0 @@ -// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- -/* - * Ceph - scalable distributed file system - * - * Copyright (C) 2004-2006 Sage Weil - * - * This is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License version 2.1, as published by the Free Software - * Foundation. See file COPYING. - * - */ - - - -#include -#include -#include -using namespace std; - -#include "config.h" - -#include "mds/MDCluster.h" -#include "mds/MDS.h" -#include "osd/OSD.h" -#include "client/Client.h" -#include "client/fuse.h" - -#include "msg/TCPMessenger.h" - -#include "common/Timer.h" - -#include - -#include -#include -#include - -int main(int argc, char **argv, char *envp[]) { - - //cerr << "tcpfuse starting " << myrank << "/" << world << endl; - vector args; - argv_to_vec(argc, argv, args); - parse_config_options(args); - - // args for fuse - vec_to_argv(args, argc, argv); - - // start up tcpmessenger - tcpaddr_t nsa; - if (tcpmessenger_findns(nsa) < 0) exit(1); - tcpmessenger_init(); - tcpmessenger_start(); - tcpmessenger_start_rankserver(nsa); - - Client *client = new Client(new TCPMessenger(MSG_ADDR_CLIENT_NEW)); - client->init(); - - // start up fuse - // use my argc, argv (make sure you pass a mount point!) - cout << "mounting" << endl; - client->mount(); - - cerr << "starting fuse on pid " << getpid() << endl; - ceph_fuse_main(client, argc, argv); - cerr << "fuse finished on pid " << getpid() << endl; - - client->unmount(); - cout << "unmounted" << endl; - client->shutdown(); - - delete client; - - // wait for it to finish - tcpmessenger_wait(); - tcpmessenger_shutdown(); // shutdown MPI - - return 0; -} - diff --git a/trunk/ceph/tcpsyn.cc b/trunk/ceph/tcpsyn.cc deleted file mode 100644 index cc9f470640c36..0000000000000 --- a/trunk/ceph/tcpsyn.cc +++ /dev/null @@ -1,292 +0,0 @@ -// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- -/* - * Ceph - scalable distributed file system - * - * Copyright (C) 2004-2006 Sage Weil - * - * This is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License version 2.1, as published by the Free Software - * Foundation. See file COPYING. - * - */ - - -#include -#include -#include -using namespace std; - -#include "config.h" - -#include "mds/MDCluster.h" -#include "mds/MDS.h" -#include "osd/OSD.h" -#include "mon/Monitor.h" -#include "client/Client.h" -#include "client/SyntheticClient.h" - -#include "msg/TCPMessenger.h" - -#include "common/Timer.h" - -#define NUMMDS g_conf.num_mds -#define NUMOSD g_conf.num_osd -#define NUMCLIENT g_conf.num_client - -class C_Test : public Context { -public: - void finish(int r) { - cout << "C_Test->finish(" << r << ")" << endl; - } -}; - - -#include "msg/mpistarter.cc" - -utime_t tick_start; -int tick_count = 0; - -class C_Tick : public Context { -public: - void finish(int) { - utime_t now = g_clock.now() - tick_start; - dout(0) << "tick +" << g_conf.tick << " -> " << now << " (" << tick_count << ")" << endl; - tick_count += g_conf.tick; - utime_t next = tick_start; - next.sec_ref() += tick_count; - g_timer.add_event_at(next, new C_Tick); - } -}; - -class C_Die : public Context { -public: - void finish(int) { - cerr << "die" << endl; - exit(1); - } -}; - -class C_Debug : public Context { - public: - void finish(int) { - int size = &g_conf.debug_after - &g_conf.debug; - memcpy((char*)&g_conf.debug, (char*)&g_debug_after_conf.debug, size); - dout(0) << "debug_after flipping debug settings" << endl; - } -}; - - -int main(int argc, char **argv) -{ - vector args; - argv_to_vec(argc, argv, args); - - parse_config_options(args); - - parse_syn_options(args); - - if (g_conf.kill_after) - g_timer.add_event_after(g_conf.kill_after, new C_Die); - if (g_conf.debug_after) - g_timer.add_event_after(g_conf.debug_after, new C_Debug); - - if (g_conf.tick) { - tick_start = g_clock.now(); - g_timer.add_event_after(g_conf.tick, new C_Tick); - } - - vector nargs; - for (unsigned i=0; i mpiwho = mpi_bootstrap_tcp(argc, argv); - int myrank = mpiwho.first; - int world = mpiwho.second; - - int need = 0; - if (g_conf.tcp_skip_rank0) need++; - need += NUMMDS; - need += NUMOSD; - if (NUMCLIENT) { - if (!g_conf.tcp_overlay_clients) - need += 1; - } - assert(need <= world); - - if (myrank == 0) - cerr << "nummds " << NUMMDS << " numosd " << NUMOSD << " numclient " << NUMCLIENT << " .. need " << need << ", have " << world << endl; - - MDCluster *mdc = new MDCluster(NUMMDS, NUMOSD); - - - char hostname[100]; - gethostname(hostname,100); - int pid = getpid(); - - int started = 0; - - //if (myrank == 0) g_conf.debug = 20; - - // create mon - if (myrank == 0) { - Monitor *mon = new Monitor(0, new TCPMessenger(MSG_ADDR_MON(0))); - mon->init(); - } - - // create mds - MDS *mds[NUMMDS]; - OSD *mdsosd[NUMMDS]; - for (int i=0; iinit(); - started++; - - if (g_conf.mds_local_osd) { - mdsosd[i] = new OSD(i+10000, new TCPMessenger(MSG_ADDR_OSD(i+10000))); - mdsosd[i]->init(); - } - } - - // create osd - OSD *osd[NUMOSD]; - for (int i=0; iinit(); - started++; - } - - if (g_conf.tcp_overlay_clients) sleep(5); - - // create client - int skip_osd = NUMOSD; - if (g_conf.tcp_overlay_clients) - skip_osd = 0; // put clients with osds too! - int client_nodes = world - NUMMDS - skip_osd - g_conf.tcp_skip_rank0; - int clients_per_node = 1; - if (NUMCLIENT) clients_per_node = (NUMCLIENT-1) / client_nodes + 1; - set clientlist; - Client *client[NUMCLIENT]; - SyntheticClient *syn[NUMCLIENT]; - for (int i=0; iinit(); - started++; - - syn[i] = new SyntheticClient(client[i]); - } - - if (!clientlist.empty()) dout(2) << "i have " << clientlist << endl; - - int nclients = 0; - for (set::iterator it = clientlist.begin(); - it != clientlist.end(); - it++) { - int i = *it; - - //cerr << "starting synthetic client" << i << " on rank " << myrank << endl; - client[i]->mount(); - syn[i]->start_thread(); - - nclients++; - } - if (nclients) { - cerr << nclients << " clients on tcprank " << tcpmessenger_get_rank() << " " << hostname << "." << pid << endl; - } - - for (set::iterator it = clientlist.begin(); - it != clientlist.end(); - it++) { - int i = *it; - - // cout << "waiting for synthetic client" << i << " to finish" << endl; - syn[i]->join_thread(); - delete syn[i]; - - client[i]->unmount(); - //cout << "client" << i << " unmounted" << endl; - client[i]->shutdown(); - } - - - if (myrank && !started) { - //dout(1) << "IDLE" << endl; - cerr << "idle on tcprank " << tcpmessenger_get_rank() << " " << hostname << "." << pid << endl; - tcpmessenger_stop_rankserver(); - } - - // wait for everything to finish - tcpmessenger_wait(); - - if (started) cerr << "tcpsyn finishing" << endl; - - tcpmessenger_shutdown(); - - - /* - // cleanup - for (int i=0; i