Fin juin, Canonical annonçait une grande nouvelle : Ubuntu a été porté sur l'architecture RISC-V. En plus des Raspberry Pi, la distribution prend en charge les cartes de développement HiFive de SiFive. Nous avons mis la main sur l'une d'entre elles pour effectuer de premiers tests, signifiant l'ouverture d'un dossier au long cours.
Cela fait quelques mois maintenant que nous parlons de l'architecture RISC-V ici ou là. La raison est simple : il s'agit de l'un de nos sujets phares de la rentrée, qui sera traité... sous diverses formes.
RISC-V et SiFive à la conquête du monde
Alors qu'ARM est désormais un champion de l'offre grand public à travers les appareils mobiles et autres solutions embarquées, il veut monter en puissance dans les ordinateurs et les datacenters. Nous nous penchons sur cette alternative ouverte – l'étape d'après pour certains – qui pourrait à nouveau bouleverser l'informatique telle qu'on la conçoit. Au point que des acteurs comme Intel s'y penchent sérieusement.
Le géant américain a en effet fait revenir Sunil Shenoy, qui était vice-président de SiFive, une société qui développe des solutions autour de l'architecture RISC-V avec qui elle est désormais partenaire. Selon certaines rumeurs, un rachat serait même d'ores et déjà envisagé.
Canonical a de son côté annoncé s'associer à l'entreprise pour proposer des images d'Ubuntu consacré aux cartes de développement HiFive, ce qui implique de disposer d'une distribution moderne et complète, avec de nombreux paquets compilés pour une architecture RISC-V, ouvrant ainsi de nouvelles possibilités.
Nous avons donc récupéré un modèle Unmatched (HF105) auprès de SiFive pour la tester. Elle est vendue 580 euros.
Transfert de l'image et première connexion
Nous ne reviendrons pas ici sur les caractéristiques ou le fonctionnement de la carte, qui feront l'objet d'un article dédié. Notre intérêt pour RISC-V s'exprimera en effet au long cours, sur plusieurs mois et à travers de longues séries de tests et analyses sur différentes solutions disponibles et autres projets en cours. Patience, donc.
La SiFive Unmatch et son SoC Freedom U740
Pour commencer l'installation d'Ubuntu, il faut récupérer l'image adaptée à notre modèle. Celle d'Ubuntu 21.04 (Server) se trouve ici. Pour rappel, un forum de discussion dédié est disponible par là. On peut utiliser une carte SD ou un SSD M.2 comme périphérique de stockage, mais le boot passe forcément par la carte SD pour le moment.
SiFive recommande un modèle de classe A1 et d'éviter ceux de classe A2 qui posent parfois problème. Attention néanmoins au modèle choisi qui peut avoir un impact important sur les performances.
Ainsi, une carte SD comme la SanDisk Ultra de 32 Go est peu coûteuse, mais ses débits séquentiels sont proches de 40 Mo/s en lecture et 30 Mo/s en écriture, tombant à 5 Mo/s et 0,5 Mo/s sur des accès aléatoires 4K. Lors de nos premiers essais, tout était ainsi très lent, la mise à jour du système ayant mis près d'une heure.
Nous avons donc opté pour un modèle Extreme Plus. Elle est vendue un peu plus cher, 15 euros environ pour 32 Go (SDHC), mais il s'agit toujours d'un modèle de classe A1 contrairement aux modèles de 64/128 Go (A2, SDXC). Elle est néanmoins certifiée U3 et V30 promettant de meilleurs débits.
En pratique, ils sont effectivement plus élevés, même si c'est encore loin d'être au niveau d'un HDD/SSD :
Les performances de la SanDisk Ultra 32 Go (à gauche) de la SanDisk Extreme Pro 32 Go (à droite)
Le transfert de l'image est simple. Sous Windows il peut être effectué via balena Etcher qui gère la décompression et la copie vers un tel périphérique de stockage (connecté via un adaptateur USB). Sous Linux, on peut utiliser dd. Dans ce second cas, Canonical préconise les commandes suivantes (remplacer XX par l'ID de votre périphérique) :
xz -dk focal-preinstalled-server-riscv64+unmatched.img.xz dd if=focal-preinstalled-server-riscv64+unmatched.img of=/dev/disk/by-id/XXX
Une fois l'image transférée, on insère la carte SD dans le lecteur, on alimente la carte mère (ATX 24 pins) et on y connecte les périphériques. Deux modes de contrôle sont possibles par défaut : via la console et le port microUSB (UART), ou en connectant une carte graphique, un clavier et une souris. Ubuntu ouvre aussi la voie de l'accès SSH.
Vous pouvez ainsi commencer par une mise à jour du système. Malgré notre carte SD plus rapide, elle a tout de même nécessité une bonne demi-heure, notamment à la mise en place de nouveaux noyaux :
sudo apt update && sudo apt full-upgrade -y && sudo apt autoremove
Avec ou sans carte graphique ?
Pour ce premier essai nous avons été au plus simple : un clavier/souris sans fil et une Radeon RX 550. Celle-ci fait partie des modèles recommandés par SiFive, sans doute du fait de son « ancienneté » et de ses pilotes open source. Elle a aussi l'avantage de ne pas nécessiter de connecteur d'alimentation PCIe complémentaire.

Une fois tous les éléments branchés et le bouton Power pressé, on voit les LED d'état s'activer. Le démarrage est un peu long, ce qui est classique avec une carte de développement. Il faut en effet ne pas oublier que l'on est là dans un produit qui doit permettre de comprendre et débugger, avec tout ce que cela implique. Pas d'un nouveau mini PC clé en main à placer sur votre bureau ou à utiliser sous votre TV.
D'ailleurs, le petit ventilateur présent sur le SoC tourne assez vite et n'est donc pas silencieux. La carte n'est pas spécialement optimisée de manière à être économe en énergie au repos 24 watts sans carte graphique, 32 watts avec. Mais en pleine charge CPU sur l'ensemble des cœurs, cela change à peine : 26/34 watts.
Quid des performances ?
La performance de ces derniers est assez limitée comme le montrent nos tests OpenSSL et 7zip :
OpenSSL - Signatures/s RSA 4096 bits :
- 1T : 11
- 4T : 42
OpenSSL - Vérifications/s RSA 4096 bits :
- 1T : 802
- 4T : 3 202
7-Zip Benchmark :
- Compress : 1 615 MIPS
- Decompress : 3 418 MIPS
- Total : 2 516 MIPS
Des chiffres qui positionnent la puce au-dessus d'un cœur de Raspberry Pi 400.
Compilez votre première application pour RISC-V !
Cette plateforme se destine donc avant tout aux développeurs qui veulent faire leurs premiers pas sur RISC-V sans dépendre d'un émulateur, et veulent se frotter à un réel SoC, sans se limiter à de micro-cartes.
Ubuntu a l'avantage de proposer nombre de ses paquets précompilés pour cette architecture, mais vous pouvez aussi créer votre propre application. Par exemple, le célèbre « Hello, World ! » avec le compilateur gcc. Pour cela, utilisez un éditeur, nativement présent ou à installer, comme nano dans notre cas pour éditer un fichier source :
sudo apt install nano gcc
nano hello.c
Placez-y le code suivant :
#include <stdio.h>
int main ()
{
printf("Hello, World !\n");
return 0;
}
Compilez ce code avec gcc puis exécutez le :
gcc -o hello hello.c
./hello
Vous avez créé votre première application pour RISC-V !
