How to configure DBL API UDP and TCP acceleration in FIXAntenna C++

What is Myricom DBL API?

DBLâ„¢ is an optional, user-level, software interface for accelerating applications whose performance depends on network latency. Examples of applications that will benefit from DBLâ„¢ include algorithmic financial trading and others where reduced network latency is beneficial.

More information can be found here: Myricom DBL.

Does FIXAntenna support DBL UDP API acceleration?

Yes, FIXAntenna supports DBL UDP API acceleration for following Market Data adaptors:

    • Bats MD Adaptor 
       
      To use DBL UDP API acceleration in Bats MD Adaptor you need to set the property Bats::RuntimeParameters::readerType.

      Example:

      Source Code
      struct AppListener : Bats::ApplicationListener
      {
      //your implementation of Bats::ApplicationListener interface
      };
      
      int main( int argc, char const* argv[] )
      {
      ...
      	//init FIX Engine
      	Engine::FixEngine::init( );
       
      	AppListener appListener;
       
      	Bats::ApplicationOptions options;
      	//set other options
      	...
      	//Enable using of DBL UDP API acceleration
          options.params.readerType = Bats::IncrementReaderType::MyricomDBL;
          options.params.incrementalThreads = 1;
      
      	//create an application
      	Bats::Application* app = Engine::FixEngine::singleton()->createBatsApplication(options, &appListener);
      ...
      }

      For more information, please, refer to the link:

      Bats::IncrementReaderType


    • Bovespa MD Adaptor
       

      To use DBL UDP API acceleration in Bovespa MD Adaptor you need to set the properties Bovespa::BovespaApplicationParams::transportType_.

      Example:

      Source Code
      class BovespaClientApplicationListener
          : public Bovespa::BovespaApplicationListener
      {
      public:
      	//your implementation of Bovespa::BovespaApplicationListener interface
          BovespaClientApplicationListener(){}
          ~BovespaClientApplicationListener() {}
          virtual void onError( std::string const& errorMsg );
          virtual void process( Engine::FIXMessage const& msg,std::string const & channel_id );
          virtual void onConnectToFeed(std::string const& feedId) {}
          virtual void onDisconnectFromFeed(std::string const& feedId) {}
      };
       
      int main( int argc, char const* argv[] )
      {
      ...
      	//init FIX Engine
      	Engine::FixEngine::init();
       
      	//Create an application listener
          BovespaClientApplicationListener appListener;
      
      	//initialize BovespaApplication parameters
          Bovespa::BovespaApplicationParams params;
      	//set other options
      	...
      	params.transportType_ = Bovespa::BovespaApplicationParams::MyricomDBL;
          
      	//Create an MD application
          Bovespa::BovespaApplication* application = Engine::FixEngine::singleton()->createBovespaApplication( params, &appListener);
      ...
      }

      For more information, please, refer to the link:
      Bovespa::BovespaApplicationParams::Transport


    • Cqg MD Adaptor
       

      To use DBL UDP API acceleration in Cqg MD Adaptor you need to set the properties Cqg::MDApplicationParams::transportType_.

      Example:

      Source Code
      class MyMDApplicationListener : public Cqg::MDApplicationListener
      {
      public:
      	//your implementation of Cqg::MDApplicationListener interface
      	virtual void process( ::Engine::FIXMessage const& msg, FeedID const &feedId );
      };
      
      int main( int argc, char const* argv[] )
      {
      ...
      	//init FIX Engine
      	Engine::FixEngine::init();
       
      	//Create an application listener
      	MyMDApplicationListener listener;
       
      	//initialize parameters
      	Cqg::MDApplicationParams params;
      	//set other options
      	...
      	params.transportType_ = Cqg::MDApplicationParams::MyricomDBL;
      	
      	//Create an MD application
      	Cqg::MDApplication* app = Engine::FixEngine::singleton()->createCqgMDApplication( &listener, params);
       ...
      }

    For more information, please, refer to the link:

    Cqg::MDApplicationParams::Transport


    • MOEX MD Adaptor

      To use DBL UDP API acceleration in MOEX MD Adaptor you need to set the property Micex::Mfix::MDApplicationParams::transportType_.

      Example:

      Source Code
       //init FIX Engine
       Engine::FixEngine::init( );
       
       //Create Application listener (you need to implement the MDApplicationListener interface )
       MDApplicationListener* appListener = new MyMDApplicationListener;
      
       //configure parameters
       Micex::Mfix::MDApplicationParams appParams;
       ...
       appParams.transportType_ = Micex::Mfix::MDApplicationParams::MyricomDBL;
       ...
       //Create Micex MD Application
       Micex::Mfix::MDApplication* app = Engine::FixEngine::singleton()->createMICEXApplication( appParams, appListener );
       

    For more information, please, refer to the link:
    Micex::Mfix::MDApplicationParams::Transport


    • Spectra MD Adaptor
       

      To use DBL UDP API acceleration in Spectra MD Adaptor you need to set the properties Spectra::SpectraApplicationParams::transportType_.  

      Example:

      Source Code
      int main( int argc, char const* argv[] )
      {
      ...
      	//init FIX Engine
      	Engine::FixEngine::init();
       
      	//Create an application listener
      	MyMDApplicationListener listener;
       
      	//initialize parameters
      	Spectra::SpectraApplicationParams params;
      	//set other options
      	...
          params.transportType_ = Spectra::SpectraApplicationParams::MyricomDBL;
          
      	//Create MD Application
          Spectra::SpectraApplication* application = Engine::FixEngine::singleton()->createSpectraApplication( params );
       ...
      }

                    For more information, please, refer to the link:

                    Spectra::SpectraApplicationParams::Transport


    • CME Globex MD Adaptor

      To use DBL UDP API acceleration in Spectra MD Adaptor you need to set the properties Globex::MDApplicationParams::transportType_.    

      Example:

      Source Code
      class MyGlobexApplicationListener : public Globex::MDApplicationListener
      {
      public:
      	virtual void onError( std::string const& error );
      };
       
      int main( int argc, char const* argv[] )
      {
      ...
      	//init FIX Engine
      	Engine::FixEngine::init();
       
      	//Create an application listener
      	MyGlobexApplicationListener listener;
      	// Initialize parameters
      	Globex::MDApplicationParams params;
      	//set other options
      	...
      	params.transportType_ = Globex::MDApplicationParams::MyricomDBL;
      	
      	// Create MDApplication object
      	Globex::MDApplication* application = Engine::FixEngine::singleton()->createMDApplication( params, &listener );
       ...
      }

                   For more information, please, refer to the link:

                  Globex::MDApplicationParams::Transport  

Does FIXAntenna support DBL TCP API acceleration?

 Yes, FIXAntenna supports DBL TCP API acceleration for FIX Sessions.

 To use this option you need to make following changes in your engine.properties configuration file or/and in your source code:

  • Set the property Myricom.Dbl.TcpListenAddresses in your engine.properties configuration file:

    engine.properties
    #DBL TCP listen address and port.
    #Format: <XXX.XXX.XXX.XXX>:<port>. Parameter is optional.
    Myricom.Dbl.TcpListenAddresses = <IP>:<port>
  • In your source code pass the parameter SessionExtraParameters::transport_ when creating a Session:

    Source Code
    Engine::SessionExtraParameters params_;
    //set other parameters
    ...
    //set use Myricom DBL TCP API transport
    params_.transport_ = Engine::MYRICOM_DBL;
    ...
    Engine::Session* pSsn = Engine::FixEngine::singleton()->createSession(applicationListener, SENDER, TARGET, parserID, &params_);

    or you can set the parameter for all Fix Sessions or for a preconfigured FIX Session in your engine.properties configuration file:

    engine.properties
    #Set the default transport for all FIX Sessions (can be changed by using SessionExtraParameters or by the configuration of a particular FIX Session)
    Session.Default.Transport = MYRICOM_DBL
     
    #Set the transport for the particular FIX Session
    Session.SenderCompId/TargetCompID.Transport = MYRICOM_DBL

    Note

    FIX Sessions which uses DBL TCP API acceleration always work in AGGRESSIVE_SEND_AND_RECEIVE_SOCKET_OP_PRIORITY mode

Does the Myricom DBL driver provide other methods for accelerating UDP and TCP?

Yes, there is DBL TA mode that can be run by using the dblrun utility which is provided with the driver package. More information about DBL TA mode and dblrun utility can be found here.