Hackfest1403-2

From GNU Radio
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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:

Perf counters tooltip.png

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

Tsou-lte constel.jpg

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.

Balint and john mac.png

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