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