NVMe/TCP sur un Raspberry Pi : c'est possible, quelles performances ?

Vivement le RPi 5 avec LAN 10 Gb/s
NVMe/TCP sur un Raspberry Pi : c'est possible, quelles performances ?

Dans le cadre de nos articles sur NVMe-oF nous avons vu comment partager un SSD PCIe sur le réseau local. Mais peut-on y accéder via un simple Raspberry Pi et NVMe/TCP ? Nous avons tenté notre chance.

Si le protocole iSCSI est connu et répandu, il est peu à peu remplacé dans les entreprises par le NVMe-over-Fabrics (NVMe-oF). La montée en puissance du NVMe/TCP facilite encore un peu plus les choses, permettant de mettre à disposition un SSD PCIe à travers un réseau sans nécessiter le moindre matériel spécifique. C'est accessible à tous.

NVMe/TCP sur un Rapberry Pi : parce que pourquoi pas ?

Comme nous l'avons vu dans un précédent article, on peut ainsi créer une solution client/serveur assez simplement, les distributions Linux grand public gérant désormais nativement une telle fonctionnalité. Mais est-ce qu'il est possible de pousser le processus à l'extrême pour par exemple compléter le stockage réduit d'un simple Raspberry Pi ?

Pour le savoir, nous avons tenté de lui adjoindre plusieurs SSD PCIe à travers le réseau.

Pour nos tests, nous avons utilisé un Raspberry Pi 400, tout d'abord installé sous Raspbery Pi OS. Comme on pouvait s'y attendre, les modules NVMe/TCP n'étaient pas présents au sein du noyau, obligeant à une compilation spécifique. Nous avons donc opté pour une autre solution : y installer Ubuntu 21.04 Desktop (64 bits).

Cette fois, sans surprise, les modules étaient bien présents :

davlgd@Pi400:~$ cat /boot/config-`uname -r` | grep NVME_
CONFIG_NVME_CORE=y
# CONFIG_NVME_MULTIPATH is not set
CONFIG_NVME_HWMON=y
CONFIG_NVME_FABRICS=m
CONFIG_NVME_RDMA=m
CONFIG_NVME_FC=m
CONFIG_NVME_TCP=m
CONFIG_NVME_TARGET=m
CONFIG_NVME_TARGET_PASSTHRU=y
CONFIG_NVME_TARGET_LOOP=m
CONFIG_NVME_TARGET_RDMA=m
CONFIG_NVME_TARGET_FC=m
# CONFIG_NVME_TARGET_FCLOOP is not set
CONFIG_NVME_TARGET_TCP=m

Ajouter des SSD NVMe en quelques minutes

Nous avons donc simplement installé les outils NVMe :

sudo apt update && sudo apt install nvme-cli

On peut alors découvrir ceux proposés par les deux serveurs NVMe de notre réseau :

sudo modprobe nvme
sudo modprobe nvme-tcp

sudo nvme discover -t tcp -a 192.168.0.42 -s 4420
sudo nvme discover -t tcp -a 192.168.0.82 -s 4420

Puis ajouter les trois SSD qu'ils mettent à notre disposition :

sudo nvme connect -t tcp -a 192.168.0.42 -s 4420 -n nvme.server.0n1
sudo nvme connect -t tcp -a 192.168.0.82 -s 4420 -n nvme.server.1n1
sudo nvme connect -t tcp -a 192.168.0.82 -s 4420 -n nvme.server.2n1

Ils sont alors accessibles via l'outil de gestion des disques. On peut les formater, les monter et pourquoi pas les monter en RAID. Même s'ils sont issus de serveurs différents. L'avantage d'une telle solution, c'est que si un serveur est défaillant, c'est comme si un ou plusieurs membres du RAID l'étaient, on peut donc assurer un certain niveau de protection et de redondance à travers différents serveurs.

Raspberry Pi 400 NVMe/TCP
3 SSD PCIe dans un Raspberry Pi 400, c'est possible (via TCP)

Quelles performances ?

Bien entendu, un Raspberry Pi, même de dernière génération, limite le débit à 1 Gb/s. Mais c'est souvent mieux que la carte microSD interne par exemple. Dans notre cas on obtient le résultat suivant avec ioping sans cache (-D) :

ioping -s 16M -c 16 -D .
15 requests completed in 5.50 s, 240 MiB read, 2 iops, 43.6 MiB/s

Si l'on fait le même test avec un Crucial P5 Plus de 500 Go via NVMe/TCP :

sudo ioping -s 16M -c 16 -D /dev/nvme0n1
15 requests completed in 2.60 s, 240 MiB read, 5 iops, 92.4 MiB/s

Bien entendu, on aura de meilleurs débits avec un SSD PCIe dans un boîtier USB 3.x, mais on sera alors limité par le nombre de ports, cela augmentera la consommation locale du Raspberry Pi et on n'aura pas la même souplesse pour la création de gros volumes RAID par exemple. N'oubliez d'ailleurs pas que l'accès TCP ne se limite pas forcément au réseau local, on peut aussi le faire via Internet (pensez alors à utiliser un chiffrement TLS). 

Un test du temps d'accès (ioping -R) nous donne le résultat suivant :

  • Carte SD locale : 431.7 µs
  • SSD NVMe/TCP : 500.1 µs

Vous n'avez pas encore de notification

Page d'accueil
Options d'affichage
Abonné
Actualités
Abonné
Des thèmes sont disponibles :
Thème de baseThème de baseThème sombreThème sombreThème yinyang clairThème yinyang clairThème yinyang sombreThème yinyang sombreThème orange mécanique clairThème orange mécanique clairThème orange mécanique sombreThème orange mécanique sombreThème rose clairThème rose clairThème rose sombreThème rose sombre

Vous n'êtes pas encore INpactien ?

Inscrivez-vous !