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!