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 Codestruct 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:
- Bovespa MD Adaptor
To use DBL UDP API acceleration in Bovespa MD Adaptor you need to set the properties Bovespa::BovespaApplicationParams::transportType_.
Example:Source Codeclass 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 Codeclass 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
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 Codeint 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 Codeclass 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 CodeEngine::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, ¶ms_);
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.