1 个不稳定版本

0.1.0 2023年9月5日

#450内存管理

MIT/Apache

11KB
190

hugepage-rs

hugepage-rs是Linux大页的封装分配器。

用法

大页分配器

大页分配器提供了两种操作接口,hugepage_rs::allochugepage_rs::dealloc,用于分配和释放大页内存。

hugepage_rs::alloc() 函数分配指定大小的字节并返回分配内存的指针。内存不会被初始化。如果分配失败则返回 std::ptr::null_mut(),否则返回指针。

use hugepage_rs;

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

fn main() {
    let layout = Layout::array::<char>(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);
}

大页封装

简单的封装实现,拥有所有权,数据位于大页分配的内存上,超出作用域后直接释放,使用大页分配器作为内存分配器。

use hugepage_rs;

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

注意

  • 系统需要启用大页。

参考

大页第1部分(简介)

大页第2部分:接口

大页第3部分:管理

大页第4部分:使用大页进行基准测试

大页第5部分:深入探讨TLBs和成本

https://linuxkernel.org.cn/doc/Documentation/vm/hugetlbpage.txt

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

依赖

~52KB