- Experimental support for control transfer items
- Experimental support for full virtualization on Intel x32
processors via VMX extensions
- Improved, pluggable scheduler architecture, with support for
round-robin, and (experimentally) hierarchical proportional share
scheduling
- Support for event logging (x32 only at present), which allows
light-weight tracing kernel of events into a user-level buffer.
1) A race condition that causes an assertion to fail: kdb_current_cpu stores
the current CPU executing within the KDB; all other CPUs are sleeping
uninterruptibly waiting for a broadcast NMI to either go on or try to enter
KDB themselves (see kdb_t::pre()). There might actually occur a race
condition, because the CPU leaving KDB first resets kdb_current_cpu, then
uses an NMI broadcast to inform other CPUs that they may go on or enter KDB,
and finally verifies the value of kdb_current_cpu. But meanwhile the value
may have changed because of another CPU instantly entering KDB again.
Solution: remove the bogus assertion
2) Occasionally, depending on the hardware circumstances, an NMI may arrive
at the processor while a pending NMI hasn't been serviced yet. In this case
a CPU may receive an "exit KDB" NMI without having had time to process the
"enter KDB" NMI. In that case, it will jump into KDB with reason
X86_EXC_NMI. Handle this case by just leaving KDB instantly.
3) Only send broadcast NMIs to stop other CPUs if the CPU has actually
initiated the entering of KDB (i.e., if it isn't one of those having
received a broadcast NMI itself).
- Add a scientific notion when printing cycles and pmcs (4 digts + exponent)
- Increase number of characters after which tracebuffer wraps around
- Add a tsc filter for dumping tb entries
- Add a function to dump tracebuffer automatically (tbuf_dump), e.g.
periodically during timer interrupt
- Take user tracepoints into account when enabling un-detailed tracing of
records
- Allow tp id filter to accept user ids
- Fix K8 tracebuffer pmcs
- When recording a tbuf entry, first record pmcs then (finally) the tsc
- Start tracepoint detail levels with bit 0
- Allow tracepoint to enter kdb without printing something on the console
- Use TRACEPOINT_DETAIL for detailed tracing
- Add some TRACE_..._DETAILS macros
- Coalesce TRACE_... macros in tracepoints.h
- When determining number of records to dump in KDB, incorporate potential
display filters
- Store tracebuffer size in metadate, and use it user level
- Merge user-level tracebuffer.h from ia32 and amd64
dumping hours and hours worth of items
- Properly calculate wrapped tsc/pmc values in tracebuffer
- Dump tracebuffer header also for when using tracebuffer shortcut 'Y'
- Make tracebuffer terminology consistent: each tb record has a type
and an id.
- Add a display type filter and merge it with the record type filter
- Improve readability of tracebuffer output: wrap lines automatically,
divide tsc/pmcs by 1000/1000000 and add 'K'/'M'
- Add 'Y' top level command to quickly print tracebuffer with default
parameters
- Add two different tracepoint types (DEFAULT and DETAIL), so that
detailed recording can be suppressed at runtime
- Use TP_DETAIL type for detailed IPC recording and substitute
TRACE_IPC_DETAILS() by TRACEPOINT(IPC_DETAILS, ...)
- Use TP_DETAIL type when recording context switches
- Improve user level tracebuffer stubs: record both id and type
correctly; generic functions don't need a TID argument, since it's
determined automatically;
tracepoint is enabled whenever a breakpoint fires, thus the new code is
semantically equivalent to the previous code. However, with tracepoints
breakpoints may now be logged into the tracebuffer rather than to the
console, which is handy to find out the context in which the breakpoint has
actually fired.