mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-26 09:32:01 +00:00
Revert "dbms: using huge pages everywhere (experimental) [#METR-2944]."
This reverts commit a127a866704f95ef31684ef042d0765f7202677a.
This commit is contained in:
parent
f68478b638
commit
3d2a766964
@ -21,6 +21,7 @@ private:
|
||||
/** См. комментарий в HashTableAllocator.h
|
||||
*/
|
||||
static constexpr size_t MMAP_THRESHOLD = 64 * (1 << 20);
|
||||
static constexpr size_t HUGE_PAGE_SIZE = 2 * (1 << 20);
|
||||
static constexpr size_t MMAP_MIN_ALIGNMENT = 4096;
|
||||
static constexpr size_t MALLOC_MIN_ALIGNMENT = 8;
|
||||
|
||||
@ -41,6 +42,10 @@ public:
|
||||
buf = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
|
||||
if (MAP_FAILED == buf)
|
||||
DB::throwFromErrno("Allocator: Cannot mmap.", DB::ErrorCodes::CANNOT_ALLOCATE_MEMORY);
|
||||
|
||||
/// См. комментарий в HashTableAllocator.h
|
||||
if (size >= HUGE_PAGE_SIZE && 0 != madvise(buf, size, MADV_HUGEPAGE))
|
||||
DB::throwFromErrno("HashTableAllocator: Cannot madvise with MADV_HUGEPAGE.", DB::ErrorCodes::CANNOT_ALLOCATE_MEMORY);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -36,6 +36,7 @@ private:
|
||||
* PS. Также это требуется, потому что tcmalloc не может выделить кусок памяти больше 16 GB.
|
||||
*/
|
||||
static constexpr size_t MMAP_THRESHOLD = 64 * (1 << 20);
|
||||
static constexpr size_t HUGE_PAGE_SIZE = 2 * (1 << 20);
|
||||
|
||||
public:
|
||||
/// Выделить кусок памяти и заполнить его нулями.
|
||||
@ -52,6 +53,14 @@ public:
|
||||
if (MAP_FAILED == buf)
|
||||
DB::throwFromErrno("HashTableAllocator: Cannot mmap.", DB::ErrorCodes::CANNOT_ALLOCATE_MEMORY);
|
||||
|
||||
/** Использование huge pages позволяет увеличить производительность более чем в три раза
|
||||
* в запросе SELECT number % 1000000 AS k, count() FROM system.numbers GROUP BY k,
|
||||
* (хэш-таблица на 1 000 000 элементов)
|
||||
* и примерно на 15% в случае хэш-таблицы на 100 000 000 элементов.
|
||||
*/
|
||||
if (size >= HUGE_PAGE_SIZE && 0 != madvise(buf, size, MADV_HUGEPAGE))
|
||||
DB::throwFromErrno("HashTableAllocator: Cannot madvise with MADV_HUGEPAGE.", DB::ErrorCodes::CANNOT_ALLOCATE_MEMORY);
|
||||
|
||||
/// Заполнение нулями не нужно - mmap сам это делает.
|
||||
}
|
||||
else
|
||||
@ -108,6 +117,10 @@ public:
|
||||
if (MAP_FAILED == buf)
|
||||
DB::throwFromErrno("HashTableAllocator: Cannot mremap.", DB::ErrorCodes::CANNOT_MREMAP);
|
||||
|
||||
/** Здесь не получается сделать madvise с MADV_HUGEPAGE.
|
||||
* Похоже, что при mremap, huge pages сами расширяются на новую область.
|
||||
*/
|
||||
|
||||
/// Заполнение нулями не нужно.
|
||||
}
|
||||
else
|
||||
|
@ -44,8 +44,6 @@
|
||||
|
||||
#include <zkutil/ZooKeeper.h>
|
||||
|
||||
#include <gperftools/malloc_hook.h>
|
||||
|
||||
#include "Server.h"
|
||||
#include "HTTPHandler.h"
|
||||
#include "InterserverIOHTTPHandler.h"
|
||||
@ -426,23 +424,6 @@ int Server::main(const std::vector<std::string> & args)
|
||||
{
|
||||
Logger * log = &logger();
|
||||
|
||||
/** Использование huge pages позволяет увеличить производительность более чем в три раза
|
||||
* в запросе SELECT number % 1000000 AS k, count() FROM system.numbers GROUP BY k,
|
||||
* (хэш-таблица на 1 000 000 элементов)
|
||||
* и примерно на 15% в случае хэш-таблицы на 100 000 000 элементов.
|
||||
*/
|
||||
if (!MallocHook::AddMmapHook([](const void * result, const void * start, size_t size, int protection, int flags, int fd, off_t offset)
|
||||
{
|
||||
const auto HUGE_PAGE_SIZE = 1 << 21;
|
||||
|
||||
if (result != MAP_FAILED
|
||||
&& size >= HUGE_PAGE_SIZE
|
||||
&& (flags & MAP_PRIVATE)
|
||||
&& (flags & MAP_ANONYMOUS))
|
||||
(void)madvise(const_cast<void *>(result), size, MADV_HUGEPAGE);
|
||||
}))
|
||||
LOG_WARNING(log, "Cannot set mmap hook.");
|
||||
|
||||
std::string path = config().getString("path");
|
||||
Poco::trimInPlace(path);
|
||||
if (path.empty())
|
||||
|
Loading…
Reference in New Issue
Block a user