scheduler_la.h File Reference

Low level scheduling functions for chunk and peer selection. More...

#include "scheduler_common.h"
#include <stdlib.h>

Go to the source code of this file.

Typedefs

typedef int(* filterFunction )(schedPeerID, schedChunkID)
 Prototype for filter functions that select useful peer-chunk combinations.
typedef double(* peerEvaluateFunction )(schedPeerID *)
 Prototype for function assigning a weigth to a peer.
typedef double(* chunkEvaluateFunction )(schedChunkID *)
 Prototype for function assigning a weigth to a given chunk.
typedef double(* pairEvaluateFunction )(struct PeerChunk *)
 Prototype for function assigning a weigth to a peer-chunk pair.
typedef double(* double2op )(double, double)
 Prototype for a two operand double function used to combine weights.

Enumerations

enum  SchedOrdering { SCHED_BEST, SCHED_WEIGHTED }

Functions

void schedSelectPeers (SchedOrdering ordering, schedPeerID *peers, int peers_len, schedChunkID *chunks, int chunks_len, schedPeerID *selected, int *selected_len, filterFunction filter, peerEvaluateFunction peerevaluate)
 Low level scheduler function for selecting peers.
void schedSelectChunks (SchedOrdering ordering, schedPeerID *peers, int peers_len, schedChunkID *chunks, int chunks_len, schedChunkID *selected, int *selected_len, filterFunction filter, chunkEvaluateFunction chunkevaluate)
 Low level scheduler function for selecting chunks.
void schedSelectPeerFirst (SchedOrdering ordering, schedPeerID *peers, size_t peers_len, schedChunkID *chunks, size_t chunks_len, struct PeerChunk *selected, size_t *selected_len, filterFunction filter, peerEvaluateFunction peerevaluate, chunkEvaluateFunction chunkevaluate)
 Low level scheduler function for selecting peer-chunk pairs in chunk first order.
void schedSelectChunkFirst (SchedOrdering ordering, schedPeerID *peers, size_t peers_len, schedChunkID *chunks, size_t chunks_len, struct PeerChunk *selected, size_t *selected_len, filterFunction filter, peerEvaluateFunction peerevaluate, chunkEvaluateFunction chunkevaluate)
 Low level scheduler function for selecting peer-chunk pairs in peer first order.
void schedSelectComposed (SchedOrdering ordering, schedPeerID *peers, size_t peers_len, schedChunkID *chunks, size_t chunks_len, struct PeerChunk *selected, size_t *selected_len, filterFunction filter, peerEvaluateFunction peerevaluate, chunkEvaluateFunction chunkevaluate, double2op weightcombine)
 Low level scheduler function for selecting peer-chunk pairs based on a composed evaluation function.
void schedSelectHybrid (SchedOrdering ordering, schedPeerID *peers, size_t peers_len, schedChunkID *chunks, size_t chunks_len, struct PeerChunk *selected, size_t *selected_len, filterFunction filter, pairEvaluateFunction pairevaluate)
 Low level scheduler function for selecting peer-chunk pairs based on a hybrid evaluation function.

Detailed Description

Low level scheduling functions for chunk and peer selection.

The interface contains highly customizable selector functions. Customization is supported along the following concepts:

  1. evaluator functions: selector functions can be parameterized by evaluator functions. By using evaluator functions, the decision process can be decoupled into two parts:
    1. a generic selector function operating on abstract peer and chunk weights
    2. the evaluator function linking the decision process to the peer's knowledge about other peers and chunks
  2. selection policy: ChunkFirst, PeerFirst, Composed and Hybrid selection policies are supported
  3. ordering method: two kinds of ordering methods are supported:
    1. Best: strict ordering accorging to the given evaluator functions
    2. Weighted: Weighted random selection accorging to the given weight functions
  4. filter functions: selections are typically filtered by functions such as whether a given peer (according to local knowledge) needs a given chunk. The abstraction of the filter concept allows for easy modification of these filter conditions.

Typedef Documentation

typedef double(* chunkEvaluateFunction)(schedChunkID *)

Prototype for function assigning a weigth to a given chunk.

Returns:
the weight associated to the chunk
typedef int(* filterFunction)(schedPeerID,schedChunkID)

Prototype for filter functions that select useful peer-chunk combinations.

Returns:
true if the combination is valid, false otherwise
typedef double(* pairEvaluateFunction)(struct PeerChunk *)

Prototype for function assigning a weigth to a peer-chunk pair.

Returns:
the weight associated to the peer-chunk pair
typedef double(* peerEvaluateFunction)(schedPeerID *)

Prototype for function assigning a weigth to a peer.

Returns:
the weight associated to the peer

Enumeration Type Documentation

Scheduler ordering methods


Function Documentation

void schedSelectChunkFirst ( SchedOrdering  ordering,
schedPeerID *  peers,
size_t  peers_len,
schedChunkID *  chunks,
size_t  chunks_len,
struct PeerChunk *  selected,
size_t *  selected_len,
filterFunction  filter,
peerEvaluateFunction  peerevaluate,
chunkEvaluateFunction  chunkevaluate 
)

Low level scheduler function for selecting peer-chunk pairs in peer first order.

First a chunk is selected based on weights assigned by the chunkevaluate function. Then, maximum selected_len peers are selected for the given chunk based on weights assigned by the peerevaluate function.

void schedSelectChunks ( SchedOrdering  ordering,
schedPeerID *  peers,
int  peers_len,
schedChunkID *  chunks,
int  chunks_len,
schedChunkID *  selected,
int *  selected_len,
filterFunction  filter,
chunkEvaluateFunction  chunkevaluate 
)

Low level scheduler function for selecting chunks.

If called with peers_len=0, it will not consider peers in the selection. Otherwise, if peers_len>0, only those chunks will be selected that could be interesting for at least one of the given peers.

void schedSelectComposed ( SchedOrdering  ordering,
schedPeerID *  peers,
size_t  peers_len,
schedChunkID *  chunks,
size_t  chunks_len,
struct PeerChunk *  selected,
size_t *  selected_len,
filterFunction  filter,
peerEvaluateFunction  peerevaluate,
chunkEvaluateFunction  chunkevaluate,
double2op  weightcombine 
)

Low level scheduler function for selecting peer-chunk pairs based on a composed evaluation function.

A maximum of selected_len peer-chunk pairs are selected based on a composed weight function.

Parameters:
[in] chunkevaluate function to assign a weight to each chunk
[in] peerevaluate function to assign a weight to each peer
[in] weightcombine operation to combine peer and chunk weight into one weight
void schedSelectHybrid ( SchedOrdering  ordering,
schedPeerID *  peers,
size_t  peers_len,
schedChunkID *  chunks,
size_t  chunks_len,
struct PeerChunk *  selected,
size_t *  selected_len,
filterFunction  filter,
pairEvaluateFunction  pairevaluate 
)

Low level scheduler function for selecting peer-chunk pairs based on a hybrid evaluation function.

A maximum of selected_len peer-chunk pairs are selected based on the given evaluation function.

Parameters:
[in] pairevaluate function to assign a weight to each peer-chunk pair
void schedSelectPeerFirst ( SchedOrdering  ordering,
schedPeerID *  peers,
size_t  peers_len,
schedChunkID *  chunks,
size_t  chunks_len,
struct PeerChunk *  selected,
size_t *  selected_len,
filterFunction  filter,
peerEvaluateFunction  peerevaluate,
chunkEvaluateFunction  chunkevaluate 
)

Low level scheduler function for selecting peer-chunk pairs in chunk first order.

First a peer is selected based on weights assigned by the peerevaluate function. Then, maximum selected_len chunks are selected for the given peer based on weights assigned by the chunkevaluate function.

void schedSelectPeers ( SchedOrdering  ordering,
schedPeerID *  peers,
int  peers_len,
schedChunkID *  chunks,
int  chunks_len,
schedPeerID *  selected,
int *  selected_len,
filterFunction  filter,
peerEvaluateFunction  peerevaluate 
)

Low level scheduler function for selecting peers.

If called with chunks_len=0, it will not consider chunks in the selection. Otherwise, if chunks_len>0, only those peers will be selected that could be interesting for at least one of the given chunks.

Parameters:
[in] ordering the ordering method to be used
[in] peers list of peers to select from
[in] peers_len length of peers list
[in] chunk list of chunks to select from
[in] chunks_len length of chunks list
[out] selected list of peers selected by the function
[in,out] selected_len in: maximum number of peers to select; out: number of peers selected
[in] filter only peers that satisfy the filter condition can be selected
[in] peerevaluate peers are selected based on the weight assigned by this evaluator function
Generated on Mon Jul 12 16:16:52 2010 for GRAPES by  doxygen 1.6.3