Zoom Release Notes

What's New!

Zoom 3.3.1 - August 16, 2014

  •  Added CPU analysis for AMD 16H (Jaguar)
  •  Improved selection highlighting in Butterfly view
  •  Fixed possible UI exception when selecting symbols

Table of Contents

1. Requirements
2. Install
3. Usage
4. Uninstall
5. Maintenance
6. Limitations
7. License
8. Support
9. History

1. Requirements

A. General

a. Languages

Zoom can profile code written in the following languages:
  • C/C++
  • Fortran
  • Assembly
  • Other compiled languages

b. Debug Information

In order to correlate source code to samples, Zoom requires code to be compiled with DWARF debug information. For most compilers, pass in the "-g" flag to generate this information.
 
GCC and other compilers for C, C++ and Fortran generate DWARF information that has been tested with Zoom.

B. Mac OS X

Mac OS X 10.8 (Mountain Lion) and 10.9 (Mavericks) are supported. Zoom can collect profiles on any 64-bit capable Intel Macintosh.

Zoom for Mac OS X supports the Time Profile and Thread Time Profile configurations. It does not currently support performance event sampling (e.g. Cache Miss Profile, Instruction Profile) or tracing (e.g. Scheduler Trace, System Call Trace).

C. Windows

Windows 7, Windows Vista and Windows XP with SP2 are supported. Please be aware that the Windows version of Zoom does not collect profiles on the local machine. It is intended for connecting over the network to Linux or Mac OS X machines running Zoom. For example, to profile a headless server or embedded ARM Linux from a Windows host. It can also be used to view saved profiles.

D. Linux

Red Hat, Fedora, SUSE Linux, openSUSE, Ubuntu, and Debian with kernel 2.6.15 or later are supported. RHEL4 with kernel 2.6.9 is also supported. Installations on other distributions will also likely work. If you encounter problems refer to "Install/Manual Override or "Install/BusyBox".
 
On Linux, the kernel's performance counter subsystem (perf) or oprofile driver are used for profiling. It is also possible to use the RotateRight profiling drivers (rrprofile) on systems where perf is unavailable.

a. C/C++ Runtime

Zoom and the Zoom installer require glibc-2.4 (libstdc.so.6) or later. This is typically installed by default on most Linux distributions.
  • openSUSE / SUSE Linux Enterprise
     
    # zypper install libstdc++33

b. Profiling Drivers

Zoom requires a driver or kernel support to record system-wide profiling information. There are several drivers supported:

perf

Also called the Linux performance counters subsystem, perf is the preferred driver for Zoom when running on Linux kernel 2.6.38 or later. Partial perf functionality is available for kernels 2.6.34 through 2.6.37 and Red Hat Enterprise Linux / Cent OS 6 with Linux kernel 2.6.32.
 
The perf driver supports all of the types of profiling and tracing used by Zoom. In order for Zoom to use perf, the perf package should be installed on your Linux installation.
  • Fedora / Red Hat Enterprise Linux
     
    # yum install perf
  • openSUSE / SUSE Linux Enterprise
     
    # zypper install perf
  • Ubuntu / Debian
     
    # apt-get update
    # apt-get install linux-tools

oprofile

The most widely supported driver, oprofile offers basic time and event profiling. In order for Zoom to use oprofile, the oprofile package should be installed on your Linux installation.
  • Fedora / Red Hat Enterprise Linux
     
    # yum install oprofile
  • openSUSE / SUSE Linux Enterprise
     
    # zypper install oprofile
  • Ubuntu / Debian
     
    # apt-get update
    # apt-get install oprofile

rrprofile

This is a customized version of oprofile that offers additional capabilities on supported hardware. The RotateRight profiling kernel modules for Linux work with:
  • Intel Core 2, Core i3/i5/i7, Xeon
  • Intel Atom, Pentium M, Pentium 4
  • AMD Bulldozer
  • AMD Athlon, Athlon64, Athlon II
  • AMD Phenom, Phenom II
To use rrprofile, you must have the kernel headers package installed and compile the driver from source (included). On older systems without perf, it is recommended that the RotateRight profiling driver (rrprofile) be used where supported.
Like oprofile, rrprofile does not support performance event tracing configurations (e.g. Scheduler Trace, System Call Trace).

c. Kernel Headers

The Linux kernel headers are required for compiling the RotateRight kernel modules.
  • Fedora / Red Hat Enterprise Linux

    On Fedora with the default kernel, install the kernel-devel package:
     
    # yum install kernel-devel

    On Fedora with the PAE kernel, install the kernel-PAE package:
     
    # yum install kernel-PAE-devel
  • openSUSE / SUSE Linux Enterprise
     
    # zypper install kernel-source
  • Ubuntu / Debian
    Install the linux-headers package:
     
    # apt-get install linux-headers-`uname -r`

d. DebugInfo Packages

Zoom supports the "debuginfo" packages found in Red Hat and SUSE Linux distributions and the "dbg" and "dbgsym" packages found in Ubuntu and Debian Linux distributions.
 
For information on installing debug information packages:

2. Install

A. General

a. License File Path

The default license path is ${HOME}/.zoom/license/zoom_license.txt. Set the ZOOM_LICENSE_FILE_PATH environment variable to specify a custom location for your license file:

$ export ZOOM_LICENSE_FILE_PATH=${HOME}/zoom_license.txt
$ Zoom

b. Limiting Memory Usage

The Zoom UI utilizes a Java virtual machine. By default the Zoom UI scales the maximum heap memory the JVM can use based on the total system memory. Set the ZOOM_MAX_JAVA_HEAP_MB environment variable to specify a custom limit:

$ export ZOOM_MAX_JAVA_HEAP_MB=4096
$ Zoom

c. Limiting Stack Usage

To prevent problems with symbol resolution, Zoom sets its maximum stack size to be unlimited (equivalent to ulimit -s unlimited). This behavior can be disabled by setting the ZOOM_USE_DEFAULT_STACK_LIMIT environment variable:

$ export ZOOM_USE_DEFAULT_STACK_LIMIT=1
$ Zoom

B. Mac OS X

Open the Zoom disk image and double-click on the Zoom.pkg installer package. Follow the on-screen instructions to install Zoom to /Applications.

C. Windows

Double-click on the Zoom installer executable and follow the on-screen instructions to install Zoom. You will have the option to create a desktop link to Zoom at the end of the installation.

D. Linux

a. GUI

To launch the graphical user interface (GUI) installer, double-click the install.sh icon or from a terminal:
 
$ ./install.sh

b. Command Line

If the installer does not fallback to the text-based installer, become root user or sudo:
 
# ./install.sh --text

Please report any errors you see in the terminal and send the file "/var/log/Zoom-install.log" to support@rotateright.com.

c. Custom Install Path

First, uninstall any existing Zoom files using the uninstallZoom.sh script in the existing Zoom install location. Then, to install to a custom location become root user or sudo:
 
# ./install.sh --text --install_path [path]

d. Manual Override

Please follow the steps below if you are unable to use the GUI or command-line installer.
  1. Become root user in a bash shell for all operations:
     
    $ sudo /bin/bash

  2. Unpack the Zoom archive:
     
    # tar -xvzf <archive>.tar.gz
    # cd <archive>
    # mkdir -p /opt/rotateright
    # tar xf .rotateright.tar -C /opt/rotateright

  3. Unpack the jar archives:
     
    # cd /opt/rotateright/Zoom/plugins
    # find . | grep -E "\.jar.pack$" | while read i; do dir_name=`dirname $i` base_name_pack=`basename $i` base_name_jar=${base_name_pack%.pack} unpack200 ${dir_name}/${base_name_pack} ${dir_name}/${base_name_jar} rm -f ${dir_name}/${base_name_pack} done

  4. Compile and install the rrnotify kernel module:
     
    # cd /opt/rotateright/Zoom/setup/kmod
    # tar -xvf rrnotify.tar
    # pushd rrnotify
    # make
    # ./install.sh

    # popd
     
    You may need to edit the Makefile, the install.sh script, and the kernel module script (common/rrnotify-generic) for your Linux distribution.

  5. Optional (if perf is not available) - compile and install the rrprofile kernel module:
     
    # cd /opt/rotateright/Zoom/setup/kmod
    # tar -xvf rrprofile.tar

    # pushd rrprofile
    # make
    # ./install.sh
    # popd
     
    You may need to edit the Makefile, the install.sh script, and the kernel module script (common/rrprofile-generic) for your Linux distribution.

  6. If the RotateRight kernel modules do not compile or support your hardware, install the oprofile script:
     
    # cd /opt/rotateright/Zoom/setup/kmod
    # tar -xvf oprofile.tar
    # pushd oprofile
    # ./install.sh
    # popd

e. BusyBox

Please follow the steps below to install ZoomCLI on a system with the BusyBox environment:
 
Prerequisites:
  •    You must be the root user on the target (BusyBox) system.
  •    Install the bash shell on the target system.
  1. Ensure that the target system has oprofile support compiled in:

    # cat /proc/filesystems | grep oprofilefs
    nodev    oprofilefs

  2. Unpack and setup Zoom on the target system:

    # tar -xvzf <archive>.tar.gz
    # ./install.sh

3. Usage

A. General

To launch the GUI Zoom profiler, double-click its application icon.

To launch the command-line interface (CLI) zoom profiler, type 'zoom' on a terminal command-line:
 
$ zoom
 
After profiling, a "profile_*.zoom" file will be written to the current working directory. This file is an archival representation of the profile which can be opened by the Zoom GUI application.

For additional information please refer to to the Zoom Quick Start Guide.

B. Mac OS X

$ open /Applications/Zoom.app

C. Windows

> C:\Program Files (x86)\RotateRight\Zoom\Zoom.exe 

D. Linux

$ Zoom

Optionally, set the ZOOM_VMLINUX environment variable to specify a custom location for your vmlinux file:

$ export ZOOM_VMLINUX=${HOME}/vmlinux
$ Zoom

4. Uninstall

A. Mac OS X

a. Command-Line

To launch the text-based uninstaller:
 
$ /Library/RotateRight/uninstallZoom.sh

B. Windows

a. GUI

Use the "Uninstall a Program" tool in the Control Panel.

C. Linux

a. GUI

To launch the GUI uninstaller on Linux, type the following on a terminal command-line:
 
$ /opt/rotateright/uninstallZoom.sh

b. Command-Line

Please use the command below if the uninstaller does not fallback to the text-based installer:
 
$ /opt/rotateright/uninstallZoom.sh --text

c. Manual Override

To manually uninstall Zoom:
  1. Become root user in a bash shell for all operations.
    $ sudo /bin/bash

  2. Unpack the Zoom archive and export the current directory.
    # tar -xvzf <archive>.tar.gz
    # tar -xvf .install.tar

  3. Remove Zoom.
    # ./setup.sh remove

  4. Uninstall the kernel modules
    # ./kmod/uninstall_driver.sh rrprofile
    # ./kmod/uninstall_driver.sh rrnotify
    # ./kmod/uninstall_driver.sh oprofile

5. Maintenance

A. Linux

a. Kernel Updates

In the event of a kernel upgrade, you will need to recompile the RotateRight profiling driver (rrprofile):
 
$ sudo /opt/rotateright/Zoom/setup/install_driver.sh

6. Limitations

A. General

a. Security

On Linux and Mac OS X the zoom binary has the setuid bit set because Zoom is a system-wide profiler and may require access to system-owned files.

b. Virtualization

Under a virtual machine, Zoom will profile with the "OS Timer" trigger. Hardware counters are not available because they are not virtualized.

c. Frame Pointers

Assume function A() in a.out calls function B() in executable a.out which in turn calls function C in library libfoo.so. If libfoo.so omits frame pointers, Zoom will show that A() called C() because the stack frame pointer and return address are not updated inside library libfoo.so.

If the library libfoo.so is compiled with "-fno-omit-frame-pointer", the frame pointer and return address will be correctly updated and the expected call sequence will be shown in Zoom.

B. Linux

a. Zoom x86 (32-bit) on Linux x86-64 (64-bit)

Running Zoom x86 (32-bit) on Linux x86-64 (64-bit) is not supported.

b. libvirt Virtualization Toolkit

Zoom remote networking is incompatible with the libvirt toolkit. Disable the libvirtd daemon before using Zoom.

c. Zoom on Angstrom Linux

The Zoom installer requires that bash be installed:
 
$ opkg install bash
 
Also, Zoom requires libsegfault:
 
$ opkg install libsegfault

d. Crash with openSUSE Linux 10.3

On a fresh openSUSE 10.3 install, bug-buddy must be removed or updated.
 
To remove:
 
$ sudo zypper rm bug-buddy
 
To update, enable online updating with YaST and type:
 
$ sudo zypper install bug-buddy
 
Reference: https://bugzilla.novell.com/show_bug.cgi?id=331618

e. GLib Warnings with Ubuntu 9.10, Fedora 12 and Debian Squeeze Linux

This is a known issue and should not affect Zoom.

Reference:
https://bugs.launchpad.net/ubuntu/+source/glib2.0/+bug/501670
https://bugzilla.redhat.com/show_bug.cgi?id=546848
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=559407

7. License

Refer to the Zoom EULA.

8. Support

For sales and support, please contact support@rotateright.com.

9. History

Zoom 3.3.0 - March 12, 2014

  •  Fixed to work on MacOS X 10.9 (Mavericks)
  •  Added ZOOM_VMLINUX environment variable override to locate vmlinux file
  •  Added ability to export all data from Trace view
  •  Added preferences for truncating C++ symbol names
  •  Fixed truncation of some templated C++ symbols

Zoom 3.2.2 - October 31, 2013

  •  Fixed to work with perf driver from Linux kernel 3.11
  •  Fixed to work around broken menu items on Ubuntu 13.10

Zoom 3.2.1 - October 6, 2013

  •  Updated instruction timings for Nehalem, Sandy Bridge, Haswell
  •  Added disassembly for AVX2 instructions
  •  Updated identification of Ivy Bridge and Haswell CPU models
  •  Fixed text alignment when displaying counts and percentages
  •  Added verbose option to installer script when executed from terminal
  •  Improved command-line parameter processing
  •  User interface and performance improvements

Zoom 3.2.0 - July 16, 2013

  •  Added ability to view sample count/time and percentage simultaneously
  •  Added option to group samples by process name rather than PID
  •  Changed default hot key to start/stop profiling to Shift-F1
  •  Added option to install to custom path on Linux
  •  Fixed to not create .debug folder when using perf driver
  •  Fixed to work with perf driver on Linux kernel 3.9
  •  Fixed monitoring of exited processes on Linux kernel 3.7 and later
  •  User interface and performance improvements

Zoom 3.1.0 - March 15, 2013

  •  Added smart calltree expansion and focus
  •  Improved calltree expansion to operate on 'unknown' symbols
  •  Improved recovery of symbol ranges on stripped binaries
  •  Improved sample processing performance
  •  Fixed error when truncating C++ nested template names
  •  User interface and performance improvements

Zoom 3.0.0 - October 13, 2012

  •  Support for Zoom profiling and analysis on Mac OS X
    • Time Profile (system-wide)
    • Thread Time Profile
    • Static analysis of Mach-O files
  •  Added filtering of profile data by thread / process
  •  Added option to choose a different source file in the Code Browser
  •  Added ability to annotate Timeline data with bookmarks
  •  Added system instructions to x86 instruction help
  •  Added preference for default profile scope (system, top process, top thread, main thread)
  •  Fixed compilation of rrprofile driver with Linux 3.5 kernel
  •  Fixed auto-selection of previous target process
  •  Fixed option to disable power management and frequency scaling during profiling on later kernels
  •  Fixed installation of debuginfo packages on CentOS 6 / RHEL 6
  •  User interface and performance improvements 

Zoom 2.2.0 - May 17, 2012

  •  Added profile time filtering (crop profile data to range of interest)
  •  Added ability to find text in both visible and hidden call tree entries
  •  Added support for Intel 'Ivy Bridge' CPUs
  •  Added 'perf' driver support for RHEL / CentOS 6.2
  •  Improved support for multiple monitor configurations
  •  Fixed Thread Time profiling on ARM
  •  Fixed Thread Time profiling bug when many threads created
  •  User interface and performance improvements

Zoom 2.1.0 - March 28, 2012

  •  Added Zoom GUI for Mac OS X and Windows
  •  Added support for perf profiling driver (Linux kernel 2.6.34 or later)
  •  Added thread scheduler and system call trace (requires perf driver)
  •  Added timeline visualization of profile data (beta, requires perf driver)
  •  Added color-by-module in profile views
  •  Added disassembly of AVX, VMX, and SVM instructions (x86)
  •  Added support for AMD Family 15h analysis
  •  Added support for DWARF debugging info generated by gcc 4.6
  •  Enhanced sample analysis and display options
  •  Improved remote profiling reliability and performance
  •  Improved support for oprofile driver
  •  Improved support for ARM platforms

Zoom 2.0.0 - March 10, 2011

  • Added thread time profiling
    • find wait time due to I/O, lock contention
    • full backtraces without frame pointers
  • Added adaptive sampling - automatic compression of long profile data
  • Added tree and leaf profile visualizations
  • Improved metrics for understanding process and thread utilization
  • Enhanced trace view for easier browsing of trace data
  • Improved support for debug info files
  • Changed to load profiling drivers on Zoom start rather than at boot
  • Improved detection of profiling problems (buffer overflow, etc.)
  • Added ability to configure profile buffer sizes
  • Reduced memory usage
  • Sped up sample processing
  • Fixed cleanup of temporary files
  • Improved user interface

Zoom 1.6.0 - October 19, 2009

  • Added static analysis of executable/library/archive/object files
  • Added display of labels in assembly view of the code browser
  • Added identification of Intel Core i5/i7 (Lynnfield) processors
  • Added auto-selection of OS timer trigger in virtual machine
  • Added ability to select ARM register alias display type (GCC, APCS)
  • Added logic to process inline jump tables in ARM and Thumb code
  • Disabled processor frequency scaling during profiling on ARM
  • Fixed oprofile sample buffer parsing with no explicit cookie switch
  • Fixed potential hang in GUI during sample processing
  • Fixed misaligned memory accesses on ARM
  • Fixed command line zoom to not depend on X11 libraries

Zoom 1.5.0 - August 31, 2009

  • Added profiling for ARM Linux
  • Added ability to highlight problem src and asm lines in code browser
  • Added command-line profile summary option (--output_text)
  • Added option to not gather kernel / driver symbols
  • Improved code browser navigation
  • Fixed timeout error when profiling for long durations

Zoom 1.4.0 - April 28, 2009

  • Added trace view - samples displayed in table form
  • Added source-to-assembly mapping pane in code browser
  • Added 'Focus' operation to filters - center profile on symbol/module
  • Updated kernel modules to work with Linux kernels up to v2.6.29
  • Switched to SOAP as default protocol for remote communication
  • Added ability to install license from 'Help' menu
  • Improved user interface

Zoom 1.3.0 - January 20, 2009

  • Added support for external debug info files
  • Added ability to show kernel source and assembly
  • Added calculation of symbol ranges when missing symbol information
  • Added optional display of symbol sizes
  • Added user-friendly thread names (based on root symbol name)
  • Added support for Intel Atom and Core i7 processors
  • Added support for VDSO (vsyscall page) symbols
  • Fixed driver to use OS timer mode when perfmon not available
  • Improved code analysis
  • Improved error logging and reporting

Zoom 1.2.0 - August 31, 2008

  • Added smart text truncation of symbol names
  • Improved source file path mapping and search
  • Improved sorting and selection in code browser
  • Added maximize/restore widgets for source and assembly views
  • Added quick sample and address display change via double-click
  • Improved memory handling for samples with large backtraces
  • Added ability to hide symbols below specified sample weight
  • Added new config (+) and delete config (-) buttons
  • Stability and performance fixes

Zoom 1.1.0 - July 25, 2008

  • Added symbol-centric profile view with parent and child tables
  • Added support for "OS Timer" trigger
  • Added ability to use oprofile driver for sampling
  • Improved summary text output
  • Simplified installation
  • Added support for SSSE3, SSE4.1, and SSE4a instructions
  • Stability and performance fixes

Zoom 1.0.1 - May 2, 2008

  • Added check for bug buddy 2.20.0 on openSUSE 10.3
  • Fixed tooltip for regular expression input