2017-03-03 4 views
3

Lors de l'écriture d'un logiciel devant mettre en cache des données sur le disque, existe-t-il un moyen spécifique à un système de fichiers spécifique (tel que ext4) de créer un fichier et de le marquer comme pouvant être supprimé automatiquement? (par le noyau) si la partition devient presque pleine?Créer un fichier de cache qui est automatiquement supprimé lorsque la partition est presque pleine dans libc (tous les systèmes de fichiers) ou ext4?

Il y a quelque chose de similaire pour les pages de mémoire: madvise(…, MADV_FREE).

Certains systèmes réalisent cela en écrivant un démon qui surveille la plénitude de la partition, et qui supprime manuellement certains chemins prédéterminés une fois qu'il dépasse un certain niveau de remplissage. Je voudrais éviter cela si possible, car ce n'est pas très évolutif: chaque application devrait informer le démon des nouveaux chemins de cache à mesure qu'ils sont créés, ce qui peut être fréquent. Si c'était dans le noyau, un seul drapeau pourrait être tenu sur chaque inode indiquant s'il s'agit d'un fichier cache.

Avoir un démon standardisé pour cela serait également acceptable. À l'heure actuelle, il semble que différents grands intégrateurs de systèmes inventent tous les leurs.

+1

Je ne pense pas que cela existe. Cependant, qu'est-ce qui vous fait penser qu'une solution intégrée au noyau serait plus performante qu'un démon d'espace utilisateur? Bien sûr, ce serait probablement un peu plus rapide, mais je ne vois pas pourquoi cela changerait d'échelle. Si vous vous inquiétez de remarquer trop tard lorsque le système de fichiers est plein, consultez [fanotify] (http://man7.org/linux/man-pages/man7/fanotify.7.html). – Phillip

+0

@Phillip: Je pense que sur la plupart des systèmes, 'fanotify' produirait beaucoup plus de CPU que le simple interrogation toutes les secondes. Sauf si vous avez beaucoup de systèmes de fichiers séparés qui sont en grande partie inactifs. Je suppose que vous pouvez utiliser 'fanotify' sans réellement parcourir un tampon d'événements. Juste comme un moyen de dormir pendant les périodes d'inactivité. Mais je suppose que pendant l'activité, forcer le noyau à écrire dans le buffer fanotify a un overhead différent de zéro même si vous ne regardez pas les données. –

+0

J'ai développé ce que je voulais dire par «évolutif» dans la question. –

Répondre

-1

Vous pouvez utiliser le travail crontab, rechercher une extension de fichier spécifique et l'effacer. Vous pouvez même filtrer en fonction de l'heure et laisser les fichiers créés dans les dernières minutes. Si vous êtes d'accord avec cela, faites le moi savoir, je vais ajouter plus de détails ici.

+0

C'est une solution assez terrible qui consiste à interroger régulièrement le système de fichiers pour voir s'il est plein. C'est une fonctionnalité qui devrait être déclenchée par la saturation du système de fichiers, au niveau du noyau. –