xo-alloc2: work on fomo Arena
This commit is contained in:
parent
19e612dd14
commit
a69158ab32
13 changed files with 507 additions and 8 deletions
82
include/xo/alloc2/DArena.hpp
Normal file
82
include/xo/alloc2/DArena.hpp
Normal file
|
|
@ -0,0 +1,82 @@
|
|||
/** @file DArena.hpp
|
||||
*
|
||||
* @author Roland Conybeare, Dec 2025
|
||||
**/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
|
||||
namespace xo {
|
||||
namespace mm {
|
||||
|
||||
/** ArenaConfig
|
||||
**/
|
||||
struct ArenaConfig {
|
||||
/** optional name, for diagnostics **/
|
||||
std::string name_;
|
||||
/** arena size -- hard max = reserved virtual memory **/
|
||||
std::size_t size_;
|
||||
/** hugepage size -- using huge pages relieves some TLB pressure
|
||||
* (provided you use their full extent :)
|
||||
**/
|
||||
std::size_t hugepage_z_ = 2 * 1024 * 1024;
|
||||
/** true to enable debug logging **/
|
||||
bool debug_flag_ = false;
|
||||
};
|
||||
|
||||
/** Arena allocator state
|
||||
*
|
||||
* <----------------------------size-------------------------->
|
||||
* <------------committed-----------><-------uncommitted------>
|
||||
* <--allocated-->
|
||||
*
|
||||
* XXXXXXXXXXXXXXX___________________..........................
|
||||
*
|
||||
* allocated: in use
|
||||
* committed: physical memory obtained
|
||||
* uncommitted: mapped in virtual memory, not backed by memory
|
||||
**/
|
||||
struct DArena {
|
||||
/** [lo, hi) already-mapped address range **/
|
||||
DArena(const ArenaConfig & cfg,
|
||||
std::byte * lo,
|
||||
std::byte * hi);
|
||||
|
||||
~DArena();
|
||||
|
||||
ArenaConfig config_;
|
||||
|
||||
/** size of a VM page (via getpagesize()). Likely 4k **/
|
||||
std::size_t page_z_ = 0;
|
||||
|
||||
/** arena owns memory in range [@ref lo_, @ref hi_)
|
||||
**/
|
||||
std::byte * lo_ = nullptr;
|
||||
|
||||
/** prefix of this size is committed.
|
||||
* Remainder mapped but uncommitted.
|
||||
**/
|
||||
std::size_t committed_z_ = 0;
|
||||
|
||||
/** free pointer.
|
||||
* Memory in range [@ref lo_, @ref free_) current in use
|
||||
**/
|
||||
std::byte * free_ = nullptr;
|
||||
|
||||
/** soft limit; end of committed virtual memory
|
||||
* Memory in range [@ref lo_, @ref limit_) is committed
|
||||
* (backed by physical memory)
|
||||
**/
|
||||
std::byte * limit_ = nullptr;
|
||||
|
||||
/** hard limit; end of reserved virtual memory
|
||||
* Memory in range [@ref limit_, @ref hi_) is uncommitted
|
||||
**/
|
||||
std::byte * hi_ = nullptr;
|
||||
};
|
||||
|
||||
} /*namespace mm*/
|
||||
} /*namespace xo*/
|
||||
|
||||
/* end DArena.hpp */
|
||||
Loading…
Add table
Add a link
Reference in a new issue