Connect with us

Technologie

Vers une transformation des espaces utilisateurs de POSIX – Partie I : gestion des signaux et entrée/sortie

Excitant nouvelle ! Redox a été sélectionné parmi les 45 projets bénéficiant de nouvelles subventions NGI Zero, et je suis ravi d’être le développeur principal du projet de signaux POSIX. Notre objectif ? Mettre en œuvre une gestion des signaux POSIX efficace et une gestion des processus, principalement en espace utilisateur. Grâce à cette subvention, je pourrai consacrer plus de temps à perfectionner le noyau Redox et ses composants. Restez à l’écoute pour des mises à jour passionnantes sur nos avancées !

Published

on

Présentation

Je suis ravi d’annoncer que Redox a été sélectionné parmi les 45 projets bénéficiant de nouvelles subventions NGI Zero, avec moi en tant que développeur principal pour le projet de signaux POSIX de Redox ! L’objectif de ce projet est de mettre en œuvre une gestion appropriée des signaux POSIX et de la gestion des processus, en le réalisant dans l’espace utilisateur autant que possible. Cette subvention est évidemment très avantageuse pour Redox et me permettra de consacrer beaucoup plus de temps au développement du noyau Redox et des composants associés pendant un an.

Cette annonce est survenue environ une semaine après le début de RSoC, période durant laquelle j’ai préparé le noyau pour de nouveaux changements IPC, en investissant du temps pour modifier le format des paquets de schéma, ce qui a amélioré à la fois les performances et la gamme possible de messages IPC.

Depuis lors, je travaille à remplacer l’implémentation actuelle des signaux par une version principalement basée sur l’espace utilisateur, en maintenant initialement le même niveau de support sans ajouter de nouvelles fonctionnalités. Cette mise à jour est presque finalisée.

Amélioration du protocole utilisateur et IO sans état

comme annoncé dans le rapport de juin, un format de paquet de schéma amélioré et deux nouveaux appels système ont permis d’augmenter les performances de copie de RedoxFS de 63 % !

Le noyau Redox met en œuvre des appels système IO, tels que SYS_READ, en mappant directement les plages de mémoire concernées dans le processus gestionnaire et en mettant en file d’attente des Paquets contenant des métadonnées de ces appels de schéma. La structure Paquet existe depuis 2016 sans aucune modification de son format, définie comme suit :

#[repr(packed)]
struct Paquet {
    id: u64, // identifiant unique (parmi les requêtes en cours)
    pid: usize, // identifiant de contexte de l'appelant
    uid: u32, // uid effectif de l'appelant
    gid: u32, // gid effectif de l'appelant
    a: usize, // SYS_READ
    b: usize, // fd
    c: usize, // buf.as_mut_ptr()
    d: usize, // buf.len()
    // 56 octets sur les plateformes 64 bits
}

Bien que cette structure soit suffisante pour la mise en œuvre de la plupart des appels système, la limitation évidente à trois arguments maximum a entraîné une accumulation de dettes techniques parmi de nombreux composants de Redox. Par exemple, comme pread nécessite au moins quatre arguments, presque tous les schémas précédemment mis en œuvre contenaient un code standard similaire à :

fn chercher(&mut self, fd: usize, pos: isize, whence: usize) -> Resultisize> {
    let handle = self.handles.get_mut(&fd).ok_or(Error::new(EBADF))?;
    let fichier = self
        .filesystem
        .files
        .get_mut(&handle.inode)
        .ok_or(Error::new(EBADFD))?;

    let ancien = handle.offset;
    handle.offset = match whence {
        SEEK_SET => cmp::max(0, pos),
        SEEK_CUR => cmp::max(
            0,
            pos + isize::try_from(handle.offset).or(Err(Error::new(EOVERFLOW)))?,
        ),
        SEEK_END => cmp::max(
            0,
            pos + isize::try_from(fichier.data.size()).or(Err(Error::new(EOVERFLOW)))?,
        ),
        _ => return Err(Error::new(EINVAL)),
    } as usize;
    Ok(handle.offset as isize) // pourquoi isize???
}

De plus, tous les schémas doivent stocker le curseur de fichier pour tous les handles, ce qui, sur GNU Hurd, est également considéré comme un choix de conception « discutable » dans la critique. Malheureusement, ce curseur ne peut pas être stocké dans l’espace utilisateur sans une coordination complexe, car POSIX permet aux descripteurs de fichiers d’être partagés par un nombre arbitraire de processus, après par exemple des forks ou des transferts SCM_RIGHTS (bien que ce cas d’utilisation soit très rare, il n’est pas totalement impossible que cet état soit déplacé vers l’espace utilisateur).

Le nouveau format, similaire à io_uring, est désormais défini comme suit :

#[repr(C)]
struct Sqe {
    opcode: u8,
    sqe_flags: SqeFlags,
    _rsvd: u16, // TODO: priorité
    tag: u32,
    args: [u64; 6],
    caller: u64,
}
#[repr(C)]
struct Cqe {
    flags: u8, // bits 3:0 sont CqeOpcode
    extra_

Améliorations des Appels Système dans Redox

Les entrées de la file d'attente de soumission (SQEs) et de complétion (CQEs) sont des éléments essentiels dans le traitement des appels système. Les schémas traitent les SQEs et renvoient les CQEs correspondants au noyau. Ces nouvelles structures sont conçues pour s'intégrer efficacement dans un cache, avec des champs superflus réduits pour optimiser l'espace. De plus, les appels système SYS_PREAD2 et SYS_PWRITE2 ont été intégrés à l'API, permettant désormais de transmettre à la fois des décalages et des indicateurs spécifiques à chaque appel (comme RWF_NONBLOCK).

Le membre args dépend de l'opcode, et pour SYS_PREAD2, il est configuré de la manière suivante :

// { ... }
let inner = self.inner.upgrade().ok_or(Error::new(ENODEV))?;
let address = inner.capture_user(buf)?;
let result = inner.call(Opcode::Read, [file as u64, address.base() as u64, address.len() as u64, offset, u64::from(call_flags)]);
address.release()?;
// { ... }

Actuellement, le dernier élément de args contient l'UID et le GID de l'appelant, mais cela sera remplacé par une interface plus propre à l'avenir. Le noyau simule ces nouveaux appels système en utilisant lseek suivi des appels read/write pour les anciens schémas. Cependant, pour les nouvelles implémentations, lseek peut être omis si l'application utilise des API plus modernes. Par exemple, dans redoxfs :

// Interface de disque, regroupant les octets en blocs logiques de 4096.
// L'interface ne prend pas en charge les tailles et décalages IO au niveau des octets, car les pilotes de disque sous-jacents ne le permettent pas.

unsafe fn read_at(&mut self, block: u64, buffer: &mut [u8]) -> Result {
--  try_disk!(self.file.seek(SeekFrom::Start(block * BLOCK_SIZE)));
--  let count=try_disk!(self.file.read(buffer));
--  Ok(count)
++  self.file.read_at(buffer, block * BLOCK_SIZE).or_eio()
}

unsafe fn write_at(&mut self, block: u64, buffer: &[u8]) -> Result {
--  try_disk!(self.file.seek(SeekFrom::Start(block * BLOCK_SIZE)));
--  let count=try_disk!(self.file.write(buffer));
--  Ok(count)
++  self.file.write_at(buffer, block * BLOCK_SIZE).or_eio()
}

Jeremy Soller a précédemment utilisé l'outil de copie de fichiers dd comme référence pour optimiser la taille de bloc la plus efficace, en tenant compte des coûts de commutation de contexte et de mémoire virtuelle. Le débit pour la lecture d'un fichier de 277 MiB avec dd et une taille de tampon de 4 MiB a ainsi été amélioré, passant de 170 MiB/s à 277 MiB/s grâce à la nouvelle interface, soit une amélioration d'environ 63%. Bien que d'autres facteurs puissent influencer les performances, cette optimisation est clairement perceptible.

En comparaison, l'exécution de la même commande sur Linux, avec une configuration de machine virtuelle identique, atteint un débit d'environ 2 GiB/s, ce qui représente une différence significative. Il est donc nécessaire d'améliorer à la fois RedoxFS (qui est actuellement entièrement séquentiel) et les performances de commutation de contexte. (La copie directe de disques se fait à 2 GiB/s sur Linux contre 0,8 GiB/s sur Redox).

À faire

  • De nombreux schémas utilisent encore l'ancien format de paquet. Ils devront être convertis pour permettre au noyau de supprimer le surcoût lié à l'ancien format.
  • La structure Event peut également être améliorée.
  • Les SQEs et événements des schémas devraient être accessibles aux gestionnaires à partir d'un tampon circulaire (comme io_uring), plutôt que par le mécanisme actuel où ils sont lus comme des messages via SYS_READ. Bien que le surcoût des appels système soit plus rapide que la commutation de contexte, il reste perceptible, ce qui justifie l'existence de io_uring sur Linux.

Gestion des Signaux

En mars dernier, l'implémentation interne des signaux du noyau a été améliorée pour corriger des lacunes importantes. Cependant, même après ces modifications, le support des signaux reste limité, manquant par exemple de fonctionnalités comme sigprocmask, sigaltstack et la plupart des options de sigaction.

Les Défis

Au cours de l'année écoulée, j'ai principalement travaillé à la migration de la plupart des composants de Redox pour les faire passer de redox_syscall, notre interface d'appel système directe, à libredox, une API plus stable. libredox fournit les interfaces OS communes normalement présentes dans POSIX, tout en permettant de déplacer une grande partie de la fonctionnalité en espace utilisateur, avec une implémentation en Rust (ce qui est actuellement réalisé par relibc, qui implémente également la bibliothèque standard C).

Cette migration est désormais presque achevée. En général, les noyaux monolithiques exposent un ABI d'appel système stable, parfois garanti (comme Linux), et souvent stable en pratique (FreeBSD), à l'exception notable d'OpenBSD. Cela est logique pour les noyaux monolithiques, car ils sont suffisamment grands pour « supporter » la compatibilité avec les anciennes interfaces, et parce qu'une grande partie de la pile critique en termes de performances fonctionne en mode noyau, évitant ainsi le coût de transition entre l'utilisateur et le noyau.

En revanche, un micro-noyau doit être aussi minimal que possible, et comme l'interface d'appel système sur la plupart des micro-noyaux réussis diffère de celle des noyaux monolithiques, cela signifie que notre implémentation POSIX devra gérer davantage de logique POSIX en espace utilisateur. L'exemple principal est actuellement le chargeur de programme, qui, avec fork(), a été entièrement déplacé en espace utilisateur lors de RSoC 2022. Cela ouvre également des opportunités d'optimisation significatives, ce qui justifie notre politique d'ABI stable introduite l'année dernière, où la frontière de l'ABI stable sera présente en espace utilisateur plutôt qu'à l'ABI d'appel système.

L'architecture initiale sera approximativement la suivante :


Diagramme de technologie Redox ABI

Un exemple simple de ce que relibc délègue à l'espace utilisateur est le répertoire de travail actuel (modifié lors de mon RSoC 2022). Cela nécessite que relibc entre dans une section critique sigprocmask pour verrouiller le CWD lors de l'implémentation de open(3) de manière sécurisée pour les signaux asynchrones.

Dans des cas particuliers, des solutions de contournement existent, mais en général, ces sections critiques sont indispensables :

// relibc/src/platform/redox/path.rs
pub fn canonicalize(path: &str) -> ResultString> {
    // appelle sigprocmask pour désactiver les signaux
    let _siglock = SignalMask::lock();
    let cwd  =  CWD.lock();
    canonicalize_using_cwd(cwd.as_deref(), path).ok_or(Error::new(ENOENT))
    // sigprocmask est appelé à nouveau lorsque _siglock sort de la portée
}

Si davantage d'états du noyau sont transférés vers relibc, comme les bits O_CLOEXEC et O_CLOFORK (ajoutés dans POSIX 2024), ou si certains types de descripteurs de fichiers empruntent des raccourcis dans relibc (comme les tuyaux utilisant des tampons circulaires), le coût de deux appels système sigprocmask entourant chaque section critique ralentira inutilement de nombreuses API POSIX. Par conséquent, il serait avantageux de pouvoir désactiver rapidement les signaux dans l'espace utilisateur, en utilisant de la mémoire partagée avec le noyau.

Signaux dans l'Espace Utilisateur

La solution actuellement envisagée consiste à mettre en œuvre sigaction, sigprocmask et la livraison de signaux (y compris sigreturn) uniquement à l'aide d'accès à la mémoire atomique partagée. L'astuce consiste à utiliser deux ensembles de bits AtomicU64 (même i686 le prend en charge via CMPXCHG8B) stockés dans le TCB, l'un pour les signaux standards et l'autre pour les signaux en temps réel, où les 32 bits inférieurs représentent les bits en attente, et les 32 bits supérieurs représentent les bits autorisés (négation logique du masque de signal). Cela permet, pour les signaux dirigés vers des threads, de modifier le masque de signal tout en vérifiant simultanément quels étaient les bits en attente à ce moment-là, rendant sigprocmask sans attente (si fetch_add l'est).

Tous les détails techniques n'ont pas encore été finalisés, mais un RFC préliminaire a été proposé. Les signaux ciblant des processus entiers ne sont pas encore mis en œuvre, car le noyau de Redox ne fait pas encore la distinction entre processus et threads. Une fois ce problème résolu, le travail se poursuivra pour implémenter siginfo_t pour les signaux réguliers et en file d'attente, ainsi que pour ajouter l'API sigqueue pour les signaux en temps réel.

Cette proposition d'implémentation se concentre principalement sur l'optimisation des API de signaux liées à la réception, contrairement à kill/pthread_kill et sigqueue, qui nécessitent un accès exclusif (ce qui ne changera probablement pas), actuellement maintenu dans le noyau. Un gestionnaire de processus en espace utilisateur a également été proposé, où les appels système kill et (futurs) sigqueue peuvent être convertis en appels IPC vers ce gestionnaire. L'idée est que toute autorité d'environnement POSIX, telle que les chemins absolus, UID/GID/PID, soit représentée à l'aide de descripteurs de fichiers (capabilités). Cela constitue une partie du travail nécessaire pour prendre en charge pleinement le sandboxing.

Synthèse

Jusqu'à présent, le projet sur les signaux progresse comme prévu, et l'on espère que le support POSIX pour les signaux sera principalement achevé d'ici la fin de l'été, avec des améliorations du noyau concernant la gestion des processus. Par la suite, le travail sur le gestionnaire de processus en espace utilisateur commencera, incluant potentiellement de nouvelles améliorations de performance et/ou de fonctionnalité du noyau pour faciliter cela.

Général

Anker SOLIX dévoile la Solarbank 2 AC : la nouvelle ère du stockage d’énergie ultra-compatible !

Découvrez le Solarbank 2 AC, une véritable révolution dans le domaine de l’énergie solaire ! Grâce à ses batteries au phosphate de fer lithium, ce système s’adapte parfaitement à vos besoins. Avec une puissance impressionnante de 2400 watts et la possibilité d’ajouter jusqu’à cinq batteries supplémentaires, il assure un stockage optimal. Sa compatibilité avec le compteur Anker SOLIX Smart favorise une gestion intelligente de votre consommation énergétique. Ne ratez pas l’offre spéciale « early bird », disponible dès maintenant pour seulement 999 euros ! Saisissez cette chance unique !

Published

on

Anker SOLIX dévoile la Solarbank 2 AC : la nouvelle ère du stockage d’énergie ultra-compatible !

Le Solarbank 2 AC : Une Révolution dans le Stockage Énergétique

Batteries au Lithium Fer Phosphate

Le Solarbank 2 AC se démarque par l’utilisation de batteries au lithium fer phosphate (LFP), reconnues pour leur sécurité et leur efficacité. Ce modèle est particulièrement innovant grâce à son système de couplage alternatif, qui lui permet de s’adapter facilement à divers systèmes solaires déjà en place.Que ce soit pour des installations sur toiture, des systèmes solaires compacts pour balcons ou d’autres configurations réduites, il peut fonctionner avec un micro-onduleur de 800 Watts.

Capacité et flexibilité Énergétique

Avec une capacité maximale d’injection dans le réseau domestique atteignant 1200 watts,le Solarbank 2 AC peut être associé à deux régulateurs solaires MPPT. Cela ouvre la possibilité d’ajouter jusqu’à 1200 watts supplémentaires via des panneaux solaires additionnels, portant ainsi la puissance totale à un impressionnant 2400 watts. Pour les utilisateurs nécessitant davantage de stockage énergétique, il est possible d’intégrer jusqu’à cinq batteries supplémentaires de 1,6 kilowattheure chacune, augmentant la capacité totale à 9,6 kilowattheures.

Intégration dans un Écosystème Intelligent

Le Solarbank 2 AC s’intègre parfaitement dans un écosystème énergétique intelligent grâce à sa compatibilité avec le compteur Anker SOLIX Smart et les prises intelligentes proposées par Anker. cette fonctionnalité permet une gestion optimisée de la consommation électrique tout en réduisant les pertes énergétiques inutiles. De plus, Anker SOLIX prévoit d’étendre cette compatibilité aux dispositifs Shelly.

Durabilité et Résistance aux Intempéries

Anker SOLIX met également l’accent sur la longévité du Solarbank 2 AC. Conçu pour supporter au moins 6000 cycles de charge, cet appareil a une durée de vie estimée dépassant quinze ans. Il est accompagné d’une garantie fabricant décennale et possède une certification IP65 qui assure sa résistance face aux intempéries tout en étant capable de fonctionner dans des températures variant entre -20 °C et +55 °C.

Disponibilité et Offres Promotionnelles

Le solarbank 2 AC est disponible sur le site officiel d’Anker SOLIX ainsi que sur Amazon au prix standard de 1299 euros. Cependant, une offre promotionnelle « early bird » sera active du 20 janvier au 23 février 2025, permettant aux acheteurs intéressés d’acquérir cet appareil dès 999 euros ! Cette promotion inclut également un compteur Anker SOLIX Smart offert pour chaque commande passée durant cette période spéciale.

le Solarbank 2 AC représente une avancée significative dans le domaine du stockage énergétique domestique grâce à ses caractéristiques techniques avancées et son engagement envers la durabilité environnementale.

Continue Reading

Technologie

Ne manquez pas cette offre incroyable : le Air Fryer Moulinex Easy Fry Max à -42% sur Amazon !

Les soldes d’hiver sont là ! Ne ratez pas l’incroyable offre d’Amazon sur le Moulinex Easy Fry Max, à seulement 69 euros au lieu de 119 euros, soit une réduction sensationnelle de -42% ! Avec sa capacité généreuse de 5 L, cette friteuse sans huile est idéale pour régaler jusqu’à 6 convives. Grâce à ses 10 programmes de cuisson et son interface tactile intuitive, préparez des plats sains et savoureux en un clin d’œil. Dépêchez-vous, les stocks s’épuisent vite et cette offre est limitée dans le temps !

Published

on

Ne manquez pas cette offre incroyable : le Air Fryer Moulinex Easy Fry Max à -42% sur Amazon !

Technologie

Les soldes d’hiver sont en cours, et Amazon en profite pour offrir des promotions intéressantes, notamment sur les friteuses à air. Actuellement, le Moulinex Easy Fry Max est proposé à un prix attractif de 69 euros au lieu de 119 euros, ce qui représente une réduction immédiate de 42 %. C’est une occasion parfaite pour acquérir une friteuse sans huile XL d’une capacité généreuse de 5 L, idéale pour préparer des repas pour jusqu’à six personnes à un tarif très compétitif.

Étant donné que cette offre est limitée dans le temps,il est conseillé d’agir rapidement si vous souhaitez en bénéficier. De plus, avec un tel prix, les stocks pourraient s’épuiser rapidement. Ce modèle se classe parmi les meilleures ventes sur Amazon avec plus de 1000 unités écoulées le mois dernier.

Profitez des offres sur Amazon

Amazon propose également la livraison gratuite et rapide pour cet article qui bénéficie d’une garantie de deux ans. En outre, il existe une option de paiement échelonné en quatre fois sans frais sur ce modèle. Enfin, sachez que vous avez la possibilité de changer d’avis et retourner le produit gratuitement dans un délai de 30 jours afin d’obtenir un remboursement intégral.

Moulinex Easy Fry Max : cuisinez sainement pour toute la famille

Le moulinex Easy Fry Max fonctionne comme un four à air chaud permettant la préparation de plats savoureux tout en utilisant peu ou pas du tout d’huile. En plus des frites croustillantes qu’il réalise parfaitement, cet appareil se révèle très polyvalent et peut cuisiner une multitude d’autres recettes.

avec ses dix programmes prédéfinis adaptés à divers ingrédients tels que poulet,steak,poisson ou légumes ainsi que des options pour bacon et desserts comme les pizzas ,cet appareil répond aux besoins variés des familles modernes. De plus, Moulinex met à disposition un livre numérique rempli de recettes accessible via QR Code afin que vous puissiez facilement trouver l’inspiration culinaire lorsque nécessaire.

Sa capacité généreuse permet non seulement la préparation rapide mais aussi économique : jusqu’à 70 % moins énergivore et presque deux fois plus rapide qu’un four traditionnel ! Son interface intuitive avec écran tactile facilite son utilisation quotidienne.

en outre, le panier antiadhésif compatible lave-vaisselle simplifie grandement l’entretien après chaque utilisation. N’oubliez pas qu’il s’agit là encore d’une offre temporaire ; ne tardez donc pas si vous souhaitez profiter du meilleur prix possible sur cette friteuse innovante !

Pour accéder à cette remise exceptionnelle :

Continue Reading

Technologie

TikTok revient en force aux États-Unis, mais pas sur l’App Store !

Le suspense autour de TikTok est à son comble ! En avril 2024, le Congrès américain a voté une loi obligeant l’application à changer de propriétaire avant le 19 janvier. Les utilisateurs ont anxieusement attendu la décision finale. Bien que TikTok ait brièvement cessé ses activités, elle est revenue en ligne, mais absente de l’App Store. Apple justifie cette décision par des obligations légales. Cependant, les utilisateurs peuvent toujours accéder à leur compte… sans mises à jour. L’avenir de TikTok pourrait prendre un tournant décisif avec les promesses du nouveau président.

Published

on

TikTok revient en force aux États-Unis, mais pas sur l’App Store !

Technologie

En avril 2024, le Congrès américain a adopté une législation obligeant TikTok à trouver un nouvel acquéreur, ByteDance étant accusé d’activités d’espionnage. Les utilisateurs de l’submission aux États-Unis ont donc attendu avec impatience le week-end précédent la date limite du 19 janvier pour savoir si TikTok serait interdit dans le pays.

Bien que TikTok n’ait pas réussi à dénicher un repreneur avant cette échéance, l’application a temporairement suspendu ses activités… mais seulement pour quelques heures. le réseau social est désormais de retour en ligne, mais il n’est plus accessible sur l’App Store.

Retour de TikTok : Une Absence Persistante sur l’App Store

Apple a expliqué sa décision de retirer TikTok de son App store par un communiqué officiel. « Apple doit respecter les lois en vigueur dans les régions où elle opère. Selon la loi Protecting Americans from Foreign Adversary Controlled Applications act, les applications développées par ByteDance ltd., y compris TikTok et ses filiales comme CapCut et Lemon8, ne pourront plus être téléchargées ou mises à jour sur l’App Store pour les utilisateurs américains après le 19 janvier 2025 », précise la société.

Il est crucial de souligner que les utilisateurs américains ayant déjà installé TikTok peuvent toujours accéder au service. Cependant, ils ne recevront plus aucune mise à jour future de l’application. L’avenir du réseau social pourrait dépendre des décisions du nouveau président des États-Unis.

DÉCLARATION DE TIKTOK :

>

En collaboration avec nos partenaires techniques, nous travaillons activement à rétablir notre service. Nous remercions le président Trump pour avoir clarifié la situation et rassuré nos partenaires qu’ils ne subiront aucune sanction en continuant d’offrir TikTok aux plus de 170 millions d’utilisateurs…

Le successeur de Joe Biden sera investi comme président ce lundi 20 janvier et prévoit d’émettre un décret afin d’accorder un délai supplémentaire à TikTok pour trouver un acquéreur potentiel.Donald Trump propose même que les États-Unis détiennent une participation significative dans cette application.

« Je souhaite que les États-Unis possèdent une part importante dans une coentreprise avec cet outil numérique afin que nous puissions préserver son intégrité tout en lui permettant d’évoluer […]. Ainsi,notre pays détiendrait la moitié des parts dans une coentreprise établie entre nous et tout acheteur sélectionné »,a déclaré Donald Trump.

L’avenir immédiat de TikTok pourrait donc connaître des évolutions majeures très prochainement. Il convient également de noter qu’une rumeur circulait selon laquelle Elon Musk envisagerait d’acquérir des parts dans la plateforme,mais celle-ci a été rapidement démentie par un porte-parole officiel.

Continue Reading

Trending

Copyright © 2024 Tecknews.