UDT Tutorial

Download Report

Transcript UDT Tutorial

UDT Tutorial
Yunhong Gu & Robert Grossman
University of Illinois at Chicago
Outline





Introduction
Installation
Programming using UDT
Performance tuning
Conclusion
Introduction





UDT – UDP-based Data Transfer
Application level
End-to-end
Bi-directional
For shared networks


But can be tuned for private networks
C++ library
UDT History








2000: SABUL Concept
2001: SABUL version 1.0
2002: dSABUL
2002: SABUL version 2.0, 2.1, 2.2, 2.3,
2003: UDT 1.0
2004: UDT 1.1 & 1.2
2004: UDT 2.0
2005: UDT 3.0
Project Online



sf.net/projects/udt
Source code, documentations, mailing lists,
bug reports
Tarball release and CVS
Installation


Make the C++ source code
Tested support hardware


Tested support OS


IA32, IA64, AMD64, Power PC, SPARC
Linux, OS X, Windows, UNIX
make -e arch=XXX os=YYY
Post-Installation




LD_LIBRARY_PATH
Testing using appserver and appclient
./appserver [port]
./appclient <server-addr> <server-port>
Programming using UDT




socket-like API
UDT:: namespace qualifier
UDTSOCKET
UDTERROR
Programming using UDT
int client = socket(AF_INET, SOCK_STREAM, 0);
connect(client, (sockaddr*)&serv_addr, sizeof(serv_addr));
If (-1 == send(client, data, size, 0))
{
//error processing
}
UDTSOCKET client = UDT::socket(AF_INET, SOCK_STREAM, 0);
UDT::connect(client, (sockaddr*)&serv_addr, sizeof(serv_addr));
If (UDTERROR == UDT::send(client, data, size, 0))
{
//error processing
}
Configuration

setsockopt/getsockopt
Overlapped IO
int send(
UDTSOCKET,
const char *buf,
int len,
int flags,
int *handle = NULL,
UDT_MEM_ROUTINE routine = NULL
);
void (UDT_MEME_ROUTINE*)(char*, int);
Overlapped IO
bool getoverlappedresult(
UDTSOCKET u,
const int& handle,
int& progress,
const bool& wait
);
Overlapped IO
User Buffer
Data
Protocol Buffer
Protocol Buffer
New Data
Performance monitoring



Monitor UDT performance statistics
Monitor internal UDT parameters
Diagnose network and application
configurations
int perfmon(
UDTSOCKET u,
TRACEINFO* perf
);
Performance monitoring

TRACEINFO structure
 Aggregate information


Local information (values since last time
perfmon was called)


Timestamp, Total send/recv/retrans/loss, etc.
Local send/recv/retrans/loss, send/recv rate
Instant value

RTT, cwnd, ipt, etc.
Performance Tuning

UDT buffer size


UDP buffer size



Larger is better
SNDBUF << RCVBUF
Larger is NOT better
IO block size


Larger is better, but better less than the UDT
buffer size
File IO block size: mystery
Thank you!