0

De la tarte ? non, du gâteau !

twitterlinkedinmail

En référence l’article concernant le portage du code de SQL Server sur Linux.

En fait, de portage il n’y aura pas eu. Presque pas besoin. Voir la présentation de Slava et Tobias Thernström sur Channel 9 qui donne une idée précise du comment:

– https://blogs.technet.microsoft.com/dataplatforminsider/2016/12/16/sql-server-on-linux-how-introduction/
– https://channel9.msdn.com/Shows/Data-Exposed/SQL-Server-on-Linux-The-HOW 

Le plus beau dans l’histoire c’est que les binaires sqlservr, les dlls sqlmin, sqllang, sqlos etc…, restent tous au format PE. De fait seule la couche de dialogue Linux Host Extension est en ELF64, et ne convertit que 50 appels système distincts en syscalls linux (pour l’instant), dont très probablement ceux évoqués dans l’article pas de la tarte : scatter /gather IO, waitforsingle / multipleobjects, InterlockedExchange, IOCP , …

D’ailleurs via une simple trace des appels systèmes effectués par la couche LHE sur la CTP 1.1, j’ai pu valider plusieurs hypothèses notamment l’utilisation des futexes et d’epolls. Ci-dessous un schéma fourni par Slava et Tobias qui résume le mieux la façon dont ils ont répondu à la problématique:

SQLPAL est dérivé du concept de Platform Abstraction Layer qui vient de DrawBridge. Et toute l’abstraction qui avait été faite par Slava à l’époque de Yukon a directement porté ses fruits ici, dans la mesure où la plupart des appels étaient pipelinés aux APIs win32 via SQLOS. Bien sûr il y a eu d’autres sources d’appels directs aux API (l’agent SQL, MSXML, SQLCLR encore que pas tout)  qu’il a fallu modifier pour qu’elles ne s’adressent plus quà SQLOS v2, mais cela ne représentait qu’une petite partie du code en quantité.

Cette couche LHE, ça me fait penser à l’implémentation des premières VMM avant l’assistance matérielle à la virtualisation, cf la publication de John Scott Robin et Cynthia Irvine qui préfigurait ce qu’allait devenir les premiers hyperviseurs au début des années 2000. On effectuait une translation binaire des quelques instructions qui nécessitent de tourner en ring zéro et tout le reste pouvait tourner comme s’il était réellement en bare-metal.

 C’était juste très naïf de ma part de penser qu’ils aient pu faire un portage complet du code vers Linux. J’avais gardé en tête l’exemple de Wim ten Have, ce développeur de Sybase Corp à la fin des années 90 qui avait porté le code de Sybase ASE de SunOS à Linux pendant ses pauses déjeuner. L’histoire de dit pas combien de temps il avait réellement mis  pour terminer son side-project. Dans le cas de SQL Server, il aurait fallu plusieurs années avec beaucoup de monde pour passer de win32 à Linux, il y a quand même quelque chose comme 40 millions de lignes de code dans le source.

En tous cas, ça montre à quel point il est important de mettre des billes dans la R&D, car sans Drawbridge, les travaux sur Singularity, ou tout le travail d’Andew Bauman sur Barrelfish, c’eut été impossible d’accomplir ce miracle en aussi peu de temps (Slava parle d’un seul mois pour booter le process sous Linux).

On va donc continuer de suivre tout ça de plus près, et ça tombe bien, il fallait que je me mette à gdb / lldb un jour ou l’autre, donc l’occasion est venue …

Bonnes fêtes de fin d’année à toutes / tous. A+

Continuez votre lecture sur le blog :

twitterlinkedinmail

David Baffaleuf

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.