Valeur par défaut de / proc / sys / fs / file-max


9

Je suis conscient que / proc / sys / fs / file-max définit le nombre maximum de descripteurs de fichiers ouverts et peut être défini lors de l'exécution ou lors du démarrage.

Cependant: quelle est sa valeur par défaut? Vérifier 10 serveurs dans mon entreprise me donne 7 valeurs différentes, qui semblent toutes assez aléatoires.

La documentation du noyau ne cesse de mentionner que la valeur peut être modifiée - mais pas comment la valeur par défaut est calculée.

L'un de vous sait-il comment la valeur par défaut est déterminée?

Réponses:


13

La file-maxlimite que vous voyez sous proc fsest une valeur dans struct dans "./include/linux/fs.h"la structure est:

/* And dynamically-tunable limits and defaults: */
struct files_stat_struct {
  unsigned long nr_files;   /* read only */
  unsigned long nr_free_files;  /* read only */
  unsigned long max_files;    /* tunable THIS IS OUR VALUE */
};

Maintenant, dans ./fs/file_table.cle files_stat_structest utilisé:

struct files_stat_struct files_stat = {
  .max_files = NR_FILE /* This constant is 8192 */
};

Maintenant, dans le fichier précédent "./fs/file_table.c"aura la fonction qui fera le vrai travail

void __init files_init(unsigned long mempages)
{
  unsigned long n;

  filp_cachep = kmem_cache_create("filp", sizeof(struct file), 0,
      SLAB_HWCACHE_ALIGN | SLAB_PANIC, NULL);

  /*
   * One file with associated inode and dcache is very roughly 1K.
   * Per default don't use more than 10% of our memory for files. 
   */

  n = (mempages * (PAGE_SIZE / 1024)) / 10;
  files_stat.max_files = max_t(unsigned long, n, NR_FILE);
  files_defer_init();
  lg_lock_init(files_lglock);
  percpu_counter_init(&nr_files, 0);
}

D'après ce que je peux voir dans le files_initet en regardant la macro max_t, si 10% de la mémoire pour les fichiers est supérieure à 8192, ces valeurs seront utilisées, à moins que 8192.

files_init est utilisé lorsque le noyau est exécuté et vous devez voir l'indicateur SLAB_PANIC lorsqu'il kmem_cache_createest appelé pour créer le cache général de la dalle de fichiers.

Maintenant, vous devez regarder ./kernel/sysctl.c

  {
    .procname = "file-max",
    .data   = &files_stat.max_files,
    .maxlen   = sizeof(files_stat.max_files),
    .mode   = 0644,
    .proc_handler = proc_doulongvec_minmax,
  },

Le fichier-max est de 10% de mémoire, si votre système a une taille de mémoire différente, je pense que c'est normal.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.