2010-07-22 1 views
0

Y a-t-il une différence notable de vitesse entre ces 2 scénarios?Est-ce que la croissance de fichiers sur Linux coûte quelque chose?

Scénario 1: J'ai un fichier de taille 1024 octets rempli avec 0 pour chaque octet. J'ouvre le fichier et écris 1024 octets de 1s avec fwrite.

Scénario 2: J'ai un fichier de taille 512 octets rempli avec 0 pour chaque octet. J'ouvre le fichier et écris 1024 octets de 1s avec fwrite.

Évidemment, je me retrouve avec des fichiers identiques, mais y a-t-il une pénalité à redimensionner le 2ème fichier sur le disque? J'essaye de déterminer si redimensionner mes dossiers avant de les employer sera de n'importe quelle valeur. Des points bonus à tous ceux qui peuvent me montrer une documentation Linux pour le prouver de toute façon.

+1

Qui diable pense que _this_ appartient à SU? – sbi

+0

Probablement dépend des systèmes de fichiers. Extensions de support XFS et ext4 pouvant être utilisées pour pré-allouer de l'espace. –

+2

Pourquoi voudriez-vous vous fier à la documentation (probablement imprécise, compte tenu de l'état de flux constant de Linux) alors que vous pouvez MESURER la performance? –

Répondre

6

Ceci est naturellement spécifique au système de fichiers. mais vous pouvez être sûr que la croissance d'un fichier peut être plus coûteuse que l'écriture dans un fichier pré-alloué parce que la croissance implique des allocations d'inode du système de fichiers tout en n'écrivant pas aux inodes pré-alloués.

La taille de cette différence dépend du système de fichiers et de la façon dont vous l'utilisez. Je suppose que dans certains cas, cela peut être significatif.

une autre question à considérer est la fragmentation. vous obtiendrez de meilleures performances de lecture/écriture si votre fichier est sur un bloc contigu (ou plusieurs gros blocs) sur le disque. pré-allouer un fichier vous donnera beaucoup plus de chances qu'il sera moins fragmenté.

+1

Presque jamais significatif sous Linux à cause de quantités de mise en cache insensées. Mais tous vos points sont encore sur place. –

4

Si les tailles dont vous parlez sont plus petites que la taille d'allocation minimale (ce qui semble être le cas), alors ce ne sera vraiment pas une différence mesurable.

Serait-ce mesurable pour des valeurs plus grandes? Probablement.

Cela aurait-il une importance? Vous pouvez seulement dire en profilant que c'est un goulot d'étranglement pour votre application.

+0

+1 pour avoir signalé l'évidence aveuglante: mesurer et voir. –

Questions connexes