AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 798533
Accepted
Tobia
Tobia
Asked: 2016-08-24 01:14:24 +0800 CST2016-08-24 01:14:24 +0800 CST 2016-08-24 01:14:24 +0800 CST

为什么`zfs list -t snapshot`比`ls .zfs/snapshot`慢几个数量级?

  • 772

对于我曾经尝试过的所有 ZFS-on-Linux 版本,zfs list用于列出文件系统或卷 ( zfs list -r -t snapshot -H -o name pool/filesystem) 的所有快照的运行时间总是比 运行时间多几个数量级ls .zfs/snapshot,这是立即的:

$ 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

此错误是否特定于 ZFS-on-Linux?

任何拥有 Solaris 或 FreeBSD ZFS 机器的人都可以执行类似的测试(在旋转硬盘上具有数百个快照的文件系统上)吗?

是否有一种解决方法可以快速获取卷的快照列表,该卷本质上没有.zfs目录?

我已经在内核 2.6.32-43-pve x86_64 (Proxmox) 上使用 ZFS-on-Linux 0.6.5.2-2-wheezy 运行了上述测试,但我总是在较旧和较新的 ZFS 和内核上看到这个问题版本。


以下是泳池数据:

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

它包含 114 个文件系统和 1 个卷,每个卷都有数百个快照,因为这是一个zfs send/zfs recv备份服务器。


解决方案: zfs list速度很慢,因为它会获取额外的信息,即使它没有显示。解决方案是同时添加-o name -s name,即使用zfs list -t snapshot -o name -s name

zfs zfsonlinux
  • 2 2 个回答
  • 7331 Views

2 个回答

  • Voted
  1. Andrew Henle
    2016-08-24T02:20:38+08:002016-08-24T02:20:38+08:00

    zfs list -t snapshot运行时间总是比运行时间多很多数量级ls .zfs/snapshot

    您还在比较两个完全不同的操作。

    zfs list -t snapshot枚举系统上的所有 ZFS 快照 -并提供有关这些快照的大量信息,例如使用的空间量。在下面运行它strace以查看进行的系统调用。

    ls .zfs/snapshot只是从目录中发出一个简单的名称列表。除了阅读名称之外,别无他法——而且别无其他。

    • 4
  2. Best Answer
    ewwhite
    2016-08-24T01:46:08+08:002016-08-24T01:46:08+08:00

    快照操作是您拥有的快照数量、RAM、磁盘性能和驱动器空间的函数。这将是一般的 ZFS 问题,而不是 Linux 变体独有的问题。

    更好的问题是:为什么你有 1797 个 zvol 快照?这绝对不是推荐的,让我想知道系统上还发生了什么。

    人们说“ZFS 快照是免费的”,但这并不总是正确的。

    虽然 ZFS 快照对生产性能没有影响,但您拥有的大量快照显然需要磁盘访问才能枚举。

    Disk access time > RAM access time,因此数量级差异。


    strace输出。请注意每个系统调用的时间,并想象它会随着文件系统中的快照数量而扩展得多么糟糕。

    # 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
    

    相对

    # 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
    
    • 2

相关问题

  • 从现有目录创建 zfs 的正确方法?

  • 如何将 ZFS ACL 从一个文件克隆到另一个文件?

  • ZFS 在演示期间在舞台上失败。这是正常行为吗?

  • Sneakernet 作为备份策略有意义吗?

  • ZFS 与 XFS

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve