- Can RotateRight help me improve the performance of my code or system?
- What does the name “RotateRight” mean?
- How will my personal information be used?
- Can I run Zoom on a virtual machine?
- [Linux] My favorite flavor of Linux isn’t on the list of supported distributions. Do you support it?
- [Linux] My processor isn’t supported by any of the profiling drivers (perf, rrprofile or oprofile) on my OS. Can you support it?
- [Linux] What kernel version do I need to use the perf driver?
- [Linux] Can I run Zoom x86 on x86-64 Linux distributions?
- [Linux] The installer put up a dialog about authenticating as root, but it appears to be hung. What happened?
- [Linux] Why does my installation fail after I have successfully authenticated?
- [Linux] What’s the difference between perf, the RotateRight kernel modules and the oprofile kernel module?
- [Linux] Can I install Zoom without using the GUI?
- [Linux] Why can’t I build the kernel modules after installing the kernel headers?
- Why don’t I see my source code when I click on a symbol?
- Why is my profile flat (no backtraces)?
- Why don’t I see the Timeline Browser?
- Why don’t I get full backtraces when profiling on x86-64?
- Why do I get misleading backtraces when profiling on x86-64?
- Is there a maximum depth for backtraces?
- Why can’t Zoom map addresses to symbols for my (large) application?
- My workload runs for hours – can Zoom profile that long?
- [Linux] What does Zoom use debuginfo packages for?
- Why did Zoom fail to connect to the network target?
- Why is the SUID bit set for the zoom binary?
- Why is the error message “Zoom is already running” shown?
- Can I view more than one profile at a time?
- [Linux] Why did Zoom fail with the error message “version ‘GLIBC_2.3.3′ not found”?
- [Linux] I see “GLib-WARNING **: g_set_prgname() called multiple times” in the terminal. Is this a bug?
- [Linux] I see “LIBDBUSMENU-GTK-CRITICAL”, “Gtk-WARNING” and “Couldn’t connect to accessibility bus” in the terminal with Ubuntu. Is this a bug?
- [Linux] Why did Zoom hang when I tried to quit?
Certainly! We have plenty of experience in general and platform-specific code optimization, and we’re happy to take on contract projects. Send us a note and let us know what you have in mind.
2. What does the name “RotateRight” mean?
RotateRight is both a low-level bit operation and what we hope to do for your code: change it for the better.
3. How will my personal information be used?
Yes, Zoom can profile in a virtual machine. Running under a supported virtual machine such as VMware, VirtualBox (requires Guest Additions) or KVM is detected automatically. On Linux, the rrprofile driver is incompatible with Xen kernels. Zoom hasn’t been tested under other virtualization solutions. Note that backtraces may not be available for system-wide profiling in a VM with Linux kernels older than 2.6.38. If you want to profile a VMware target over the network, make sure that the VM has a unique IP address, so the Zoom GUI client can communicate with the zoom server running in the VM.
2. [Linux] My favorite flavor of Linux isn’t on the list of supported distributions. Do you support it?
Zoom should run on other Linux distributions based on kernel 2.6.15 or later. RHEL4 with kernel 2.6.9 is also supported. Zoom will work with some limitations on older Linux kernels. To install on other distributions, refer to Install/Manual Override in the release notes.
3. [Linux] My processor isn’t supported by any of the profiling drivers (perf, rrprofile or oprofile) on my OS. Can you support it?
Let us know what hardware you’re interested in, and we may be able to add support for it.
4. [Linux] What kernel version do I need to use the perf driver?
Full functionality for perf is available with 2.6.38 or later. If the perf command-line tool is installed on a system with 2.6.38 or later, Zoom will try to use the perf driver by default. For kernels 2.6.34 to 2.6.37, Zoom can use perf, but it is not the default driver choice because older versions of perf do not collect callstacks correctly. If you’re on 2.6.32 with RHEL 6 or CentOS 6, you can use perf to get a Scheduler Trace, but System Call Trace is not available due to limited functionality in the perf driver.
5. [Linux] Can I run Zoom x86 on x86-64 Linux distributions?
No, you should install Zoom x86-64 if you’re running a 64-bit OS.
The installer probably had trouble using kdesu, gnomesu or gksu to authenticate as root. To work around this, run the install.sh script with root privileges.
2. [Linux] Why does my installation fail after I have successfully authenticated?
The installation will fail if no root password is configured (except on Ubuntu, where it assumes that you have administrative privileges via ‘sudo’). To override the self-authentication mechanism, run the install.sh script with root privileges.
3. [Linux] What’s the difference between perf, the RotateRight kernel modules and the oprofile kernel module?
The perf driver is part of newer Linux kernels. Zoom can use the perf facility if you have a 2.6.34 kernel or later that supports perf and have the ‘perf’ user-space application installed. RHEL 6 with kernel 2.6.32 can also use the perf driver. The Linux perf facility allows collection of more data events such as scheduler information and system calls. The rrprofile kernel module is based on oprofile but adds support for time stamps, may disable nap during sampling and supports both PMC and timer interrupt based sampling without reloading the kernel module. In addition, rrnotify reduces the overhead of profiling by deferring the gathering of process memory maps until after profiling is finished (when possible).
4. [Linux] Can I install Zoom without using the GUI?
Yes, just type “./install.sh –text”.
5. [Linux] Why can’t I build the RotateRight kernel modules after installing the kernel headers?
Be sure that the kernel that is currently running matches the kernel headers that you downloaded. You may need to reboot the system if you’ve installed updates but haven’t rebooted recently.
You need to compile your code with debugging information for Zoom to map the assembly code to source code. With gcc, this is done with the ‘-g’ flag. You should also confirm that your binaries have debugging information by running “readelf –debug-dump” or “objdump -W”.
2. Why is my profile flat (no backtraces)?
A “Time Profile” or other system-wide profile may contain no backtraces if the installed driver doesn’t support collecting callstacks. This is expected when using a software timer trigger on Linux kernels before 2.6.38. Try switching to a hardware trigger by creating a new profiling configuration. This may not be possible when running in a virtual machine. You can also try taking a “Thread Time Profile” of a single process instead – this should always contain backtraces and will usually provide more accurate callstacks than a system-wide profile.
3. Why don’t I see the Timeline Browser?
The Timeline Browser is used to show scheduler and other trace data. To get trace data, you need to use the perf driver for Linux (kernel 2.6.32 or later is required for partial functionality; kernel 2.6.38 or later has full functionality). If you can use the perf driver, select a profiling configuration that collects trace information such as “Scheduler Trace” or “System Call Trace” and you should then see the Timeline Browser in your profile.
4. Why don’t I get full backtraces when profiling on x86-64?
By default, compilers on x86-64 Linux omit the frame pointer during compilation. To enable the collection of backtraces, you can either use the “Thread Time Profile” configuration or recompile your x86-64 code with “-fno-omit-frame-pointer”. Adding a frame pointer to normal code should have a very slight performance and size impact, but it makes profiling much easier.
5. Why do I get misleading backtraces when profiling on x86-64?
Assume function A calls function B which in turn calls library L (A -> B -> L). If library L omits frame pointers, Zoom’s “Time Profile” will show that A called L because the stack frame pointer and return address are not updated inside library L. If the library L is compiled with “-fno-omit-frame-pointer”, the frame pointer and return address should be correctly updated. To get more accurate callstacks, try Zoom’s “Thread Time Profile” which uses debugging information to backtrace.
6. Is there a maximum depth for backtraces?
Yes, the maximum number of recorded callframes per sample is determined by the profiling driver. Typically, this will be between 256 and 512 callframes. If your code has backtraces that are larger than the limit, you may see that symbols are shown as the root of a callstack even though you know they are not root symbols.
7. Why can’t Zoom map addresses to symbols for my (large) application?
Zoom may be unable to resolve some symbols due to stack size limits in the target process. Try setting “ulimit -s unlimited” for your target process.
8. My workload runs for hours – can Zoom profile that long?
Yes, Zoom can profile for long periods. When using the RotateRight drivers and the default profiling configs, Zoom will initially begin profiling with parameters that are optimized for profiles of up to a few minutes. After a large number of samples have been taken, Zoom will dynamically increase the sampling interval for longer profiles. This is called “Adaptive Sampling” and is designed to keep the total sample count manageable. Adaptive sampling is not available when using the perf or oprofile drivers, so you should manage your sampling interval manually in those cases. Also note that collecting trace information (such as scheduler events or system calls) can quickly add up to several megabytes or even gigabytes of data.
Keep in mind that a statistical profile of a few thousand samples is almost always as representative as a profile of a few billion samples. This is because we’re interested in optimizing the portion of the code that executes for a significant amount of the overall time. Optimizing code that accounts for a small fraction of the time has a high development cost but offers little benefit. You can override Adaptive Sampling in any Zoom profiling configuration, but we generally advise against doing that.
9. [Linux] What does Zoom use debuginfo packages for?
Zoom uses debuginfo packages to map sampled code addresses to symbols. This is useful for system libraries that are normally stripped. Zoom also relies on debuginfo packages to collect accurate backtraces when using the “Thread Time Profile” configuration.
For help getting debuginfo installed, refer to the Zoom release notes or documentation for your distro. Debuginfo support varies a lot from one distro to another, and you may not be able to install every package for your system.
If you have a firewall enabled on the network target machine, you may need to open the port used by zoom CLI. You can use the “–port” option to specify a fixed port number for zoom CLI to use.
2. Why is the SUID bit set for the zoom binary?
Zoom runs with setuid in order to map the samples of all processes (including the kernel) back to the code in binaries that may be system-owned.
3. Why is the error message “Zoom is already running” shown?
To ensure exclusive access to user preferences and settings, Zoom acquires a file lock in the .zoom folder in your home directory. If your home directory is shared across multiple machines (for example, using NFS), only a single instance of Zoom can be run across those machines. To work around this, you can create a unique startup script for each machine. The default startup script is /opt/rotateright/Zoom/Zoom. Make a copy of the script and modify the “-Dosgi.instance.area” and “-Dosgi.configuration.area” VM arguments in the script to point to a local path on each machine.
4. Can I view more than one profile at a time?
Yes, drag a profile’s tab area towards any edge of the Zoom window to see more than one profile simultaneously. You can also save a profile and open it multiple times to compare different parts of that one profile.
5. [Linux] Why did Zoom fail with the error message “version ‘GLIBC_2.3.3′ not found”?
Please unset the LD_ASSUME_KERNEL environment variable. We recommend that you remove all references to LD_ASSUME_KERNEL.
6. [Linux] I see “GLib-WARNING **: g_set_prgname() called multiple times” in the terminal. Is this a bug?
This is a known issue with Ubuntu 9.10, Fedora 12 and Debian Squeeze which should not affect Zoom.
7. [Linux] I see “LIBDBUSMENU-GTK_CRITICAL”, “Gtk-WARNING” and “Couldn’t connect to accessibility bus” in the terminal with Ubuntu. Is this a bug?
These are known issues on Ubuntu which should not affect Zoom.
8. [Linux] Why did Zoom hang when I tried to quit?
This is probably a bug in the Java VM. Do you have assistive technologies enabled? If not, please attach to the Zoom process with gdb, collect a backtrace and send it to us.