]> git.proxmox.com Git - ceph.git/blob - ceph/src/rocksdb/db/malloc_stats.cc
update source to Ceph Pacific 16.2.2
[ceph.git] / ceph / src / rocksdb / db / malloc_stats.cc
1 // Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
2 // This source code is licensed under both the GPLv2 (found in the
3 // COPYING file in the root directory) and Apache 2.0 License
4 // (found in the LICENSE.Apache file in the root directory).
5 //
6 // Copyright (c) 2011 The LevelDB Authors. All rights reserved.
7 // Use of this source code is governed by a BSD-style license that can be
8 // found in the LICENSE file. See the AUTHORS file for names of contributors.
9
10 #include "db/malloc_stats.h"
11
12 #ifndef ROCKSDB_LITE
13 #include <memory>
14 #include <string.h>
15
16 #include "port/jemalloc_helper.h"
17
18 namespace ROCKSDB_NAMESPACE {
19
20 #ifdef ROCKSDB_JEMALLOC
21
22 typedef struct {
23 char* cur;
24 char* end;
25 } MallocStatus;
26
27 static void GetJemallocStatus(void* mstat_arg, const char* status) {
28 MallocStatus* mstat = reinterpret_cast<MallocStatus*>(mstat_arg);
29 size_t status_len = status ? strlen(status) : 0;
30 size_t buf_size = (size_t)(mstat->end - mstat->cur);
31 if (!status_len || status_len > buf_size) {
32 return;
33 }
34
35 snprintf(mstat->cur, buf_size, "%s", status);
36 mstat->cur += status_len;
37 }
38 void DumpMallocStats(std::string* stats) {
39 if (!HasJemalloc()) {
40 return;
41 }
42 MallocStatus mstat;
43 const unsigned int kMallocStatusLen = 1000000;
44 std::unique_ptr<char[]> buf{new char[kMallocStatusLen + 1]};
45 mstat.cur = buf.get();
46 mstat.end = buf.get() + kMallocStatusLen;
47 malloc_stats_print(GetJemallocStatus, &mstat, "");
48 stats->append(buf.get());
49 }
50 #else
51 void DumpMallocStats(std::string*) {}
52 #endif // ROCKSDB_JEMALLOC
53 } // namespace ROCKSDB_NAMESPACE
54 #endif // !ROCKSDB_LITE