Optimisations applicatives pour multi-cœurs NUMA : un cas d'étude avec le serveur web Apache

Résumé Les machines multi-cœurs à accès mémoire non uniforme (NUMA) sont de plus en plus répandues. Il est donc nécessaire de comprendre comment les exploiter efficacement. La plupart des travaux menés dans ce domaine choisissent de résoudre ce problème au niveau du noyau du système d’exploitation, en améliorant les abstractions fournies aux applications ou en proposant de nouvelles architectures logicielles pour améliorer le passage à l’échelle des applications sur ce type de machines. Dans ce papier, nous adoptons un point de vue complémentaire : nous étudions comment améliorer le couple d’applications Apache-PHP au dessus d’un noyau Linux standard. Nous mettons en lumière trois différents problèmes de performance à différents niveaux du système : (i) un nombre d’accès mémoire distants trop important, (ii) un équilibrage de charge inefficace entre les processeurs et (iii) de la contention sur des structures de données du noyau. Nous proposons et implantons des solutions au niveau applicatif pour chacun de ces problèmes. Notre version optimisée des applications Apache et PHP a un débit 33 % plus important que ces applications non modifiées sur une machine à 16 cœurs. Nous concluons en explicitant les leçons tirées lors de ces travaux sur l’amélioration de la performance des serveurs sur les architectures multi-cœurs NUMA.

[1]  Adrian Schüpbach,et al.  The multikernel: a new OS architecture for scalable multicore systems , 2009, SOSP '09.

[2]  Chita R. Das,et al.  A multi-threaded PIPELINED Web server architecture for SMP/SoC machines , 2005, WWW '05.

[3]  Bratin Saha,et al.  Enabling scalability and performance in a large scale CMP environment , 2007, EuroSys '07.

[4]  Erich M. Nahum,et al.  Performance issues in WWW servers , 1999, TNET.

[5]  John Hawkes,et al.  Scaling Linux ® to the Extreme From 64 to 512 Processors , 2010 .

[6]  Philip S. Yu,et al.  The state of the art in locally distributed Web-server systems , 2002, CSUR.

[7]  Alexandra Fedorova,et al.  Addressing shared resource contention in multicore processors via scheduling , 2010, ASPLOS XV.

[8]  Yang Zhang,et al.  Corey: An Operating System for Many Cores , 2008, OSDI.

[9]  Adam Wierman,et al.  Open Versus Closed: A Cautionary Tale , 2006, NSDI.

[10]  David R. Cheriton,et al.  Comparing the performance of web server architectures , 2007, EuroSys '07.

[11]  Robert Tappan Morris,et al.  Multiprocessor Support for Event-Driven Programs , 2003, USENIX Annual Technical Conference, General Track.

[12]  Robert Tappan Morris,et al.  An Analysis of Linux Scalability to Many Cores , 2010, OSDI.

[13]  Robert Tappan Morris,et al.  Locating cache performance bottlenecks using data profiling , 2010, EuroSys '10.

[14]  Dilma Da Silva,et al.  K42: building a complete operating system , 2006, EuroSys.

[15]  Bryan Veal,et al.  Performance scalability of a multi-core web server , 2007, ANCS '07.

[16]  Parag Agrawal,et al.  The case for RAMClouds: scalable high-performance storage entirely in DRAM , 2010, OPSR.