1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
/*
* Copyright (c) 2025-2026 Anton Kundenko <singaraiona@gmail.com>
* All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
/* --------------------------------------------------------------------------
* System-level mmap allocator for infrastructure that can't use the buddy
* allocator (cross-thread lifetime, bootstrap, global state).
*
* Every allocation is tracked. ray_mem_stats() reports the totals so users
* can see the full memory footprint.
*
* Each allocation prepends a 32-byte header (stores mmap size + user size),
* so ray_sys_free() needs no size argument.
* -------------------------------------------------------------------------- */
void* ;
void* ;
void ;
char* ;
/* --------------------------------------------------------------------------
* Global memory accounting. Two counters give the true runtime picture:
*
* - "current" (g_sys_current) — COMMITTED RAM: every anonymous read/write
* mapping (buddy pools, sys allocations, the swap-fallback pool). This is
* what actually consumes physical memory. Progress bar / budget use it.
* - "mapped" (g_sys_mapped) — FILE-BACKED bytes mapped (columns, symbol
* file, CSV parse buffers). Page-cache, evictable, RAM only on touch —
* kept separate so a read-once 100 GB column can't masquerade as live RAM.
*
* The low-level VM wrappers (ray_vm_alloc / _aligned / _free / _map_file /
* _unmap_file) and the one raw-mmap site (heap swap fallback) call these so
* every mapping is counted exactly once. Bytes are the mapped length; add and
* sub must balance (same length in as out).
* -------------------------------------------------------------------------- */
void ; /* committed RAM + */
void ; /* committed RAM - */
void ; /* mapped file + */
void ; /* mapped file - */
/* Read current sys allocator counters (called by ray_mem_stats in arena.c) */
void ;
/* Read the file-mapping counters. */
void ;
/* RAY_MEM_SYS_H */