Title: Connectionless Mode and User Defined DDM in RTING V6
1Connectionless Mode and User Defined DDM in
RTI-NG V6
- Mark Hyett
- mhyett_at_dctd.saic.com
- Roger Wuerfel
- Roger.D.Wuerfel_at_saic.com
2Overview
- Introduction
- Connectionless Mode
- Need
- Implementation
- Usage
- Experience
- User Defined DDM
- Need
- Implementation
- Usage
- Summary
3Introduction
- RTI-NG was designed for configurability and
extensibility to allow its use in a broad range
of simulation types - Each simulation type has different requirements
for - Performance
- Reliability
- Operational characteristics
- RTI 1.3NGv6 introduced two new features
- Connectionless Mode
- User Defined DDM
4Need for Connectionless Mode
- RTI-NGs default configuration creates reliable
connections between all the federates - Federates that are not IF Spec compliant cause
problems - Crashing federates
- Network outages
- Federates in debuggers
- Requires cleanup of broken connections or
buffering of data - IF Spec does not address this type of fault
tolerance
5Connectionless Mode
- Remove reliable traffic and reliable connections
- Federate data
- RTI administrative traffic
- IF Spec implies some reliable communication so
some services are not available - Reliable transportation type for federate data
- Time Management
- Ownership Management
- Save and Restore
- Synchronization
- MOM
- DDM is still available!
6Connectionless Mode Implementation
- All network traffic is UDP multicast
- Federate handle is random and broadcast out for
collision detection - Federation handle is hash of federation name and
FED file - Lazy Discovery
- No rtiexec or fedex processes
- rtiConsole replaced with federateList that uses
best effort broadcast to discover federates
7Connectionless Mode Usage
- RTI.RTIMode RID file parameter specifies
Standard or Connectionless - Standard mode is the default, verifiable mode
- Since object discovery and deletes are best
effort, federates need to implement heartbeat and
timeout semantics - Crashed federates need only wait for objects to
time out before rejoining
8Connectionless Mode Experience in MC02
- Federation execution ran for two weeks, 24/7 over
a WAN connecting 5 sites - Federation consisted of about 90 federates
representing 42 simulations - Federation stayed up for the entire two weeks
with - Federates crashing
- Whole sites disappearing
- Network CRC errors occurring
9Need for User Defined DDM
- DDM is designed to improve network performance by
providing data segmentation based on federation
knowledge - There are many potential implementations of DDM
- One DDM implementation may not be optimal for all
DDM schemes - RTI-NG provides 3 different implementations
- MC02 federates were already optimized to use
inset grids as implemented in the RTI-S DDM
strategy - Re-optimization for RTI-NG strategy would have
lost optimization for RTI-S
10User Defined DDM Implementation
- Similar to FedTime
- Users implement a defined DDM class and compile
it as a separate dynamic library - Swap in the new dynamic library for the one
supplied with the RTI-NG distribution - Implementation must map RTIRegion, class,
and/or attribute instances to a list of RTI-NG
communication channels - The RTI-NG will then handle
- Setting up connections
- Sending/receiving data
- Removing connections as needed.
11User Defined DDM Steps
- Initialize user code
- Ask user code for a list of channels to create
along with a requested transport protocol to use - Ask the user code which information it needs in
order to compute channel mappings - As needed, ask the user code for channel mappings
between Regions, Object/Interaction classes,
Attributes and their associated channels - Shutdown user code
12User Defined DDM Usage
- Select User DDM in the RID file
- RTI-NG DDM strategies are still available after
swapping libraries - During execution the RTI-NG will periodically ask
the user DDM code for a mapping between an
RTIRegion instance and a list of channels
13Summary
- Connectionless mode allows better fault tolerance
for non-compliant federates at the expense of
availability of some HLA services - User defined DDM gives federation designers the
flexibility to map RTIRegion instances to
channels in a federation specific way to
optimized performance
14Additional Information
- include ltRTI.hhgt
- include ltvectorgt
- include ltsetgt
- include ltutilitygt
- include ltstringgt
- ifndef _RtiUserDefinedDdmStrategy_h
- define _RtiUserDefinedDdmStrategy_h
- // Setup the windows export macro
- if defined(_WIN32)
- if defined(BUILDING_USERDDM)
- // define the proper qualifiers to import/export
symbols from/to DLL - define RTI_EXPORT_USERDDM __declspec(dllexpor
t) - else // ! BUILDING USERDDM
- define RTI_EXPORT_USERDDM __declspec(dllimpor
t) - endif // BUILDING_USERDDM
- else // !WIN32
15Additional Information (contd)
- class RTI_EXPORT_USERDDM RtiUserDefinedDdmStrategy
-
- public
-
- typedef int ChannelId
- typedef stdpairltChannelId,
RTITransportationHandlegt - ChannelToTransportationPair
- typedef stdvectorltChannelToTransportationPai
rgt - ChannelToTransportationList
- typedef stdsetltChannelIdgt ChannelSet
- public
- // Default ctor will get called when a
federate joins a federation - RtiUserDefinedDdmStrategy(stdstring const
optionsFromRidFile) -
16Additional Information (contd)
- // This method will get called after the ctor
but before any other - // methods. This method returns the list of
channel IDs along with - // their associated transportation type. The
RTI will use this - // information to create the proper
communication channels. Each - // channelId must be unique and may not
change throughout the existance - // of the RtiUserDefinedDdmStrategy instance.
- virtual ChannelToTransportationList
getChannelToTransportationList() - // If the user ddm strategy needs class
and/or attribute handles - // to compute channelSets, then the value
true should be returned from - // the appropriate method(s). If a class or
attribute handle is - // not needed to compute channelSets, then
false should be returned for - // the appropriate method(s). Class or
attribute data will not - // be passed to the getXXXChannelSet methods
for each false value and - // will thus improve performance. These
methods may only be called - // once by the RTI and thus the value
returned should be considered - // constant throughout the scope of the
RtiUserDefinedDdmStrategy instance. - virtual bool needObjectClassToComputeChannels(
) - virtual bool needAttributeToComputeChannels()
17Additional Information (contd)
- // These methods may be called many times
thoughout the execution of the - // federate. The method returns the list of
channel IDs to be used for - // outgoing updates interactions. The list
must contain unique IDs. - // Each ID must have been returned previously
by the - // getChannelToTransportationList() method.
The TransportationHandle - // parameter is always valid and represents
the requested - // transportation types of the outgoing
channel(s). - // The ObjectClassHandle InteractionClassHan
dle parameters are invalid - // if needClassToComputeChannels() previously
returned false. The - // AttributeHandle parameter is invalid if
needAttributeToComputeChannels() - // previously returned false. The ChannelSet
returned will be used - // by the RTI to send data to each of the
channels listed. In general, - // these methods are only called whenever
publications or regions used - // for publications change but may, in fact,
be called at any time. - virtual ChannelSet getOutgoingChannelSet(
- RTITransportationHandle
desiredTransportationTypeOfChannels, - const RTIRegion region,
- RTIObjectClassHandle objectClassHandle,
- RTIAttributeHandle attributeHandle)
18Additional Information (contd)
- // These methods may be called many times
thoughout the execution of the - // federate. The method returns the list of
channel IDs to be used for - // receiving updates interactions. The
list must contain unique IDs. - // Each ID must have been returned previously
by the - // getChannelToTransportationList() method.
- // The ObjectClassHandle InteractionClassHan
dle parameters are invalid - // if needClassToComputeChannels() previously
returned false. The - // AttributeHandle parameter is invalid if
needAttributeToComputeChannels() - // previously returned false. The ChannelSet
returned will be used - // by the RTI to subscribe to data from each
of the channels listed. - // Channels used for both Reliable
Best_effort traffic should be - // returned in the ChannelSet.
- // In general, these methods are only called
whenever subscriptions or - // regions used for subscriptions change but
may, in fact, be called at - // any time.
- virtual ChannelSet getIncomingChannelSet(
- const RTIRegion region,
- RTIObjectClassHandle objectClassHandle,
- RTIAttributeHandle attributeHandle)
19Additional Information (contd)
- // This method should return the channel ID to
use for broadcast LRC - // communication using the specified
Transportation type. - // This method will be called when the LRC
needs to communicate with - // other LRCs. The method may only be called
once so values returned - // should not change throughout the
execution. - virtual ChannelId getOutgoingBroadcastAdminist
rationChannel( - RTITransportationHandle
desiredTransportationTypeOfChannel) - // This method should return the channel ID
to use for direct LRC to LRC - // communication using the specified
Transportation type. - // This method will be called when the LRC
needs to communicate - // directly with another specific LRC. The
method may only be called - // once so values returned should not change
throughout the execution. - virtual ChannelId getOutgoingPoint2PointAdmini
strationChannel( - RTITransportationHandle
desiredTransportationTypeOfChannel, - RTIFederateHandle)
- // This method should return the channel ID
to use for receiving - // broadcast LRC communication using the
specified Transportation type.
20Additional Information (contd)
- // This method should return the channel ID to
use for receiving - // direct LRC to LRC communication using the
specified Transportation type. - // This method will be called when the LRC
needs to subscribe to - // communications directly from other LRCs.
The method may only be called - // once so values returned should not change
throughout the execution. - virtual ChannelId getIncomingPoint2PointAdmini
strationChannel( - RTITransportationHandle
desiredTransportationTypeOfChannel, - RTIFederateHandle)
-
- endif //_RtiUserDefinedDdmStrategy_h