2 votes

Système de fichiers Linux RAMDisk avec blocage des écritures lorsque le système de fichiers est plein

Je dois configurer un RAMDisk Linux pour mettre en œuvre une file d'attente.

L'idée de base est qu'il y aura des processus écrivant sur le RAMDisk. En même temps, il y a des processus qui surveillent les nouveaux fichiers, les lisent et les suppriment au fur et à mesure qu'ils arrivent.

Dans le cas où l'écriture est plus rapide que la lecture et que le disque RAM se remplit, l'écriture doit se bloquer jusqu'à ce qu'il y ait assez d'espace dans le disque RAM pour stocker le nouveau fichier qui arrive.

Une option serait d'utiliser tmpfs, qui "déborde" sur le disque lorsque la mémoire vive assignée au système de fichiers est entièrement utilisée - cependant, le système entier ralentirait en raison de la lenteur des entrées-sorties du disque dur impliquées dans cette opération - et dans mon système à hautes performances, ce serait inacceptable.

Ce que je voudrais idéalement, c'est un système de fichiers qui bloque automatiquement les écritures lorsque le RAMDisk est plein jusqu'à ce qu'un espace suffisant soit disponible.

Notez que je n'ai pas le contrôle sur les processus d'écriture, donc ils n'auront pas la possibilité de demander de l'espace libre et d'attendre - ce sont juste des processus stupides qui écrivent tout le temps.

Une solution ?

1voto

Ryan Sampson Points 2898

Il n'y a pas de solution simple à votre problème ; un disque plein est une erreur, et doit être signalé comme tel. Sans la possibilité de modifier les producteurs, vous ne pouvez pas faire ce que vous voulez faire. Il y a est un moyen de modifier le code sans le modifier, en quelque sorte, impliquant LD_PRELOAD mais honnêtement, ce n'est pas une solution que je voudrais inviter quelqu'un à mettre en œuvre. La bonne réponse est de concevoir votre système correctement en premier lieu, et de ne pas accepter "l'absence de contrôle" comme une excuse pour une mauvaise conception.

Quoi qu'il en soit, étant donné que vous n'êtes manifestement pas préoccupé par le traitement fiable de tous les travaux (sinon vous n'essayeriez pas d'implémenter une file d'attente dans un disque RAM), pourquoi ne pas simplement demander aux producteurs de laisser tomber le travail si la file d'attente est pleine ?

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X