Hi,

With https://github.com/mozilla/servo/pull/2803 applied, the -m option
now gives some measurements from jemalloc. Here's example output after
starting up and viewing about:mozilla on my Linux box.

_category_      : _size (MiB)_
vsize           :      1414.54
resident        :        88.50
heap-allocated  :         8.53
heap-active     :         8.76
heap-mapped     :        80.00

The heap-mapped number isn't so important -- it appears to map a big
chunk but not actually touch most of it, so it's only using address
space. The heap-allocated and heap-active numbers are more important,
and indicate that the jemalloc heap -- which is used by the Rust code
-- is small.

So there must be a decent chunk of memory being used by third-party
libraries, which don't (AFAIK) use jemalloc, but instead use the
system malloc. I ran Massif (a Valgrind-based memory profiler) to
measure this usage, and I've attached the results. In short, there's
about 30 MiB in the profile, and over 2% of it is the GL driver
allocating memory for GL contexts under glfwCreateWindow(). It's hard
to get good measurements of these allocations without invasive
instrumentation techniques, alas. (I've hit exactly the same issue
recently with Firefox, sigh:
https://blog.mozilla.org/nnethercote/2014/07/07/measuring-memory-used-by-third-party-code/)

There is also some Servo stuff in that output: some font stuff and
some SleeperThread stuff. I wasn't expecting these in this output,
since they are jemalloc allocations that Massif shouldn't be able to
see, but it turns out that jemalloc has some Valgrind annotations that
tell Massif about the allocations. So this profile is actually a mix
of jemalloc and the system malloc. I'm not sure how good the
annotations are, and thus whether the jemalloc heap coverage is
complete or not.

That still leaves a decent chunk of the 88.5 MiB of resident
unaccounted for. So I did some grovelling through /proc/<pid>/smaps.
As well as the expected stuff (various sizeable anonymous mmaps, and
various libraries, most of which were shared with multiple other
processes), here were the most notable measurements:

- /home/njn/moz/servo/build/servo 6260 kB
- [stack:28150] 1136 kB
- [stack:28145] 6144 kB
- [stack:28144] 2048 kB
- [stack:28141] 8192 kB
- [stack:28139] 7944 kB
- [stack:28136] 5120 kB

The |servo| process isn't surprising, but those are some big stacks.
Much bigger than I'm used to seeing with C or C++ programs. (There
were a few more stacks in the 100s of kBs that I didn't bother
listing.)

So, overall, of that 88.5 MiB resident, the rough breakdown is this:

- jemalloc (Rust) heap: 9 MiB
- gl driver: 23 MiB
- stacks: 32 MiB
- servo executable: 6 MiB
- various libs: ~5 MiB
- not sure: ~12 MiB

Does Rust have any stack-measuring capabilities?

Nick
49.60% (15,745,040B)
- 0x12E135E1: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
- 0x12F6F938: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
- 0x12F0B302: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
- 0x6CA2903: ??? (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
- 0x6C7AA40: ??? (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
- 0x10D569D: _glfwCreateContext (in /home/njn/moz/servo/build/servo)
- 0x10DBD1B: _glfwPlatformCreateWindow (in /home/njn/moz/servo/build/servo)
- 0x10D37AC: glfwCreateWindow (in /home/njn/moz/servo/build/servo)

08.58% (2,722,848B)
- 0x12D471F4: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
- 0x12E03086: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
- 0x12E556F6: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
- 0x12F6F96B: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
- 0x12F0B302: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
- 0x6CA2903: ??? (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
- 0x6C7AA40: ??? (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
- 0x10D569D: _glfwCreateContext (in /home/njn/moz/servo/build/servo)
- 0x10DBD1B: _glfwPlatformCreateWindow (in /home/njn/moz/servo/build/servo)
- 0x10D37AC: glfwCreateWindow (in /home/njn/moz/servo/build/servo)

06.75% (2,144,284B)
- in 489 places, all below massif's threshold (01.00%)

05.94% (1,884,729B)
- 0x12F0975C: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
- 0x12E7D63B: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
- 0x12F9D36A: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
- 0x12F9D7DC: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
- 0x12F7010E: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
- 0x12F0B302: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
- 0x6CA2903: ??? (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
- 0x6C7AA40: ??? (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
- 0x10D569D: _glfwCreateContext (in /home/njn/moz/servo/build/servo)
- 0x10DBD1B: _glfwPlatformCreateWindow (in /home/njn/moz/servo/build/servo)
- 0x10D37AC: glfwCreateWindow (in /home/njn/moz/servo/build/servo)

03.30% (1,048,576B)
- 0xC5B099: je_rallocx (in /home/njn/moz/servo/build/servo)
- 0x6B3039: vec::alloc_or_realloc::h4267839032461918982::v0.1 (in 
/home/njn/moz/servo/build/servo)
- 0x6B529F: vec::Vec$LT$T$GT$::reserve_additional::h10349952780522981714::v0.1 
(in /home/njn/moz/servo/build/servo)
- 0x6EB581: 
platform::linux::font_template::FontTemplateData::new::h29f387fd3f8e3a0evZd::v0.1
 (font_template.rs:20)
- 0x6EA84C: font_template::FontTemplate::get_data::h62c85d86b94b1ccfMUc::v0.1 
(font_template.rs:109)
- 0x6D175B: 
font_template::FontTemplate::get_if_matches::hef2ed533c1f33c01YSc::v0.1 
(font_template.rs:71)
- 0x6DEA1B: 
font_cache_task::FontCache::find_font_in_family::h461f2010ae231f86nHc::v0.1 
(font_cache_task.rs:37)
- 0x6D433A: font_cache_task::FontCache::run::h1da188efbb2bedd2hFc::v0.1 
(font_cache_task.rs:140)
- 0x6E15F6: font_cache_task::FontCacheTask::new::closure.12212 
(font_cache_task.rs:185)
- 0xA7E24A: task::bootstrap_green_task::closure.6085 (in 
/home/njn/moz/servo/build/servo)
- 0xC4E231: task::Task::run::closure.5322 (in /home/njn/moz/servo/build/servo)
- 0xC5247A: rust_try (in /home/njn/moz/servo/build/servo)
- 0xC50C94: unwind::try::h79ee904cb5c2eb07fGd::v0.11.0.pre (in 
/home/njn/moz/servo/build/servo)
- 0xC4E0E3: task::Task::run::h666877d2deaedfddVVc::v0.11.0.pre (in 
/home/njn/moz/servo/build/servo)
- 0xA7E05E: task::bootstrap_green_task::h2cbecad89f091f54c8b::v0.11.0.pre (in 
/home/njn/moz/servo/build/servo)

02.22% (704,248B)
- 0x12F0952F: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
- 0x12E7D5C4: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
- 0x12E7D758: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
- 0x12F9D45F: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
- 0x12F9D7DC: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
- 0x12F7010E: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
- 0x12F0B302: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
- 0x6CA2903: ??? (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
- 0x6C7AA40: ??? (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
- 0x10D569D: _glfwCreateContext (in /home/njn/moz/servo/build/servo)
- 0x10DBD1B: _glfwPlatformCreateWindow (in /home/njn/moz/servo/build/servo)
- 0x10D37AC: glfwCreateWindow (in /home/njn/moz/servo/build/servo)

01.42% (451,944B)
- 0x12F6F65D: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
- 0x12F0B302: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
- 0x6CA2903: ??? (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
- 0x6C7AA40: ??? (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
- 0x10D569D: _glfwCreateContext (in /home/njn/moz/servo/build/servo)
- 0x10DBD1B: _glfwPlatformCreateWindow (in /home/njn/moz/servo/build/servo)
- 0x10D37AC: glfwCreateWindow (in /home/njn/moz/servo/build/servo)

01.41% (447,161B)
- 0x12F09700: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
- 0x12F0975C: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
- 0x12E7D63B: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
- 0x12F9D36A: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
- 0x12F7010E: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
- 0x12F0B302: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
- 0x6CA2903: ??? (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
- 0x6C7AA40: ??? (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
- 0x10D569D: _glfwCreateContext (in /home/njn/moz/servo/build/servo)
- 0x10DBD1B: _glfwPlatformCreateWindow (in /home/njn/moz/servo/build/servo)
- 0x10D37AC: glfwCreateWindow (in /home/njn/moz/servo/build/servo)

01.24% (393,216B)
- 0xC5A2D2: je_mallocx (in /home/njn/moz/servo/build/servo)
- 0xA7CA3B: sleeper_list::SleeperList::new::h828a470719846dc59Vb::v0.11.0.pre 
(in /home/njn/moz/servo/build/servo)
- 0xA814BC: SchedPool::new::h1bc0d91dd07be3eatDc::v0.11.0.pre (in 
/home/njn/moz/servo/build/servo)
- 0x414DA9: run::h718e4b059b8a5dc8dba::v0.0 (servo.rs:99)
- 0x414AA1: start::closure.3215 (servo.rs:67)
- 0xC00345: start::closure.7243 (in /home/njn/moz/servo/build/servo)
- 0xC4E231: task::Task::run::closure.5322 (in /home/njn/moz/servo/build/servo)
- 0xC5247A: rust_try (in /home/njn/moz/servo/build/servo)
- 0xC50C94: unwind::try::h79ee904cb5c2eb07fGd::v0.11.0.pre (in 
/home/njn/moz/servo/build/servo)
- 0xC4E0E3: task::Task::run::h666877d2deaedfddVVc::v0.11.0.pre (in 
/home/njn/moz/servo/build/servo)
- 0xC00116: start::h0e60eb240e706e9dFme::v0.11.0.pre (in 
/home/njn/moz/servo/build/servo)
- 0x414837: main (servo.rs:66)

01.22% (387,712B)
- 0x12D471BF: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
- 0x12DB681E: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
- 0x12DF92F3: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
- 0x12DEC749: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
- 0x12DEC25A: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
- 0x12F6F952: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
- 0x12F0B302: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
- 0x6CA2903: ??? (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
- 0x6C7AA40: ??? (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
- 0x10D569D: _glfwCreateContext (in /home/njn/moz/servo/build/servo)
- 0x10DBD1B: _glfwPlatformCreateWindow (in /home/njn/moz/servo/build/servo)
- 0x10D37AC: glfwCreateWindow (in /home/njn/moz/servo/build/servo)

01.22% (387,712B)
- 0x12D471BF: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
- 0x12DB681E: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
- 0x12DF99E3: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
- 0x12DEC749: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
- 0x12DEC25A: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
- 0x12F6F952: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
- 0x12F0B302: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
- 0x6CA2903: ??? (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
- 0x6C7AA40: ??? (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
- 0x10D569D: _glfwCreateContext (in /home/njn/moz/servo/build/servo)
- 0x10DBD1B: _glfwPlatformCreateWindow (in /home/njn/moz/servo/build/servo)
- 0x10D37AC: glfwCreateWindow (in /home/njn/moz/servo/build/servo)

01.02% (323,320B)
- 0x12F0952F: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
- 0x12E7D5C4: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
- 0x12E7D758: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
- 0x12F9D45F: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
- 0x12F7010E: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
- 0x12F0B302: ??? (in /usr/lib/x86_64-linux-gnu/dri/i965_dri.so)
- 0x6CA2903: ??? (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
- 0x6C7AA40: ??? (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
- 0x10D569D: _glfwCreateContext (in /home/njn/moz/servo/build/servo)
- 0x10DBD1B: _glfwPlatformCreateWindow (in /home/njn/moz/servo/build/servo)
- 0x10D37AC: glfwCreateWindow (in /home/njn/moz/servo/build/servo)

_______________________________________________
dev-servo mailing list
dev-servo@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-servo

Reply via email to