Linux x86 VM S VAX MV S 370 AIX Power MAC OS Power Irix MIPS HP-UX Precision DGU X 88K OS40 0 AS400 Window s x86 Ultrix Alpha Aegis 68K 1 to 100 users One SW instance = one HW Traditional Software Architecture
MV S 370 AIX Power MAC OS Power HP-UX Precision DGU X 88K OS40 0 AS400 Comp MW MW Comp MW MW Comp MW MW Comp MW MW Windows x86 Ultrix Alpha Aegis 68K networked components Processor Processor O/S O/S App 1000 to millions of users Irix MIPS New Architecture
Disks > Processors Known Tools: > vmstat, iostat, netstat – only summary of information – no connection to the "bad" application > truss (~strace) – change of application behaviour – application needs to be determined first
reads Kernel statistics > base of lots of *stat commands (iostat, vmstat, ...) dtrace parts > User-Interface: dtrace-command(uses libdtrace) > Probes inside of the system code (or user application) > Buffer between probes and user level program dtrace algorithm > dtrace program activates probes and alloctates buffer > dtrace reads from buffers and analyzes data
Secure, covering system and applications > Non-invasive > Low Overhead > View from the system covering all Applications > Lots of probes (> 40000 depending on modules and hardware) • Production safe > Reproduction of problems on a safe system is not necessary > Difficult postmortem debugging unnecessary > No special kernel or boot (like with kadb) • Reduces cost > Solution in a short time: examples with 3-300x speedup > Protocols about nearly any system information
strace, ...) • View from the application • Only in Userland • synchronous (program slowdown) Dtrace • View from OS • Probes in all kernel modules and programs • Association to applikations • asynchronous
/ logical_expression / > Action: { dtrace command } dtrace -n ' syscall:::entry / execname == "date" / { trace (probefunc); } ' • Provider in OS collects the data: syscall • Transfer with shared buffer • dtrace program uses and formats the data
than 1 CPU • Shared Data Areas > Use of one area from different CPUs > Snooping tells CPUs which other CPU owns the data • Case: > Processor A likes to read some data from memory > Processor B data in its cache (recently changed) => Data in Cache of B ≠ Data in Memory • A requests to read the data from the cache of B: this is called: crosscall
{ @[execname] = count() }' dtrace: description 'xcalls' matched 4 probes [ letting this run for a few seconds ] ^C mozilla-bin 1 lockd 1 in.mpathd ... nfsd 3709 tar 27054 • backup with tar, while the files are written from another process
pid1234 for process 1234 > Use of symbolic informations • Instrumented Applications > Postgres, MySQL > Java 5 mit patch, Java 6,... • Own Applications > 1 macro per module / function / name / variable
system and applications > Development > Preparation of Production > Production and Performance Analysis • Properties > Secure > Covering Kernel and Applications > Low Overhead, usable on production systems > Statistics for applications, determining applications > Lots of standard reports available > ad-hoc queries