170 likes | 448 Views
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
E N D
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 • IA32, IA64, AMD64, Power PC, SPARC • Tested support OS • 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 New Data User Buffer Data Protocol Buffer Protocol Buffer
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 • Timestamp, Total send/recv/retrans/loss, etc. • Local information (values since last time perfmon was called) • Local send/recv/retrans/loss, send/recv rate • Instant value • RTT, cwnd, ipt, etc.
Performance Tuning • UDT buffer size • Larger is better • UDP buffer size • 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