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.
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 :
- Pas de la tarte (David Baffaleuf) [Operating SystemSQL Server]
- Installer SAP IQ 16.1 en tant que service sur Red Hat 8 (David Baffaleuf) [Sybase]
- Règles d’installation de base (épisode 1) (David Baffaleuf) [SQL ServerVintage]
- Direct i/o, dsync on/off, raw device (David Baffaleuf) [SybaseVintage]
- Le point sur Meltdown et les bases de données (David Baffaleuf) [GénéralOperating System]