5 votos

¿Por qué es " zfs list-t snapshot` órdenes de magnitud más lento que el de `ls .zfs/snapshot`?

Con todos los ZFS en versiones de Linux que he probado, el uso de zfs list a lista de todas las instantáneas de un sistema de ficheros o volum (zfs list -r -t snapshot -H -o name pool/filesystem) siempre lleva muchos órdenes de magnitud más tiempo que la de ls .zfs/snapshot, que es inmediata:

$ time ls -1 /srv/vz/subvol-300-disk-1/.zfs/snapshot
[list of 1797 snapshots here]
real    0m0.023s
user    0m0.008s
sys     0m0.014s

# time zfs list -r -t snapshot -H -o name vz/subvol-300-disk-1
[same list of 1797 snapshots]
real    1m23.092s
user    0m0.110s
sys     0m0.758s

Es este error específico de ZFS en Linux?

Puede alguien con un Solaris o FreeBSD ZFS cuadro de realizar una prueba similar (en un sistema de ficheros con cientos de instantáneas en hacer girar los discos duros)?

Hay una solución para obtener una lista rápida de instantáneas para un volumen, que por su naturaleza no tiene un .zfs directorio?

He realizado la prueba anterior con ZFS en Linux 0.6.5.2-2-wheezy en el kernel 2.6.32-43-pve x86_64 (Proxmox) pero yo siempre he visto este problema, tanto en los más antiguos y los más recientes de ZFS y las versiones del kernel.


Aquí está la piscina de las estadísticas:

# zpool list
NAME   SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
vz    25.2T  9.42T  15.8T         -     5%    37%  1.00x  ONLINE  -

Contiene 114 sistemas de ficheros y 1 volumen, cada una con cientos de instantáneas, como este es un zfs send / zfs recv servidor de copia de seguridad.


Solución: zfs list es lento porque se obtiene información adicional, incluso si no aparece. La solución es añadir tanto -o name -s name, es decir, usando zfs list -t snapshot -o name -s name

3voto

Andrew Henle Puntos412

zfs list -t snapshot siempre lleva muchos órdenes de magnitud más tiempo que la de ls .zfs/snapshot

Está también la comparación de los dos completamente diferentes operaciones.

zfs list -t snapshot enumera todas las instantáneas de ZFS en el sistema y proporciona una gran cantidad de información acerca de esas instantáneas, como la cantidad de espacio utilizado. Ejecutar que bajo strace para ver el sistema de llamadas realizadas.

ls .zfs/snapshot es sólo la emisión de una simple lista de nombre de un directorio. No hay nada que hacer aparte de leer los nombres y ofrecer nada más.

2voto

Tina Puntos21

Instantánea de las operaciones son una función del número de capturas de pantalla que tienes, RAM, el rendimiento del disco y el espacio en disco. Este sería un general ZFS problema, no es algo único para la variante de Linux.

La mejor pregunta es: ¿por Qué usted tiene 1797 instantáneas de un zvol? Este es, sin duda más de lo recomendado y me pregunto lo que está sucediendo en el sistema.

La gente dice "instantáneas de ZFS son libres", pero esto no es siempre cierto.

Mientras ZFS de encaje que no tienen un impacto sobre la producción, el rendimiento, el alto número que claramente requieren de accesos a disco para enumerar.

Disk access time > RAM access time, por lo tanto el orden de magnitud de diferencia.


strace de salida. Nota: el tiempo por syscall e imaginar lo mal que lo iba a escala con el número de instantáneas en su sistema de ficheros.

# strace -c ls /ppro/.zfs/snapshot

% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
  0.00    0.000000           0        10           read
  0.00    0.000000           0        17           write
  0.00    0.000000           0        12           open
  0.00    0.000000           0        14           close
  0.00    0.000000           0         1           stat
  0.00    0.000000           0        12           fstat
  0.00    0.000000           0        28           mmap
  0.00    0.000000           0        16           mprotect
  0.00    0.000000           0         3           munmap
  0.00    0.000000           0         3           brk
  0.00    0.000000           0         2           rt_sigaction
  0.00    0.000000           0         1           rt_sigprocmask
  0.00    0.000000           0         2           ioctl
  0.00    0.000000           0         1         1 access
  0.00    0.000000           0         1           execve
  0.00    0.000000           0         1           fcntl
  0.00    0.000000           0         2           getdents
  0.00    0.000000           0         1           getrlimit
  0.00    0.000000           0         1           statfs
  0.00    0.000000           0         1           arch_prctl
  0.00    0.000000           0         2         1 futex
  0.00    0.000000           0         1           set_tid_address
  0.00    0.000000           0         1           set_robust_list
------ ----------- ----------- --------- --------- ----------------
100.00    0.000000                   133         2 total

frente a

# strace -c zfs list -t snapshot

% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
100.00    0.003637          60        61         7 ioctl
  0.00    0.000000           0        12           read
  0.00    0.000000           0        50           write
  0.00    0.000000           0        19           open
  0.00    0.000000           0        19           close
  0.00    0.000000           0        15           fstat
  0.00    0.000000           0        37           mmap
  0.00    0.000000           0        19           mprotect
  0.00    0.000000           0         1           munmap
  0.00    0.000000           0         4           brk
  0.00    0.000000           0         2           rt_sigaction
  0.00    0.000000           0         1           rt_sigprocmask
  0.00    0.000000           0         3         1 access
  0.00    0.000000           0         1           execve
  0.00    0.000000           0         1           getrlimit
  0.00    0.000000           0         1           arch_prctl
  0.00    0.000000           0         2         1 futex
  0.00    0.000000           0         1           set_tid_address
  0.00    0.000000           0         1           set_robust_list
------ ----------- ----------- --------- --------- ----------------
100.00    0.003637                   250         9 total

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by:

;