Вы находитесь на странице: 1из 17

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
Thank you!

Вам также может понравиться