You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by su...@apache.org on 2014/11/07 16:15:36 UTC

trafficserver git commit: [TS-1175]: Replace LogBuffer's new/delete buffer alloc with ioBufAllocator

Repository: trafficserver
Updated Branches:
  refs/heads/master 20c8ba6cb -> cf0e37b7f


[TS-1175]: Replace LogBuffer's new/delete buffer alloc with ioBufAllocator


Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/cf0e37b7
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/cf0e37b7
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/cf0e37b7

Branch: refs/heads/master
Commit: cf0e37b7fd35995e2324c025a6b3c5f44f5f5918
Parents: 20c8ba6
Author: Sudheer Vinukonda <su...@yahoo-inc.com>
Authored: Fri Nov 7 15:13:54 2014 +0000
Committer: Sudheer Vinukonda <su...@yahoo-inc.com>
Committed: Fri Nov 7 15:13:54 2014 +0000

----------------------------------------------------------------------
 proxy/logging/LogBuffer.cc          | 35 ++++++++++++++++++++++++--------
 proxy/logging/LogBuffer.h           |  2 ++
 proxy/logging/LogCollationHostSM.cc | 28 ++++++++++++++++++++-----
 proxy/logging/LogCollationHostSM.h  |  2 ++
 4 files changed, 54 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/trafficserver/blob/cf0e37b7/proxy/logging/LogBuffer.cc
----------------------------------------------------------------------
diff --git a/proxy/logging/LogBuffer.cc b/proxy/logging/LogBuffer.cc
index 349aa77..d3d9d01 100644
--- a/proxy/logging/LogBuffer.cc
+++ b/proxy/logging/LogBuffer.cc
@@ -134,7 +134,14 @@ LogBuffer::LogBuffer(LogObject * owner, size_t size, size_t buf_align, size_t wr
 
   // create the buffer
   //
-  m_unaligned_buffer = new char [size + buf_align];
+  int64_t alloc_size = size + buf_align; 
+  if (alloc_size <= max_iobuffer_size) {
+    m_buffer_fast_allocator_size = buffer_size_to_index(alloc_size);
+    m_unaligned_buffer = (char *) ioBufAllocator[m_buffer_fast_allocator_size].alloc_void();
+  } else {
+    m_buffer_fast_allocator_size = -1;
+    m_unaligned_buffer = (char *)ats_malloc(alloc_size);
+  }
   m_buffer = (char *)align_pointer_forward(m_unaligned_buffer, buf_align);
 
   // add the header
@@ -157,7 +164,7 @@ LogBuffer::LogBuffer(LogObject * owner, LogBufferHeader * header):
   m_buffer((char *) header),
   m_size(0),
   m_buf_align(LB_DEFAULT_ALIGN),
-  m_write_align(INK_MIN_ALIGN), m_expiration_time(0), m_owner(owner), m_header(header),
+  m_write_align(INK_MIN_ALIGN), m_buffer_fast_allocator_size(-1), m_expiration_time(0), m_owner(owner), m_header(header),
   m_references(0)
 {
   // This constructor does not allocate a buffer because it gets it as
@@ -173,17 +180,29 @@ LogBuffer::LogBuffer(LogObject * owner, LogBufferHeader * header):
         this_ethread(), m_id, m_owner->get_base_filename(), m_buffer);
 }
 
-LogBuffer::~LogBuffer()
+void
+LogBuffer::freeLogBuffer()
 {
-  Debug("log-logbuffer", "[%p] Deleting buffer %u at address %p",
-        this_ethread(), m_id, m_unaligned_buffer ? m_unaligned_buffer : m_buffer);
-
+  char *log_buffer = NULL;
   if (m_unaligned_buffer) {
-    delete [] m_unaligned_buffer;
+    log_buffer = m_unaligned_buffer;
   } else {
-    delete [] m_buffer;
+    log_buffer = m_buffer;
   }
+  if (log_buffer) {
+    Debug("log-logbuffer", "[%p] Deleting buffer %u at address %p",
+          this_ethread(), m_id, log_buffer);
+    if (m_buffer_fast_allocator_size >= 0) {
+      ioBufAllocator[m_buffer_fast_allocator_size].free_void(log_buffer);
+    } else{
+      ats_free(log_buffer);
+    }
+  }
+}
 
+LogBuffer::~LogBuffer()
+{
+  freeLogBuffer();
   m_buffer = 0;
   m_unaligned_buffer = 0;
 }

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/cf0e37b7/proxy/logging/LogBuffer.h
----------------------------------------------------------------------
diff --git a/proxy/logging/LogBuffer.h b/proxy/logging/LogBuffer.h
index 20ab601..648ca08 100644
--- a/proxy/logging/LogBuffer.h
+++ b/proxy/logging/LogBuffer.h
@@ -207,6 +207,7 @@ private:
   size_t m_size;                // the buffer size
   size_t m_buf_align;           // the buffer alignment
   size_t m_write_align;         // the write alignment mask
+  int    m_buffer_fast_allocator_size; // indicates whether the logbuffer is allocated from ioBuf
 
   long m_expiration_time;       // buffer expiration time
 
@@ -222,6 +223,7 @@ private:
   // private functions
   size_t _add_buffer_header();
   unsigned add_header_str(const char *str, char *buf_ptr, unsigned buf_len);
+  void freeLogBuffer();
 
   // -- member functions that are not allowed --
   LogBuffer();

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/cf0e37b7/proxy/logging/LogCollationHostSM.cc
----------------------------------------------------------------------
diff --git a/proxy/logging/LogCollationHostSM.cc b/proxy/logging/LogCollationHostSM.cc
index 498018c..91ffe5c 100644
--- a/proxy/logging/LogCollationHostSM.cc
+++ b/proxy/logging/LogCollationHostSM.cc
@@ -67,7 +67,7 @@ m_client_vio(NULL),
 m_client_buffer(NULL),
 m_client_reader(NULL),
 m_pending_event(NULL),
-m_read_buffer(NULL), m_read_bytes_wanted(0), m_read_bytes_received(0), m_client_ip(0), m_client_port(0), m_id(ID++)
+m_read_buffer(NULL), m_read_bytes_wanted(0), m_read_bytes_received(0), m_read_buffer_fast_allocator_size(-1), m_client_ip(0), m_client_port(0), m_id(ID++)
 {
 
   Debug("log-coll", "[%d]host::constructor", m_id);
@@ -87,6 +87,19 @@ m_read_buffer(NULL), m_read_bytes_wanted(0), m_read_bytes_received(0), m_client_
 
 }
 
+void
+LogCollationHostSM::freeReadBuffer()
+{
+  if (m_read_buffer) {
+    if (m_read_buffer_fast_allocator_size >= 0) {
+      ioBufAllocator[m_read_buffer_fast_allocator_size].free_void(m_read_buffer);
+    } else{
+      ats_free(m_read_buffer);
+    }
+    m_read_buffer = 0;
+  }
+}
+
 //-------------------------------------------------------------------------
 //-------------------------------------------------------------------------
 //
@@ -171,8 +184,7 @@ LogCollationHostSM::host_auth(int event, void * /* data ATS_UNUSED */)
       ink_assert(m_read_buffer != NULL);
       int diff = strncmp(m_read_buffer, Log::config->collation_secret,
                          m_read_bytes_received);
-      delete[]m_read_buffer;
-      m_read_buffer = 0;
+      freeReadBuffer();
       if (!diff) {
         Debug("log-coll", "[%d]host::host_auth - authenticated!", m_id);
         return host_recv(LOG_COLL_EVENT_SWITCH, NULL);
@@ -304,7 +316,7 @@ LogCollationHostSM::host_recv(int event, void * /* data ATS_UNUSED */)
       if (version != LOG_SEGMENT_VERSION) {
         Note("[log-coll] invalid LogBuffer received; invalid version - "
              "buffer = %u, current = %u", version, LOG_SEGMENT_VERSION);
-        delete[]m_read_buffer;
+        freeReadBuffer();
 
       } else {
         log_object = Log::match_logobject(log_buffer_header);
@@ -455,7 +467,13 @@ LogCollationHostSM::read_body(int event, VIO * vio)
     m_read_bytes_wanted = m_net_msg_header.msg_bytes;
     ink_assert(m_read_bytes_wanted > 0);
     m_read_bytes_received = 0;
-    m_read_buffer = new char[m_read_bytes_wanted];
+    if (m_read_bytes_wanted <= max_iobuffer_size) {
+      m_read_buffer_fast_allocator_size = buffer_size_to_index(m_read_bytes_wanted);
+      m_read_buffer = (char *) ioBufAllocator[m_read_buffer_fast_allocator_size].alloc_void();
+    } else {
+      m_read_buffer_fast_allocator_size = -1; 
+      m_read_buffer = (char *)ats_malloc(m_read_bytes_wanted);
+    }
     ink_assert(m_read_buffer != NULL);
     ink_assert(m_client_vc != NULL);
     Debug("log-coll", "[%d]host:read_body - do_io_read(%" PRId64")", m_id, m_read_bytes_wanted);

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/cf0e37b7/proxy/logging/LogCollationHostSM.h
----------------------------------------------------------------------
diff --git a/proxy/logging/LogCollationHostSM.h b/proxy/logging/LogCollationHostSM.h
index e739ec4..31b0e67 100644
--- a/proxy/logging/LogCollationHostSM.h
+++ b/proxy/logging/LogCollationHostSM.h
@@ -84,6 +84,7 @@ private:
   int read_body(int event, VIO * vio);
   int read_done(int event, void *data);
   int read_start();
+  void freeReadBuffer();
   ReadState m_read_state;
 
   // helper for read states
@@ -101,6 +102,7 @@ private:
   char *m_read_buffer;
   int64_t m_read_bytes_wanted;
   int64_t m_read_bytes_received;
+  int64_t m_read_buffer_fast_allocator_size;
 
   // client info
   int m_client_ip;