Test de performance de Google AppEngine

Introduction
On parle énormément de "cloud computing" depuis ces deux dernières années : Amazon S3, Microsoft Azure, Google AppEngine. C'est pourquoi j'ai voulu me livrer à un petit test de performance avec AppEngine, qui offre l'énorme avantage d'être gratuit et disponible sous toutes les plateformes puisqu'il utilise Java et Python comme principaux langages de programmation.

Une fois inscrit sur l'AppEngine et après avoir téléchargé le SDK dans le langage de votre choix, vous aurez accès à ce tableau de bord vous permettant de monitorer l'utilisation de votre crédit de CPU et de bande passante :



Ma plateforme de référence est très modeste ; un simple portable équipé d'un processeur Intel Core 2 Duo à 2.1 Ghz, avec une mémoire de 2 Gb. Les systèmes d'exploitation utilisés pour tester la version locale de mon benchmark sont Windows XP Pro SP3 et Ubuntu 10.04.

Le programme de test
Mon programme de test est un grand classique : l'estimation de Pi en utilisant la bonne vieille méthode de la quadrature du cercle. Voici le code source en Python.

# Google AppEngine Benchmark
# Computing of PI
#
# Usage: google_appengine/dev_appserver.py picloud/

from google.appengine.ext import webapp
from google.appengine.ext.webapp import util
import datetime

class MainPage(webapp.RequestHandler):
    def get(self):
 start_time = x = datetime.datetime.now()

 num_steps = 10000000.0
        sum = 0.0
        step = 1.0 / num_steps;

 i=0
 while i < num_steps:
  x = (i + 0.5) * step
  sum = sum + 4.0 / (1.0 + x * x);
  i = i + 1

 end_time = x = datetime.datetime.now()
 duration = end_time - start_time

 self.response.out.write("Google AppEngine Benchmark")
 self.response.out.write("Value of Pi: %.20f" % (step * sum))
 self.response.out.write("Execution time: %.0f sec %.0f ms" % (duration.seconds,duration.microseconds))

def main():
    application = webapp.WSGIApplication([('/', MainPage)], debug=True)
    util.run_wsgi_app(application)

if __name__ == '__main__':
    main()

Voyons maintenant le fichier de configuration app.yaml :

application: pionthecloud
version: 2
runtime: python
api_version: 1

handlers:
- url: /.*
  script: pionthecloud.py


Tests en local
Lançons maintenant notre programme de test sous la version locale de développement de AppEngine. Tout d'abord sous Windows XP Pro :


Et ensuite, sous Ubuntu 10.04:


Résultats :

  • Sous XP : 3 sec 6720
  • Sous Ubuntu : 5 sec 8326


Première surprise, les interprèteurs Python ne sont pas tous égaux sous Windows et Linux. Deuxième surprise, les résultats varient d'un OS à l'autre après la 12ème décimale. Nous allons mettre ça sur le compte d'une différence de représentation des nombres en virgule flotante. La différence de performance est elle plus surprenante.

Déploiement et test sur le cloud
Déployons maintenant notre programme de test sur le cloud. De la part de Google, on pourrait s'attendre naïvement à une puissance de calcul phénoménale.



Et bien non ! Là encore, grosse surprise. Notre calcul s'effectue en 5 sec 4964. Pire encore ; si on tente d'augmenter le nombre d'itérations, après 20 secondes d'exécution, notre programme est purement et simplement interrompu, avec une exception non indiquant que notre application consomme trop de temps CPU.



Dans un prochain post, nous verrons comment effectuer ce calcul encore plus rapidement, en utilisant cette fois des techniques de programmation parallèles.

Commentaires