10 个版本

0.6.0+5.3.0-1-ge13ca993e8…2024年7月14日
0.5.4+5.3.0-patched2023年7月27日
0.5.3+5.3.0-patched2023年2月6日
0.5.2+5.3.0-patched2022年9月29日
0.4.0+5.2.1 2020年7月21日

#38内存管理

Download history 199870/week @ 2024-04-25 199949/week @ 2024-05-02 204834/week @ 2024-05-09 203383/week @ 2024-05-16 218293/week @ 2024-05-23 246361/week @ 2024-05-30 228923/week @ 2024-06-06 233093/week @ 2024-06-13 218881/week @ 2024-06-20 254477/week @ 2024-06-27 230248/week @ 2024-07-04 255077/week @ 2024-07-11 252705/week @ 2024-07-18 252010/week @ 2024-07-25 254197/week @ 2024-08-01 230164/week @ 2024-08-08

1,040,853 每月下载量
用于 227 个 Crates (15 个直接使用)

MIT/Apache

2MB
51K SLoC

C 47K SLoC // 0.1% comments Visual Studio Project 1.5K SLoC M4 659 SLoC // 0.1% comments Rust 615 SLoC // 0.1% comments Shell 381 SLoC // 0.3% comments C++ 372 SLoC // 0.1% comments Python 262 SLoC // 0.3% comments Visual Studio Solution 126 SLoC XSL 10 SLoC

包含 (自动工具混淆代码,420KB) configure/configure,(模糊 autoconf 代码,84KB) jemalloc/configure.ac

jemalloc-sys - Rust 对 C 库 jemalloc 的绑定

Travis-CI Status Latest Version docs

注意:Rust 分配器 API 在 tikv-jemallocator Crates 中实现了 jemalloc

文档

jemalloc 是一个通用内存分配器,其文档可在以下位置找到

API 文档

当前 jemalloc 版本: 5.2.1.

平台支持

请参阅 tikv-jemallocator Crates 的平台支持。

特性

大多数特性对应于 jemalloc 特性 - 参考 jemalloc/INSTALL.md

Cargo 特性

此 Crates 提供以下 cargo 特性标志

  • profiling (通过 --enable-prof 配置 jemalloc):启用堆分析功能和泄漏检测功能。有关使用详情,请参阅 jemalloc 的 "opt.prof" 选项文档。启用时,有几种回溯方法,配置脚本将选择以下列表中首先似乎可以正常工作的一种

    • libunwind(需要 --enable-prof-libunwind)
    • libgcc(除非禁用 --disable-prof-libgcc)
    • gcc intrinsics(除非禁用 --disable-prof-gcc)
  • stats(使用 jemalloc--enable-stats 配置):启用统计收集功能。有关使用详情,请参阅 jemalloc 的 "opt.stats_print" 选项文档。

  • debug(使用 jemalloc--enable-debug 配置):启用断言和验证代码。这会显著影响性能,但在应用程序开发期间非常有用。

  • background_threads_runtime_support(默认启用):当在 jemalloc 支持的一些 POSIX 目标上构建 jemalloc-sys 时启用后台线程运行时支持。默认情况下,在运行时禁用后台线程。此选项允许在运行时动态启用它们。

  • background_threads(默认禁用):在运行时默认启用后台线程。当设置为 true 时,将在需要时创建后台线程(后台线程的数量不会超过 CPU 或活动区域的数量)。线程定期运行,并异步处理清理。关闭时,后台线程将同步终止。请注意,在 fork(2) 函数后,子进程的状态将禁用,而不管父进程的状态如何。有关相关统计信息,请参阅 stats.background_thread。可以使用 opt.background_thread 来设置默认选项。后台线程仅在选定的基于 pthread 的平台上可用。

  • unprefixed_malloc_on_supported_platforms:当禁用时,使用 --with-jemalloc-prefix=_rjem_ 配置 jemalloc。启用此选项会导致像 malloc 这样的符号在没有任何前缀的情况下发出,覆盖了由 libc 定义的符号。这通常会导致同一程序中链接的 C 和 C++ 代码也使用 jemalloc。在某些平台上,由于去前缀会导致段错误,因此始终使用前缀。

  • disable_initial_exec_tls(默认禁用):当启用时,jemalloc 使用 --disable-initial-exec-tls 选项进行构建。它禁用了 jemalloc 内部线程局部存储的初始-exec TLS 模型(在支持显式设置的平台上)。这可以允许 jemalloc 在程序启动后动态加载(例如使用 dlopen)。如果您遇到错误 yourlib.so: cannot allocate memory in static TLS block,您可能希望启用此选项。

  • disable_cache_oblivious(默认禁用):当启用时,jemalloc 使用 --disable-cache-oblivious 选项进行构建。在这种情况下,所有大分配都将作为实现原语进行页面对齐。这可能会严重损害 CPU 缓存利用率。然而,缓存无关布局的成本是每个大分配额外一个页面,这可能对某些应用程序来说不可行。

环境变量

jemalloc 的选项值通过环境变量传递,使用以下模式 JEMALLOC_SYS_{KEY}=VALUE,其中 KEY 名称对应于 ./configure 选项的 jemalloc,单词首字母大写,连字符 - 被下划线 _ 替换(见 jemalloc/INSTALL.md

  • JEMALLOC_SYS_WITH_MALLOC_CONF=<malloc_conf>:将 <malloc_conf> 作为运行时选项字符串嵌入,在 malloc_conf 全局变量、/etc/malloc.conf 符号链接和 MALLOC_CONF 环境变量之前处理(注意:此变量可能以 _RJEM_MALLOC_CONF 为前缀)。例如,要将脏页的默认衰减时间更改为 30 秒

    JEMALLOC_SYS_WITH_MALLOC_CONF=dirty_decay_ms:30000
    
  • JEMALLOC_SYS_WITH_LG_PAGE=<lg-page>:指定分配器页面大小的 2 的对数,这必须至少与系统页面大小一样大。默认情况下,配置脚本确定主机的页面大小,并将分配器页面大小设置为与系统页面大小相同,因此不需要指定此选项,除非系统页面大小可能在配置和执行之间更改,例如交叉编译。

  • JEMALLOC_SYS_WITH_LG_HUGEPAGE=<lg-hugepage>:指定系统大页面大小的 2 的对数。此选项在交叉编译或覆盖不支持大页面的系统的默认值时很有用。

  • JEMALLOC_SYS_WITH_LG_QUANTUM=<lg-quantum>:指定最小分配对齐的 2 的对数。jemalloc 需要知道满足以下 C 标准要求的最低对齐(摘自 2011 年 4 月 12 日 C11 标准草案)

    如果分配成功,返回的指针适当地对齐,以便可以将其分配给任何基本对齐要求的对象类型的指针,然后用于访问分配空间中的此类对象或此类对象的数组 [...]

    此设置与体系结构相关,尽管jemalloc为最常用的现代体系结构提供了已知的安全值,但与GNU libc (glibc)相关的一个问题可能会影响您的选择。在大多数现代体系结构上,这要求16字节对齐(即4字节),但glibc的开发者出于性能原因选择不满足这一要求。有关旧讨论,请参阅https://sourceware.org/bugzilla/show_bug.cgi?id=206。与glibc不同,jemalloc默认遵循C标准(注意:jemalloc在小于量子的大小类上技术上会作弊),但Linux系统已经绕过了这种分配器不兼容的问题,因此在实践中让jemalloc的最小对齐遵循glibc的引导通常是安全的。如果在配置期间指定了JEMALLOC_SYS_WITH_LG_QUANTUM=3,jemalloc将提供不是16字节对齐的额外大小类(24、40和56)。

  • JEMALLOC_SYS_WITH_LG_VADDR=<lg-vaddr>:指定有效虚拟地址位数。默认情况下,配置脚本会尝试检测已知如何检测虚拟地址大小的平台,并在其他情况下选择默认值。此选项在交叉编译时可能很有用。

许可证

本项目许可为以下之一:

任选其一。

贡献

除非您明确声明,否则您提交给tikv-jemalloc-sys的任何贡献,根据Apache-2.0许可证定义,应双许可如上所述,不附加任何额外条款或条件。

依赖项