Hackfest March 2014 at Ettus Research

Nathan West: Perf Counters and Monitor Enhancements

  • Added new performance counters
    • CPU cycles
    • branch instructions
    • branch misses
    • cache references
  • Uses same interface as used by perf; built in support to Performance Counters
  • Updated the gr-perf-monitorx:
    • Can select which perf counter the block size is based on (currently, only reps work time counter)
    • Tooltip popup for each block to show all PCs

Example:

WIP: https://github.com/n-west/gnuradio/tree/linux-perf-counters

Todo:

  • Make platform independent (ifdef out for OSX and Windows for now)
  • Make sure we know the kernel requirements; check for them
  • Test on ARM and any other platforms we can
  • Add percent of total to tooltip popup

By GRCon14, have some success case and walk-through on how to use them. Take a block and get performance counter info; identify the areas that need work, fix them, and show that that changes the counters.

Tom Rondeau and Nick McCarthy

  • Focused on integrating fecapi from https://github.com/namccart/fecapi into GNU Radio as part of gr-fec.
  • Allows us to use an "encoder" and "decoder" block in a flowgraph.
    • encoding and decoding for specific codes are passed as objects to these blocks
    • GR blocks take care of things related to codes but not specific to any specific code
      • puncturing
      • threading models: 'capillary' is the default as a way to branch the threading model
  • We have convolutional codes (rate=2, K=7) working
  • Working on getting LDPC working from last GSoC as FECAPI-compatible
    • Been in touch with Manu and Tracie to see about competing this
  • Shown the CC working with a GNU Radio modem over a simulated channel
  • Future Work
    • Near term:
      • Wrap up work done to integrate FECAPI; fix up some of the function calls
      • DOCUMENTATION
      • Clean up new work done to make detection and soft decision modems work with FEC blocks
    • Longer term:
      • More codes: Reed-Solomon as outer code; LDPC; others
      • Ability to adjust codes are runtime

Nick Foster

  • Improving MSK handling
  • MSK correlator block for burst sync
    • extension of correlate_and_sync for MSK (with Gaussian filter)
      • Set BT=5 (i.e., some large number) for MSK
  • New MSK timing synchronization block
  • HDLC framer and deframer
    • already issued a pull request (172)

Tom Tsou (not GNU Radio specific)

  • Showed an LTE 20 MHZ signal receiver
  • Showed timing recovery with Zadoff-Chu
    • sub-banded to ~1 Msps
  • Showed off his 3GPP approved "butterfly" channel model
    • two antennas connected to a USRP moved up-and-down rapidly
  • Also used handcar model
    • USRP on a cart pushed back and forth
  • QAM64 received signal in realtime

Tom Tsou's LTE reciever

Ben Reynwar

  • hierblocks for PFB channelizers (for threading control)
    • pull request 180
  • working on synthesizers
  • want: hier block for building reconstruction filters
    • Develop a model to autobuild a channelizer for for different channels and channel sizes
    • Related to Tom Rondeau's recent paper
    • The main trick will be in defining the channel structure

John Malsbury and Balint Seeber

  • worked on gr-mac (formerly gr-precog migrated to 3.7)
  • Support for:
    • ARQ
    • fragmenting
    • ARP
    • TUN/TAP or raw socket interface
    • Passing PDUs to higher layers
  • Showed OTA
    • played BZTank (or BZFlag) over GR link
  • Balint issued a number of pull request patches to improve GR's support for gr-mac

Here's Balint and John showing off their work.

Philip Balister

  • Improving OpenEmbedded support for GNU Radio
    • fixed issue with missing libgnuradio-xxx.so (without version)
    • almost fixed swig2.0 (CMake looks for swig2.0 before swig; confusing things)
  • This work will allow us to use the SDK to build both GNU Radio and GR OOT projects

Michael Dickens

  • OSX cpu-thread affinity work:
    • Determined that OSX kernel (mach / darwin), while providing an API for thread-cpu affinity, really-truly does not actually implement the functionality for doing so;
    • The provided API functions are "processor_set_create" and "processor_set_destroy" from processor.c, and "thread_assign" from thread.c
    • There is one "CPU set" (global "pset0" from processor.c) which contains all active processors;
    • Threads are assigned to active processors in the global CPU set as determined by the selected scheduling protocol (e.g., FIFO, RR) only;
    • User (even as sudo) has no control over thread-cpu assignments;
    • Work abandoned; no need to address this issue again! !@#% Apple ...
  • 3 pull requests to GR maint, with 5 fixes including ticket #660
  • Started addressing the "two-clock" problem:
    • See, e.g., this thread on the GR discussion list
    • When more than 1 sink/source is sample-rate based (e.g., audio source -> uhd sink);
    • Actual sample rates will generally be close to those specified, but can easily be different by an unknown amount;
    • When the sample rates differ, the flow graph will either eventually starve (sink is going faster than source), or back-pressure (source is going faster than sink);
    • Proposed solution:
      • Embed an arbitrary resampler to adjust the rates of a hardware source/sink once data is in the SDR flow-graph, or, if possible, using the hardware itself (e.g., OSX audio can do this easily);
      • 1 input, 1 output; watch buffer "fullness" and try to keep within "reasonable" bounds (e.g., 25% to 75% full);
      • Would be completely optional, disabled by default, enabled by user preference variable (name is to be decided);
      • Implemented as a block inserted automatically between hardware source/sink and the next block, 1 input / 1 output;
      • Inserted in flat_flowgraph or block_executor;
      • Work in progress.

Tim O'Shea

  • Focused on understanding the differences and uses of tagged stream blocks versus/with message PDUs
  • Performance measurement and comparisons of equivalent tagged stream blocks and message blocks https://github.com/osh/gr-chunky
  • Fix pmt's to_python and from_python methods for numpy arrays and uniform vectors for all supported types
  • Looking into problem of flow control in message passing system
  • Borrowed Phil's ODroid XU to add Arm-A15 benchmarks to http://stats.gnuradio.org/
  • Worked on improved TDMA burst modem capabilities along with updated message-enabled eventstream blocks
  • Built and posted a set of fpdu and cpdu plotting message blocks to be used in QT Guis https://github.com/osh/gr-pyqt

perf_counters_tooltip.jpg (56.7 KB) Tom Rondeau, 03/28/2014 09:11 pm

tsou-lte_constel.jpg - Tom Tsou's LTE reciever (1.53 MB) Tom Rondeau, 03/30/2014 02:22 am

balint_and_john_mac.png (914 KB) Tom Rondeau, 04/03/2014 05:27 pm