2009-04-24 4 views
3

Je travaille sur un élément d'un matériel de très haute performance fonctionnant sous Linux. Nous aimerions mettre en cache certaines données, mais nous sommes préoccupés par la consommation de mémoire. L'idée est donc de créer un processus utilisateur pour gérer le cache. De cette façon, le cache peut être dans la mémoire virtuelle, pas dans l'espace noyau, et cetera.Utilisation des processus de l'espace utilisateur pour assister les modules du noyau

La question est: quelle est la meilleure façon de faire cela? Mon premier instinct est de faire en sorte que le module du noyau crée un fichier de périphérique de caractères, et qu'il ait un programme utilisateur qui ouvre ce fichier, puis s'assoit sur une instruction select en attendant que les commandes arrivent. Mais je crains que cela ne soit pas optimal. Un ami a mentionné qu'il connaissait une interface à base de socket, mais lorsqu'il était pressé, il ne pouvait pas fournir de détails ....

Des suggestions?

+0

Vous pourriez envisager de regarder la source FUSE ... –

+0

Encore mieux, vous pouvez regarder CacheFiles et cachefilesd, intro ici: http://git.kernel.org/?p=linux/kernel/git/torvalds/ linux-2.6.git; a = blob; f = Documentation/filesystems/cache/cachefiles.txt; hb = HEAD – ephemient

Répondre

2

Je pense que vous cherchez l'interface netlink. Voir Why and How to Use Netlink Socket [sic] pour plus d'informations. Faites attention aux problèmes de sécurité lorsque vous parlez entre le noyau et l'espace utilisateur; il y avait un vulnerability récent quand udev a négligé de vérifier que les messages provenaient du noyau plutôt que de l'espace utilisateur.

+0

La vulnérabilité récente avait une cause légèrement différente de ce que vous avez déclaré: udev supposait que tous les messages netlink reçus provenaient de le noyau, mais les processus utilisateur ont pu envoyer des messages malveillants à udev. – ephemient

+0

Cela aura-t-il de meilleures performances que la simple création d'un périphérique de caractères? –

+0

Je n'ai aucune expérience avec l'utilisation moi-même; Je viens d'en entendre parler, et puisque vous posiez des questions sur une interface à base de socket, je pensais que j'en parlerais. –

Questions connexes