util/HugeAllocator: add SetName()

This commit is contained in:
Max Kellermann 2022-04-26 20:18:07 +02:00
parent 3ae660ca90
commit 7ed67d216b
4 changed files with 41 additions and 3 deletions

View File

@ -1,5 +1,5 @@
/*
* Copyright 2013-2021 Max Kellermann <max.kellermann@gmail.com>
* Copyright 2013-2022 Max Kellermann <max.kellermann@gmail.com>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@ -28,6 +28,7 @@
*/
#include "HugeAllocator.hxx"
#include "system/VmaName.hxx"
#include <new>
@ -82,6 +83,12 @@ HugeFree(void *p, size_t size) noexcept
munmap(p, AlignToPageSize(size));
}
void
HugeSetName(void *p, size_t size, const char *name) noexcept
{
SetVmaName(p, size, name);
}
void
HugeForkCow(void *p, size_t size, bool enable) noexcept
{

View File

@ -1,5 +1,5 @@
/*
* Copyright 2013-2019 Max Kellermann <max.kellermann@gmail.com>
* Copyright 2013-2022 Max Kellermann <max.kellermann@gmail.com>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@ -58,6 +58,14 @@ HugeAllocate(size_t size);
void
HugeFree(void *p, size_t size) noexcept;
/**
* Set a name for the specified virtual memory area.
*
* This feature requires Linux 5.17.
*/
void
HugeSetName(void *p, size_t size, const char *name) noexcept;
/**
* Control whether this allocation is copied to newly forked child
* processes. Disabling that makes forking a little bit cheaper.
@ -88,6 +96,11 @@ HugeFree(void *p, size_t) noexcept
VirtualFree(p, 0, MEM_RELEASE);
}
static inline void
HugeSetName(void *, size_t, const char *) noexcept
{
}
static inline void
HugeForkCow(void *, size_t, bool) noexcept
{
@ -118,6 +131,11 @@ HugeFree(void *_p, size_t) noexcept
delete[] p;
}
static inline void
HugeSetName(void *, size_t, const char *) noexcept
{
}
static inline void
HugeForkCow(void *, size_t, bool) noexcept
{
@ -167,6 +185,11 @@ public:
return *this;
}
void SetName(const char *name) noexcept {
const auto v = buffer.ToVoid();
HugeSetName(v.data, v.size, name);
}
void ForkCow(bool enable) noexcept {
auto v = buffer.ToVoid();
HugeForkCow(v.data, v.size, enable);

View File

@ -1,5 +1,5 @@
/*
* Copyright 2003-2021 The Music Player Daemon Project
* Copyright 2003-2022 The Music Player Daemon Project
* http://www.musicpd.org
*
* This program is free software; you can redistribute it and/or modify
@ -85,6 +85,10 @@ public:
return n_allocated == buffer.size();
}
void SetName(const char *name) noexcept {
buffer.SetName(name);
}
void DiscardMemory() noexcept {
assert(empty());

View File

@ -112,6 +112,10 @@ public:
return map.size();
}
void SetName(const char *name) noexcept {
buffer.SetName(name);
}
struct ReadResult {
size_type undefined_size;
ConstBuffer<T> defined_buffer;