Rapport d`Expertise d`un Prototype de Serveur Vidéo

Transcription

Rapport d`Expertise d`un Prototype de Serveur Vidéo
i
Rapport d’Expertise d’un
Prototype de Serveur Vidéo
Institut Eurécom
CCETT/CNET/France Telecom
Jamel Gafsi et Ernst W. Biersack
Institut EURECOM
B.P. 193, 06904 Sophia Antipolis, FRANCE
fgafsi,[email protected]
Janvier 2000
Table des matières
1
2
Résumé
3
1.1
Contexte du projet d’expertise . . . . . . . . . . . . . . . . . . . . . . . . . .
3
1.2
Objectifs du projet d’expertise . . . . . . . . . . . . . . . . . . . . . . . . . .
3
1.2.1
Cadrage technique des travaux . . . . . . . . . . . . . . . . . . . . .
3
1.2.2
Développements complémentaires et consolidation des logiciels serveurs
4
Prototype du serveur vidéo d’ Eurécom
4
2.1
Résumé des travaux de recherche et de développement . . . . . . . . . . . . .
4
2.2
Originalité de la solution retenue . . . . . . . . . . . . . . . . . . . . . . . . .
5
2.3
Description détaillée du prototype de serveur vidéo . . . . . . . . . . . . . . .
6
2.3.1
Environnement du serveur vidéo . . . . . . . . . . . . . . . . . . . . .
6
2.3.2
Architecture et configuration du serveur vidéo . . . . . . . . . . . . . .
7
2.3.3
Composantes du prototype de serveur vidéo . . . . . . . . . . . . . . .
9
2.3.4
Flux de messages et d’information au sein du serveur vidéo . . . . . .
12
Vers un prototype de serveur vidéo d’une grande maturité . . . . . . . . . . . .
13
2.4
3
Développements complémentaires et consolidation effectués dans le cadre du projet de l’expertise
15
3.1
3.2
3.3
Portage de la partie client en Java . . . . . . . . . . . . . . . . . . . . . . . . .
15
3.1.1
Résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
3.1.2
Outils et tâches à accomplir . . . . . . . . . . . . . . . . . . . . . . .
16
3.1.3
Implémentation du client en Java . . . . . . . . . . . . . . . . . . . . .
17
3.1.4
Migration du client en Java: Résultats . . . . . . . . . . . . . . . . . .
22
Réimplémentation des algorithmes d’ordonnancement et d’extraction des données 23
3.2.1
Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
3.2.2
Implémentation de l’ordonnancement asynchrone . . . . . . . . . . . .
24
Utilisation de UDP pour le transfert des données . . . . . . . . . . . . . . . . .
25
4
Tests d’evaluation de la performance du nouveau prototype de serveur vidéo
26
5
Valorisation et démonstration
30
6
Conclusions
30
2
1 Résumé
1.1 Contexte du projet d’expertise
Les applications multimédia telle que la vidéo à la demande requièrent un dispositif de stockage
des données audio et vidéo appelé serveur vidéo. Étant donné l’importance du volume des données vidéo, un serveur vidéo comporte habituellement de nombreux disques. Par ailleurs, la
vidéo à la demande est particulièrement gourmande en capacité de mémoire et de largeur de
bande passante. Ceci nécessite la conception d’un serveur comportant plusieurs noeuds (machines) pour servir un grand nombre de clients.
L’Institut Eurécom a con¸cu une architecture de serveur vidéo, appelée la matrice à serveurs
[1], où chaque vidéo est répartie sur la totalité des noeuds de serveurs et chaque noeud ne stocke
qu’une partie de la vidéo. Cette architecture a pour avantage majeur une parfaite répartition de la
charge et la faculté d’augmenter le nombre de noeuds ou de disques pour s’adapter aux besoins
du serveur en matière de bande passante et de volume de stockage. Le serveur, tout comme les
clients, tournent sur les plates-formes multiples (stations de travail, PC). Le prototype stocke
les vidéos codés en MPEG-1 et dessert un grand nombre de clients consommant chacun des
flux MPEG-1 avec 25 trames/s. Le prototype implémente plusieurs algorithmes d’entrelacement (répartition) et d’ordonnancement des flux vidéo. Le client est muni des fonctionnalités
interactives telles que play, pause, reposition, stop, fast forward et fast backward.
De son côté, CNET/France Telecom envisage d’utiliser le prototype de serveur vidéo d’Eurécom pour supporter l’application de la vidéo à la demande qui servira comme application
de test pour les nouvelles plates-formes et technologies du réseau tel que l’ADSL. En outre,
les travaux de l’expertise doivent mener à intégrer le serveur vidéo d’Eurécom dans une offre
serveur complète et étudier les modalités de sa commercialisation.
1.2 Objectifs du projet d’expertise
L’objectif du projet est d’aboutir à un prototype de serveur vidéo d’une plus grande maturité, qui
est à la fois stable, fiable et flexible en matière des plates-formes utilisées. Voici les principaux
points qui doivent être effectués dans le cadre de ce projet:
1.2.1
Cadrage technique des travaux
Il s’agit de préciser l’ensemble logiciel à fiabiliser et son environnement (système opératoire,.)
dans l’objectif de favoriser à terme son intégration dans une offre serveur complète et conforme
aux standards en vigueur. En particulier l’analyse devra prendre en compte la possibilité d’une
intégration avec des logiciels client/serveur du commerce basés sur les protocoles définis par
l’IETF (RTSP, RTP,..).
3
1.2.2
Développements complémentaires et consolidation des logiciels serveurs
Cette tâche intègre les parties suivantes:
1. Mener à bien les compléments de développement qui consistent en particulier à atteindre
une architecture flexible à la largeur d’échelle (scalable) tout en gardant l’aspect distribué
de l’architecture ainsi que des algorithmes d’ordonnancement et de stockage des données.
2. Garantir un fonctionnement fiable de ces logiciels. Pour ceci, le serveur vidéo doit être
tolérant à la défaillance de certaines de ses composantes telles que un disque ou une machine. La détection des pannes doit être immédiate afin de réduire le temps d’interruption
du côté des clients.
3. Refaire la partie client du serveur vidéo. Ceci consiste à implémenter le client en Java.
Ce point nous parait d’une grande importance. En effet, la migration du client vers Java
permettra une indépendance totale de la machine et du système d’exploitation utilisés par
le client.
4. Tests et validation. Les tests et la validation seront menés dans les laboratoires de l’Institut
Eurécom. Ces travaux consistent à définir et décrire les procédures de Test (cahier de recette) et mettre en place les outils nécessaires aux tests qualitatifs et tests de performance.
Finalement, ces tests doivent être effectués et documentés.
5. Valorisation et démonstration à des tiers. De manière à favoriser la valorisation des travaux auprès de partenaires potentiels, Eurécom mettra en place une plate-forme de démonstration dans ses locaux et réalisera un document de synthèse de positionnement du
système à valoriser, des principes techniques mis en oeuvre des performances obtenues.
2
Prototype du serveur vidéo d’ Eurécom
Les serveurs multimédia sont différents des systèmes d’information traditionnels. Ceci est spécialement dû au fait que l’information multimédia est volumineuse, gourmande en bande passante et impose ses contraintes en temps réel. Par conséquent, les applications multimédia, telles
que la vidéo à la demande, nécessitent la conception de nouveaux mécanismes de stockage,
d’ordonnancement, de mémorisation et de livraison de l’information multimédia. Le serveur
vidéo est un dispositif de stockage distribué de données audio et vidéo assurant le service d’un
grand nombre de clients.
2.1 Résumé des travaux de recherche et de développement
A l’Institut Eurecom ont été effectués plusieurs travaux de recherche portant surtout sur la configuration et la conception de l’architecture du serveur vidéo [2], les techniques de répartition des
4
données sur les différents disques du serveur [3], les algorithmes de lecture des données, les
mécanismes d’ordonnancement des flux multiples au niveau du serveur [4, 5, 6], la gestion de
la mémoire, la synchronisation des trames vidéo [7, 8] et enfin la fiabilité du serveur vidéo
[9, 10, 11, 12].
Étant donné l’importance du volume des données vidéo, un serveur vidéo comporte habituellement de nombreux disques. Par ailleurs, les besoins en mémoire et en largeur de bande passante
nécessitent de concevoir un serveur comportant plusieurs noeuds (machines) pour servir un
grand nombre de clients. Une architecture de serveur vidéo a été con¸cue : chaque vidéo est répartie sur la totalité des noeuds du serveurs et chaque noeud ne stocke qu’une partie de la vidéo.
Cette architecture a pour avantage majeur une parfaite répartition de la charge et la flexibilité
d’augmenter le nombre de noeuds ou de disques.
Une équipe travaille sur les serveurs vidéo depuis cinq ans, durant lesquels ont été effectués
plusieurs travaux de recherche portant surtout sur l’architecture du serveur, la synchronisation et
l’ordonnancement des trames des flux vidéo. Récemment, des travaux portant sur la conception
de serveurs vidéo à grande échelle ont été réalisés dans le cadre d’une thèse de doctorat [13].
Ces travaux étudient principalement le stockage et la répartition de la vidéo ainsi que la fiabilité
du serveur [3, 11, 14]. Afin de mettre en oeuvre les résultats de ces recherches, un prototype de
serveur vidéo distribué basé sur ces résultats a été implémenté [15, 16, 17]. Un second objectif
est d’étudier la performance et la qualité de service du prototype du serveur vidéo.
Le serveur vidéo permet le stockage de films vidéo codés dans le format MPEG-1, la distribution de ces données à travers le réseau et leur visualisation (à raison de 25 images par seconde)
par un nombre élevé de clients (application Video-On-Demand). Le prototype implémente une
diversité d’algorithmes de réplication de données. Le client est muni des fonctionnalités interactives telles que play, pause, reposition, stop, fast-forward et fast-backward.
2.2 Originalité de la solution retenue
L’originalité du travail effectué à Eurécom consiste à avoir con¸cu et implémenté un prototype
de serveur vidéo ayant les qualités suivantes:
– Le serveur utilise des composantes (hardware) standards et toute la complexité et l’intelligence du serveur sont en software. Ceci donne au prototype une indépendance à l’égard
des changements de performances et de technologies au niveau des composantes hardware. Il est également à noter que cette solution software est indépendante du format
utilisé et permet par la suite de supporter une multitude formats audio et vidéo.
– Le prototype sait intégrer des composantes hétérogènes (capacité de stockage et de bande
passante, etc.) et implémente une variété d’algorithmes de répartition de la vidéo, d’ordonnancement des flux vidéo multiples et de fiabilité.
– Le serveur ainsi que le client tournent sur des plates-formes multiples (Solaris et Windows
NT).
5
– Le client n’a pas besoin de hardware particulier pour décoder le flux vidéo. A titre
d’exemple, le décodage des flux MPEG-1 qui sont re¸cus par le client s’effectue en software.
– Le serveur vidéo tourne sur des réseaux différents tels que ATM et Ethernet. Le stockage
des données vidéo peut aussi s’effectuer à distance.
2.3 Description détaillée du prototype de serveur vidéo
2.3.1
Environnement du serveur vidéo
La Figure 1 illustre l’environnement d’un serveur vidéo. Elle distingue trois parties: le serveur
vidéo, un réseau haut débit et les clients.
Matrice a disques
Memoire vive
I/O Bus
Client
Client
Reseau haut debit
Ecriture
Client
Lecture
Client
Serveur video
F IG . 1 – Architecture et environnement du serveur vidéo
L’environnement du serveur vidéo contient principalement trois parties:
– Une matrice à disques pour le stockage de la vidéo: Afin d’atteindre un grande capacité
de stockage et une large bande passante, le serveur vidéo est typiquement composé de
plusieurs disques magnétiques. Un système qui contient plusieurs disques magnétiques
est nommé une matrice à disques (disk array). Cette matrice à disques est composée de
disques multiples stockant les vidéos. La capacité de stockage de la matrice est donc proportionnelle au nombre de disques qu’elle contient. Noter que chaque vidéo est découpée
en morceaux appelés blocs. Ceux-ci sont ensuite stockés sur plusieurs composantes du
serveur vidéo. La distribution des blocs d’une vidéo sur plusieurs disques et noeuds du
serveur vidéo améliore la performance du serveur en terme de débit et répartie sa charge
équitablement sur ses différentes composantes. Il est à noter que répartir la vidéo sur le
serveur vidéo ne veut pas dire la répliquer.
– Un bus entrée/sortie (I/O bus) (e.g. SCSI) qui sert à transférer les données extraites des
disques vers le buffer. Afin d’exploiter toute la bande passante de la matrice à disques, la
6
capacité de transfert du I/O bus doit être supérieure à la somme des débits de transfert de
tous les disques de la matrice.
– Une mémoire tampon (buffer): Le débit de transfert des données au niveau d’un disque
magnétique atteint aujourd’hui des dizaines de Mbit=sec. Ce débit dépasse largement le
débit de consommation du flux vidéo chez le client ( jusqu’à 8 Mbit=sec pour MPEG-2).
Afin d’absorber cette différence de débit et assurer un flux vidéo continu, les blocs vidéo
extraits de chaque disque sont stockés temporairement au niveau du buffer avant d’être
envoyés vers le client correspondant. Comme indiqué dans la Figure 1, le buffer est fondé
sur la méthode du double buffer (double buffering): le serveur vidéo réserve pour chaque
flux deux espaces buffer. Chaque espace a la taille d’un bloc et sert soit à l’ ’écriture d’un
bloc provenant du I/O bus, soit à la lecture d’un bloc avant son envoi vers le client. Noter
que les deux espaces buffer alternent leurs rôles d’une unité de service à une autre.
Un réseau à haut débit est indispensable pour véhiculer des flots de données très importants.
En effet, même sous sa forme compressée, l’information vidéo reste très gourmande en bande
passante (jusqu’à 8Mbit=sec pour MPEG-2). Actuellement, la plupart des réseaux ne sont pas
capables de fournir la bande passante nécessaire pour permettre à un serveur vidéo de servir
des centaines ou des milliers de clients simultanément. Cette limitation en matière de bande
passante au niveau du réseau est le facteur décisif qui empêche le marché de la VOD d’atteindre
une large population.
Chaque client est connecté au serveur vidéo via le réseau haut débit. Il s’agit bien d’un rapport
de producteur-consommateur. En effet, le client envoie sa requête au serveur vidéo. L’entité
centrale du serveur vidéo, appelée aussi meta serveur, fournit à ce nouveau client la liste des
vidéos disponibles. Le client renvoie alors une requête indiquant la vidéo qu’il a choisie. Ensuite, le meta serveur effectue un contrôle d’admission de ce nouveau client. Dans le cas où ce
dernier est admis, le meta serveur informe le serveur vidéo de la présence de ce client, qui, à son
tour, établit une connection avec ce dernier. Le client commence ainsi à recevoir son propre flux
vidéo en temps réel. Le client dispose des fonctions classiques d’interactivité et a la possibilité
d’envoyer des requêtes telles que fast forward ou pause au serveur vidéo, qui, de son côté, traite
cette demande et exécute la fonction désirée par le client.
2.3.2
Architecture et configuration du serveur vidéo
Les serveurs vidéo sont des systèmes où les solutions distribuées sont essentielles au vu du volume très large des données à stocker et du débit très haut à atteindre. Nous avons proposé une
architecture de serveur vidéo distribuée dont voici les caractéristiques: étant donnée la demande
en matière de capacité de stockage et de bande passante, le serveur vidéo est typiquement basé
sur la matrice à disques appelée aussi noeud. En outre, pour pouvoir servir plus de clients,
le serveur vidéo doit voir sa capacité en terme de bande passante augmenter. Cependant, cette
demande en bande passante ne peut pas être satisfaite en ajoutant simplement des disques au
sein du même noeud. En effet, un noeud, à cause des limitations imposées par ses composantes
7
(buffer, CPU, I/O bus, etc.), ne peut contenir qu’un nombre restreint de disques. Par conséquent, augmenter la capacité du serveur vidéo pour admettre plus de clients revient à ajouter de
nouveaux noeuds à côté des noeuds déjà existants.
Traditionnellement, un serveur vidéo est composé de plusieurs noeuds indépendants et autonomes: chaque vidéo est entièrement stockée sur un des noeuds. Cette configuration de noeuds
autonomes présente deux inconvénients majeurs:
1. La charge du serveur vidéo est distribuée d’une fa¸con inégale entre les différents noeuds.
Les noeuds qui contiennent les vidéos les plus populaires sont surchargés (hot spots)
tandis que d’autres noeuds restent sous-chargés.
2. Le nombre de clients accédant à une vidéo très populaire est limité par la capacité du
noeud où cette vidéo est stockée. Afin de permettre à plus de clients d’accéder à la même
vidéo populaire, cette dernière doit être copiée sur d’autres noeuds. Mais, ceci est inefficace à l’égard de la capacité de stockage du serveur vidéo. En outre, les variations de
popularité des différentes vidéos stockées rendra la mise à jour du contenu du serveur
vidéo complexe.
Notre approche s’inspire de la configuration de la matrice à disques où chaque vidéo est distribuée sur les différents disques de cette matrice. Nous avons ainsi proposé une architecture
de serveur vidéo où plusieurs noeuds constituent ensemble une matrice appelée la matrice à
serveurs [1]. La Figure 2 illustre l’architecture de la matrice à serveurs.
Matrice a Serveurs
Noeud
Client
Client
Noeud
Reseau haut debit
Client
Client
Noeud
F IG . 2 – La Matrice à serveurs
Chaque noeud de la matrice à serveurs est lui-même une matrice à disques. Contrairement aux
serveurs autonomes, un noeud de la matrice à serveurs ne stocke qu’une partie de chaque vidéo.
En effet, chaque vidéo est découpée en blocs et ces derniers sont répartis sur les différents
8
noeuds de la matrice à serveurs. Par exemple, le premier bloc de la vidéo est stocké sur le
premier noeud, le deuxième bloc sur le deuxième noeud, , le i ème bloc est stocké sur le
noeud (i mod N ) + 1 où N représente le nombre de noeuds qui sont contenus dans le serveur
vidéo. La répartition de la charge entre les noeuds du serveur est équitable et ne dépend pas
de la popularité des vidéos consommées. Cette répartition de la charge est même parfaite si
chaque vidéo est répartie sur tous les noeuds de la matrice à serveurs. De plus, la capacité totale
du serveur vidéo peut être utilisée pour servir un grand nombre de clients, qui, tous, peuvent
utiliser la même vidéo très populaire. Cette répartition a l’avantage d’éviter de copier les vidéos
populaires sur plusieurs noeuds.
L’architecture de la matrice à serveurs indique que chaque vidéo est découpée en plusieurs blocs
et que ces derniers sont stockés sur les différents noeuds de la matrice à serveurs. En revanche,
cette architecture ne précise ni (i) la fréquence d’extraction des données, ni (ii) l’ordre suivant
lequel les différents flux sont servis par les noeuds et des disques du serveur vidéo ni (iii) la
granularité de distribution des données vidéo sur les noeuds ainsi que sur les disques à l’intérieur
d’un noeud.
2.3.3
Composantes du prototype de serveur vidéo
Fondé sur la matrice à serveurs, le prototype de serveur vidéo est composé principalement de
trois composantes qui sont le Meta-serveur, les Disk-serveurs et le Client. Le Meta-serveur et
les Disk-serveurs constituent le serveur en lui-même. La figure 3 représente l’architecture du
serveur vidéo.
Disk Serveur
Disk Serveur
Disk Serveur
Disk Serveur
Meta Serveur
Client
Client
Client
Client
F IG . 3 – Architecture du serveur vidéo
Le stockage des vidéos est distribué sur plusieurs machines afin d’optimiser la performance du
9
serveur vidéo.
Meta-serveur constitue les éléments clefs de l’architecture du serveur vidéo :
– Il stocke les “meta-informations”. Ce sont ces informations qui lui permettent d’exécuter
les tâches dont il est chargé. Voici les différentes meta-informations stockées par le metaserveur :
– des listes de disk-serveurs : la liste des disk-serveurs stockant chaque vidéo est disponible à partir du meta-serveur : c’est grâce à cette liste que le meta-serveur peut
initialiser les connections entre le client et les disk-serveurs en fonction de la requête
du film formulée par le client au meta-serveur.
– la taille du film en temps : cette information permet aux applications du client de
détecter la fin du film et de se terminer.
– les types de distribution des différentes vidéos et de duplication utilisés pour chaque
film : suivant les disk-serveurs connectés ou non, le Meta-serveur peut déterminer si
le client peut ou non avoir accès au film demandé.
– Il gère les admissions des clients. C’est lui qui décide si un client peut se connecter au
serveur ou non en fonction du nombre de clients déjà connectés, et des capacités du
serveur.
– Quand le Meta-serveur admet un client, il établi une connection entre lui et ce dernier.
Le Meta-serveur fournit au client la liste des films disponibles et c’est lui qui re¸coit la
requête du client.
– Il initie les connections entre les différents composants du serveur vidéo : Les connections
entre le client et les disk-serveurs sont initialisées à partir des informations que le Metaserveur obtient du client (film sélectionné, port et adresse) et de la liste des disk-serveurs
sur lesquels est stocké le film demandé par le client.
Ces différentes fonctionnalités sont représentées sur la figure 4.
Disk-serveur est une machine à laquelle sont connectés plusieurs disques. Le serveur vidéo
en lui-même est constitué du Meta-serveur et de plusieurs disk-serveurs qui sont chargés des
taches suivantes (cf Figure 5):
– Un disk-serveur stocke des morceaux de vidéos sur les disques qui lui sont attachés. Le
stockage des films sur des disques permet un accès mémoire plus rapide que les bandes
magnétiques ; les disques permettent également à plusieurs utilisateurs d’accéder à une
même donnée simultanément.
10
Stoquage des Meta informations
Meta Serveur
Initialisation des connections
Disk Serveur
Controle des admissions
Client
F IG . 4 – Fonctionalités du Meta-serveur
– Il coordonne les fonctions de lecture et d’envoi des données afin de garantir leur distribution aux clients de manière interactive (play, pause...etc.).
– Il exécute les fonctions de maintenance du serveur ordonnées par le Meta-serveur (écriture sur les disques, suppression de films, renommage de films...etc.).
Stoquage des donnees video
Acces au reseau
Disk Serveur
Coordination
Meta Serveur
Client
F IG . 5 – Fonctionalités du Disk serveur
le Client permet à l’utilisateur d’accéder aux fonctionnalités du serveur au travers d’une interface. Ceci inclut (cf Figure 6):
– l’affichage de la liste des films disponibles fournie par le Meta-serveur
– l’accès aux fonctions d’interactivité (play, pause...etc.)
– la réception des données vidéo
– l’assemblage des données vidéo
– la visualisation des données vidéo grâce à un “player process”
11
Visualisation
Interraction
Client
Acces au reseau
Meta Serveur
Disk Serveur
F IG . 6 – Fonctionnalités du client
2.3.4
Flux de messages et d’information au sein du serveur vidéo
On peut donc représenter les interactions entre les différentes composantes du serveur vidéo par
le schéma récapitulatif de la figure 7.
1. Flux des Meta informations : le Meta-serveur transmet au client les informations dont
il a besoin pour émettre la requête d’un film, et pour être connecté aux disk-serveurs
stockant le film demandé. Le client transmet au Meta-serveur les informations requises
pour l’initialisation des connections avec les disk-serveurs.
2. Flux du control vidéo : Le client commande la lecture du film par les fonctions classiques
play, pause...etc. Les disk-serveurs accusent la réception.
3. Flux des données vidéo : Les disk-serveurs envoient les blocs de données vidéo au client.
4. Flux des informations du serveur : ce sont les informations internes au serveur qui transitent par cette voie. Le Meta-serveur prévient les disk-serveurs concernés par la requête
d’un client. Les disk-serveurs donnent la confirmation de la disponibilité des données
vidéo.
Seul le flux des données vidéo est unidirectionnel et de volume important, les autres flux sont
bidirectionnels et de faible volume.
Pour plus de précision, la figure 8 illustre ce qui se passe chronologiquement entre le moment
où le client émet la requête pour une vidéo et la réception des premières séquences vidéo du
côté du client.
1. (figure 8(a)) Le client envoie le message MSG CLIENTOPENSTREAM pour le prévenir
qu’il désire avoir accès à un film. Le Meta-serveur lui demande son adresse et son port
qui seront utilisés pour établir les connections.
12
Disk Serveur
Disk Serveur
Disk Serveur
Disk Serveur
Meta Serveur
Client
Flux des Meta informations
Flux du control video
Flux des donnees video
Flux des information du serveur
F IG . 7 – Flux d’informations dans le serveur vidéo
2. (figure 8(b)) Le Meta-serveur détermine les Disk-serveurs sur lesquels est stocké le film
demandé par le client, il leur envoie le message MSG SERVERADDCLIENT, ainsi que
l’adresse, le port du client et le nom du film demandé.
3. (figure 8(c)) Les Disk-serveurs ouvrent une connection sur le client.
4. (figure 8(d)) Le client envoie le message MSG STREAM PLAY à tous les Disk-serveurs
par la connection de faible bande-passante établie avec les Disk-serveurs.
5. (figure 8(e)) Les Disk-serveurs envoient les blocs de données vidéo par la connection de
haute bande passante avec le client.
2.4 Vers un prototype de serveur vidéo d’une grande maturité
Afin d’aboutir à un prototype de serveur vidéo qui soit à la fois indépendant des plates formes
utilisées, scalable, d’une haute performance et fiable, quelques parties du prototype ont été
récon¸cues et réimplémentées. Nous avons identifié les parties qui nous paraissaient les plus
significatives et importantes pour être réalisées dans le contexte du projet d’expertise avec
CNET/France Telecom:
– Flexibilité et Portabilité: Le serveur vidéo doit être indépendant de la plate forme utilisée. En particulier, la partie client du serveur vidéo doit être reconcue et réimplémentée
en Java pour atteindre les deux objectifs suivants:
– Portabilité du code : le code doit être unique pour toute plate forme utilisée par le
client, ce qui n’est pas le cas pour le client actuel codé en C++.
13
Disk Serveur
Disk Serveur
Disk Serveur
Disk Serveur
Meta Serveur
Meta Serveur
Client
Client
(a) Le Client émet la requête au Metaserveur
Disk Serveur
(b) Le Meta-serveur transmet la requête
aux Disk-serveurs concernés
Disk Serveur
Disk Serveur
Disk Serveur
Meta Serveur
Meta Serveur
Client
Client
(c) Les Disk-serveurs se connectent au
Client
Disk Serveur
(d) Le Client appelle la commande PLAY
Disk Serveur
Connection (etablie)
Meta Serveur
Connection demandee
Message
Client
Donnee video
(e) Les Disk-serveurs envoient la données
vidéo
F IG . 8 – Flux des messages lors d’une requête d’un client
– Portabilité du décodage des données vidéo transmises : le décodage des flux vidéo
doit être indépendant de la plate forme utilisée par le client. Dans la version du
client implémenté en C++, on a par exemple deux décodeurs MPEG distincts : l’un
tournant sur PC, l’autre sur station UNIX.
14
– Performance : Le serveur vidéo doit permettre à plusieurs clients d’être servis simultanément. L’étude de la performance concerne le nombre maximum de clients qui peuvent
être supportés et le besoin en ressources, surtout en ce qui concerne la bande passante.
– Qualité de service : on peut résumer la qualité de service du serveur vidéo par les trois
contraintes suivantes:
1. La maı̂trise du temps de latence initial qui est le temps écoulé entre l’envoi d’une
requête du côté du client jusqu’au moment où ce dernier re¸coit la première séquence
vidéo.
2. La répartition de la charge qui a un impact direct sur la performance du serveur
vidéo. Celle-ci doit être répartie équitablement sur toutes les composantes du serveur
vidéo.
3. La fiabilité du serveur vidéo. Elle se mesure par la capacité du serveur à survivre à
des pannes de certaines de ses composantes. La fiabilité du serveur vidéo est d’une
importance telle que la simple panne d’un disque ou d’un noeud du serveur vidéo
affectera toutes vidéos stockées dans le serveur ainsi que tous les clients servis. D’où
la nécessité d’implémenter et de tester le mécanisme de fiabilité pour le prototype
du serveur vidéo.
3 Développements complémentaires et consolidation effectués
dans le cadre du projet de l’expertise
3.1 Portage de la partie client en Java
3.1.1
Résumé
La partie client qui a été implémentée en C++ a été réimplémentée en Java, ce qui permettra de
rendre la partie client indépendante de la plate-forme utilisée. Le travail de migration consiste
à concevoir et implémenter en Java la partie client du prototype existant. Ceci inclut les points
suivants:
– La gestion des connections Client/Serveur.
– La gestion de la mémoire vive du côté du client.
– La gestion de la réception, du décodage et de l’affichage des flux vidéo.
– Le support des fonctions classiques d’interactivité.
– La détection des pannes de certaines composantes du serveur. Nous nous sommes décidés
pour une détection de pannes initiée chez le client et non chez le serveur afin de réduire
la complexité du côté du serveur vidéo.
15
– La conception d’une interface graphique conviviale
– L’étude de la performance du client. La performance du client est déterminée par le temps
de latence initial, le besoin en buffer chez le client et la rapidité du client de détecter et de
gérer les pannes des composantes du serveur vidéo.
3.1.2
Outils et tâches à accomplir
Nous utilisons l’outil JMF (Java Media Framework) qui constitue un ensemble de classes
et librairies Java qui supportent le streaming et le décodage des données multimédia. JMF est
un ensemble de classes permettant la visualisation et la capture de données multimédia à partir
d’une application ou bien d’une applet. Ceci inclut la visualisation de séquences vidéo compressées sous plusieurs formats dont celui de MPEG-1 que nous considérons. Plus précisément, nous
utilisons le Java Media Player du JMF pour la partie client. Cependant, le Java Media Player
visualise normalement une vidéo sous forme de fichier et non sous forme d’un flux continue.
Ceci nous a emmené à intégrer des changements radicaux au sein des routines utilisées afin de
supporter la visualisation des flux provenant des différents noeuds du serveur vidéo.
Voici les différentes tâches effectuées pour la migration du client en Java:
1. Gérer les communications Client/Meta-Serveur et Client/Disk-Serveur.
2. Re¸cevoir les données MPEG1 provenant des différents Disk-Serveurs
3. Gérer le buffer d’une fa¸con autonome. Le stockage des blocs provenant des disk-Serveurs
dans le buffer permet d’une part de gérer les retards des blocs dus au réseau et d’autre part
de détacher les fonctions du Java Media Player de JMF des tâches de réception des blocs.
Ceci permet de réaliser un client modulaire composé de parties indépendantes.
4. Réalisation du décodage et de la visualisation en JMF. A côté des avantages de portabilité
de JMF, il permet aussi d’obtenir le “full Screen” sous UNIX ce qui n’était pas possible
auparavant avec le client en C++. Le “resize” est devenu aussi possible (déterminer une
taille de fenêtrage quelconque).
5. Gestion et Structures de données. Nous avons utilisé l’héritage Java pour réaliser une
implémentation objet.
16
3.1.3
Implémentation du client en Java
L’implémetation a été réalisée d’une fa¸con modulaire. Ceci s’exprime sous forme de packages.
Le code est globalement composé de 6 packages qui sont les suivants:
1. Module inter (Interface client): Ce package contient les classes Interface et HelpVod.
(a) Classe Interface: C’est la partie visible de l’application. L’utilisateur dispose des
fonctions d’interactivité suivantes pour l’application VOD.
–
–
–
–
–
–
–
–
Liste des films disponibles
Play
Pause
Forward
Backward
to 0
Stop
Exit
Les boutons sont disponibles (activés ou désactivés) conformément aux contraintes
imposées par la partie serveur. La réaction du serveur n’est pas immédiate et il faut
aussi gérer les temps de latence dû au buffer. La figure 9 montre l’interface en mode
PAUSE avec le bouton correspondant à la commande PLAY activée , la figure 10
montre l’interface en mode PLAY, avec le bouton correspondant à la commande
PAUSE activée.
F IG . 9 – L’interface Client en mode PAUSE
Le menu de l’interface permet de configurer le client, de quitter le logiciel, de configurer l’application pour du mirroring et aussi d’obtenir une boite d’aide. Le mirroring peut ainsi être activé ou désactivé lors du déroulement du film. Par défaut il n’y
a pas de mirroring, il faut l’activer si on per¸coit une discontinuité dans le film ou
pour effectuer des tests.
17
F IG . 10 – L’interface Client en mode PLAY
La liste des films disponibles est générée par le Meta-serveur après la requête du
client : ==Requete sur le Metaserveur
listeFilms = clientMeta:getV ideoList();
Le JMF est une application de l’interface et est initialisée au même niveau. Le protocole et la connexion de la source d’information est réalisée dans l’initialisation de
l’interface.
L’instanciation du JMF passe par une phase de contrôle du protocole de communication défini au préalable. Ensuite il faut lier la source de l’information au JMF
et ceci requiert une connection de type Socket (voir le module de connection). La
source est le buffer et le player est connecté avec une dataSource. Il faut s’assurer
du bon fonctionnement de l’opération en utilisant des exceptions.
La création du panel graphique du JMF est généré lors du premier appel à play. En
effet, le JMF a besoin de lire la séquence 0 pour déterminer la résolution du film.
Le JMF attend donc la première trame avant de se déclarer en tant que composant
graphique.
(b) Classe HelpVod: C’est une trame d’aide à l’utilisation du logiciel.
2.
Module buffer: Ce module contient les classes CellBuffer, Buffer et ReaderBuffer.
(a) Classe CellBuffer :
C’est une structure d’information qui permet d’identifier les données du buffer (VideoBlockInfo) et de stocker les blocs. Les méthodes permettent un accès aux données sous certaines contraintes. En effet, la cellule de stockage est soit bloquée soit
débloquée. Cette gestion permet de définir les blocs en mode lecture et les blocs
disponibles en écriture .
18
(b) Classe Buffer :
C’est une classe importante, car elle est autogérée au niveau de son évolution. C’est
une liste de CellBuffer qui s’autogère. Cette classe comporte plusieurs algorithmes
qui permettent de prendre en compte les contraintes du réseau. Ainsi nous avons fait:
– la mise en place des données ,! Ordering
– Le repérage des séquences manquantes ,! Mirroring
– La gestion des données disponibles
– La gestion de la capacité
Ordering : Il s’agit d’un algorithme qui met à disposition du JMF la bonne séquence. Pour définir la bonne séquence nous utilisons le fait qu’un film est séquentiel, et donc il nous reste à lire la séquence d’indice le plus faible qui n’a pas été lue
auparavant dans le buffer.
Mirroring : Le buffer dans sa conception nous permet aussi de détecter les séquences manquantes. En effet, un séquence manquante est très facile à repérer par
un indice manquant dans la suite des séquences. Par exemple si nous avons dans le
buffer :
10 11 12 14 15 =) Pas d’erreur
10 12 13 14 15 =) Une erreur : séquence 11 manquante
En effet, nous avons une taille de buffer qui nous garantie que si la séquence 10 + 1
ne correspond pas à la séquence 11, il y a alors un problème au niveau de l’émission
des données (les Disk-serveurs). Le mirroring est disponible lorsque le buffer est
totalement rempli.
La détection est basée sur le principe que la séquence nécessaire est arrivée dans
le cas où le déroulement des opérations est normal. Le buffer permet d’attendre la
bonne séquence et donc de tolérer un certain retard. Mais si lors de l’écriture dans
le JMF il manque une séquence, on est alors certain qu’il y a un problème au niveau
de l’émission de cette même séquence.
Les données disponibles : Pour gérer l’ordering, le buffer se remplit totalement et
commence l’émission des données vers le JMF. Cela induit un temps de latence mais
sécurise le flux de données. En effet, on est alors sûr d’avoir une séquence valide
(Ordering).
Gestion de la capacité du buffer : Le buffer est actif au niveau du JMF quand il
est rempli. Cette solution permet d’avoir une fluidité et aussi des tests tels que le
Mirroring.
C’est un test bloquant pour le JMF et pour l’écriture dans le buffer. On lit quand on
est en mode lecture et on écrit quand on ne l’est pas.
19
3. Module info: Ce package contient les classes: DiskGroupInfo, VideoInfo, VideoBlockinfo, ServerInfo, HostInfo et Options.
(a) Classe DiskGroupInfo : L’information sur les serveurs et les disques est stockée
dans cette classe.
L’implémentation est relativement simple et comporte seulement des accésseurs.
(b) Classe VideoInfo : La classe VideoInfo hérite de DiskGroupInfo pour créer une
classe plus complète. L’information sur la vidéo courante est alors complète. Le
choix de l’héritage à ce niveau est naturelle contrairement à la version C++ où il y a
une simple encapsulation des structures.
(c) Classe VideoBlockInfo : Chaque bloc de données est liée à une information relative
à ce même bloc.
(d) Classe ServerInfo : La structure existe mais n’est pas utile pour le client. Cette sera
utile pour l’implémentation d’un Disk-Serveur basé sur Java.
(e) Classes HostInfo et Options: Ce sont des classes essentiellement destinées à effectuer des statistiques sur les temps de latence et la charge du CPU.
4. Module connection: Gère les connections et la réception des données. Ce module contient
les classes: MessageConnection, ConnectionDisk, ConnectionClientMeta, CreateSocket,
MyDataOutputStream, MyDataInputStream.
(a) Classe MessageConnection : La communication TCP permet de recevoir et d’émettre
des données et ceci en relation avec un serveur. Nous disposons d’un serveur VOD
possédant son propre protocole. La messagerie est très spécifique et il faut définir
des méthodes de plus haut niveau pour obtenir une bonne gestion des messages.
(b) Classe ConnectionClientMeta : C’est une connection spécialisée qui utilise la classe
MessageConnection pour la communication de plus haut niveau. Le Meta-serveur
est alors adressé par cette classe suivant le protocole Client/Meta-Server. La gestion
est de plus haut niveau et les requêtes sont plus faciles à émettre.
(c) Classe ConnectionDisk : Cette classe est vouée à la réception des paquets MPEG.
Elle gère la connection entre le client et Les Disk-Serveurs. La partie réseau est
liée par deux connections TCP et la partie client stocke les informations dans le
buffer. Une connection permet de commander les Disk-Serveur suivant un protocole
simple (MessageConnection) tandis que l’autre connection est chargée de l’envoi
des paquets. Cette structure est Thread par sa conception et ainsi le buffer re¸coit les
paquets de fa¸con asynchrone.
La réalisation des connections dépend donc des Disk-Serveurs. En effet, le client
attend une tentative de chaque serveur. La connection TCP est établie par l’instantiation de la classe DataInputStream :
(new DataInputStream((soquetteServeur1:accept()):getInputStream()); ):
20
(d) Classe CreateSocket : Cette classe est dédiée à l’initialisation du JMF. C’est une
connection interne qui attend un ServerSocket du JMF. Son implémentation est
Thread et l’attente est gérée par une exception.
(e) Classes MyDataOutputStream et MyDataInputStream :
Ces deux classes sont dérivées de DataOutputStream et DataInputStream pour des
raisons de spécialisation. Cela permet une gestion de plus haut niveau :
0 public void send(String chaine)f
1 send(chaine:length());
2 try f
3 writeBytes(chaine);
4 flush();
5 gcatch(IOExceptionio)f
6 System:out:println("SEND ECHEC sur les chars");
7g
8g
5. Module config: C’est le package de configuration du client VOD et contient les classes
Config et HelpConfig.
Classe Config : Pour utiliser le client VOD il est nécessaire au préalable de le configurer :
Il faut spécifier son identité, le nom du serveur et surtout sous quel mode on veut évoluer
(ATM ou Ethernet). Il est possible de configurer l’application avant de lancer le client
(ceci est fortement recommandé pour la première utilisation du logiciel).
6. Module vodpull: Ce package nous est imposé par JMF. En effet, le Java Media FrameWork permet de définir sa propre source de données. L’utilisation la plus courante du JMF
est la lecture de fichier MPEG. Dans notre cas, la configuration est totalement différente.
Les données ne sont pas disponibles dans un fichier mais elles arrivent par paquets. Il faut
donc redéfinir la source des données au niveau du JMF. Il existe deux type de protocole
pour le contrôle de la source :
– Contrôle de la source PushDataSource
– Source non contrôle PullDataSource
Le deuxième cas nous concerne, les informations arrivent séquentiellement. L’implémentation de l’interface doit être précise. Dans notre cas la source provient du buffer. L’alimentation en données est réalisée par la classe ReadBuffer. Le flux de données n’est pas
continu et est dirigé dans un stream.
Le module vodpull contient plusieurs classes liées à l’implémentation de l’interface de
JMF. Le protocole ainsi que le type de la source est redéfinit. Le reste du JMF n’est pas
reimplémenter et on utilise les classes fournies par SUN.
21
3.1.4
Migration du client en Java: Résultats
Nous avons réimplémenté la partie client du prototype en Java. Le code fourni est modulaire et
concerne les parties suivantes:
1. La gestion des connections Client/Serveur : C’est le premier point sur lequel nous nous
sommes penchés. Partant des classes Java permettant d’instancier des objets de type Socket, nous avons créé nos propres classes adaptées au protocole de communication entre
le client et le Meta-Serveur et entre le Client et les disk-Serveurs.
2. La gestion de la mémoire (du côté du client) : La gestion de la mémoire du client est gérée
à l’aide des classes appartenant au module buffer.
3. La gestion de la réception, du décodage et de l’affichage des flux vidéo : La réception des
données vidéos est gérée dans la classe ConnectionDisk. Le décodage et l’affichage des
flux vidéo se fait à travers le JMF.
4. Le support des fonctions d’interactivité : Les fonctions d’interactivité sont gérées dans la
classe ConnectionDisk. Les fonctions classiques de contrôle vidéo sont disponibles par
l’intermédiaire de l’interface.
5. La détection des pannes de certaines composantes du serveur : Le client détecte si des
blocs ne lui parviennent pas. Si le mécanisme de réplication des données (mirroring) est
activé du côté du serveur, ce dernier se charge d’envoyer les blocs manquants vers le
client.
6. La conception d’une interface graphique conviviale : La classe Interface instancie une
interface munie de toutes les fonctionnalités énumérées dans la section ??
Nous avons intégré le nouveau client au sein de notre prototype de serveur vidéo et effectué des
tests de performance et de qualité de service. Nous avons considéré plusieurs environnements
(Ethernet et ATM) et des plates formes différentes (UNIX et NT). Après avoir validé les différentes fonctions du nouveau client, nous avons examiné le temps de latence qui représente le
critère de performance le plus significatif du client. Le temps de latence est défini comme le
temps qui s’écoule entre l’émission d’une requête par le client et l’instant où la première image
est visualisée chez ce dernier. Ce temps de latence est la somme de deux valeurs qui sont les
suivantes:
– le temps écoulé entre l’émission d’une requête et l’établissement des connections entre le
client et les différents disk-Serveurs. Ce temps t0 est négligeable (de l’ordre de quelques
22
millisecondes) et correspond à la somme des RTT des différents messages nécessaires
pour initialiser ces connections.
– le temps écoulé entre la commande “PLAY” et l’affichage de la première image du film
à l’écran : avant de lancer la visualisation du côté du client, celui-ci stocke en mémoire
quelques blocs consécutifs pour réordonner les blocs et les afficher dans les délais. Afin
de permettre cette bufferisation, un espace buffer de l’ordre de (n + 2) fois la taille du
bloc doit être réservé où n désigne le nombre de connections que le client maintient
avec les différents Disk-Serveurs. Par conséquent un temps de latence supplémentaire est
nécessaire ; il est de l’ordre de (n + 2) fois la durée d’une période (dans notre cas, une
période est égale à une seconde).
Le temps de latence tL est donc : tL = (n + 2) + t0. Par exemple un client ayant émis une
requête pour une vidéo stockée sur trois noeuds verra apparaı̂tre les premières images du film
5 secondes après l’émission de la requête (on considère t0 comme négligeable). Si le client effectue un “FORWARD”, “REWARD” ou “REPOSITIONNING” avant la commande “PLAY”,
le temps écoulé entre la commande “PLAY” et l’affichage des prochaines images est supérieur
à tL. En effet le repositionement des variables dans le buffer nécessite une demi-seconde supplémentaire, le temps de latence est alors tL = tL + 0:5. Toujours avec le même exemple, si le
client effectue un repositionnement de la vidéo, il verra apparaitre de nouvelles images à l’écran
5:5 secondes après avoir appuyé sur la commande “PLAY”.
0
3.2 Réimplémentation des algorithmes d’ordonnancement et d’extraction
des données
3.2.1
Motivation
Plusieurs projets étudiants ont contribué à la réalisation du prototype de serveur vidéo d’Eurécom. Ce prototype a donc évolué en lui intégrant des nouvelles fonctionnalités telles que les
mécanismes de fiabilité ou encore les méthodes de distribution des données. Un projet avec
France Telecom (Agora-Sophia Antipolis) et IBM (la Gaude) nous a permis de valider l’architecture distribuée du prototype. Dans le cadre de ce projet, nous avons configuré un prototype
composé de 6 noeuds dont un chez France Telecom et un autre chez IBM. Nous avons validé
les algorithmes de distribution des données à distance ainsi que les mécanismes de fiabilité.
En utilisant la plate forme ATM (Eurosud 155) liant Eurécom, France Telecom Agora et IBM
la Gaude, nous avons validé le bon fonctionnement de l’application de la vidéo à la demande.
Les clients étaient aussi localisés dans ces différents locaux. En outre, nous avons effectué des
tests de performance du prototype de serveur vidéo en variant la configuration du serveur en
terme du nombre de disques et de noeuds du serveur. Ces tests ont été effectués sur Ethernet
et aussi sur ATM. Les résultats ont montré que la performance de notre prototype de serveur
vidéo n’augmente pas en fonction du nombre de ses composantes. Ce problème nous paraissait
23
majeur et nous devions le résoudre afin d’aboutir à une configuration de serveur vidéo dont la
performance serait proportionnelle au nombre de ses composantes. Afin de résoudre ce problème de performance, nous avons commencé par trouver le goulot d’étranglement du serveur
vidéo. Deux alternatives ont été étudiées: le goulot d’étranglement est la capacité hardware, ou
il est lié à l’organisation du logiciel.
Dans le reste de cette section, nous présenterons les travaux qui ont été fait afin de résoudre les
problèmes indiqués ci-dessus.
3.2.2
Implémentation de l’ordonnancement asynchrone
Comme nous l’avons déjà évoqué, la performance du serveur vidéo n’évolue pas d’une fa¸con
linéaire en fonction du nombre de ses composantes (disques et noeuds). Nous avons étudié les
différentes possibilités qui pourraient en être l’origine. Nous avons tracé des scénarios multiples
où nous avons considéré trois différents modes de fonctionnement du serveur vidéo qui sont:
– Le mode read only, où le serveur vidéo n’effectue que des opérations de lecture (au niveau
de ses disques SCSI). Ce mode permet de bien déterminer la capacité des disques SCSI
en terme de débit de lecture.
– Le mode read and write, où le serveur vidéo effectue en plus des opérations de lecture
mais aussi des opérations d’écriture dans le buffer. Ceci permet de déterminer la capacité
de la machine en terme de débit interne d’écriture. Ceci permet aussi de déterminer le
nombre maximum de disques SCSI qui peuvent être connectés à une seule machine.
– Le mode read, write, and send, qui traduit le fonctionnement normal du serveur vidéo.
Dans ce mode, nous ajoutons l’envoie des données par l’interface réseau de chaque machine, ce qui permet de déterminer le nombre maximum de flux que peut supporter une
configuration donnée (serveur et réseau).
Nous avons analysé les résultats obtenus de cette étude. Un problème majeur que nous avons
pu localisé est lié à l’organisation du logociel serveur. Ce dernier a empêché la scalabilité du
serveur, du moins dans le cas où les différents facteurs du hardware n’étaient pas saturés. Il nous
était donc indispensable de se pencher sur l’organisation du logiciel et plus précisément sur le
mécanisme d’ordonnancement au niveau de chaque Disk-Serveur.
Problème La lecture des différents blocs au niveau des disques d’un noeud était effectuée
d’une fa¸con synchrone et assuré par un seul thread. Ceci a impliqué que chaque noeud fut insensible à l’augmentation du nombre de ses disques. En outre, le mécanisme d’ordonnancement,
qui est distribué, traite sur chaque disque la totalité de la liste durant chaque unité de service (
chaque seconde), ce qui fait que la charge au niveau de chaque disque soit élevée d’une fa¸con
permanente.
24
Solution Le processus d’ordonnancement au niveau de chaque Disk-Serveur a été de nouveau
con¸cu. La technique de multi-threading a été implémentée. La nouvelle conception contient
trois types de threads qui sont:
– Les threads du mécanisme d’ordonnancement (scheduler threads) qui sont responsables
de l’initialisation des premières requêtes de lecture, du traitement des fonctions d’interactivité (play, stop ou repositioning) et aussi des requêtes provenant du Meta-Serveur et qui
concernent spécialement les nouveaux clients admis, les clients qui quittent la session, la
distribution des données, etc.. Il est à noter que chaque Disk-Serveur contient exactement
un thread d’ordonnancement.
– Les threads de lecture du disque (disk reader threads) qui sont responsables de la lecture
des données vidéo au niveau du disque. Chaque bloc lu est placé dans une file d’attente
(sender queue). En outre le thread de lecture détermine la prochaine requête de lecture du
flux en question et le place convenablement dans la structure du mécanisme d’ordonnancement. Il est à noter que chaque disque a son propre thread de lecture. Par conséquent,
l’introduction des threads de lecture permet de créer un parallélisme au sein du serveur
vidéo. En effet, plusieurs opérations de lecture peuvent être effectuées simultanément.
– Les thread d’envoi (sender threads) qui sont responsables de l’envoi des blocs provenant
de la sender queue. Chaque Disk-Serveur possède un thread d’envoi.
Étant donné que les parties du serveur vidéo sont liées, le changement profond effectué sur
l’ordonnancement des flux a entraı̂né des changements dans la majorité des modules et fonctions
du Disk-Serveur et aussi du Meta-Serveur. Par exemple, l’outil de distribution des données a été
implémenté afin d’adapter la distribution des blocs à la logique du multi-threading.
3.3 Utilisation de UDP pour le transfert des données
Nous avons toujours utilisé le protocole TCP pour la transmission des données vidéo, ce qui
n’est pas le choix idéal étant donné que TCP intègre ses mécanismes de fenêtrage et de contrôle
d’erreur et de flux qui peuvent souvent freiner la transmission fluide des données vidéo du
serveur vers les clients. Par conséquent, il nous paraissait indispensable d’utliser UDP pour la
transmission des données au lieu de TCP. Ce changement ne va pas être trivial vu que UDP
impose une taille limite des blocs envoyés du côté du serveur, ce qui nous obligera à segmenter
les blocs à envoyer au niveau du serveur et de les réassembler au niveau du client.
Afin de supporter un transfert haut débit et l’aspect temps réel de l’application de la VoD que
le serveur vidéo supporte, l’utilisation de UDP, qui est un protocole du type datagram, nous
paraissait adéquate. Cependant, étant donné que la taille d’un paquet envoyé sur le réseau est
limitée dans le cas de UDP (souvent à 64 KByte), les différents blocs doivent être segmentés
25
avant d’être émis sur le réseau. Du côté du client, les blocs originaux doivent être reconstruits
(réassemblage).
– Du côté du serveur, chaque Disk-Serveur, avant d’envoyer un bloc, découpe ce dernier en
sous-blocs d’une taille inférieure ou égale à 64 KByte chacun.
– Du côté du client, la couche UDP se charge du réassemblage des sous-blocs appartenant
au même bloc. Chaque bloc est donc régénéré progressivement au sein d’un buffe. Une
fois le bloc est reconstruit, ce dernier est envoyé au buffer du client et suit les étapes que
nous avons déjà détaillées dans la section 3.1.
Nous étions donc obligé d’introduire une sous-couche qui effectue la segmentation et le réassemblage afin d’utiliser UDP pour le transfert des données vidéo.
4
Tests d’evaluation de la performance du nouveau prototype de serveur vidéo
Après avoir modifié plusieurs parties du logiciel du serveur vidéo, la dernière phase de ce projet
a été dédiée à l’étude de la performance du prototype de serveur vidéo . Pour cela, nous avons
défini des scénarios de test qui nous permettront d’évaluer le débit et la scalabilité du serveur
vidéo. Dans cette section, nous montrerons les résultats de performance les plus significatifs de
cette étude.
Le débit du serveur vidéo est définit comme le nombre maximal de flux qui peuvent être supportés sans que le serveur vidéo soit saturé. Tous les clients admis sont servis une fois durant
chaque unité de service. Nous calculons le débit du serveur vidéo comme suit: Les files d’attente
qui sont utilisées au niveau de chaque Disk-Serveur pour détacher les commandes de lecture de
celles de l’envoi entre les différents threads servent aussi à mesurer le débit du serveur. En effet,
tant la taille de la file d’attente reste inchangé ou varie légèrement, le serveur n’a pas encore
atteint ses limites. En revanche, dès que la taille de la file d’attente augmente d’une fa¸con continue et dépasse un seuil, le serveur a bien dépassé sa capacité et le débit du serveur sera donc
identifié. Ce même principe va être utilisé pour introduire le mécanisme de contrôle d’admission
au sein du serveur vidéo.
Pour effectuer les tests, nous avons utilisé trois différentes familles de disques SCSI. Les disques
dits lents ont chacun une capacité de stockage de 1GByte et un débit de 4MByte=sec. La
deuxième famille contient des disques médium de 2GByte de capacité et de 10MByte=sec
en terme de débit pour chacun. Finalement, les disques dits rapides ont chacun une capacité de
9GByte et un débit de 20MByte=sec. Nous utilisons également des machines UNIX différentes:
SPARCstation 20, UltraSPARC 1 et UltraSPARC 10. Il est à noter que la SPARC20 est la
machine la moins performante, tandis que la Ultra 10 est la plus performante.
On considère une seule station UNIX et on lui connecte progressivement des disques. Nous
calculons le débit du serveur pour chaque configuration. Nous avons connecté les disques lents
26
progressivement avec une station lente SPARCstation 20 (configuration lente). En outre, nous
avons connecté les disques rapides progressivement avec une station rapide UltraSPARC 10
(configuration rapide). La figure 11 illustre les résultats obtenus. Ces résultats montrent que
– Le débit d’un serveur vidéo constitué d’un seul Disk-Serveur augmente en fonction du
nombre de disques qui sont connectés à ce Disk-Serveur.
– Les résultats obtenus avec la configuration lente (station SPARCstation 20 et des disques
lents) et aussi avec la configuration rapide montrent que le débit du serveur vidéo augmente bien quand le nombre de disques connectés augmente. Nous avons réalisé que dans
le cas d’une configuration lente, la capacité du serveur est déterminée par la capacité de
ses disques et non par celle de la machine SPARCstation20. En revanche, dans le cas
d’une configuration rapide, la limitation de la capacité du serveur est due à la limitation
de la capacité de sa machine. Ceci est lié à la capacité de l’adaptateur SCSI, ne dépassant
pas 40Mbytes=sec dans le cas de UltraSPARC 10 avec les disques rapides. Afin d’éliminer ce goulot d’étranglement, un deuxième controller doit être installé, ce qui aboutirai à
saturer la capacité du PCI Bus qui est limité à 66Mbytes=sec.
Debit du serveur video avec un Disk−Serveur
180
Nombre de clients admis
160
Configuration rapide
Configuration lente
140
120
100
80
60
40
20
0
1
2
3
Nombre de disques sur un noeud
4
F IG . 11 – Débit et évolutivité d’un serveur vidéo composé d’un Disk-Serveur
Le tableau 1 illustre les résultats obtenus avec plus de détails.
Nous considérons comme suit un serveur vidéo composé de plusieurs Disk-Serveurs afin de
tester son évolutivité et la performance quand on lui ajoute progressivement de nouvelles machines. Nous considérons les configurations lentes (SPARCstation 20 et disques lents) et les
configurations médium (UltraSPARC 1 et disques médiums). Chaque machine est connectée
uniquement à un seul disque. Nous mesurons le débit du serveur pour des configurations allant
d’une machine à 8 machines. Les résultats sont illustrés dans la figure 12. Ceux-ci montrent
que le débit du serveur vidéo augmente d’une fa¸con quasi linéaire avec le nombre de noeuds
contenus dans le serveur.
27
Configuration
Débit en nombre de clients Débit en Bytes/sec
SPARCstation 20 et 1 disque
13 clients
2:293:616 bytes/sec
SPARCstation 20 et 2 disques
26 clients
4:587:232 bytes/sec
SPARCstation 20 et 3 disques
35 clients
6:175:120 bytes/sec
SPARCstation 20 et 4 disques
40 clients
7:057:280 bytes/sec
UltraSPARC 10 et 1 disque
72 clients
12:703:104 bytes/sec
UltraSPARC 10 et 2 disques
112 clients
19:760:384 bytes/sec
UltraSPARC 10 et 3 disques
145 clients
25:582:640 byte/sec
UltraSPARC 10 et 4 disques
173 clients
30:522:736 byte/sec
TAB . 1 – Résultats de performance pour un serveur vidéo composé d’un Disk-Serveur
Nombre de clients admis
Debit du serveur video avec plusieurs Disk−Serveurs
100
Configurations lentes et medium
90
80
70
60
50
40
30
20
10
1
2
3
4
5
6
7
Nombre de noeuds dans le serveur
8
F IG . 12 – Débit et scalabilité d’un serveur vidéo composé de plusieurs noeuds
Le tableau 3 montrent ces résultats en détails.
Nous avons vu que le serveur vidéo est bien scalable en terme du nombre des disques qui sont
Configuration
Débit en nombre de clients Débit en Bytes/sec
1 SPARCstation 20
12 clients
2:117:184 bytes/sec
2 SPARCstation 20
24 clients
4:234:368 bytes/sec
3 SPARCstation 20
33 clients
5:822:256 bytes/sec
4 SPARCstation 20
43 clients
7:586:576 bytes/sec
4 SPARCstation 20 et 1 UltraSPARC 1
48 clients
8:468:736 bytes/sec
4 SPARCstation 20 et 2 UltraSPARC 1
54 clients
9:527:328 bytes/sec
4 SPARCstation 20 et 3 UltraSPARC 1
61 clients
10:762:352 bytes/sec
4 SPARCstation 20 et 4 UltraSPARC 1
85 clients
14:996:720 bytes/sec
TAB . 2 – Résultats de performance pour un serveur vidéo composé de plusieurs Disk-Serveurs
28
contenus dans le même Disk-Serveur et aussi en terme du nombre de Disk-Serveurs qui sont
contenus dans le serveur vidéo. Nous allons combiner ces deux aspects et étudier la scalabilité
du serveur vidéo quand on varie le nombre de Disk-Serveur et le nombre de disques par DiskServeur. Un exemple des résultats est indiqué dans le tableau 3. Nous considérons d’un côté
deux machines rapides connectées à 1 ou à 2 disques chacune. De l’autre côté, nous examinons
la performance pour un serveur vidéo hétérogène composé de 4 machines ayant 1 disque ou 2
disques chacune.
Configuration
2 Ultra 10, 1 Ultra 1 et 1 SPARC 20
(1 disque par noeud)
2 Ultra 10, 1 Ultra 1 et 1 SPARC 20
(2 disques par noeud)
Débit en nombre de clients Débit en Bytes/sec
58 clients
10:234:912 bytes/sec
111
:
19 587 504
clients
197 clients
25 410 816
144
2 Ultra 10 et (1 disque par noeud)
2 Ultra 10 et (2 disques par noeud)
:
clients
bytes/sec
: : bytes/sec
34:763:408 bytes/sec
TAB . 3 – Débit d’un serveur vidéo composé de plusieurs noeuds et plusieurs disques
Les résultats du tableau 3 montrent que:
– Un serveur vidéo composé de machines hétérogènes est limité par la capacité de la machine la plus lente. Par exemple, un serveur vidéo composé de deux machines Ultra 10
ayant chacune deux disques atteint un débit de 197 clients. Cependant, un serveur constitué de 4 machines (deux Ultra 10, une Ultra 1 et une SPARC 20) ayant chacune 1 disque
a un débit qui ne dépasse pas 58 clients.
– Avec deux machines Ultra 10 ayant chacune 2 disques, le serveur vidéo atteint un débit de
197 clients. Sachant que l’interface réseau de chaque noeud du serveur vidéo ne dépasse
pas le débit de 90 clients qui consomment des flux MPEG1 à 1:5 Mbit/sec, nous déduisons
que le nombre de disques utiles qui doivent être connectés à une machine Ultra 10 est égal
à deux. Ajouter plus de disques ne contribuera pas à l’augmentation du débit du serveur,
mais seulement à celle de sa capacité de stockage.
– Les résultats montrent bien que le serveur vidéo est scalable et a la capacité d’atteindre
une très haute performance en terme du nombre de clients qui peuvent être admis simultanément.
L’étude de performance du serveur vidéo a été accompagné par l’étude de sa fiabilité . Cette
étude a consisté surtout à forcer la panne de quelques composantes du serveur vidéo et de
tester le bon fonctionnement des mécanismes de détection des pannes et de reconstruction des
blocs perdus. La reconstruction consiste à extraire les copies des blocs perdus. Les mécanismes
d’ordonnancement et d’extraction sont adaptés pour le mode de défaillance et les tests effectués
montrent que le serveur vidéo est capable de survivre dans le cas de la défaillance d’un de ses
29
Disk-Serveurs contenant plusieurs disques. Pour des raisons de test, le client est menu d’une
interface qui active et désactive le mécanisme de fiabilité, ce qui nous a permis de comparer
qualitativement l’impact de rendre le serveur vidéo tolérant à la défaillance de ses composantes.
5
Valorisation et démonstration
Le but de cette phase est de favoriser la valorisation des travaux auprès de partenaires potentiels. Dans ce cadre, nous mettons en place la plate-forme de démonstration dan les locaux
d’Eurecom. Ce rapport servira comme document de synthèse de positionnement du système à
valoriser, de ses techniques et des performances obtenues.
6
Conclusions
Dans le cadre du projet d’expertise entre l’Institut Eurécom et CNET/France Telecom, des travaux ont été effectués sur le prototype de serveur vidéo existant d’Eurécom. Ces travaux ont
permis d’atteindre les objectifs qui ont été indiqués dans la section 1.2 et qui sont les suivants:
– Refaire la partie client du serveur vidéo. Ceci consiste à implémenter le client en Java. La
migration du client vers Java a permis une indépendance totale de la machine et du système d’exploitation utilisés par le client. Le décodage des flux MPEG1 est ainsi effectué
de la même fa¸con sur UNIX et sur NT. Grâce à JMF, un client sur UNIX peut visualiser
le flux re¸cu en plein écran, ce qui n’était pas possible auparavant.
– Mener à bien les compléments de développement qui consistent en particulier à atteindre
une architecture flexible à la largeur d’échelle (scalable) tout en gardant l’aspect distribué
de l’architecture ainsi que des algorithmes d’ordonnancement et de stockage des données. Dans ce cadre, nous avons réimplémenté les mécanismes d’ordonnancement chez
les Disk-Serveurs et adapté l’outil de distribution des données aux changements effectués La réimplémentation de l’outil d’ordonnancement a permis de paralléliser la lecture,
l’écriture et l’envoi des blocs, ce qui a permis d’atteindre une scalabilité et haute performance que nous avons illustré. Nous avons tout de même conservé l’aspect distribué de
l’ordonnancement et de l’exécution des tâches au sein de chaque Disk-Serveur, ce qui garantie la flexibilité du serveur et la possibilité d’ajouter de nouvelles composantes quand
c’est nécessaire.
– Garantir un fonctionnement fiable de ces logiciels. La détection des pannes est immédiate
et déclenche l’envoi des copies des blocs perdus. L’étude fiabilité du serveur vidéo était
qualitative. Pour le client, une panne d’un disque ou d’une machine entraı̂ne une interruption de quelques secondes, après laquelle le serveur est capable de reconstruire les
données perdues et le client verra son flux reprendre sa continuité.
30
– Tests et validation. Les différents tests de performance et de scalabilité du nouveau prototype de serveur vidéo ont montré que le serveur vidéo est scalable en terme du nombre
de disques qui sont contenus dans un Disk-Serveur et aussi en terme du nombre de DiskServeurs qui sont contenus dans le serveur vidéo. L’étude a aussi permis de déterminer les
différentes limites de la hardware et le nombre utile de disques qui doivent être connectés
à chaque Disk-Serveur.
Références
[1] C. Bernhardt and E. W. Biersack, “The server array: A scalable video server architecture,” in High-Speed Networks for Multimedia Applications (W. Effelsberg, A. Danthine,
D. Ferarri, and O. Spaniol, eds.), Kluwer Publishers, Amsterdam, The Netherlands, 1996.
[2] C. Bernhardt and E. W. Biersack, “The server array: A novel architecture for a scalable
video server,” in Conference on Distributed Multimedia Systems and Applications, (Stanford, USA), pp. 85–88, Aug. 1995.
[3] J. Gafsi and E. W. Biersack, “Data striping and reliablity aspects in distributed video
servers,” In Cluster Computing: Networks, Software Tools, and Applications, vol. 2 (1),
pp. 75–91, February 1999.
[4] E. W. Biersack and F. Thiesse, “A new class of constant data length retrieval algorithms
for video servers with vbr streams,” in Multimedia Storage and Archiving Systems, SPIE
Photonics East ‘96 Symposium, (Boston, MA), Nov. 1996.
[5] E. W. Biersack, F. Thiesse, and C. Bernhardt, “Constant data length retrieval for video
servers with variable bit rate streams,” in Proc. of the IEEE Conf. on Multimedia Systems,
(Hiroshima, Japan), pp. 151–155, June 1996.
[6] E. W. Biersack and F. Thiesse, “Statistical admission control in video servers with constant
data length retrieval of vbr streams,” in Third International Conference on Multimedia
Modeling, (Toulouse, France), pp. 423–438, World Scientific, Singapore, Nov. 1996.
[7] E. W. Biersack, W. Geyer, and C. Bernhardt, “Intra- and inter-stream synchronization for
stored multimedia streams,” in Proc. of the IEEE Conf. on Multimedia Systems, (Hiroshima, Japan), pp. 372–381, June 1996.
[8] E. W. Biersack and W. Geyer, “Synchronized delivery and playout of distributed stored
multimedia streams,” ACM Multimedia Systems, vol. 7, pp. 70–90, Jan. 1999.
[9] J. Gafsi and E. W. Biersack, “Performance and reliability study for distributed video servers: Mirroring or parity?,” in Proceedings of the IEEE international conference on multimedia computing and systems (ICMCS’99), (Florence, Italy), June 1999.
31
[10] J. Gafsi and E. W. Biersack, “Performance and cost comparison of mirroring- and paritybased reliability schemes for video servers,” in Proceedings of KiVS’99, (Darmstadt, Germany), March 1999.
[11] J. Gafsi and E. W. Biersack, “Modeling and performance comparison of reliability strategies for distributed video servers,” to appear in IEEE Transactions on Parallel and Distributed Systems, February 2000.
[12] J. Gafsi and E. W. Biersack, “A novel replica placement strategy for video servers,” in
Proceedings of the 6th International Workshop On Interactive and Distributed Multimedia
Systems IDMS’99, Toulouse, France, October 12-15 1999.
[13] J. Gafsi, DESIGN AND PERFORMANCE OF LARGE SCALE VIDEO SERVERS. PhD
thesis, ENST Paris, Institut Eurecom, November 1999.
[14] J. Gafsi and E. W. Biersack, “Serveurs video: Architecture et perfromance,” Hermes
Science Publications, 1999.
[15] J. Gafsi, U. Walther, and E. W. Biersack, “Design and implementation of a scalable, reliable, and distributed vod-server,” in Proceedings of to the 5th joint IFIP-TC6 and ICCC
Conference on Computer Communications, October 1998.
[16] W. Ulrich, “Design and implementation of a distributed, reliable mpeg video server on atm
networks using forward error correction methods,” November 1997.
[17] J. Exner, “A reliable video server based on mirroring: Design, implementation, and performance analysis,” Master’s thesis, University of Karlsruhe/Institut Eurecom, Sophia Antipolis, France, Jan. 1999.
32

Documents pareils