Network¶
Socket Server¶
- 
class paddle::SocketServer¶
- class for holding all parameters processing for current port - Note
- each parameter server inherits from one socket server, each server contains serveral woker threads which are to parallelize the processing of computation, but share some common datas stored in child class of socketserver.
 - Inherits from paddle::Thread - Subclassed by paddle::ProtoServer - Public Types - 
typedef std::function<void(const std::vector<iovec> &outputIovs)> ResponseCallback¶
 - Public Functions - 
SocketServer(const std::string &addr, int port, int rdmaCpu)¶
- class constructor for SocketServer - Note
- start one socket server which hosts parameter server process. rdmaCpu is passed to rdma deamon for better performance, and start tcp socket instead of rdma socket if rdmaCpu is equal to -1. Each trainer process starts one connection to one socket server, and use ports_num to build more connections to harness fat communication channel if necessary. each connection is controlled by single thread with blocking read and write.
- Parameters
- addr-- sock bind address 
- port-- sock bind port 
- rdmaCpu-- rdma sock bind cpu core 
 
 
 - 
~SocketServer()¶
 - 
virtual void run()¶
- start a socket server - Note
- framework for starting socket server
 
 - Protected Functions - 
virtual void handleRequest(std::unique_ptr<MsgReader> msgReader, ResponseCallback callback) = 0¶
 - 
std::unique_ptr<SocketChannel> createChannel(int sock, const std::string &peerName)¶
 - 
std::unique_ptr<SocketChannel> createChannel(struct sxi_sock *sock, const std::string &peerName)¶
 - Protected Attributes - 
ChannelType tcpRdma_¶
 - 
int rdmaCpu_¶
 - 
std::string rdmaUri_¶
 - 
sxi_socket *rdmaSocket_¶
 - 
int port_¶
 - 
std::string addr_¶
 - 
int socket_¶
 - 
int maxPendingConnections_¶
 - 
bool stopping_¶
 - Private Functions - 
void rdmaServer()¶
- start one rdma server which hosts parameter server - Note
- do rdma bind and listen, which calling self-defined socket like rdma library. it will spawn one thread for each connection
 
 - 
void tcpServer()¶
- start one tcp server which hosts parameter server - Note
- do tcp socket bind and listen. it will spawn one thread for each connection
 
 - 
void detach()¶
 - Friends - 
friend paddle::SocketServer::SocketWorker
 
Socket Worker¶
- 
class paddle::SocketWorker¶
- class for holding one connection from one trainer - Note
- all parameter processing will run in the context of this worker
 - Inherits from paddle::Thread - Public Functions - 
SocketWorker(std::unique_ptr<SocketChannel> &&channel, SocketServer *server)¶
 - 
virtual ~SocketWorker()¶
 - 
virtual void run()¶
- worker thread main context - Note
- each connection from client(trainer) is controlled by single worker thread, which is for handling all parameter server requests
 
 - Protected Attributes - 
std::unique_ptr<SocketChannel> channel_¶
 - 
SocketServer *server_¶
 - 
ChannelType tcpRdma_¶
 
Socket Client¶
- 
class paddle::SocketClient¶
- management for client connection which are from trainers - Note
- it contains one channel descriptor which used to write and read data
 - Subclassed by paddle::ProtoClient - Public Functions - 
SocketClient(const std::string &serverAddr, int serverPort, enum ChannelType channelType)¶
- class constructor - Note
- responsible for building one connection to specified pserver port
- Parameters
- serverAddr-- pserver ip address 
- serverPort-- pserver port 
- ChannelType-- F_TCP or F_RDMA 
 
 
 - 
SocketChannel *getChannel()¶
 - Protected Attributes - 
std::unique_ptr<SocketChannel> channel_¶
 - 
struct sxi_socket *socketDaemon_¶
 - 
ChannelType tcpRdma_¶
 - Private Functions - 
void RdmaClient(const std::string &serverAddr, int serverPort)¶
- start one RDMA connection to rdma server - Note
- each object contains one channel which accept byte stream for rdma, low level sock also provide byte stream api.
- Parameters
- serverAddr-- rdma server ip 
- serverPort-- rdma server port 
 
 
 - 
void TcpClient(const std::string &serverAddr, int serverPort)¶
- start one tcp connection to tcp server - Note
- each object contains one channel which accept byte stream
- Parameters
- serverAddr-- tcp server ip 
- serverPort-- tcp server port 
 
 
 
Socket Channel¶
- 
class paddle::SocketChannel¶
- APIs for reading and writing byte stream data or naive iov data from the APIs both RDMA and TCP exhibits byte stream style - Public Functions - 
SocketChannel(int socket, const std::string &peerName)¶
 - 
SocketChannel(struct sxi_sock *socket, const std::string &peerName)¶
 - 
~SocketChannel()¶
 - 
const std::string &getPeerName() const¶
 - 
size_t read(void *buf, size_t size)¶
- read size bytes. - Note
- keep reading until getting size bytes or sock is closed is closed
 
 - 
size_t write(const void *buf, size_t size)¶
- write size bytes. - Note
- keep writing until writing size bytes or sock is closed
 
 - 
size_t writev(const std::vector<struct iovec> &iov)¶
- write a set of buffers. - rdma::readv and rdma::writev can take advantage of RDMA blocking offload transfering - Note
- keep writing until all buffers are written or sock is closed
 
 - 
size_t readv(std::vector<struct iovec> *iov)¶
- read a set of buffers. - Note
- keep reading until all buffers are full or sock is closed.
 
 - 
void writeMessage(const std::vector<struct iovec> &iov)¶
- write a set of buffers. - Note
- keep writing until all buffers are passed or sock is closed
 
 - Protected Attributes - 
int tcpSocket_¶
 - 
struct sxi_sock *rdmaSocket_¶
 - 
const std::string peerName_¶
 - 
ChannelType tcpRdma_¶
 - 
struct MessageHeader¶
 
- 
Message Reader¶
- 
class paddle::MsgReader¶
- reading a set of blocks of data from SocketChannel. - Public Functions - 
MsgReader(SocketChannel *channel, size_t numIovs)¶
 - 
~MsgReader()¶
 - 
size_t getNumBlocks() const¶
- number of remaining parts 
 - 
size_t getNextBlockLength() const¶
- lenght of next block 
 - 
size_t getTotalLength() const¶
- get the total length of all the remaining blocks 
 - 
size_t getBlockLength(size_t i) const¶
- Get the length for block currentBlockIndex + i. 
 - 
void readBlocks(const std::vector<void *> &bufs)¶
- read blocks data and store it to buf 
 - 
void readNextBlock(void *buf)¶
 - Protected Attributes - 
SocketChannel *channel_¶
 - 
std::vector<size_t> blockLengths_¶
 - 
size_t currentBlockIndex_¶
 
-