Yunhong Gu & Robert Grossman University of Illinois at Chicago 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
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 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
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 UDP buffer size IO block 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
Thank you!