]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
os/: default to dio for non-block journals
authorSamuel Just <sam.just@inktank.com>
Mon, 6 May 2013 17:56:50 +0000 (10:56 -0700)
committerSage Weil <sage@inktank.com>
Mon, 6 May 2013 20:05:01 +0000 (13:05 -0700)
Workaround: #4910
Signed-off-by: Samuel Just <sam.just@inktank.com>
Reviewed-by: Sage Weil <sage@inktank.com>
src/common/config_opts.h
src/os/FileJournal.cc
src/os/FileJournal.h
src/os/FileStore.cc
src/os/FileStore.h

index 84df2bff266643e1dbef01a532cf55060f435941..02ceda5703ef48f1b578022329d569e316748f3a 100644 (file)
@@ -514,6 +514,7 @@ OPTION(filestore_replica_fadvise, OPT_BOOL, true)
 OPTION(filestore_debug_verify_split, OPT_BOOL, false)
 OPTION(journal_dio, OPT_BOOL, true)
 OPTION(journal_aio, OPT_BOOL, true)
+OPTION(journal_force_aio, OPT_BOOL, false)
 
 // max bytes to search ahead in journal searching for corruption
 OPTION(journal_max_corrupt_search, OPT_U64, 10<<20)
index 1a3ce01d3906b121577458e6b37d139f09c12c69..2418dbbd7cce7d0a9d364cfb43c27ea81df23f91 100644 (file)
@@ -87,10 +87,16 @@ int FileJournal::_open(bool forwrite, bool create)
     goto out_fd;
   }
 
-  if (S_ISBLK(st.st_mode))
+  if (S_ISBLK(st.st_mode)) {
     ret = _open_block_device();
-  else
+  } else {
+    if (aio && !force_aio) {
+      derr << "FileJournal::_open: disabling aio for non-block journal.  Use "
+          << "journal_force_aio to force use of aio anyway" << dendl;
+      aio = false;
+    }
     ret = _open_file(st.st_size, st.st_blksize, create);
+  }
 
   if (ret)
     goto out_fd;
index 38e32324dcaec9d79cdb7a9a8bcfff68d9bf0200..c69fc54c2820f6ac61eed2d9a98caf32db608037 100644 (file)
@@ -222,7 +222,7 @@ private:
   off64_t max_size;
   size_t block_size;
   bool is_bdev;
-  bool directio, aio;
+  bool directio, aio, force_aio;
   bool must_write_header;
   off64_t write_pos;      // byte where the next entry to be written will go
   off64_t read_pos;       // 
@@ -351,7 +351,7 @@ private:
   }
 
  public:
-  FileJournal(uuid_d fsid, Finisher *fin, Cond *sync_cond, const char *f, bool dio=false, bool ai=true) : 
+  FileJournal(uuid_d fsid, Finisher *fin, Cond *sync_cond, const char *f, bool dio=false, bool ai=true, bool faio=false) :
     Journal(fsid, fin, sync_cond),
     finisher_lock("FileJournal::finisher_lock", false, true, false, g_ceph_context),
     journaled_seq(0),
@@ -362,7 +362,7 @@ private:
     fn(f),
     zero_buf(NULL),
     max_size(0), block_size(0),
-    is_bdev(false), directio(dio), aio(ai),
+    is_bdev(false), directio(dio), aio(ai), force_aio(faio),
     must_write_header(false),
     write_pos(0), read_pos(0),
 #ifdef HAVE_LIBAIO
index 9f13cff246bc80d84d1c9dee888d7fe2c6c429a6..0212a624e506ad76aafd76edebaa74e7e6d51102 100644 (file)
@@ -417,6 +417,7 @@ FileStore::FileStore(const std::string &base, const std::string &jdev, const cha
   do_update(do_update),
   m_journal_dio(g_conf->journal_dio),
   m_journal_aio(g_conf->journal_aio),
+  m_journal_force_aio(g_conf->journal_force_aio),
   m_osd_rollback_to_cluster_snap(g_conf->osd_rollback_to_cluster_snap),
   m_osd_use_stale_snap(g_conf->osd_use_stale_snap),
   m_filestore_queue_max_ops(g_conf->filestore_queue_max_ops),
@@ -561,7 +562,7 @@ int FileStore::open_journal()
   if (journalpath.length()) {
     dout(10) << "open_journal at " << journalpath << dendl;
     journal = new FileJournal(fsid, &finisher, &sync_cond, journalpath.c_str(),
-                             m_journal_dio, m_journal_aio);
+                             m_journal_dio, m_journal_aio, m_journal_force_aio);
     if (journal)
       journal->logger = logger;
   }
index ebe022561a54bfa94b19a9c08aa40fc6a5225498..d5ca2a4c237cd6f51061a3fe87c19339f8bab8b9 100644 (file)
@@ -524,7 +524,7 @@ private:
   bool m_filestore_fail_eio;
   bool m_filestore_replica_fadvise;
   int do_update;
-  bool m_journal_dio, m_journal_aio;
+  bool m_journal_dio, m_journal_aio, m_journal_force_aio;
   std::string m_osd_rollback_to_cluster_snap;
   bool m_osd_use_stale_snap;
   int m_filestore_queue_max_ops;