add some diag for DTL auto free
This commit is contained in:
		@ -25,7 +25,7 @@ using namespace oceanbase::sql::dtl;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
ObDtlChannelMemManager::ObDtlChannelMemManager(uint64_t tenant_id) :
 | 
					ObDtlChannelMemManager::ObDtlChannelMemManager(uint64_t tenant_id) :
 | 
				
			||||||
  tenant_id_(tenant_id), size_per_buffer_(GCONF.dtl_buffer_size), seqno_(-1), allocator_(tenant_id), pre_alloc_cnt_(0),
 | 
					  tenant_id_(tenant_id), size_per_buffer_(GCONF.dtl_buffer_size), seqno_(-1), allocator_(tenant_id), pre_alloc_cnt_(0),
 | 
				
			||||||
  max_mem_percent_(0), alloc_cnt_(0), free_cnt_(0), queue_len_(0), real_alloc_cnt_(0), real_free_cnt_(0)
 | 
					  max_mem_percent_(0), alloc_cnt_(0), free_cnt_(0), real_alloc_cnt_(0), real_free_cnt_(0)
 | 
				
			||||||
{}
 | 
					{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int ObDtlChannelMemManager::init()
 | 
					int ObDtlChannelMemManager::init()
 | 
				
			||||||
@ -75,7 +75,7 @@ void ObDtlChannelMemManager::destroy()
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  LOG_WARN("pop buffer from free queue to destroy",
 | 
					  LOG_WARN("pop buffer from free queue to destroy",
 | 
				
			||||||
    K(ret), K(seqno_), K(free_cnt_), K(alloc_cnt_), K(queue_len_), K(free_cnt));
 | 
					    K(ret), K(seqno_), K(free_cnt_), K(alloc_cnt_), K(free_queue_.size()), K(free_cnt));
 | 
				
			||||||
  free_queue_.reset();
 | 
					  free_queue_.reset();
 | 
				
			||||||
  free_queue_.destroy();
 | 
					  free_queue_.destroy();
 | 
				
			||||||
  allocator_.reset();
 | 
					  allocator_.reset();
 | 
				
			||||||
@ -91,7 +91,6 @@ ObDtlLinkedBuffer *ObDtlChannelMemManager::alloc(int64_t chid, int64_t size)
 | 
				
			|||||||
      allocated_buf = new (buf) ObDtlLinkedBuffer(
 | 
					      allocated_buf = new (buf) ObDtlLinkedBuffer(
 | 
				
			||||||
        static_cast<char *>(buf) + sizeof (ObDtlLinkedBuffer), size_per_buffer_);
 | 
					        static_cast<char *>(buf) + sizeof (ObDtlLinkedBuffer), size_per_buffer_);
 | 
				
			||||||
      allocated_buf->allocated_chid() = chid;
 | 
					      allocated_buf->allocated_chid() = chid;
 | 
				
			||||||
      decrease_free_queue_cnt();
 | 
					 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
      if (OB_ENTRY_NOT_EXIST == ret) {
 | 
					      if (OB_ENTRY_NOT_EXIST == ret) {
 | 
				
			||||||
        LOG_TRACE("queue has no element", K(ret), K(seqno_), K(free_queue_.size()));
 | 
					        LOG_TRACE("queue has no element", K(ret), K(seqno_), K(free_queue_.size()));
 | 
				
			||||||
@ -135,7 +134,7 @@ ObDtlLinkedBuffer *ObDtlChannelMemManager::alloc(int64_t chid, int64_t size)
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
  LOG_TRACE("channel memory status", K(get_alloc_cnt()), K(get_free_cnt()),
 | 
					  LOG_TRACE("channel memory status", K(get_alloc_cnt()), K(get_free_cnt()),
 | 
				
			||||||
    K(get_free_queue_length()), K(get_max_tenant_memory_limit_size()), K(get_max_dtl_memory_size()),
 | 
					    K(get_free_queue_length()), K(get_max_tenant_memory_limit_size()), K(get_max_dtl_memory_size()),
 | 
				
			||||||
    K(get_used_memory_size()), K(max_mem_percent_));
 | 
					    K(get_used_memory_size()), K(max_mem_percent_), KP(allocated_buf), K(seqno_));
 | 
				
			||||||
  return allocated_buf;
 | 
					  return allocated_buf;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -148,7 +147,6 @@ int ObDtlChannelMemManager::free(ObDtlLinkedBuffer *buf, bool auto_free)
 | 
				
			|||||||
      if (OB_FAIL(free_queue_.push(buf))) {
 | 
					      if (OB_FAIL(free_queue_.push(buf))) {
 | 
				
			||||||
        LOG_TRACE("failed to push back buffer", K(ret), K(seqno_), K(free_queue_.size()));
 | 
					        LOG_TRACE("failed to push back buffer", K(ret), K(seqno_), K(free_queue_.size()));
 | 
				
			||||||
      } else {
 | 
					      } else {
 | 
				
			||||||
        increase_free_queue_cnt();
 | 
					 | 
				
			||||||
        increase_free_cnt();
 | 
					        increase_free_cnt();
 | 
				
			||||||
        buf = NULL;
 | 
					        buf = NULL;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
@ -157,7 +155,7 @@ int ObDtlChannelMemManager::free(ObDtlLinkedBuffer *buf, bool auto_free)
 | 
				
			|||||||
      real_free(buf);
 | 
					      real_free(buf);
 | 
				
			||||||
      increase_free_cnt();
 | 
					      increase_free_cnt();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    LOG_TRACE("channel memory status", K(get_alloc_cnt()), K(get_free_cnt()), K(get_free_queue_length()));
 | 
					    LOG_TRACE("channel memory status", K(get_alloc_cnt()), K(get_free_cnt()), K(get_free_queue_length()), KP(buf), K(seqno_), K(auto_free));
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  return ret;
 | 
					  return ret;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -168,7 +166,7 @@ void ObDtlChannelMemManager::real_free(ObDtlLinkedBuffer *buf)
 | 
				
			|||||||
    ++real_free_cnt_;
 | 
					    ++real_free_cnt_;
 | 
				
			||||||
    buf->~ObDtlLinkedBuffer();
 | 
					    buf->~ObDtlLinkedBuffer();
 | 
				
			||||||
    allocator_.free(buf);
 | 
					    allocator_.free(buf);
 | 
				
			||||||
    LOG_TRACE("Trace to free buffer", K(seqno_));
 | 
					    LOG_TRACE("Trace to free buffer", K(seqno_), KP(buf));
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -179,6 +177,7 @@ int ObDtlChannelMemManager::auto_free_on_time(int64_t cur_max_reserve_count)
 | 
				
			|||||||
  if (cur_max_reserve_count <= 0) {
 | 
					  if (cur_max_reserve_count <= 0) {
 | 
				
			||||||
    cur_max_reserve_count = 1;
 | 
					    cur_max_reserve_count = 1;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					  LOG_TRACE("trace auto free", K(get_alloc_cnt()), K(get_free_cnt()), K(get_free_queue_length()),  K(seqno_), K(cur_max_reserve_count));
 | 
				
			||||||
  if (free_queue_.size() > cur_max_reserve_count) {
 | 
					  if (free_queue_.size() > cur_max_reserve_count) {
 | 
				
			||||||
    int64_t delta = alloc_cnt_ - pre_alloc_cnt_;
 | 
					    int64_t delta = alloc_cnt_ - pre_alloc_cnt_;
 | 
				
			||||||
    int64_t delta_per_sec = delta / ts;
 | 
					    int64_t delta_per_sec = delta / ts;
 | 
				
			||||||
 | 
				
			|||||||
@ -47,7 +47,7 @@ public:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  OB_INLINE int64_t get_alloc_cnt() { return alloc_cnt_; }
 | 
					  OB_INLINE int64_t get_alloc_cnt() { return alloc_cnt_; }
 | 
				
			||||||
  OB_INLINE int64_t get_free_cnt() { return free_cnt_; }
 | 
					  OB_INLINE int64_t get_free_cnt() { return free_cnt_; }
 | 
				
			||||||
  OB_INLINE int64_t get_free_queue_length() { return queue_len_; }
 | 
					  OB_INLINE int64_t get_free_queue_length() { return free_queue_.size(); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  OB_INLINE int64_t get_real_alloc_cnt() { return real_alloc_cnt_; }
 | 
					  OB_INLINE int64_t get_real_alloc_cnt() { return real_alloc_cnt_; }
 | 
				
			||||||
  OB_INLINE int64_t get_real_free_cnt() { return real_free_cnt_; }
 | 
					  OB_INLINE int64_t get_real_free_cnt() { return real_free_cnt_; }
 | 
				
			||||||
@ -55,10 +55,8 @@ public:
 | 
				
			|||||||
  OB_INLINE void increase_alloc_cnt() { ATOMIC_INC(&alloc_cnt_); }
 | 
					  OB_INLINE void increase_alloc_cnt() { ATOMIC_INC(&alloc_cnt_); }
 | 
				
			||||||
  OB_INLINE void increase_free_cnt() { ATOMIC_INC(&free_cnt_); }
 | 
					  OB_INLINE void increase_free_cnt() { ATOMIC_INC(&free_cnt_); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  OB_INLINE void increase_free_queue_cnt() { ATOMIC_INC(&queue_len_); }
 | 
					 | 
				
			||||||
  OB_INLINE void decrease_free_queue_cnt() { ATOMIC_DEC(&queue_len_); }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  int64_t get_total_memory_size() { return size_per_buffer_ * queue_len_; }
 | 
					  int64_t get_total_memory_size() { return size_per_buffer_ * free_queue_.size(); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  int get_max_mem_percent();
 | 
					  int get_max_mem_percent();
 | 
				
			||||||
  void update_max_memory_percent();
 | 
					  void update_max_memory_percent();
 | 
				
			||||||
@ -87,7 +85,6 @@ private:
 | 
				
			|||||||
  // some statistics
 | 
					  // some statistics
 | 
				
			||||||
  int64_t alloc_cnt_;
 | 
					  int64_t alloc_cnt_;
 | 
				
			||||||
  int64_t free_cnt_;
 | 
					  int64_t free_cnt_;
 | 
				
			||||||
  int64_t queue_len_;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  int64_t real_alloc_cnt_;
 | 
					  int64_t real_alloc_cnt_;
 | 
				
			||||||
  int64_t real_free_cnt_;
 | 
					  int64_t real_free_cnt_;
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user