Profiling In-band Signaling

We are in the stage of profiling the code and are looking for users to help contribute profile results on different architectures. If you could contribute to an architecture, we would greatly appreciate it.

You should be able to follow through the instructions sequentially, for which I'm going to provide Ubuntu specifics and general.

We have profile statistics for the following architectures already:
  • Pentium 4
  • Core Duo

Building VMLinux

Running oprofile with full kernel profiling is required. To do this you must acquire an uncompressed version of your kernel, vmlinux.

In Ubuntu, building VMLinux can be done as follows:
sudo apt-get install linux-kernel-devel fakeroot build-essential
sudo apt-get source linux-image-2.6.20-16-generic
sudo apt-get build-dep linux-image-2.6.20-16-generic
cd linux-source-2.6.20-2.6.20/
sudo make oldconfig
sudo make vmlinux
If you are running a custom or self-built kernel, go to your kernel source tree and run the following command:
make vmlinux

Obtaining oprofile

In Ubuntu you can use apt-get or aptitude to retrieve oprofile. Installing glibc-dbg is also necessary to get full symbol statistics for libc.
sudo apt-get install oprofile glibc-dbg

To build oprofile manually, download it from the official oprofile site and follow the instructions.

Before running the oprofile daemon, we must tell it where vmlinux is located. replace $VMLINUX_PATH with the path that vmlinux is located, such as /boot or /usr/src/linux/
sudo opcontrol --setup --vmlinux=$VMLINUX_PATH/vmlinux
Test that oprofile will at least start with no errors:
sudo opcontrol --start
You should receive output similar to this, which specifies that it is using the kernel interface:
$ sudo opcontrol --start
Using 2.6+ OProfile kernel interface.
Reading module info.
Using log file /var/lib/oprofile/oprofiled.log
Daemon started.
Profiler running.

Obtaining the In-band code

To get the most current copy of the profiling in-band code, use SVN:
svn co
To build the code, perform the following series of commands.
cd inband-profiling/
(./bootstrap && ./configure && make) | tee inband_log
Install the code:
sudo make install

If you encounter any errors building the code, please report your inband_log.

Obtaining the new USRP in-band RBF

Since the new in-band code uses new packet formats across the USB bus which the USRP needs to interpret, a new RBF must be used.

You can obtain the RBF that will be used for profiling here:

To install it, copy it to /usr/local/share/usrp/rev2/

In summary:
sudo cp usrp_inband_profiling.rbf /usr/local/share/usrp/rev2/
sudo cp usrp_inband_profiling.rbf /usr/local/share/usrp/rev4/

Profiling the In-band Code

Enter the following directory within the inband-profiling branch which contains all of the applications which we will profile:
cd inband-profiling/usrp/host/apps-inband/
The following applications will be profiled:
  • test_usrp_inband_tx - TX only
  • test_usrp_inband_rx - RX only
  • test_usrp_inband_underrun - TX and RX
The applications do not take any parameters, here is an example of the RX run:
$ time ./test_usrp_inband_rx
[TEST_USRP_INBAND_RX] Requesting RX channel allocation
[TEST_USRP_INBAND_RX] Receiving...
[TEST_USRP_INBAND_RX] Deallocating RX channel

mb_runtime_thread_per_block: dtor (# workers = 1)

real 0m31.495s
user 0m8.805s
sys 0m0.436s
So let's get to the actual profiling! Start oprofile if you have not done so yet:
sudo opcontrol --start
Before EVERY oprofile run, reset the statistics or else they will carry over to other runs, and go ahead and run an application. Please provide your time per application with the reports. As soon as the application finishes, immediately save the statistics and perform a dump to ensure everything was written to disk. You now have a snapshot at the time your application finished. You will need to choose a different save name per run.
sudo opcontrol --reset
time ./test_usrp_inband_rx
sudo opcontrol --save=test_usrp_inband_rx_1
sudo opcontrol --dump
Finally, let's retrieve the statistics. The applications you actually run in the top-most directory are scripts which run the true binaries in the .libs directory. opreport needs the true binary, which is prefixed with lt in the .libs directory.
opreport -l session:test_usrp_inband_rx_1 .libs/lt-test_usrp_inband_rx &> oprofile-test_usrp_inband_rx
And there you have it, if you look through oprofile-test_usrp_inband_rx you should see something similar to this:
CPU: P4 / Xeon with 2 hyper-threads, speed 2993 MHz (estimated)
Counted GLOBAL_POWER_EVENTS events (time during which processor is not stopped) with a unit mask of 0x01 (mandatory) count 240000
samples % image name app name symbol name
40224 14.0335 sincosf
15753 5.4960 pmt_nthcdr(unsigned int, boost::shared_ptr<pmt_base>)
12494 4.3589 lt-test_usrp_inband_tx lt-test_usrp_inband_tx ui_nco<float, float>::sincos(std::complex<float>*, int, double)
12088 4.2173 malloc
11798 4.1161 free

If you see _ under _symbol name for images such as libc, you did not install debug symbols for the library. libc should be the only issue, scroll back up to read about installing this, we require that these symbols be included.

Submitting Your Results

Create a machine_specs file with information about your machine:
uname -a >> machine_specs
cat /proc/cpuinfo >> machine_specs
Create a times file with information about the times of each application, such as:
real 0m31.495s
user 0m8.805s
sys 0m0.436s

<fill me>

<fill me>
tar and compress your output files like so, for an attachment (or zip them, whichever is easier for you):
tar czvf inband_results.tar.gz machine_specs times oprofile-test_usrp_inband_tx oprofile-test_usrp_inband_rx oprofile-test_usrp_inband_underrun

Send an e-mail to George: gnychis at cmu dot edu, with inband_results.tar.gz as an attachment.

We greatly appreciate any help with the profiling, and once we collect enough profile results we will host them and there will be discussion on the board if you'd like to participate.

Thank you for your time!

注: Profiling In-band Signaling(原文出处,翻译整理仅供参考!)