
This report describes how to use the provided script to profile NFD performance 
on ONL (https://onl.wustl.edu/) using Callgrind.
  
Assumptions
===========

  This report assumes that users have an ONL account. If you don't have an account
  yet, please refer to the ONL official website to apply.


Experiment Steps
================

  1. Login on the onlusr machine:
     ssh -L 7070:onlsrv:7070 <your_account>@onl.arl.wustl.edu
  
  2. Run RLI
     Open the topology file, and make reservation; if it is not successful,
  change the reservation time, and try again
  
     When your reservation is ready, commit.
     
  3. Experiment Environment setup
     ONL does not allow us to install programs, this section describes the process
     to compile NFD code on your experiment nodes.

     (1) git clone the latest ndn-cxx code and NFD code to your home directory.

         git clone http://gerrit.named-data.net/NFD
         git clone http://gerrit.named-data.net/ndn-cxx

     (2) In RLI, you can see the nodes name. Just choose one, and ssh to it.
     
     (3) Compile and install ndn-cxx in your home directory. And then the NFD code.

         For NFD, you need to compile using debug mode. You may need to specify 
         the PKG_CONFIG_PATH of the ndn-cxx library, and CXXFLAGS to make it work.

     (4) script modification

         clone scripts:
             git clone https://github.com/WU-ARL/NFD_Performance_Testing_on_ONL.git

         Note that John's script is to do the NFD performance testing, not for
         profiling. So we have to do some modifications (this is just a note, we
         will provide the script latter):

         (A) create a script "start_rtr_nfd.sh" to launch callgrind, and let callgrind
             call nfd
          
             ex: valgrind --tool=callgrind /path/to/your/nfd --config nfd.conf \
                 >& /tmp/nfd.log &

         (B) modify the "start_nfd.sh", let it run the latest NFD, not the one
             installed on ONL, which is v0.1.0

             ex: /path/to/your/nfd --config nfd.conf >& /tmp/nfd.log &

         (C) modify "server/config_server.sh", let it run the latest nfdc

         (D) same reason as (C), modify "client/config_client.sh"

         (E) modify "killAll.sh", switch “killall nfd” to "pkill callgrind”
             in the last line.

NFD Testing
===========

  Do test as the README in John's scripts describes.


Check Result
============

  kcachegrind is the GUI tool for callgrind. After the test, callgrind will
  generate a output file named as "callgrind.out.<pid>". You may need to use
  the kcachegrind to open it. 

  kcachegrind:
    http://kcachegrind.sourceforge.net/html/Home.html

  If you use MacOS, it is easier to install qcachegrind (already contained in
  kcachegrind tar file)

