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. |
Low level scheduling functions for chunk and peer selection.
The interface contains highly customizable selector functions. Customization is supported along the following concepts:
typedef double(* chunkEvaluateFunction)(schedChunkID *) |
Prototype for function assigning a weigth to a given chunk.
typedef int(* filterFunction)(schedPeerID,schedChunkID) |
Prototype for filter functions that select useful peer-chunk combinations.
typedef double(* pairEvaluateFunction)(struct PeerChunk *) |
Prototype for function assigning a weigth to a peer-chunk pair.
typedef double(* peerEvaluateFunction)(schedPeerID *) |
Prototype for function assigning a weigth to a peer.
enum SchedOrdering |
Scheduler ordering methods
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.
[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.
[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.
[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 |