Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adding more checks and verbose error message: #1

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
1. Make sure that you're running a FreeBSD src tree which has support
for boot profiling.
2. Add 'options TSLOG' to your kernel configuration and `make kernel`.
3. After installing new kernel, loader and rebooting, to produce an SVG:
```
sh tslog.sh > ts.log
./stackcollapse-tslog.pl < ts.log | /usr/local/bin/perl flamechart.pl -flamechart -colors tslog > tslog.svg
```
4. To get a list of the top 10 stack leaves:
```
./stackcollapse-tslog.pl < ts.log | sh supercollapse.sh | head
```
8 changes: 0 additions & 8 deletions USAGE

This file was deleted.

16 changes: 13 additions & 3 deletions tslog.sh
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
#!/bin/sh

set -eu
SRCDIR=`pwd`
WRKDIR=`mktemp -d -t tslog` || exit 1
cd $WRKDIR

if [ `sysctl debug.tslog | wc -l` -ge 262144 ]; then
echo "WARNING: Maximum TSLOG entries detected, you should increase kernel config TSLOGSIZE" 1>&2
fi
sysctl -b debug.tslog > ts.log
LTSC=0
TSCOFFSET=0
Expand All @@ -16,7 +18,7 @@ while read TD TSC REST; do
LTSC=$TSC
NTSC=$((TSC + TSCOFFSET))
echo "$TD $NTSC $REST"
done < ts.log > ts.log.tmp
done < ts.log > ts.log.tmp 1>&2
mv ts.log.tmp ts.log
sort < ts.log > ts.log.sorted
cut -f 1 -d ' ' < ts.log | sort -u > threads
Expand Down Expand Up @@ -47,6 +49,14 @@ while read THREAD; do
echo "$TD $TSC STACK $STACK"
done > tslog.thread.$THREAD
done < threads
if [ ! -f tslog.thread.0x0 ]; then
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We could handle this case by processing what we have (i.e. kernel tslog). It wouldn't give us a complete picture of the boot process, but might still be better than nothing?

echo "No loader timestamp detected, are you using up-to-date loader?" 1>&2
exit
fi
if [ ! -f tslog.thread.start_init ]; then
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A better check would be for tsc.end existing -- if we have 'ENTER start_init' but the tslog buffer is truncated before 'EXIT start_init' then we'll have tslog.thread.start_init but not tsc.end.

echo "Overflow TSLOG buffer, you MUST increase TSLOGSIZE" 1>&2
exit
fi
cat tslog.thread.0x0 | sed -e 's/kernel;//' > ts.log.accumulated
cat tslog.thread.mi_startup tslog.thread.start_init >> ts.log.accumulated
TSCEND=`cat tsc.end`
Expand Down