]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
filejournal: only pad to align for data segments above 64 KB
authorSage Weil <sage@newdream.net>
Fri, 18 Jun 2010 20:06:13 +0000 (13:06 -0700)
committerSage Weil <sage@newdream.net>
Fri, 18 Jun 2010 20:06:13 +0000 (13:06 -0700)
src/config.cc
src/config.h
src/os/JournalingObjectStore.cc

index 727f495e28dad0e5512798b2941f22ce3a293b89..0d833bbfc0230ea513ebffd1c3180611bd3cc920 100644 (file)
@@ -504,6 +504,7 @@ static struct config_option config_optionsp[] = {
        OPTION(journal_max_write_entries, 0, OPT_INT, 100),
        OPTION(journal_queue_max_ops, 0, OPT_INT, 500),
        OPTION(journal_queue_max_bytes, 0, OPT_INT, 100 << 20),
+       OPTION(journal_align_min_size, 0, OPT_INT, 64 << 10),  // align data payloads >= this.
        OPTION(bdev_lock, 0, OPT_BOOL, true),
        OPTION(bdev_iothreads, 0, OPT_INT, 1),         // number of ios to queue with kernel
        OPTION(bdev_idle_kick_after_ms, 0, OPT_INT, 100),  // ms
index 2a12555386071c354d4e04c7971f26fdced6f98f..e28718960aebf79f6ccc2db1223240638c6db7c1 100644 (file)
@@ -379,6 +379,7 @@ struct md_config_t {
   int journal_max_write_entries;
   int journal_queue_max_ops;
   int journal_queue_max_bytes;
+  int journal_align_min_size;
 
   // block device
   bool  bdev_lock;
index e9eed443bef6486c63a09f5d6e4454d208ffe701..a6e7937b75e78649dd94518b0d01e7c4eba8d830 100644 (file)
@@ -191,7 +191,12 @@ void JournalingObjectStore::journal_transaction(ObjectStore::Transaction& t, uin
   if (journal && journal->is_writeable()) {
     bufferlist tbl;
     t.encode(tbl);
-    journal->submit_entry(op, tbl, t.get_data_alignment(), onjournal);
+
+    int alignment = -1;
+    if ((int)t.get_data_length() >= g_conf.journal_align_min_size)
+      alignment = t.get_data_alignment();
+
+    journal->submit_entry(op, tbl, alignment, onjournal);
   } else if (onjournal)
     commit_waiters[op].push_back(onjournal);
 }
@@ -207,7 +212,8 @@ void JournalingObjectStore::journal_transactions(list<ObjectStore::Transaction*>
     unsigned data_len = 0, data_align = 0;
     for (list<ObjectStore::Transaction*>::iterator p = tls.begin(); p != tls.end(); p++) {
       ObjectStore::Transaction *t = *p;
-      if (t->get_data_length() > data_len) {
+      if (t->get_data_length() > data_len &&
+         (int)t->get_data_length() >= g_conf.journal_align_min_size) {
        data_len = t->get_data_length();
        data_align = (t->get_data_alignment() - tbl.length()) & ~PAGE_MASK;
       }