Comment changer la taille du tampon i / o du kernel

J’exécute des expériences avec des applications intensives d’E / S et j’essaie de comprendre les effets de la variation de la taille du tampon d’E / S du kernel, des différents algorithmes d’ascenseur, etc.

Comment puis-je connaître la taille actuelle du tampon i / o dans le kernel? Le kernel utilise-t-il plusieurs tampons en cas de besoin? Comment puis-je changer la taille de ce tampon? Y a-t-il un fichier de configuration quelque part qui stocke ces informations?

(Pour être clair, je ne parle pas des caches de processeur ou de disque, je parle du tampon utilisé en interne par le kernel qui tamponne les lectures / écritures avant de les vider sur le disque de temps en temps).

Merci d’avance.

Le kernel ne met pas en mémoire tampon les lectures et écrit comme vous le pensez … Il maintient un “cache de page” qui contient les pages du disque. Vous ne pouvez pas manipuler sa taille (enfin, pas directement, de toute façon); le kernel utilisera toujours toute la mémoire libre disponible pour le cache de la page.

Vous devez expliquer ce que vous essayez vraiment de faire. Si vous souhaitez contrôler la quantité de données que le kernel pré-récupère à partir du disque, essayez de rechercher “linux readahead”. (Indice: blockdev --setra XXX )

Si vous souhaitez contrôler la durée de conservation des pages sales par le kernel avant de les vider sur le disque, essayez de rechercher “linux dirty_ratio”.

Une application spécifique peut également contourner complètement le cache de la page en utilisant O_DIRECT , et elle peut exercer un certain contrôle sur celle-ci à l’aide de fsync , sync_file_range , posix_fadvise et posix_madvise . ( O_DIRECT et sync_file_range sont spécifiques à Linux, les autres sont POSIX.)

Vous pourrez poser une meilleure question si vous vous familiarisez d’abord avec le sous-système Linux VM, en particulier le cache de page.

Je pense que vous voulez dire les files d’attente des disques durs. Par exemple:

 $ cat /sys/block/sda/queue/nr_requests 128 

La manière dont cette queue est utilisée dépend du planificateur IO utilisé.

 $ cat /sys/block/sda/queue/scheduler noop anticipatory deadline [cfq] 

cfq est le choix le plus courant, même si sur les systèmes dotés de contrôleurs de disque avancés et de systèmes invités virtuels, noop est également un très bon choix.

Je ne connais pas de fichier de configuration pour ces informations. Sur les systèmes pour lesquels je dois modifier les parameters de la queue, placez les modifications dans /etc/rc.local bien que vous puissiez utiliser un script d’initialisation complet et le placer dans un RPM ou une DEB pour une dissortingbution de masse sur de nombreux systèmes.