FR 3020886 A1 20151113 FR 1554030 A 20150505 SYSTÈME ET PROCÉDÉ POUR LES TRANSFERTS DE STOCKAGE PCIe EN POINT À POINT Contexte [0001] La spécification de Mémoire non volatile Express (NVMe) est une spécification concernant l'accès à des dispositifs à l'état solide (SSD) et à d'autres dispositifs cibles rattachés par un bus d'Interconnexion de composants périphériques Express (PCIe). La spécification de Mémoire non volatile Express (NVMe) définit une interface de commande basée sur un ensemble unique de files d'attente de commande et de terminaison administratives et sur de nombreux ensembles de files d'attente de commande et de terminaison administratives d'entrées/sorties (E/S). Les files d'attente administratives sont utilisées pour des tâches telles que la création et la suppression de files d'attente, l'interrogation de statut de dispositif et la configuration des caractéristiques, tandis que les files d'attente d'E/S sont utilisées pour les transferts liés aux stockages, tels que les lectures et les écritures de blocs. Cependant, la spécification NVMe dépend des ressources de l'hôte pour la commande et le contrôle, à un degré susceptible d'entraîner un goulet d'étranglement ou un point de resserrement dans les performances du système. [0002] Selon la spécification NVMe, seule la CPU hôte d'un système est capable d'envoyer des commandes de stockage à un contrôleur NVMe. De plus, l'architecture système PCI Express fait face à deux contraintes de performances types. Premièrement, les structures PCI Express types desservant de nombreux dispositifs (telles qu'un fond de panier de stockage' d'entreprise) ont une largeur de bande totale en amont (entre un commutateur PCI Express et l'hôte, vers l'amont) plus faible que ne l'est la largeur de bande en aval (entre ce même commutateur PCI Express et tous les contrôleurs de stockage connectés, vers l'aval). Cela représente un excédent de largeur de bande en aval du commutateur, qui ne peut pas être entièrement utilisé lorsque le seul trafic autorisé s'écoule entre l'hôte et un contrôleur NVMe de point d'extrémité. Deuxièmement, dans un système qui autorise l'hôte uniquement à générer du trafic de stockage vers tous les contrôleurs, les ressources de l'hôte (en particulier la puissance de calcul / la CPU et le stockage / la mémoire vive dynamique (DRAM)) sont un goulet d'étranglement nuisant aux performances générales du système. La latence et la capacité de traitement globales du système sont liées aux capacités de l'hôte. Le - 1 - problème de la latence est particulièrement préjudiciable à des applications telles qu'une plate-forme de Calcul à hautes performances, dans laquelle un dispositif de calcul tel qu'une unité de traitement graphique (GPU) souhaite accéder à une grand quantité de données sur un support de stockage, mais ne peut y accéder sans que l'hôte ne joue le rôle d'intermédiaire pour lancer les transferts de stockage entre le lecteur et la DRAM de l'hôte, puis d'autres transferts de mémoire dans l'autre sens, entre la DRAM de l'hôte et la GPU. [0003] Les tentatives plus anciennes pour résoudre ces problèmes comprenaient des solutions propriétaires et spécifiques à un fournisseur, qui ne résolvaient pas le problème de l'accès à un contrôleur NVM du commerce. Les dispositifs non compatibles avec ces solutions propriétaires et 10 spécifiques à un fournisseur ne pouvaient donc pas générer ce trafic et n'étaient pas compatibles avec le protocole NVM Express, étant donné qu'avec le protocole NVM Express, c'est uniquement l'hôte du système qui est autorisé à générer du trafic. [0004] Compte tenu de ce qui précède, on peut comprendre qu'il existe d'importants problèmes et défauts associés aux technologies actuelles concernant les transferts de stockage PCIe 15 en point à point. Résumé de l'invention [0005] L'invention concerne des techniques pour les transferts de stockage PCIe en point à point. Dans certains modes de réalisation, les techniques peuvent être mises en oeuvre en tant que procédé pour effectuer des transferts de stockage en point à point entre dispositifs d'Interconnexion 20 de composants périphériques Express (PCIe), comprenant la mise en place, dans la mémoire d'un premier dispositif PCIe, d'une file d'attente pour les données communiquées entre le premier dispositif PCIe et un dispositif PCIe cible, la réception, au niveau du premier dispositif PCIe, d'informations d'allocation de mémoire de file d'attente émises par un dispositif hôte couplé en communication au premier dispositif PCIe et au dispositif PCIe cible, et la génération, au moyen 25 d'un processeur informatique du premier dispositif PCIe, d'une commande de stockage. [0006] Selon des aspects additionnels de cet exemple de mode de réalisation, les transferts de stockage en point à point peuvent comprendre des transferts de stockage vers ou depuis un dispositif cible conforme à la Mémoire non volatile Express (NVMe). - 2 - [0007] Selon d'autres aspects de cet exemple de mode de réalisation, la file d'attente peut être attribuée à une région de mémoire d'Interconnexion de composants périphériques Express (PCIe) attribuée par un énumérateur PCIe lors de la période d'initialisation du premier dispositif PCIe. [0008] Selon des aspects additionnels de cet exemple de mode de réalisation, la file d'attente peut être une file d'attente de soumission d'E/S (entrée/sortie) pour la communication d'une commande de stockage au dispositif PCIe cible. [0009] Selon d'autres aspects de cet exemple de mode de réalisation, la file d'attente peut être une file d'attente de terminaison d'E/S (entrée/sortie) servant à recevoir du dispositif PCIe cible une indication de terminaison de commande de stockage. [0010] Selon des aspects additionnels de cet exemple de mode de réalisation, les techniques peuvent également comprendre la mise en place, dans la mémoire du premier dispositif PCIe, d'une deuxième file d'attente pour les données communiquées entre le premier dispositif PCIe et le dispositif PCIe cible, et la réception, au niveau du premier dispositif PCIe, d'informations d'allocation de mémoire de file d'attente provenant du dispositif hôte pour la deuxième file d'attente. [0011] Selon des aspects additionnels de cet exemple de mode de réalisation, la deuxième file d'attente peut comprendre au moins l'une des files d'attente suivantes : une file d'attente de soumission d'E/S (entrée/sortie) pour la communication d'une commande de stockage au dispositif PCIe cible et une file d'attente de terminaison d'E/S (entrée/sortie) pour recevoir du dispositif PCIe 20 cible une indication de terminaison de commande de stockage. [0012] Selon d'autres aspects de cet exemple de mode de réalisation, les techniques peuvent également comprenant la mise en place, dans la mémoire du premier dispositif PCIe, d'un tampon de données. [0013] Selon des aspects additionnels de cet exemple de mode de réalisation, une file d'attente 25 peut être mise en place dans la mémoire du dispositif hôte pour au moins l'une des actions suivantes : soumission administrative, terminaison administrative, soumission d'E/S et terminaison d'E/S. - 3 - [0014] Selon d'autres aspects de cet exemple de mode de réalisation, les techniques peuvent aussi comprendre la mise en place, dans la mémoire du dispositif hôte, d'un tampon de données. [0015] Selon d'autres aspects de cet exemple de mode de réalisation, les techniques peuvent également comprendre une détermination d'un nombre de files d'attente à utiliser sur le premier dispositif PCIe et d'un nombre de files d'attente à utiliser sur le dispositif hôte, reposant sur un ou plusieurs des facteurs suivants : la quantité de mémoire disponible sur le premier dispositif PCIe, la quantité de mémoire disponible sur le dispositif hôte, le niveau d'utilisation du dispositif hôte, le niveau d'utilisation du premier dispositif PCIe, la quantité de largeur de bande disponible entre un commutateur d'Interconnexion de composants périphériques Express (PCIe) et le dispositif hôte, la quantité de largeur de bande disponible entre le commutateur d'Interconnexion de composants périphériques Express (PCIe) et le premier dispositif PCIe, et la quantité de largeur de bande disponible entre un commutateur d'Interconnexion de composants périphériques Express (PCIe) et le dispositif PCIe cible. [0016] Selon d'autres aspects de cet exemple de mode de réalisation, les techniques peuvent aussi comprendre la mise en place, dans la mémoire d'un troisième dispositif PCIe, d'une deuxième file d'attente pour les données communiquées entre le premier dispositif PCIe et le dispositif PCIe cible, et la réception, au niveau du premier dispositif PCIe, d'informations d'allocation de mémoire de file d'attente provenant du dispositif hôte, pour la deuxième file d'attente. [0017] Selon des aspects additionnels de cet exemple de mode de réalisation, les techniques peuvent aussi comprendre le lancement, par le premier dispositif PCIe, d'une commande de transfert de stockage par un stockage dans une file d'attente de soumission d'E/S de la commande de transfert de stockage générée, l'émission d'une écriture de mémoire en point à point destinée à un registre de sonnette du dispositif PCIe cible, la réception, au niveau du premier dispositif PCIe, d'une commande de lecture de mémoire provenant du dispositif PCIe cible pour extraire la commande de transfert de stockage, et le transfert des données entre le premier dispositif PCIe et le dispositif PCIe cible. [0018] Selon des aspects additionnels de cet exemple de mode de réalisation, les techniques peuvent également comprendre la réception d'une indication de terminaison écrite par le dispositif - 4 - PCIe cible dans une file d'attente de terminaison d'E/S, la réception d'une interruption du dispositif PCIe cible, l'extraction, au moyen du premier dispositif PCIe, de la terminaison dans la file d'attente de terminaison d'E/S ; et la mise à jour d'une sonnette du dispositif PCIe cible. [0019] Selon d'autres aspects de cet exemple de mode de réalisation, le dispositif PCIe cible peut être conforme aux MSI-X (Message Signaled Interrupts eXtended - interruptions signalées par message, étendues) et l'interruption peut être envoyée par le dispositif PCIe cible à une adresse de la mémoire du premier dispositif PCIe (par exemple, une adresse dans une cartographie mémoire PCIe telle que l'espace BAR PCIe d'un premier dispositif PCIe). Dans certains modes de réalisation, la mémoire peut ne pas être exigée dans un premier dispositif PCIe pour une interruption et une logique de traitement matérielle peut être déclenchée depuis un paquet de couche de transaction (TLP) d'écriture mémoire PCIe de l'interruption MSI-X. [0020] Selon d'autres aspects de cet exemple de mode de réalisation, le dispositif PCIe cible peut ne pas être conforme aux MSI-X (Message Signaled Interrupts eXtended - interruptions signalées par message, étendues) et l'interruption peut être envoyée par le dispositif PCIe cible à l'hôte, l'hôte relayant l'interruption vers une adresse de la mémoire du premier dispositif PCIe (par exemple, une adresse dans une cartographie mémoire PCIe telle qu'un espace BAR PCIe d'un premier dispositif PCIe). Dans certains modes de réalisation, la mémoire peut ne pas être exigée dans un premier dispositif PCIe pour une interruption et une logique de traitement matérielle peut être déclenchée depuis un paquet de couche de transaction (TLP) d'écriture mémoire PCIe de l'interruption MSI-X. [0021] Selon des aspects additionnels de cet exemple de mode de réalisation, le dispositif hôte peut comprendre au moins l'un des éléments suivants : un serveur d'entreprise, un serveur de base de données, un poste de travail et un ordinateur. [0022] Selon des aspects additionnels de cet exemple de mode de réalisation, le dispositif PCIe cible peut comprendre au moins l'un des éléments suivants : une unité de traitement graphique, un carte de capture audio/vidéo, un disque dur, un adaptateur de bus d'hôte et un contrôleur de Mémoire non volatile Express (NVMe). Selon certains modes de réalisation, le dispositif cible peut être un dispositif conforme à NVMe. - 5 - [0023] Dans certains modes de réalisation, les techniques utilisées pour les transferts de stockage PCIe en point à point peuvent être réalisées sous la forme d'un produit de programme d'ordinateur comprenant une série d'instructions exécutables sur un ordinateur, le produit de programme d'ordinateur exécutant un processus pour les transferts de stockage d'Interconnexion 5 de composants périphériques Express (PCIe) en point à point. Le programme d'ordinateur peut mettre en oeuvre les étapes comprenant la mise en place, dans la mémoire d'un premier dispositif PCIe, d'une file d'attente pour les données communiquées entre le premier dispositif PCIe et un dispositif PCIe cible, la réception, au niveau du premier dispositif PCIe, d'informations d'allocation de mémoire de file d'attente émises par un dispositif hôte couplé en communication au 10 premier dispositif PCIe et au dispositif PCIe cible, et la génération, au moyen d'un processeur informatique du premier dispositif PCIe, d'une commande de stockage. [0024] Dans certains modes de réalisation, les techniques utilisées pour les transferts de stockage PCIe en point à point peuvent être réalisées sous la forme d'un système pour transferts de stockage d'Interconnexion de composants périphériques Express (PCIe) en point à point. Le 15 système peut comprendre un dispositif hôte, un premier dispositif d'Interconnexion de composants périphériques Express (PCIe), un dispositif d'Interconnexion de composants périphériques Express (PCIe) cible et un commutateur d'Interconnexion de composants périphériques Express (PCIe) couplant en communication le premier dispositif PCIe, le dispositif PCIe cible et l'hôte. Dans certains modes de réalisation, c'est une fonctionnalité de complexe racine PCIe ou la 20 structure PCIe qui peut apporter la connectivité, au lieu d'un commutateur PCIe. Le premier dispositif PCIe peut comprendre des instructions de soumission de commande de Mémoire non volatile Express (NVMe) stockées, les instructions contenant une adresse d'une file d'attente située dans la mémoire du premier dispositif PCIe pour la soumission d'E/S, et des instructions pour générer une commande NVMe. 25 [0025] La présente invention est à maintenant décrite plus en détail par référence à ses exemples de mode de réalisation, représentés dans les dessins annexés. Si la présente invention est décrite ci-dessous par référence aux exemples de mode de réalisation, il convient de comprendre que la présente invention ne se limite pas à ceux-ci. L'homme du métier ayant accès aux enseignements de l'invention reconnaîtra des mises en oeuvre, modifications et modes de - 6 - réalisation additionnels, ainsi que d'autres domaines d'utilisation, qui font partie de l'étendue de l'invention décrite ici, et pour lesquels la présente invention peut être d'une grande utilité. Brève description des dessins [0026] Pour offrir une compréhension plus complète de la présente invention, il est à présent fait référence aux dessins annexés, dans lesquels les éléments similaires sont référencés par les mêmes numéros. Il convient de ne pas considérer ces dessins comme étant limitatifs, ceux-ci étant présentés à titre d'exemple uniquement. [0027] La Figure 1 montre un exemple de schéma de principe représentant une pluralité de dispositifs PCIe en communication avec un dispositif hôte, selon un mode de réalisation de la présente invention. [0028] La Figure 2 montre un exemple de schéma de principe représentant une pluralité de dispositifs PCIe en communication avec un dispositif hôte, selon un mode de réalisation de la présente invention. [0029] La Figure 3 représente un exemple de module pour les transferts de stockage PCIe en point à point, selon un mode de réalisation de la présente invention. [0030] La Figure 4 représente un organigramme illustrant des transferts de stockage PCIe en point à point, selon un mode de réalisation de la présente invention. [0031] La Figure 5 représente un organigramme illustrant des transferts de stockage PCIe en point à point, selon un mode de réalisation de la présente invention. [0032] La Figure 6 représente une table d'exemples de paramètres utilisés pour communiquer les capacités des dispositifs entre un hôte et un co-hôte, selon un mode de réalisation de la présente invention. [0033] La Figure 7 représente une table d'exemples de paramètres de file d'attente de terminaison, selon un mode de réalisation de la présente invention. - 7 - [0034] La Figure 8 représente une table d'exemples de paramètres de file d'attente de soumission, selon un mode de réalisation de la présente invention. [0035] La Figure 9 représente une table d'exemples de paramètres de création de file d'attente de terminaison, selon un mode de réalisation de la présente invention. [0036] La Figure 10 représente une table d'exemples de paramètres de création de file d'attente de soumission, selon un mode de réalisation de la présente invention. [0037] La Figure 11 représente une table d'exemples de paramètres de configuration de vecteurs d'interruption, selon un mode de réalisation de la présente invention. Description [0038] La présente invention concerne le transfert de stockage PCIe en point à point. Selon la spécification NVMe, seule la CPU hôte d'un système est capable d'envoyer des commandes de stockage à un contrôleur NVMe. Les modes de réalisation de la présente invention concernent des systèmes et des procédés au moyen desquels l'hôte d'un système peut déléguer une partie de son autorité à un dispositif PCI Express (c'est-à-dire un co-hôte), de telle manière que le co-hôte puisse envoyer des commandes de stockage de manière autonome au contrôleur NVMe. Selon certains modes de réalisation, des commandes de stockage peuvent être envoyées au contrôleur NVMe avec une interaction de l'hôte qui reste limitée, ou sans autre interaction de l'hôte. Cela résout deux contraintes de performance types d'une architecture de système PCI Express, ce qui offre des performances plus élevées sur de nombreuses métriques. Premièrement, les structures PCI Express types desservant de nombreux dispositifs (telles qu'un fond de panier de stockage d'entreprise) ont une largeur de bande totale en amont (entre un commutateur PCI Express et l'hôte, vers l'amont) plus faible que ne l'est la largeur de bande en aval (entre ce même commutateur PCI Express et tous les contrôleurs de stockage connectés, vers l'aval). Cela représente un excédent de largeur de bande en aval du commutateur, qui ne peut pas être entièrement utilisé lorsque le seul trafic autorisé s'écoule entre l'hôte et un contrôleur NVMe de point d'extrémité. Deuxièmement, dans un système qui autorise l'hôte uniquement à générer un trafic de stockage vers tous les contrôleurs, les ressources de l'hôte (en particulier la puissance de calcul / la CPU et le stockage / la mémoire vive dynamique (DRAM)) sont un goulet - 8 - d'étranglement nuisant aux performances générales du système. La latence et la capacité de traitement globales du système sont liées aux capacités de l'hôte. Les modes de réalisation de la présente invention peuvent autoriser le trafic en point à point entre les dispositifs situés en aval du commutateur et peuvent autoriser une utilisation plus complète de l'excédent de largeur de bande en aval du commutateur, ce qui permet d'augmenter considérablement les performances du système dans toutes sortes d'applications. [0039] Les modes de réalisation de l'invention réduisent ou éliminent l'implication d'un hôte dans les transferts de stockage en point à point PCIe et autorisent un dispositif tel qu'une GPU à appeler directement des transferts de stockage entre le contrôleur NVM et elle-même, qui passent 10 par la structure PCI Express partagée. [0040] Les applications potentielles peuvent comprendre, par exemple, des matrices de stockage à auto-assemblage, des applications de Calcul à haute performance en point à point, la mise en antémémoire accélérée par le point et la défragmentation accélérée par le point. Les techniques des transferts de stockage PCIe en point à point sont traitées plus en détail ci-dessous. 15 [0041] Il est à présent fait référence aux dessins, dans lesquels la Figure 1 est un exemple de schéma de principe représentant un dispositif PCIe en communication avec un dispositif hôte, selon un mode de réalisation de la présente invention. La Figure 1 comporte un certain nombre de technologies informatiques telles qu'un système hôte 102, une CPU hôte 104 et un complexe racine PCI Express 106. Le commutateur PCI Express 108 peut coupler en 20 communication une pluralité de cibles (par ex., des dispositifs PCIe tels que des cibles NVMe), telles que les cibles 110, 116 et 122, au système hôte 102 par l'intermédiaire du complexe racine PCI Express 106. [0042] La cible 110 peut contenir un contrôleur NVMe 112 et un stockage non volatile 114. La cible 116 peut contenir un contrôleur NVMe 118 et un stockage non volatile 120. La cible 122 peut 25 contenir un contrôleur NVMe 124 et un stockage non volatile 126. [0043] La mémoire système 128 peut contenir des ressources à base de mémoire accessibles au système hôte 102 par l'intermédiaire d'une interface de mémoire (par ex., de la mémoire vive synchrone dynamique à double vitesse de transfert de type trois (DDR3 SDRAM)). La mémoire système 128 peut prendre n'importe quelle forme appropriée telle que, mais sans s'y limiter, de la mémoire à l'état solide (par ex., de la mémoire flash ou un dispositif à l'état solide (SSD)), de la mémoire optique ou de la mémoire magnétique. La mémoire système 128 peut être une mémoire volatile ou non volatile. Comme illustré sur la Figure 1, la mémoire système 128 peut contenir une ou plusieurs structures de données telles que, par exemple, des files d'attente de soumission administrative 130, des files d'attente de terminaison administrative 132, des files d'attente de soumission d'E/S 134, des files d'attente de terminaison d'E/S 136 et des tampons de données 138. [0044] La connexion 140 entre un complexe racine PCI Express 106 et une CPU hôte 104 peut être une interconnexion à largeur de bande élevée telle que, par exemple, une Interconnexion QuickPath Intel (QPI). La connexion 142 entre le complexe racine PCI Express 106 et le commutateur PCI Express 108 peut avoir une largeur de bande limitée (par ex., une interface PCI Express offrant 32 voies). Les connexions 144, 146 et 148 peuvent elles aussi avoir une largeur de bande limitée (par ex., des interfaces PCI Express offrant 8 voies chacune). Seules les connexions 144, 146 et 148 sont illustrées, mais on peut comprendre que le nombre de cibles reliées au commutateur PCI Express 108 peut être plus petit ou sensiblement plus grand (par ex., 96 dispositifs). À mesure que le nombre de cibles reliées au commutateur PCI Express 108 augmente, la largeur de bande au niveau de la connexion 142 peut devenir un point de resserrement. [0045] Selon certains modes de réalisation, on peut utiliser des normes d'interface autres que PCIe pour une ou plusieurs parties, comprenant, mais sans s'y limiter, les normes SATA (Serial Advanced Technology Attachment - Rattachement de technologie avancée sérielle), ATA (Advanced Technology Attachment - Rattachement de technologie avancée), SCSI (Small Computer System Interface - Interface pour petits système informatiques), PCI étendue (PCI-X), Fibre Channel (Canaux à fibres), SAS (Serial Attached SCSI - SCSI rattachée en série), SD (Secure Digital - numérique sécurisé), EMMC (Embedded Multi-Media Card - carte multimédia intégrée) et UFS (Universal Flash Storage - Stockage flash universel). [0046] Le système hôte 102 peut prendre n'importe quelle forme appropriée telle que, mais sans s'y limiter, un serveur d'entreprise, un hôte de base de données, un poste de travail, un ordinateur personnel, un téléphone mobile, un dispositif de jeu, un assistant personnel numérique - 10 - (PDA), un dispositif de messagerie d'e-mail/texte, un appareil photo numérique, un lecteur de média numérique (par ex., MP3), un dispositif de navigation GPS et un système de télévision. [0047] Le système hôte 102 et le dispositif cible peuvent contenir des composants additionnels, qui ne sont pas représentés sur la Figure 1 par souci de simplification du dessin. De plus, dans certains modes de réalisation, tous les composants représentés ne sont pas présents. En outre, les différents contrôleurs, blocs et interfaces peuvent être mis en oeuvre de n'importe quelle façon appropriée. Par exemple, un contrôleur peut prendre la forme d'un ou plusieurs éléments pris parmi un microprocesseur ou un processeur et d'un support lisible par ordinateur qui stocke un code de programme lisible par ordinateur (par ex., un logiciel ou un micrologiciel) exécutable par le (micro)processeur, des portes logiques, des commutateurs, un circuit intégré spécifique à une application (ASIC), un automate programmable et un microcontrôleur intégré, par exemple. [0048] La spécification NVMe définit une interface de commande basée sur un ensemble unique de files d'attente de commande et de terminaison administrative (par ex., files d'attente de soumission administrative 130 et files d'attente de terminaison administrative 132) et de nombreux ensembles de files d'attente de commande et de terminaison d'E/S (par ex., files d'attente de soumission d'E/S 134, files d'attente de terminaison d'E/S 136). Les files d'attente administratives sont utilisées pour des tâches telles que la création et la suppression de files d'attente, l'interrogation d'état de dispositif et la configuration des caractéristiques, tandis que les files d'attente d'E/S sont utilisées pour tous les transferts liés au stockage, tels que les lectures et les écritures de blocs. [0049] La spécification NVMe est conçue de telle façon que ce soit un hôte unique qui commande et qui gère chacune de ces ressources. Comme décrit ci-dessous plus en détail par référence à la Figure 2, les modes de réalisation de l'invention concernent des systèmes et des procédés dans lesquels un ou plusieurs ensembles de files d'attente d'E/S peuvent au contraire être possédés par un autre dispositif à l'état solide relié à un hôte (par ex., un dispositif PCIe). Cela peut maintenir une grande partie du trafic du réseau de stockage à l'écart d'un hôte et en dessous d'un point de resserrement (par ex., une connexion entre un commutateur PCIe et un hôte). De plus, les modes de réalisation de l'invention peuvent donner la possibilité à un dispositif à l'état solide autre que l'hôte (par ex., un dispositif PCIe) d'instancier, traiter et/ou recevoir une ou plusieurs commandes liées au stockage. Cette instanciation, ce traitement et/ou cette réception de commandes peuvent réduire l'utilisation de la CPU d'un hôte, même en cas d'accès à des files d'attente de la mémoire système. 10050] La Figure 2 montre un exemple de schéma de principe représentant une pluralité de dispositifs PCIe en communication avec un dispositif hôte, selon un mode de réalisation de la présente invention. Comme illustré sur la Figure 2, les composants système hôte 102, commutateur PCI Express 108, cible 116 et cible 122 sont comme décrit par référence à la Figure 1 ci-dessus. Les files d'attente de soumission administrative 130 et les files d'attente de terminaison administrative restent également comme décrit par référence à la Figure 1 ci-dessus. Comme illustré sur la Figure 2, le co-hôte 202 peut être un dispositif à l'état solide (par ex., un dispositif PCIe) possédant le dispositif PCIe 204 ainsi que les files d'attente de soumission d'E/S 208, les files d'attente de terminaison d'E/S 210 et les tampons de données 206. 10051] Comme illustré, le mouvement d'une ou plusieurs structures de données telles que, par exemple, les files d'attente d'E/S, peut permettre à davantage de trafic de stockage (par ex., le trafic NVM) de rester en dessous du commutateur PCI Express 108 et à l'écart du système hôte 102. Comme illustré sur la Figure 2, on peut déléguer au co-hôte 202 une ou plusieurs commandes de gestion de stockage et/ou structures de données qui peuvent l'autoriser à générer de manière autonome un trafic NVM destiné à un contrôleur NVM Express relié à la même structure PCI Express en mode point à point. Cela peut permettre des transferts de stockage en point à point entre un co-hôte 202 (par ex., un dispositif PCI Express) souhaitant générer le trafic et un contrôleur NVMe du commerce (par ex., la cible 116 et la cible 122) qui adhère à la spécification NVMe. Le co-hôte 202 peut être n'importe quel dispositif PCI Express générant du trafic à n'importe quelle fin, tel qu'une unité de traitement graphique, une carte de capture audio/vidéo, un autre contrôleur NVMe ou tout autre dispositif rattaché à PCI Express. Selon certains modes de réalisation, la réalisation de transferts de stockage en point à point autonomes peut être accomplie par délégation de files d'attente et par mappage de cette délégation sur des primitives de protocole PCI Express existantes. - 12 - [0052] Comme indiqué ci-dessus, la spécification NVMe définit une interface de commande basée sur un ensemble unique de files d'attente de commande et de terminaison administrative et sur de nombreux ensembles de files d'attente de commande et de terminaison d'E/S. Les files d'attente administratives sont utilisées pour des tâches telles que la création et la suppression de files d'attente, l'interrogation d'état de dispositif et la configuration des caractéristiques, tandis que les files d'attente d'E/S sont utilisées pour tous les transferts liés au stockage, tels que les lectures et les écritures de blocs. La spécification NVMe est conçue de telle façon que ce soit un hôte unique qui commande et qui gère chacune de ces ressources. Comme illustré sur la Figure 2, un ou plusieurs ensembles de files d'attente d'E/S peuvent au contraire être possédés par un co- hôte 202 (par ex., un dispositif PCI Express). Le co-hôte 202 peut utiliser ces files d'attente d'E/S (par ex., les files d'attente de soumission d'E/S 208 et les files d'attente de terminaison d'E/S 210) pour générer de manière autonome un trafic NVM destiné à un contrôleur NVM donné (par ex., la cible 116 et la cible 122). Selon certains modes de réalisation, le système hôte 102 peut créer une file d'attente d'E/S dans la mémoire d'un co-hôte 202. Le stockage de secours pour ces files d'attente peut être une plage de mémoire située à l'intérieur d'un espace BAR alloué du co-hôte 202. Les espaces BAR sont des régions de mémoire PCI Express attribuées par l'énumérateur PCI lors de la période d'initialisation du dispositif, qui sont accessibles à tous les dispositifs d'une structure PCI Express. Les files d'attente d'E/S du co-hôte 202 peuvent utiliser les adresses de sonnette ordinaires situées à l'intérieur de l'espace BAR d'une cible (par ex., les adresses de mémoire dans l'espace BAR de la cible 116 et/ou de la cible 122), et peuvent se voir attribuer une adresse d'interruption MSI-X qui est, elle aussi, à l'intérieur d'un espace BAR alloué du co-hôte 202. Après la création d'une file d'attente, le système hôte 102 peut communiquer les détails de l'allocation de la mémoire au co-hôte 202. Le co-hôte 202 peut alors exécuter des commandes de manière autonome par rapport au système hôte 102, au moyen du protocole NVMe normal. Selon certains modes de réalisation, les informations d'allocation de mémoire de file d'attente peuvent être déterminées par le co-hôte 202 et envoyées par le co-hôte 202 au système hôte 102. [0053] Les allocations de mémoire des files d'attente peuvent être des paramètres soigneusement choisis qui font correspondre une ou plusieurs opérations de mise en file d'attente 30 à des ressources effectivement commandées par le co-hôte 202. Plus précisément, une file d'attente nécessite un stockage pour conserver les entrées d'une file d'attente, une adresse BAR - 13 - de "sonnette" sur la cible pour indiquer à la cible que de nouvelles entrées sont disponibles dans une file d'attente de soumission ou ont été consommées dans une file d'attente de terminaison, et un vecteur d'interruption pour la cible pour indiquer au propriétaire de la file d'attente que de nouvelles entrées ont été ajoutées par la cible à une file d'attente de terminaison. Enfin, la commande réelle représentée dans la file d'attente peut nécessiter un certain espace de stockage pour le transfert vers ou depuis cet espace, pour l'exécution de l'opération de commande. [0054] Pour soumettre une commande dans cette instanciation, le co-hôte 202 peut remplir une entrée de soumission en mémoire pour une file d'attente de soumission d'E/S 208 (par ex., dans la mémoire BAR). Après avoir soumis une entrée dans la file d'attente de soumission d'E/S 208, le co-hôte 202 peut émettre une écriture de mémoire en point à point pour mettre à jour un registre de sonnette de la cible pour cette file d'attente. Par exemple, si le co-hôte 202 instancie une commande de stockage pour la cible 116, le co-hôte 202 peut mettre à jour une adresse de mémoire de la cible 116 (par ex., dans l'espace BAR), qui a été fournie au co-hôte 202 par le système hôte 102. Le co-hôte 202 peut alors attendre la terminaison de la commande. La cible 116 peut détecter l'écriture de sonnette et peut extraire la commande des files d'attente de soumission d'E/S 208 du co-hôte 202 en émettant une lecture de mémoire appropriée, et peut traiter la commande. Comme illustré sur la Figure 2, les files d'attente de soumission d'E/S 208 sont dans la mémoire du co-hôte 202. Selon certains modes de réalisation, les files d'attente de soumission d'E/S peuvent rester dans la mémoire système 128 ou peuvent se trouver à un autre emplacement tel que, par exemple, un espace de mémoire d'un autre dispositif à l'état solide (par ex., un dispositif PCIe relié à la même structure PCI Express). L'emplacement des files d'attente ou d'autres structures de données telles que des tampons de données peut dépendre d'un ou plusieurs facteurs tels que, mais sans s'y limiter, la quantité de mémoire disponible sur le cohôte, la quantité de mémoire disponible sur le dispositif hôte, le niveau d'utilisation du dispositif hôte, le niveau d'utilisation du co-hôte, la quantité de largeur de bande disponible entre un commutateur d'Interconnexion de composants périphériques Express (PCIe) et le dispositif hôte, et la quantité de largeur de bande disponible entre le commutateur d'Interconnexion de composants périphériques Express (PCIe) et le co-hôte. Dans des modes de réalisation dans lesquels une file d'attente ou une autre structure de données reste dans une mémoire associée à l'hôte (par ex., la mémoire système 128), on peut toujours réaliser des gains de performance en délégant les commandes à un co-hôte et en réduisant l'utilisation de la CPU hôte. -.14 - [0055] Lors de la terminaison d'une commande, une cible (par ex., la cible 116) émet une écriture de mémoire pour remplir une entrée de terminaison dans une file d'attente de terminaison d'E/S (par ex., les files d'attente de terminaison d'E/S 210). Une cible peut ensuite émettre une écriture de mémoire pour signaler la terminaison. Pour les cibles qui sont conformes aux MSI-X (Message Signaled Interrupts eXtended - interruptions signalées par message, étendues), la cible peut écrire dans une interruption MSI-X configurée, avec la mémoire du cohôte 202. Du fait que l'adresse de l'interruption se trouve également à l'intérieur de l'espace BAR du co-hôte, l'écriture de mémoire peut être acheminée directement vers le co-hôte par le commutateur PCI Express 108, plutôt que vers le système hôte 102. [0056] Si une cible ne prend pas en charge les mécanismes d'interruption MSI-X, le système hôte 102 pourrait être utilisé pour relayer les interruptions classiques (en mode interrogation, INTX ou MSI) d'une cible au co-hôte 202, de la façon appropriée. Cela peut ajouter un conflit avec la CPU hôte 104 comme limite de performance, mais peut contribuer à augmenter la largeur de bande par l'intermédiaire des transferts de données en point à point. Durant le processus de configuration, le système hôte 102 peut être averti qu'une cible ne prend pas en charge les interruptions MSI-X et peut se préparer à arbitrer le mécanisme d'interruption disponible au nom du co-hôte 202. Le co-hôte 202 peut être averti de l'arbitrage, mais cela n'est pas nécessaire. Lorsque le système hôte 102 relaie les interruptions pour le co-hôte 202, le système hôte 102 peut décoder une interruption selon le mécanisme NVMe ordinaire. À partir des informations décodées, le système hôte 102 peut déterminer que l'interruption a pu être envoyée au nom de la file d'attente déléguée que possède le co-hôte 202. Dans certains modes de réalisation, du fait du partage des interruptions entre plusieurs files d'attente, ce qui cause des ambiguïtés au décodage, le système hôte 102 peut prendre la décision prudente de prévenir le co-hôte 202, même s'il n'y a pas encore de travail à faire faire au co-hôte. Il s'agit là d'une option de compatibilité, et d'autres configurations peuvent être utilisées pour les scénarios de performance. Une fois prévenu, le cohôte 202 sait alors que l'entrée de terminaison est disponible et peut la lire dans la file d'attente de terminaison, tout à loisir. [0057] Pour réduire encore davantage la dépendance aux dispositifs externes, un co-hôte peut utiliser davantage d'espace de mémoire alloué (par ex., de l'espace BAR) pour stocker des 30 tampons de données (par ex., les tampons de données 206) qui peuvent contenir une commande, - 15 - des listes de dispersion-regroupement ou des pages de régions physiques (PRP) servant à traiter une commande. Les listes de dispersion-regroupement et les pages de régions physiques (PRP) peuvent décrire les emplacements en mémoire de tampons de données additionnels (qui peuvent se trouver ou non dans la même zone de mémoire que les listes de dispersion-regroupement ou les pages de régions physiques (PRP)). Dans ces modes de réalisation, une cible peut émettre des lectures et des écritures en mémoire qui sont acheminées directement au co-hôte 202, et non au système hôte 102. [0058] L'application de ces techniques peut permettre à des dispositifs PCI Express ou à des sous-systèmes de stockage de réaliser des gains de performance importants. On peut tirer parti de ces modes de réalisation pour de nombreuses applications, en allant au-delà du simple stockage et de la simple récupération de données, par exemple en accélérant des plates-formes de Calcul haute performance ou en permettant la capture en temps réel de média en flux à grande largeur de bande. [0059] Les modes de réalisation peuvent utiliser le protocole NVM sous une forme non modifiée (autrement dit, n'importe quel système peut partager des composants de commande NVM du commerce entre l'hôte et le co-hôte). [0060] La Figure 3 représente un exemple de module pour les transferts de stockage PCIe en point à point, selon un mode de réalisation de la présente invention. Comme illustré sur la Figure 3, le module de transfert en point à point 310 peut contenir le module de création de file d'attente 20 312, le module de gestion de file d'attente 314 et le module de traitement de commande 316. [0061] Le module de création de file d'attente 312 peut, dans certains modes de réalisation, résider sur un hôte ou sur un support de stockage associé à un hôte et peut contenir une logique pour la création et la suppression de files d'attente. Cela peut inclure l'identification et l'allocation d'espace de mémoire (par ex., dans la mémoire système associée à un hôte, dans 25 l'espace BAR d'un co-hôte, dans un autre espace de mémoire associé à un co-hôte ou dans un espace de mémoire associé à un dispositif à l'état solide tel qu'un dispositif PCIe couplé en communication avec un co-hôte). -16- [0062] Le module de gestion de file d'attente 314 peut, dans certains modes de réalisation, résider sur un co-hôte ou sur un support de stockage associé à un co-hôte et peut contenir des instructions pour le traitement des commandes. Le module de gestion de file d'attente 314 peut également stocker un ou plusieurs emplacements de mémoire fournis par un hôte, associés aux files d'attente, aux sonnettes, aux interruptions, aux tampons de données ou à d'autres structures de données. [0063] Le module de traitement de commande 316 peut, dans certains modes de réalisation, résider sur un co-hôte ou sur un support de stockage associé à un co-hôte et peut contenir des instructions pour la génération des commandes. [0064] La Figure 4 représente un organigramme illustrant des transferts de stockage PCIe en point à point, selon un mode de réalisation de la présente invention. Le processus 400 n'est cependant donné qu'à titre d'exemple. On peut altérer le processus 400, par exemple en ajoutant, modifiant, retirant ou réagençant des étapes. À l'étape 402, le processus peut commencer. [0065] À l'étape 404, on peut déterminer si un stockage de file d'attente doit se trouver sur un co-hôte ou à un autre emplacement. Dans certains modes de réalisation, des files d'attente peuvent être allouées sur un dispositif PCIe distinct. L'emplacement des files d'attente ou d'autres structures de données telles que des tampons de données peut dépendre d'un ou plusieurs facteurs tels que, mais sans s'y limiter, la quantité de mémoire disponible sur le cohôte, la quantité de mémoire disponible sur le dispositif hôte, le niveau d'utilisation du dispositif hôte, le niveau d'utilisation du co-hôte, la quantité de largeur de bande disponible entre un commutateur d'Interconnexion de composants périphériques Express (PCIe) et le dispositif hôte, et la quantité de largeur de bande disponible entre le commutateur d'Interconnexion de composants périphériques Express (PCIe) et le co-hôte. Dans des modes de réalisation dans lesquels une file d'attente ou une autre structure de données reste dans une mémoire associée à l'hôte (par ex., la mémoire système 128), on peut toujours réaliser des gains de performance en délégant les commandes à un co-hôte et en réduisant l'utilisation de la CPU hôte. Si une file d'attente doit être créée sur un co-hôte, le procédé peut se poursuivre à l'étape 410. Si une file d'attente doit être créée sur un hôte, le procédé peut se poursuivre à l'étape 406. -17- [0066] À l'étape 406, on peut créer des files d'attente (par ex., des files d'attente de soumission d'E/S et des files d'attente de terminaison d'E/S) dans la mémoire système associée à un hôte (par ex., la mémoire système 128 de la Figure 1). Selon certains modes de réalisation, un hôte peut créer des files d'attente et peut envoyer les détails de l'allocation de la mémoire à un co-hôte. Selon un ou plusieurs modes de réalisation, un co-hôte détermine les informations d'allocation de mémoire et envoie les informations d'allocation de mémoire à un hôte. [0067] À l'étape 408, une commande de stockage peut être soumise par un co-hôte à une file d'attente de soumission d'E/S d'hôte. Cette soumission peut ne pas réduire les points de resserrement de largeur de bande qui apparaissent sur un commutateur PCIe Express, mais 10 peuvent toujours réduire l'utilisation de la CPU hôte. [0068] À l'étape 410, on peut créer des files d'attente (par ex., des files d'attente de soumission d'E/S et des files d'attente de terminaison d'E/S) dans la mémoire système associée à un co-hôte (par ex., de la mémoire BAR). Selon certains modes de réalisation, un hôte peut créer des files d'attente et peut envoyer les détails de l'allocation de la mémoire à un co-hôte. Selon un 15 ou plusieurs modes de réalisation, un co-hôte détermine les informations d'allocation de mémoire et envoie les informations d'allocation de mémoire à un hôte. [0069] À l'étape 412, une commande de stockage peut être soumise par un co-hôte à une file d'attente de soumission d'E/S de co-hôte. Cette soumission peut se produire sans que l'hôte n'y soit impliqué en aucune manière et peut réduire le trafic passant sur un commutateur PCI 20 Express et l'utilisation d'une CPU d'hôte. [0070] À l'étape 414, une commande d'actionnement de sonnette peut être émise par un co- hôte à destination d'un espace de mémoire alloué d'un dispositif cible. L'espace de mémoire alloué d'une sonnette sur un dispositif cible peut avoir été fourni à l'avance au co-hôte par l'hôte. [0071] À l'étape 416, on peut déterminer si les files d'attente sont sur un hôte ou un co-hôte. 25 Dans certains modes de réalisation, les files d'attente peuvent être allouées sur un dispositif PCIe distinct. Si les files d'attente sont situées sur un hôte, le procédé 400 peut se poursuivre à l'étape 418. Si les files d'attente sont situées sur un co-hôte, le procédé 400 peut se poursuivre à l'étape 420. -18- [0072] À l'étape 418, une commande d'extraction peut être envoyée par un dispositif cible à un commutateur PCI Express, puis expédiée à un hôte. [0073] À l'étape 420, une commande d'extraction peut être envoyée par un dispositif cible à un commutateur PCI Express, puis expédiée à un co-hôte. [0074] À l'étape 424, on peut déterminer si des pages de régions physiques (PRP) ou des listes de dispersion-regroupement existent dans un tampon de données situé sur un hôte ou dans un tampon de données situé dans la mémoire d'un co-hôte. Si des PRP ou des listes de dispersion-regroupement existent dans un tampon de données situé sur un hôte, le procédé peut se poursuivre à l'étape 428. Si des PRP ou des listes de dispersion-regroupement existent dans un tampon de données situé sur un co-hôte, le procédé peut se poursuivre à l'étape 426. [0075] À l'étape 426, des données peuvent être transférées entre un co-hôte et un dispositif cible au moyen d'un tampon de données d'un co-hôte. [0076] À l'étape 428, des données peuvent être transférées entre un co-hôte et un dispositif cible au moyen d'un tampon de données d'un hôte. [0077] À l'étape 430, le procédé 400 peut se terminer [0078] La Figure 5 représente un organigramme illustrant des transferts de stockage PCIe en point à point, selon un mode de réalisation de la présente invention. Le processus 500 n'est cependant donné qu'à titre d'exemple. On peut altérer le processus 500, par exemple en ajoutant, modifiant, retirant ou réagençant des étapes. À l'étape 502, le processus 500 peut commencer. [0079] À l'étape 504, on peut déterminer si des files d'attente se trouvent sur un hôte ou un co-hôte. Dans certains modes de réalisation, des files d'attente peuvent être allouées sur un dispositif PCIe distinct. Si les files d'attente sont situées sur un hôte, le procédé 500 peut se poursuivre à l'étape 506. Si les files d'attente sont situées sur un co-hôte, le procédé 500 peut se poursuivre à l'étape 508. Si les files d'attente sont situées sur un hôte, à l'étape 506 une indication de terminaison peut être écrite sur une file d'attente de terminaison d'E/S d'hôte. Si les files d'attente sont situées sur un co-hôte, à l'étape 508, une indication de terminaison peut être écrite sur une file d'attente de terminaison d'E/S de co-hôte. - 19 - [0080] À l'étape 510, on peut déterminer si un dispositif cible prend en charge les interruptions MSI-X. Si un dispositif cible prend en charge les interruptions MSI-X, le procédé 500 peut se poursuivre à l'étape 514. Si un dispositif cible ne prend pas en charge les interruptions MSI-X, le procédé 500 peut se poursuivre à l'étape 512. [0081] À l'étape 512, une interruption non conforme à MSI-X (par ex., interruptions en mode interrogation, INTX ou MSI) peut être envoyée par un dispositif cible à un commutateur PCI Express, puis expédiée à un hôte. [0082] À l'étape 516, l'hôte peut expédier l'interruption au co-hôte. [0083] À l'étape 514, une cible supportant les interruptions MSI-X peut expédier une interruption, par l'intermédiaire d'un commutateur PCI Express, à destination d'un co-hôte. Du fait que l'adresse de l'interruption se trouve également à l'intérieur de l'espace BAR du co-hôte, l'écriture de mémoire est acheminée directement vers le co-hôte par le commutateur PCI Express, plutôt que vers l'hôte. [0084] À l'étape 518, la terminaison peut être extraite par le co-hôte depuis la file d'attente de terminaison d'E/S. [0085] À l'étape 520, le co-hôte peut mettre à jour la sonnette sur la cible. À l'étape 522, le processus 500 peut se terminer. [0086] La Figure 6 représente une table d'exemples de paramètres servant à communiquer les capacités des dispositifs entre un hôte et un co-hôte, selon un mode de réalisation de la présente invention. Comme représenté sur la Figure 6, un ou plusieurs paramètres peuvent être communiqués entre un co-hôte et un hôte pour la négociation de création de file d'attente. Les paramètres de création de file d'attente peuvent comprendre, par exemple, des paramètres qui définissent une taille pour les entrées de file d'attente ou une taille maximale pour les transferts de données. Les paramètres peuvent aussi comprendre des informations concernant un nombre maximal d'entrées de file d'attente, la taille des pages de mémoire d'un système hôte ou d'autres informations de configuration. - 20 - 3020886. [0087] La Figure 7 représente une table d'exemples de paramètres de file d'attente de terminaison, selon un mode de réalisation de la présente invention. Comme illustré sur la Figure 7, un ou plusieurs paramètres de file d'attente de terminaison délégués peuvent être communiqués (par ex., d'un hôte à un co-hôte) pour indiquer, par exemple, la taille des files d'attente de 5 terminaison, l'adresse mémoire, l'adresse des interruptions et d'autres métadonnées relatives aux files d'attente. [0088] La Figure 8 représente une table d'exemples de paramètres de file d'attente de soumission, selon un mode de réalisation de la présente invention. Comme illustré sur la Figure 8, un ou plusieurs paramètres de file d'attente de soumission peuvent être fournis, comme par 10 exemple l'adresse mémoire d'une file d'attente de soumission, la taille de la file d'attente, la priorité et d'autres métadonnées relatives aux files d'attente. [0089] La Figure 9 représente une table d'exemples de paramètres de création de file d'attente de terminaison, selon un mode de réalisation de la présente invention. Après la négociation des paramètres de création de file d'attente entre l'hôte et le co-hôte, des commandes NVMe 15 normalisées peuvent être envoyées par un hôte (par ex., le propriétaire des files d'attente administratives de la cible) à une cible pour créer une ou plusieurs files d'attente déléguées au nom du co-hôte. Des exemples de paramètres de commande sont présentés sur la Figure 9. [0090] La Figure 10 représente une table d'exemples de paramètres de création de file d'attente de soumission, selon un mode de réalisation de la présente invention. Après la 20 négociation des paramètres de création de file d'attente entre l'hôte et le co-hôte, des commandes NVMe normalisées peuvent être envoyées par un hôte (par ex., le propriétaire des files d'attente administratives de la cible) à une cible pour créer une ou plusieurs files d'attente déléguées au nom du co-hôte. Des exemples de paramètres de commande sont présentés sur la Figure 10. [0091] La Figure 11 représente une table d'exemples de paramètres de configuration de 25 vecteurs d'interruption, selon un mode de réalisation de la présente invention. Ce qui est représenté sur la Figure 11 est un exemple d'entrée de la table MSI-X normalisée d'une cible, identifié par le numéro IV délégué dans la commande Créer file d'attente de terminaison d'E/S. La cible peut utiliser ces paramètres d'interruption pour acheminer sa réponse d'interruption MSI-X, et l'hôte -21- peut les configurer comme représenté, de façon que la réponse puisse être acheminée directement au co-hôte. [00921 D'autres modes de réalisation font partie de l'étendue et de l'esprit de l'invention. Par exemple, la fonctionnalité décrite ci-dessus peut être mise en oeuvre par logiciel, matériel, micrologiciel, câblage matériel ou par n'importe quelle combinaison de ces éléments. Un ou plusieurs processeurs informatiques fonctionnant selon des instructions peut mettre en oeuvre les fonctions associées aux transferts de stockage PCIe en point à point selon la présente invention, décrite ci-dessus. Si tel est le cas, le fait que ces instructions puissent être stockées sur un ou plusieurs supports de stockage non transitoires lisibles par des processeurs (par ex., un disque magnétique ou tout autre support de stockage) fait partie de l'étendue de la présente invention. De plus, les modules mettant en oeuvre les fonctions peuvent aussi être situés physiquement à différentes positions, ce qui comprend le fait d'être distribués de façon que des parties des fonctions soient mises en oeuvre en différents emplacements physiques. 100931 L'étendue de la présente invention ne se limite pas aux modes de réalisation spécifiques décrits ici. En réalité, divers autres modes de réalisation de la présente invention et diverses modifications apportées à celle-ci, outre ceux décrits ici, seront évidents pour l'homme du métier d'après la description qui précède et les dessins annexés. Ces autres modes de réalisation et modifications sont donc de nature à faire partie de l'étendue de la présente invention. En outre, si la présente invention est décrite ici dans le contexte d'une mise en oeuvre particulière dans un environnement particulier pour un objectif particulier, l'homme du métier reconnaîtra que son utilité ne se limite pas à ceux-ci et que la présente invention peut être mise en oeuvre de façon bénéfique dans un nombre quelconque d'environnements pour un nombre quelconque d'objectifs. Il convient par conséquent d'interpréter les revendications ci-dessous dans toute la largeur et dans tout l'esprit de la présente invention, tels que décrits ici. -22- REVENDICATIONS: 1. Procédé pour effectuer des transferts de stockage en point à point entre dispositifs d'Interconnexion de composants périphériques Express (Peripheral Component Interconnect Express - PCIe), comprenant : la mise en place, dans la mémoire d'un premier dispositif PCIe, d'une file d'attente pour des données communiquées entre le premier dispositif PCIe et un dispositif PCIe cible ; la réception, au niveau du premier dispositif PCIe, d'informations d'allocation de mémoire de file d'attente émises par un dispositif hôte couplé en communication au premier dispositif PCIe et au dispositif PCIe cible ; et la génération, au moyen d'un processeur informatique du premier dispositif PCIe, d'une commande de stockage. 2. Procédé selon la revendication 1, dans lequel les transferts de stockage en point à point comprennent des transferts de stockage vers ou depuis un dispositif cible conforme à NVMe (Non-Volatile Memory express - Mémoire non volatile Express). 3. Procédé selon la revendication 2, dans lequel la file d'attente est attribuée à une région de mémoire PCIe (Interconnexion de composants périphériques Express) attribuée par un énumérateur PCIe lors de la période d'initialisation du premier dispositif PCIe. 4. Procédé selon la revendication 1, dans lequel la file d'attente comprend une file d'attente de soumission d'E/S (entrée/sortie) pour la communication d'une commande de stockage au dispositif PCIe cible. 23. Procédé selon la revendication 1, dans lequel la file d'attente comprend une file d'attente de terminaison d'E/S (entrée/sortie) pour recevoir du dispositif PCIe cible une indication de terminaison de commande de stockage. 6. Procédé selon la revendication 1, comprenant en outre : la mise en place, dans la mémoire du premier dispositif PCIe, d'une deuxième file d'attente pour des données communiquées entre le premier dispositif PCIe et le dispositif PCIe cible ; et la réception, au niveau du premier dispositif PCIe, d'informations d'allocation de mémoire de file d'attente émises par le dispositif hôte pour la deuxième file d'attente. 7. Procédé selon la revendication 6, dans lequel la deuxième file d'attente comprend au moins l'une des files d'attente suivantes : une file d'attente de soumission d'E/S (entrée/sortie) pour la communication d'une commande de stockage au dispositif PCIe cible et une file d'attente de terminaison d'E/S (entrée/sortie) pour recevoir du dispositif PCIe cible une indication de terminaison de commande de stockage. 8. Procédé selon la revendication 1, comprenant en outre : la mise en place, dans la mémoire du premier dispositif PCIe, d'un tampon de données. 9. Procédé selon la revendication 1, dans lequel une file d'attente est mise en place dans la mémoire du dispositif hôte pour au moins l'une des actions suivantes : soumission 24administrative, terminaison administrative, soumission d'E/S et terminaison d'E/S. 10. Pro-cédé selon la revendication 1, comprenant en outre : la mise en place, dans la mémoire du dispositif hôte, d'un tampon de données. 11. Procédé selon la revendication 1, dans lequel une détermination d'un nombre de files d'attente à utiliser sur le premier dispositif PCIe et d'un nombre de files d'attente à utiliser sur le dispositif hôte repose sur un ou plusieurs des facteurs comprenant : une quantité de mémoire disponible sur le premier dispositif PCIe, une quantité de mémoire disponible sur le dispositif hôte, un niveau d'utilisation du dispositif hôte, un niveau d'utilisation du premier dispositif PCIe, une quantité de largeur de bande disponible entre un commutateur d'Interconnexion de composants périphériques Express (PCIe) et le dispositif hôte, et une quantité de largeur de bande disponible entre le commutateur d'Interconnexion de composants périphériques Express (PCIe) et le premier dispositif PCIe. 12. Procédé selon la revendication 1, comprenant en outre : la mise en place, dans la mémoire d'un troisième dispositif d'Interconnexion de composants périphériques Express (PCIe), d'une deuxième file d'attente pour des données communiquées entre le premier dispositif PCIe et le dispositif PCIe cible ; et la réception, au niveau du premier dispositif PCIe, d'informations d'allocation de mémoire de file d'attente émises par le dispositif hôte pour la deuxième file d'attente. 13. Procédé selon la revendication 1, comprenant : 25le lancement, par le premier dispositif PCIe, d'une commande de transfert de stockage par un stockage dans une file d'attente de soumission d'E/S de la commande de transfert de stockage générée ; l'émission d'une écriture de mémoire en point à point destinée à un registre de sonnette du dispositif PCIe cible ; la réception, au niveau du premier dispositif PCIe, d'une commande de lecture de mémoire émise par le dispositif PCIe cible pour extraire la commande de transfert de stockage, et le transfert des données entre le premier dispositif PCIe et le dispositif PCIe cible. 14. Procédé selon la revendicationl comprenant en outre : la réception d'une indication de terminaison écrite par le dispositif PCIe cible dans une file d'attente de terminaison d'E/S ; la réception d'une interruption du dispositif PCIe cible ; l'extraction, au moyen du premier dispositif PCIe, de la terminaison dans la file d'attente de terminaison d'E/S ; et la mise à jour d'une sonnette du dispositif PCIe cible. 15. Procédé selon la revendication 14, dans lequel le dispositif PCIe cible est conforme aux MSI-X (Message Signaled Interrupts eXtended - interruptions signalées par message, étendues) et l'interruption est envoyée du dispositif PCIe cible à une adresse dans la mémoire du premier dispositif PCIe. 16. Procédé selon la revendication 14, dans lequel le dispositif PCIe cible n'est pas conforme 26aux MSI-X (Message Signaled Interrupts eXtended - interruptions signalées par message, étendues) et l'interruption est envoyée du dispositif PCIe cible à l'hôte et dans lequel l'hôte relaie l'interruption vers une adresse dans la mémoire du premier dispositif PCIe 17. Procédé selon la revendication 1, dans lequel le dispositif hôte comprend au moins l'un des éléments suivants : un serveur d'entreprise, un serveur de base de données, un poste de travail et un ordinateur. 18. Procédé selon la revendication 1, dans lequel le dispositif PCIe cible comprend au moins l'un des éléments suivants : une unité de traitement graphique, une carte de capture audio/vidéo et un contrôleur de Mémoire non volatile Express (NVMe). 19. Produit de programme d'ordinateur comprenant une série d'instructions exécutables sur un ordinateur, le produit de programme d'ordinateur exécutant un processus pour effectuer des transferts de stockage en point à point entre dispositifs d'Interconnexion de composants périphériques Express (PCIe) ; ledit produit de programme comprenant, lorsque le programme fonctionne sur un ordinateur : des moyens de programmation lisibles par ordinateur pour la mise en place, dans la mémoire d'un premier dispositif PCIe, d'une file d'attente pour des données communiquées entre le premier dispositif PCIe et un dispositif PCIe cible ; des moyens de programmation lisibles par ordinateur pour la réception, au niveau du premier dispositif PCIe, d'informations d'allocation de mémoire de file d'attente émises par un dispositif hôte couplé en communication au premier dispositif PCIe et au dispositif PCIe cible ; 27et des moyens de programmation lisibles par ordinateur pour la génération, au moyen d'un processeur informatique du premier dispositif PCIe, d'une commande de stockage. 20. Système pour effectuer des transferts de stockage en point à point entre dispositifs d'Interconnexion de composants périphériques Express (PCIe), le système comprenant : un dispositif hôte ; un premier dispositif d'Interconnexion de composants périphériques Express (PCIe) ; un dispositif d'Interconnexion de composants périphériques Express (PCIe) cible ; et un commutateur d'Interconnexion de composants périphériques Express (PCIe) couplant en communication le premier dispositif PCIe, le dispositif PCIe cible et l'hôte ; dans lequel le premier dispositif PCIe comprend des instructions de soumission de commande en Mémoire non volatile Express (NVMe), stockées en mémoire, les instructions comprenant : une adresse d'une file d'attente dans la mémoire du premier dispositif PCIe pour la soumission d'E/S ; et des instructions pour générer une commande NVMe. 28