hugepage-rs

hugepage-rs wrapped allocator for linux hugepage.

Usage

HugePage Allocator

Hugepage allocator provides two interfaces for operation, hugepagers::alloc and hugepagers::dealloc, allocate and free hugepage memory.

The hugepagers::alloc() function allocates size bytes and returns a pointer to the allocated memory. *The memory is not initialized*. returns std::ptr::nullmut() if allocation fails, otherwise returns a pointer.

```rust use hugepage_rs;

use std::alloc::Layout; use std::{mem, ptr};

fn main() { let layout = Layout::array::(2048).unwrap(); let dst = hugepage_rs::alloc(layout);

let src = String::from("hello");
let len = src.len();
unsafe {
    ptr::copy_nonoverlapping(src.as_ptr(), dst, len);
    let s = String::from_raw_parts(dst, len, len);
    assert_eq!(s, src);
    mem::forget(s);
}

hugepage_rs::dealloc(dst, layout);

} ```

HugePage Boxed

Simple Box implementation with ownership, data on hugepage allocated memory, released directly after going out of scope, memory allocator using hugepage allocator.

``` use hugepage_rs;

fn main() { let mut v = hugepagers::Box::new(5); *v += 42; asserteq!(*v, 47); } ```

Notes

Reference

Huge pages part 1 (Introduction)

Huge pages part 2: Interfaces

Huge pages part 3: Administration

Huge pages part 4: benchmarking with huge pages

Huge pages part 5: A deeper look at TLBs and costs

https://www.kernel.org/doc/Documentation/vm/hugetlbpage.txt

https://man7.org/linux/man-pages/man2/mmap.2.html