Hi everyone, For the past few months I've been working on code for profiling the FreeBSD "kernel boot", i.e., everything between when kernel code starts running and when we first enter userland as init(8). This is not trivial since it's impossible to use tools like dtrace to monitor things prior to when said tools are running. The goal of this exercise is to help me track down the places where we're wasting time during the boot, and then to fix them. The approach I've taken is to add some macros -- most notably TSENTER() and TSEXIT() -- which by default compile to nothing, but if the TSLOG kernel option is enabled they compile to code which logs the cycle count (e.g., on x86 the value from the RDTSC instruction) along with some other data (in the case of TSENTER and TSEXIT, the fact that we're entering/exiting a function). This can then be dumped via a sysctl (debug.tslog) and processed in userland to convert function entries/exits into stacks and to visualize the time spent in the boot process. Two examples: A flame chart of my laptop booting HEAD: http://www.daemonology.net/timestamping/tslog-laptop.svg A flame chart of an EC2 c5.4xlarge instance booting 11.1-RELEASE: http://www.daemonology.net/timestamping/tslog-c5.4xlarge.svg The patches (10 of them, to be applied in order), userland scripts, and very brief usage instructions are at: http://www.daemonology.net/timestamping/tslog.tgz I hope to commit the patches in the next week, since I'm planning on writing a paper to submit to AsiaBSDCon (which has a deadline of December 31st); so if anyone has interest/time to look at this in the near future (I mean, it's not like anyone is going to be busy this weekend, right?) I'd love to have some feedback before it goes into the tree. -- Colin Percival Security Officer Emeritus, FreeBSD | The power to serve Founder, Tarsnap | www.tarsnap.com | Online backups for the truly paranoidReceived on Fri Dec 22 2017 - 08:44:54 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:41:14 UTC