NET
[Converse Machine Layer]

Collaboration diagram for NET:

NET implementation of machine layer, ethernet in particular. More...


Files

file  machine-dgram.c
 Datagram implementation of Converse NET version.
file  machine-eth.c
 UDP implementation of Converse NET version.
file  machine-gm.c
 Myrinet API GM implementation of Converse NET version.
file  machine-ibverbs.c
 size = CmiMsgHeaderGetLength(msg); Ibverbs (infiniband) implementation of Converse NET version
file  machine-mx.c
 Myrinet API GM implementation of Converse NET version.
file  machine-pxshm.c
 size = CmiMsgHeaderGetLength(msg); pxshm --> posix shared memory based network layer for communication between processes on the same node This is not going to be the primary mode of communication but only for messages below a certain size between processes on the same node for non-smp version only *
file  machine-sysvshm.c
 size = CmiMsgHeaderGetLength(msg); sysvshm --> sysv shared memory based network layer for communication between processes on the same node This is not going to be the primary mode of communication but only for messages below a certain size between processes on the same node for non-smp version only *
file  machine-tcp.c
 TCP implementation of Converse NET version.
file  machine.c
 Basic NET implementation of Converse machine layer.

Data Structures

struct  DgramHeader
struct  DgramAck
struct  OutgoingMsgStruct
struct  ExplicitDgramStruct
struct  ImplicitDgramStruct
struct  FutureMessageStruct
struct  OtherNodeStruct
struct  CmiIdleState
struct  PendingMsgStruct
struct  CmiIdleState
struct  CmiCb
struct  CmiRMA
struct  CmiRMAMsg
struct  RMAPutMsg
struct  infiIncTokenAckPacket
struct  CmiIdleState
struct  infiPacketHeader
struct  infiRdmaPacket
struct  infiBuffer
struct  infiBufferPool
 At the moment it is a simple pool with just a list of buffers TODO; extend it to make it an element in a linklist of pools. More...
struct  infiPacketStruct
struct  infiBufferedBcastStruct
struct  infiBufferedBcastPoolStruct
struct  infiContext
struct  infiAddr
 Represents a qp used to send messages to another node There is one for each remote node. More...
struct  infiOtherNodeData
struct  infiCmiChunkMetaDataStruct
struct  infiCmiChunkPool
struct  infiDirectRequestPacket
struct  directPollingQNodeStruct
struct  infiDirectHandleStruct
struct  infiDirectHandleTableStruct
struct  PendingSentMsgStruct
struct  CmiIdleState
struct  sharedBufHeader
 This struct is used as the first portion of a shared memory region, followed by data. More...
struct  sharedBufData
struct  PxshmSendQ
struct  PxshmContext
struct  sharedBufHeader
 This struct is used as the first portion of a shared memory region, followed by data. More...
struct  sharedBufData
struct  SysvshmSendQ
struct  SysvshmContext
struct  CmiIdleState

Typedefs

typedef OutgoingMsgStructOutgoingMsg
typedef ExplicitDgramStructExplicitDgram
typedef ImplicitDgramStructImplicitDgram
typedef enum __qp_connection_state qp_connection_state_t
typedef FutureMessageStructFutureMessage
typedef OtherNodeStructOtherNode
typedef PendingMsgStructPendingMsg
typedef CmiCb CmiCb
typedef CmiRMA CmiRMA
typedef CmiRMAMsg CmiRMAMsg
typedef RMAPutMsg RMAPutMsg
typedef infiPacketStructinfiPacket
typedef infiBufferedBcastPoolStructinfiBufferedBcastPool
typedef infiCmiChunkMetaDataStruct infiCmiChunkMetaData
typedef directPollingQNodeStruct directPollingQNode
typedef infiDirectHandleStruct infiDirectHandle
typedef infiDirectHandleTableStruct infiDirectHandleTable
typedef PendingSentMsgStructPendingSentMsg

Enumerations

enum  __qp_connection_state { QP_CONN_STATE_PRE_CONNECT = 1, QP_CONN_STATE_CONNECTED, QP_CONN_STATE_CONNECTION_LOST, QP_CONN_STATE_CONNECTION_CLOSED }
enum  { INFI_HEADER_DATA = 21, INFI_DATA }
 Stored in the OtherNode structure in machine-dgram.c Store the per node data for ibverbs layer. More...
enum  entities { SENDER, RECEIVER }

Functions

unsigned char computeCheckSum (unsigned char *data, int len)
static void randomCorrupt (char *data, int len)
static void setspeed_atm ()
static void setspeed_eth ()
static void setspeed_gigabit ()
static void extract_args (char **argv)
infiOtherNodeDatainitInfiOtherNodeData (int node, int addr[3])
void infiPostInitialRecvs ()
void CommunicationServerSysvshm ()
void CommunicationServerPxshm ()
static void OtherNode_init (OtherNode node)
int CmiLongSendQueue (int forNode, int longerThan)
 Return 1 if our outgoing message queue for this node is longer than this many bytes.
void CmiGmConvertMachineID (unsigned int *mach_id)
void CmiAmmassoNodeAddressesStoreHandler (int pe, struct sockaddr_in *addr, int port)
static void node_addresses_store (ChMessage *msg)
void printNetStatistics (void)
void GarbageCollectMsg (OutgoingMsg ogm)
void DiscardImplicitDgram (ImplicitDgram dg)
static void CommunicationsClock (void)
static void CommunicationsClockCaller (void *ignored)
static void CommunicationPeriodic (void)
static void CommunicationPeriodicCaller (void *ignored)
void DeliverViaNetwork (OutgoingMsg ogm, OtherNode node, int rank, unsigned int broot, int copy)
void SendSpanningChildren (OutgoingMsg ogm, int root, int size, char *msg, unsigned int startpe, int nodesend)
void SendHypercube (OutgoingMsg ogm, int root, int size, char *msg, unsigned int curcycle, int nodesend)
int CmiBarrier ()
int CmiBarrierZero ()
static CmiIdleStateCmiNotifyGetState (void)
static void CmiNotifyBeginIdle (CmiIdleState *s)
static void CmiNotifyStillIdle (CmiIdleState *s)
void CmiNotifyIdle (void)
int CheckSocketsReady (int withDelayMs)
void TransmitAckDatagram (OtherNode node)
void TransmitImplicitDgram (ImplicitDgram dg)
void TransmitImplicitDgram1 (ImplicitDgram dg)
int TransmitAcknowledgement ()
int TransmitDatagram ()
void EnqueueOutgoingDgram (OutgoingMsg ogm, char *ptr, int len, OtherNode node, int rank, int broot)
void AssembleDatagram (OtherNode node, ExplicitDgram dg)
void AssembleReceivedDatagrams (OtherNode node)
void IntegrateMessageDatagram (ExplicitDgram dg)
void IntegrateAckDatagram (ExplicitDgram dg)
void ReceiveDatagram ()
void CmiHandleImmediate ()
static void CommunicationServer (int sleepTime, int where)
void CmiMachineInit (char **argv)
void CmiCommunicationInit (char **argv)
void CmiMachineExit ()
static void sendBarrierMessage (int pe)
static void recvBarrierMessage ()
void handleGetSrc (void *msg)
void handleGetDest (void *msg)
void enqueue_sending (char *msg, int length, OtherNode node, int size)
static void alarmcallback (void *context)
static int processEvent (gm_recv_event_t *e)
static void send_progress ()
static void alarmInterrupt (int arg)
static int gmExit (int code, const char *msg)
static char * getErrorMsg (gm_status_t status)
static void ServiceCharmrun_nolock ()
static void CommunicationServer_nolock (int withDelayMs)
static void processMessage (char *msg, int len)
void drop_send_callback (struct gm_port *p, void *context, gm_status_t status)
void send_callback (struct gm_port *p, void *context, gm_status_t status)
static void send_callback_nothing (struct gm_port *p, void *context, gm_status_t status)
void CmiCheckGmStatus ()
void * CmiDMAAlloc (int size)
int CmiRegisterMemory (void *addr, unsigned int size)
int CmiUnRegisterMemory (void *addr, unsigned int size)
void put_callback (struct gm_port *p, void *context, gm_status_t status)
void * CmiPut (unsigned int sourceId, unsigned int targetId, void *Saddr, void *Taddr, unsigned int size)
void CmiPutCb (unsigned int sourceId, unsigned int targetId, void *Saddr, void *Taddr, unsigned int size, CmiRdmaCallbackFn fn, void *param)
void get_callback_dest (struct gm_port *p, void *context, gm_status_t status)
void * CmiGet (unsigned int sourceId, unsigned int targetId, void *Saddr, void *Taddr, unsigned int size)
void CmiGetCb (unsigned int sourceId, unsigned int targetId, void *Saddr, void *Taddr, unsigned int size, CmiRdmaCallbackFn fn, void *param)
int CmiWaitTest (void *obj)
static void initInfiCmiChunkPools ()
 There are INFINUMPOOLS of memory.
static infiPacket newPacket ()
static int pollSendCq (const int toBuffer)
void createLocalQps (struct ibv_device *dev, int ibPort, int myNode, int numNodes, struct infiAddr *localAddr)
static uint16_t getLocalLid (struct ibv_context *context, int port)
static int checkQp (struct ibv_qp *qp)
static void checkAllQps ()
static void send_partial_init ()
void copyInfiAddr (ChInfiAddr *qpList)
infiBufferPoolallocateInfiBufferPool (int numRecvs, int sizePerBuffer)
void postInitialRecvs (struct infiBufferPool *recvBufferPool, int numRecvs, int sizePerBuffer)
 Post the buffers as recv work requests.
static void increaseTokens (OtherNode node)
static int pollRecvCq (const int toBuffer)
static void getFreeTokens (struct infiOtherNodeData *infiData)
static void EnqueuePacket (OtherNode node, infiPacket packet, int size, struct ibv_mr *dataKey)
 Packetize this data and send it.
static void EnqueueDummyPacket (OtherNode node, int size)
static void EnqueueDataPacket (OutgoingMsg ogm, OtherNode node, int rank, char *data, int size, int broot, int copy)
static void EnqueueRdmaPacket (OutgoingMsg ogm, OtherNode node)
static void processAllBufferedMsgs ()
static void processRecvWC (struct ibv_wc *recvWC, const int toBuffer)
static void processSendWC (struct ibv_wc *sendWC)
static void processAsyncEvents ()
static void pollCmiDirectQ ()
static void processRdmaWC (struct ibv_wc *rdmaWC, const int toBuffer)
static void insertBufferedBcast (char *msg, int size, int broot, int asm_rank)
static void handoverMessage (char *newmsg, int total_size, int rank, int broot, int toBuffer)
static void processMessage (int nodeNo, int len, char *msg, const int toBuffer)
static void increasePostedRecvs (int nodeNo)
static void processRdmaRequest (struct infiRdmaPacket *rdmaPacket, int fromNodeNo, int isBuffered)
static void processRdmaAck (struct infiRdmaPacket *rdmaPacket)
static void EnqueueRdmaAck (struct infiRdmaPacket *rdmaPacket)
static void processDirectWC (struct infiRdmaPacket *rdmaPacket)
static infiBufferedBcastPool createBcastPool ()
static void processBufferedBcast ()
static void processBufferedRdmaAcks ()
static void processBufferedRdmaRequests ()
infiCmiChunkMetaDataregisterMultiSendMesg (char *msg, int size)
static void * getInfiCmiChunkThread (int dataSize)
static void * getInfiCmiChunk (int dataSize)
void * infi_CmiAlloc (int size)
void infi_CmiFreeDirect (void *ptr)
void infi_CmiFree (void *ptr)
void addHandleToPollingQ (infiDirectHandle *handle)
static infiDirectHandleTable ** createHandleTable ()
static void calcHandleTableIdx (int handle, int *tableIdx, int *idx)
static void initializeLastDouble (void *recvBuf, int recvBufSize, double initialValue)
infiDirectUserHandle CmiDirect_createHandle (int senderNode, void *recvBuf, int recvBufSize, void(*callbackFnPtr)(void *), void *callbackData, double initialValue)
 To be called on the receiver to create a handle and return its number.
void CmiDirect_assocLocalBuffer (struct infiDirectUserHandle *userHandle, void *sendBuf, int sendBufSize)
void CmiDirect_put (struct infiDirectUserHandle *userHandle)
void CmiDirect_readyMark (struct infiDirectUserHandle *userHandle)
void CmiDirect_readyPollQ (struct infiDirectUserHandle *userHandle)
void CmiDirect_ready (struct infiDirectUserHandle *userHandle)
static int receivedDirectMessage (infiDirectHandle *handle)
static const char * getErrorMsg (mx_return_t rc)
static void processStatusCode (mx_status_t status)
static void PumpMsgs (int getone)
static void ReleaseSentMsgs (void)
static void PumpEvents (int getone)
void recv_callback (void *context, uint64_t match_info, int length)
void processFutureMessages (OtherNode node)
void EnqueueOutgoingDgram (OutgoingMsg ogm, char *ptr, int dlen, OtherNode node, int rank, int broot, int copy)
void CmiMXMakeConnection ()
void calculateNodeSizeAndRank (char **)
void setupSharedBuffers ()
void initAllSendQs ()
void CmiInitPxshm (char **argv)
void tearDownSharedBuffers ()
void CmiExitPxshm ()
int CmiValidPxshm (OutgoingMsg ogm, OtherNode node)
int PxshmRank (int dst)
void pushSendQ (PxshmSendQ *q, OutgoingMsg msg)
int sendMessage (OutgoingMsg ogm, sharedBufData *dstBuf, PxshmSendQ *dstSendQ)
int flushSendQ (int dstRank)
void CmiSendMessagePxshm (OutgoingMsg ogm, OtherNode node, int rank, unsigned int broot)
void CmiInitSysvshm (char **argv)
void CmiExitSysvshm ()
int CmiValidSysvshm (OutgoingMsg ogm, OtherNode node)
int SysvshmRank (int dst)
void pushSendQ (SysvshmSendQ *q, OutgoingMsg msg)
int sendMessage (OutgoingMsg ogm, sharedBufData *dstBuf, SysvshmSendQ *dstSendQ)
void CmiSendMessageSysvshm (OutgoingMsg ogm, OtherNode node, int rank, unsigned int broot)
void emptyAllRecvBufs ()
void flushAllSendQs ()
static void CmiNotifyStillIdleSysvshm (CmiIdleState *s)
static void CmiNotifyBeginIdleSysvshm (CmiIdleState *s)
void createShmObjectsAndSems (sharedBufData **bufs, int *bufnames, int issend)
void initSendQ (SysvshmSendQ *q, int size)
OutgoingMsg popSendQ (SysvshmSendQ *q)
void emptyRecvBuf (sharedBufData *recvBuf)
static void handoverSysvshmMessage (char *newmsg, int total_size, int rank, int broot)
void ReceiveDatagram (int node)
int TransmitDatagram (int pe)
static void CmiCheckSocks ()
int CheckSocketsReady (int withDelayMs, int output)
static char * getMaxBuf ()
static void freeMaxBuf (char *buf)
static void IntegrateMessageDatagram (char **msg, int len)
static void open_tcp_sockets ()
static void InternalPrintf (const char *f, va_list l)
int printf (const char *fmt,...)
int CmemInsideMem ()
void CmemCallWhenMemAvail ()
static void ConverseRunPE (int everReturn)
void CmiYield (void)
void ConverseCommonExit (void)
void TokenUpdatePeriodic ()
void getAvailSysMem ()
static void CmiDestoryLocks ()
static void machine_exit (int status)
static void charmrun_abort (const char *)
static void KillEveryone (const char *msg)
static void KillEveryoneCode (int n)
static void KillOnAllSigs (int sigNo)

Variables

static int Cmi_max_dgram_size
static int Cmi_os_buffer_size
static int Cmi_window_size
static int Cmi_half_window
static double Cmi_delay_retransmit
static double Cmi_ack_delay
static int Cmi_dgram_max_data
static int Cmi_comm_periodic_delay
static int Cmi_comm_clock_delay
static int writeableAcks
static int writeableDgrams
static OtherNodenodes_by_pe
static OtherNode nodes
static char statstr [10000]
 Printing Net Statistics -- milind.
static ExplicitDgram Cmi_freelist_explicit
static ImplicitDgram Cmi_freelist_implicit
static int ctrlskt_ready_read
static int dataskt_ready_read
static int dataskt_ready_write
static double Cmi_ack_last
static double Cmi_check_last
int CmiIdleState::nIdles
CmiState CmiIdleState::cs
int getSrcHandler
int getDestHandler
static gm_alarm_t gmalarm
static FILE * gmf
static intgm_stats
static int possible_streamed = 0
static int defrag = 0
static int maxQueueLength = 0
static int pendinglen = 0
static PendingMsg pend_freelist = NULL
static char * msgpool [MAXMSGLEN]
static int msgNums = 0
static int maxMsgSize = 0
static int maxsize
enum ibv_mtu mtu = IBV_MTU_2048
static int page_size
static int mtu_size
static int packetSize
static int dataSize
static int rdma
static int rdmaThreshold
static int firstBinSize
static int blockAllocRatio
static int blockThreshold
static int maxRecvBuffers
static int maxTokens
static int sendPacketPoolSize
static double _startTime = 0
static int regCount
static int pktCount
static int msgCount
static int minTokensLeft
static double regTime
static double processBufferedTime
static int processBufferedCount
PCQueue ** queuePool
static int TESTneighbor
static int TESTfrees
int infiPacketHeader::nodeNo
int infiPacketHeader::psn
int infiRdmaPacket::type
ibv_mr infiRdmaPacket::key
ibv_mr * infiRdmaPacket::keyPtr
int infiRdmaPacket::remoteSize
char * infiRdmaPacket::remoteBuf
void * infiRdmaPacket::localBuffer
OutgoingMsg infiRdmaPacket::ogm
infiRdmaPacketinfiRdmaPacket::next
infiRdmaPacketinfiRdmaPacket::prev
char * infiBuffer::buf
int infiBuffer::size
ibv_mr * infiBuffer::key
infiBufferinfiBufferPool::buffers
infiBufferPoolinfiBufferPool::next
int infiPacketStruct::size
infiPacketHeader infiPacketStruct::header
ibv_mr * infiPacketStruct::keyHeader
OtherNodeStructinfiPacketStruct::destNode
infiPacketStructinfiPacketStruct::next
OutgoingMsg infiPacketStruct::ogm
ibv_sge infiPacketStruct::elemList [2]
ibv_send_wr infiPacketStruct::wr
int infiBufferedBcastStruct::size
int infiBufferedBcastStruct::broot
int infiBufferedBcastStruct::asm_rank
int infiBufferedBcastStruct::valid
infiBufferedBcastStruct infiBufferedBcastPoolStruct::bcastList [BCASTLIST_SIZE]
int infiBufferedBcastPoolStruct::count
fd_set infiContext::asyncFds
timeval infiContext::tmo
int infiContext::ibPort
ibv_pd * infiContext::pd
ibv_cq * infiContext::sendCq
ibv_cq * infiContext::recvCq
ibv_srq * infiContext::srq
ibv_qp ** infiContext::qp
infiAddrinfiContext::localAddr
infiPacket infiContext::infiPacketFreeList
infiBufferPoolinfiContext::recvBufferPool
infiPacketHeader infiContext::header
int infiContext::srqSize
int infiContext::sendCqSize
int infiContext::recvCqSize
int infiContext::tokensLeft
infiBufferedBcastPool infiContext::bufferedBcastList
infiRdmaPacketinfiContext::bufferedRdmaAcks
infiRdmaPacketinfiContext::bufferedRdmaRequests
int infiContext::insideProcessBufferedBcasts
static struct infiContextcontext
int infiOtherNodeData::state
int infiOtherNodeData::totalTokens
int infiOtherNodeData::tokensLeft
int infiOtherNodeData::nodeNo
int infiOtherNodeData::postedRecvs
int infiOtherNodeData::broot
int infiOtherNodeData::psn
int infiOtherNodeData::recvPsn
int infiCmiChunkMetaDataStruct::poolIdx
void * infiCmiChunkMetaDataStruct::nextBuf
infiCmiChunkHeaderStructinfiCmiChunkMetaDataStruct::owner
int infiCmiChunkMetaDataStruct::count
int infiCmiChunkMetaDataStruct::parentPe
void * infiCmiChunkPool::startBuf
int infiCmiChunkPool::count
infiCmiChunkPool ** infiCmiChunkPools
static unsigned int _count = 0
int errno
static int _countAsync = 0
int infiDirectRequestPacket::handle
ibv_mr infiDirectRequestPacket::senderKey
void * infiDirectRequestPacket::senderBuf
int infiDirectRequestPacket::senderBufSize
directPollingQNodeStructdirectPollingQNodeStruct::next
double * directPollingQNodeStruct::lastDouble
void * infiDirectHandleStruct::buf
int infiDirectHandleStruct::size
ibv_mr * infiDirectHandleStruct::key
void(* infiDirectHandleStruct::callbackFnPtr )(void *)
void * infiDirectHandleStruct::callbackData
infiDirectUserHandle infiDirectHandleStruct::userHandle
infiRdmaPacketinfiDirectHandleStruct::rdmaPacket
directPollingQNode infiDirectHandleStruct::pollingQNode
infiDirectHandleTableStructinfiDirectHandleTableStruct::next
directPollingQNodeheadDirectPollingQ = NULL
directPollingQNodetailDirectPollingQ = NULL
static infiDirectHandleTable ** sendHandleTable = NULL
static infiDirectHandleTable ** recvHandleTable = NULL
static intrecvHandleCount = NULL
static PendingSentMsg pmpool [MAXPMS]
static int pmNums = 0
static PendingSentMsg sent_handles = NULL
static PendingSentMsg sent_handles_end = NULL
CmiUInt8 MATCH_FILTER = 0x11111111FFFFFFFFL
CmiUInt8 MATCH_MASK = 0xffffffffffffffffL
static int maxsize
int sharedBufHeader::bytes
OSSpinLock sharedBufHeader::lock
volatile int sharedBufHeader::flagSender
volatile int sharedBufHeader::flagReceiver
volatile int sharedBufHeader::turn
sharedBufHeader