#memory #page #ram #prefetch #memory-block #operating-system #madvise

无需std memadvise

向操作系统建议内存使用情况

2个版本

使用旧的Rust 2015

0.1.2 2017年10月12日
0.1.1 2017年10月10日

#713 in 操作系统

Download history 23/week @ 2024-03-11 22/week @ 2024-03-18 31/week @ 2024-03-25 73/week @ 2024-04-01 14/week @ 2024-04-08 23/week @ 2024-04-15 19/week @ 2024-04-22 15/week @ 2024-04-29 16/week @ 2024-05-06 19/week @ 2024-05-13 26/week @ 2024-05-20 152/week @ 2024-05-27 64/week @ 2024-06-03 141/week @ 2024-06-10 40/week @ 2024-06-17 23/week @ 2024-06-24

每月269次下载
用于 8 个crate(3 个直接使用)

MIT/Apache

25KB
465

文档

Linux Status Build status

简介

memadvise 是一个Rust库,可以向操作系统提供有关内存访问模式的提示。例如,如果用户使用 memadvise::advise() 并传入 Advice::Sequential,则内核可能会从传入的内存块开始将内存页面移入RAM(如果它们在磁盘上)。

示例

extern crate memadvise;
extern crate page_size;

fn main() {
    // Allocate block of memory in a system specific manner.

    // Get portion of memory block (must be aligned to system page size).
    let address: *mut () = ...
    let length = 320000;
    
    // Tell the OS to start loading this portion into RAM starting at the beginning.
    memadvise::advise(address, length, Advice::Sequential).unwrap();
    
    // Do something with this portion of memory
    
    // Tell the OS we do not need this portion right now.
    // That way, the OS can safely swap it out to disk.
    memadvise::advise(address, length, Advice::DontNeed).unwrap();
    
    // Do some other stuff.
    
    // Be sure to free block of memory (system specific) at the end.
}

建议

memadvise 提供了五种不同的 '提示',用于告知系统程序将如何使用特定范围的内存。

  • Normal - 没有特殊用法

  • Random - 将使用范围,但顺序不确定;操作系统不应过多地读取前

  • WillNeed - 将使用范围;操作系统应比 Random 更多地预读

  • Sequential - 将按顺序使用范围;操作系统应比 WillNeed 更多地预读

  • DontNeed - 现在不会使用范围;操作系统可以将其交换到磁盘

平台

memadvise 应该在Windows和任何POSIX兼容系统(Linux、Mac OSX等)上运行。

memadvise 在以下系统上持续进行测试

  • x86_64-unknown-linux-gnu (Linux)
  • i686-unknown-linux-gnu
  • x86_64-unknown-linux-musl (Linux w/ MUSL)
  • i686-unknown-linux-musl
  • x86_64-apple-darwin (Mac OSX)
  • i686-apple-darwin
  • x86_64-pc-windows-msvc (Windows)
  • i686-pc-windows-msvc
  • x86_64-pc-windows-gnu
  • i686-pc-windows-gnu

memadvise 持续交叉编译为

  • arm-unknown-linux-gnueabihf
  • aarch64-unknown-linux-gnu
  • mips-unknown-linux-gnu
  • aarch64-unknown-linux-musl
  • i686-linux-android
  • x86_64-linux-android
  • arm-linux-androideabi
  • aarch64-linux-android
  • i386-apple-ios
  • x86_64-apple-ios
  • i686-unknown-freebsd
  • x86_64-unknown-freebsd
  • x86_64-unknown-netbsd
  • asmjs-unknown-emscripten

依赖

~10–265KB