Auto merge of #83152 - guswynn:jemallocator_part2, r=Mark-Simulacrum
Use tikv-jemallocator in rustc/rustdoc in addition to jemalloc-sys when enabled. In https://github.com/rust-lang/rust/pull/81782 it was mentioned that one reason rustc may benefit from minimalloc is it doesn't use the `sdallocx` api from jemalloc. Currently, on unix, rust uses jemalloc by importing its symbols to use them with the default, System (libc) global allocator. This PR switches its global alloc to `tikv-jemallocator`, which correctly uses sized deallocation (https://docs.rs/tikv-jemallocator/0.4.1/src/tikv_jemallocator/lib.rs.html#121-126). `tikv-jemallocator`, as far as I can tell, is a more up-to-date set of bindings to jemalloc than `jemallocator` The perf results of this pr are in large part due to the version upgrade of jemalloc, but sized deallocation has a non-trivial improvement, particularly to rustdoc. This pr also includes changes to bootstrap to correctly pass the jemalloc feature through to the rustdoc build
This commit is contained in:
commit
d322385321
7 changed files with 107 additions and 17 deletions
|
|
@ -11,12 +11,16 @@ rustc_driver = { path = "../rustc_driver" }
|
|||
# crate is intended to be used by codegen backends, which may not be in-tree.
|
||||
rustc_codegen_ssa = { path = "../rustc_codegen_ssa" }
|
||||
|
||||
[dependencies.jemalloc-sys]
|
||||
version = '0.3.0'
|
||||
[dependencies.tikv-jemalloc-sys]
|
||||
version = '0.4.0'
|
||||
optional = true
|
||||
features = ['unprefixed_malloc_on_supported_platforms']
|
||||
|
||||
[dependencies.tikv-jemallocator]
|
||||
version = '0.4.0'
|
||||
optional = true
|
||||
|
||||
[features]
|
||||
jemalloc = ['jemalloc-sys']
|
||||
jemalloc = ['tikv-jemalloc-sys', 'tikv-jemallocator']
|
||||
llvm = ['rustc_driver/llvm']
|
||||
max_level_info = ['rustc_driver/max_level_info']
|
||||
|
|
|
|||
|
|
@ -1,3 +1,16 @@
|
|||
// Configure jemalloc as the `global_allocator` when configured. This is
|
||||
// so that we use the sized deallocation apis jemalloc provides
|
||||
// (namely `sdallocx`).
|
||||
//
|
||||
// The symbol overrides documented below are also performed so that we can
|
||||
// ensure that we use a consistent allocator across the rustc <-> llvm boundary
|
||||
#[cfg(feature = "jemalloc")]
|
||||
#[global_allocator]
|
||||
static ALLOC: tikv_jemallocator::Jemalloc = tikv_jemallocator::Jemalloc;
|
||||
|
||||
#[cfg(feature = "tikv-jemalloc-sys")]
|
||||
use tikv_jemalloc_sys as jemalloc_sys;
|
||||
|
||||
fn main() {
|
||||
// Pull in jemalloc when enabled.
|
||||
//
|
||||
|
|
@ -7,7 +20,7 @@ fn main() {
|
|||
// dynamic libraries. That means to pull in jemalloc we actually need to
|
||||
// reference allocation symbols one way or another (as this file is the only
|
||||
// object code in the rustc executable).
|
||||
#[cfg(feature = "jemalloc-sys")]
|
||||
#[cfg(feature = "tikv-jemalloc-sys")]
|
||||
{
|
||||
use std::os::raw::{c_int, c_void};
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue