[OSM-dev-fr] mod_tile / render_list "recursif"

2014-07-20 Thread Christian Quest
Ca me titillait depuis longtemps... j'ai modifié render_list, l'utilitaire
de mod_tile qui sert à prégénérer les tuiles.


Le but de la modif:
1- profiter au mieux des caches lors du process de prégénération

render_list procédait jusqu'aujourd'hui niveau de zoom par niveau de zoom.
génération du zoom n, puis n+1, puis n+2

Du coup, les requêtes postgis chargeaient les données d'une zone, puis les
dévait les recharger au zoom suivant car le reste du rendu les avait
forcément supprimé des caches. Du coup ceci généère un grand nombre
d'I/O... nerf de la guerre avec de telles volumes de données.

Désormais, render_list peut immédiatement calculer les tuiles du zoom
suivant, tirant parti du fait que les données utiles sont encore en
cache... et donc réduisant les I/O et donc le temps de rendu.

Mais bon... où arrêter la récursion ?

2- prégénérer uniquement ce qui vaut le coup de l'être

Deuxième apport... une limite de temps de génération.

Si une metatile a pris moins de temps que cette limite, on peut se passer
de la prégénérer, elle pourra l'être rapidement si jamais elle est demandée.


Pour utiliser cette nouvelle fonctionnalité, j'ai juste ajouté l'option de
temps maximum de rendu (en ms), qui déclenche et contrôle la récursion.
Sans elle, le fonctionnement est inchangé.

Exemple:
render_list -m osm -a -f -z 9 -Z 9 --max-time 5000

A faire:
- pour un rendu multi-niveau (-z 9 -Z 12) prévoir de tester si une metatile
a déjà été rendue en testant son heure de génération par rapport à l'heure
de démarrage de render_list
- ajouter une limite sur le zoom maxi pour la récursion (pour l'instant ça
descend jusqu'au 18 codé en dur)

La modif est sur github, commentaires bienvenus !

https://github.com/cquest/mod_tile/commit/652ec90c7d1293a4b049ee0b58be53c01a602e75
-- 
Christian Quest - OpenStreetMap France
___
dev-fr mailing list
dev-fr@openstreetmap.org
https://lists.openstreetmap.org/listinfo/dev-fr


Re: [OSM-dev-fr] mod_tile / render_list "recursif"

2014-07-20 Thread Christophe Merlet
Le 20/07/2014 11:49, Christian Quest a écrit :
> Ca me titillait depuis longtemps... j'ai modifié render_list,
> l'utilitaire de mod_tile qui sert à prégénérer les tuiles.
> 
> 
> Le but de la modif:
> 1- profiter au mieux des caches lors du process de prégénération
> 
> render_list procédait jusqu'aujourd'hui niveau de zoom par niveau de zoom.
> génération du zoom n, puis n+1, puis n+2
> 
> Du coup, les requêtes postgis chargeaient les données d'une zone, puis
> les dévait les recharger au zoom suivant car le reste du rendu les avait
> forcément supprimé des caches. Du coup ceci généère un grand nombre
> d'I/O... nerf de la guerre avec de telles volumes de données.
> 
> Désormais, render_list peut immédiatement calculer les tuiles du zoom
> suivant, tirant parti du fait que les données utiles sont encore en
> cache... et donc réduisant les I/O et donc le temps de rendu.
> 
> Mais bon... où arrêter la récursion ?

Et comment parcours tu les tuiles a générer ?
Un scan en zig-zag (style DCT du MPEG) serait sans doute aussi une bonne
chose pour le cache
http://www.bretl.com/mpeghtml/zigzag.HTM
http://www.cs.cf.ac.uk/Dave/Multimedia/node238.html



> 2- prégénérer uniquement ce qui vaut le coup de l'être
> 
> Deuxième apport... une limite de temps de génération.
> 
> Si une metatile a pris moins de temps que cette limite, on peut se
> passer de la prégénérer, elle pourra l'être rapidement si jamais elle
> est demandée.
> 
> 
> Pour utiliser cette nouvelle fonctionnalité, j'ai juste ajouté l'option
> de temps maximum de rendu (en ms), qui déclenche et contrôle la
> récursion. Sans elle, le fonctionnement est inchangé.
> 
> Exemple:
> render_list -m osm -a -f -z 9 -Z 9 --max-time 5000
> 
> A faire:
> - pour un rendu multi-niveau (-z 9 -Z 12) prévoir de tester si une
> metatile a déjà été rendue en testant son heure de génération par
> rapport à l'heure de démarrage de render_list
> - ajouter une limite sur le zoom maxi pour la récursion (pour l'instant
> ça descend jusqu'au 18 codé en dur)
> 
> La modif est sur github, commentaires bienvenus !
> 
> https://github.com/cquest/mod_tile/commit/652ec90c7d1293a4b049ee0b58be53c01a602e75
> -- 
> Christian Quest - OpenStreetMap France
> 
> 
> ___
> dev-fr mailing list
> dev-fr@openstreetmap.org
> https://lists.openstreetmap.org/listinfo/dev-fr
> 


-- 
Christophe Merlet (RedFox)

___
dev-fr mailing list
dev-fr@openstreetmap.org
https://lists.openstreetmap.org/listinfo/dev-fr


Re: [OSM-dev-fr] mod_tile / render_list "recursif"

2014-07-20 Thread Christian Quest
Le 20 juillet 2014 13:07, Christophe Merlet  a
écrit :

> Le 20/07/2014 11:49, Christian Quest a écrit :
> > Ca me titillait depuis longtemps... j'ai modifié render_list,
> > l'utilitaire de mod_tile qui sert à prégénérer les tuiles.
> >
> >
> > Le but de la modif:
> > 1- profiter au mieux des caches lors du process de prégénération
> >
> > render_list procédait jusqu'aujourd'hui niveau de zoom par niveau de
> zoom.
> > génération du zoom n, puis n+1, puis n+2
> >
> > Du coup, les requêtes postgis chargeaient les données d'une zone, puis
> > les dévait les recharger au zoom suivant car le reste du rendu les avait
> > forcément supprimé des caches. Du coup ceci généère un grand nombre
> > d'I/O... nerf de la guerre avec de telles volumes de données.
> >
> > Désormais, render_list peut immédiatement calculer les tuiles du zoom
> > suivant, tirant parti du fait que les données utiles sont encore en
> > cache... et donc réduisant les I/O et donc le temps de rendu.
> >
> > Mais bon... où arrêter la récursion ?
>
> Et comment parcours tu les tuiles a générer ?
> Un scan en zig-zag (style DCT du MPEG) serait sans doute aussi une bonne
> chose pour le cache
> http://www.bretl.com/mpeghtml/zigzag.HTM
> http://www.cs.cf.ac.uk/Dave/Multimedia/node238.html
>
>

De N à N+1, l'effet zig-zag est sûrement limité... car on passe de 1 à 4
tuiles.
Je suis en train de faire des bench pour voir si la théorie se vérifie dans
la pratique ;)

-- 
Christian Quest - OpenStreetMap France
___
dev-fr mailing list
dev-fr@openstreetmap.org
https://lists.openstreetmap.org/listinfo/dev-fr