“同步”和“异步”安装选项之间的差异

“同步”和“异步”安装选项之间的差异

从最终用户的角度来看,安装选项sync和安装选项之间有什么区别?async使用这些选项之一安装的文件系统是否比使用另一个选项安装的速度更快?如果没有设置,哪一个选项是默认选项?

man mount说该sync选项可能会缩短闪存的使用寿命,但这可能是过时的传统观念。无论如何,这让我有点担心,因为我的主硬盘驱动器(分区//home)是 SSD 驱动器。

Ubuntu 安装程序 (14.04) 没有指定分区选项sync,但已通过选项设置。这是我的,我添加了一些额外的行(请参阅注释),但没有更改安装程序所做的行中的任何内容:async/async/homedefaults/etc/fstab

# / was on /dev/sda2 during installation
UUID=7e4f7654-3143-4fe7-8ced-445b0dc5b742 /     ext4  errors=remount-ro 0  1
# /home was on /dev/sda3 during installation
UUID=d29541fc-adfa-4637-936e-b5b9dbb0ba67 /home ext4  defaults          0  2
# swap was on /dev/sda4 during installation
UUID=f9b53b49-94bc-4d8c-918d-809c9cefe79f none  swap  sw                0  0

# here goes part written by me:

# /mnt/storage
UUID=4e04381d-8d01-4282-a56f-358ea299326e /mnt/storage ext4 defaults  0  2
# Windows C: /dev/sda1
UUID=2EF64975F6493DF9   /mnt/win_c    ntfs    auto,umask=0222,ro      0  0
# Windows D: /dev/sdb1
UUID=50C40C08C40BEED2   /mnt/win_d    ntfs    auto,umask=0222,ro      0  0

因此,如果我的/dev/sda是 SSD,为了减少磨损,我是否应该添加文件系统async选项?我应该为我定义的附加分区设置或选项吗? SSD 和 HDD 驱动器的推荐方法是什么?//homesyncasync/etc/fstab

答案1

async与 相反sync,很少使用。 async是默认值,您无需在nfs-utils1.0.0 及以下版本中显式指定。在 1.0.0 之后的所有版本中,sync这是默认值,async如果需要,必须明确请求。

该选项sync意味着对相应文件系统的所有更改都会立即刷新到磁盘;正在等待相应的写入操作。对于机械驱动器来说,这意味着速度会大大减慢,因为系统必须将磁盘头移动到正确的位置;用户sync态进程必须等待操作完成。相比之下,async系统缓冲写入操作并优化实际写入;同时,用户空间中的进程不会被阻止,而是继续运行。 (如果出现问题,则close()返回-1errno = EIO

SSD:我不知道 SSD 内存与 RAM 内存相比有多快,但肯定不会更快,因此sync可能会带来性能损失,尽管不像机械磁盘驱动器那么糟糕。就使用寿命而言,这个智慧仍然有效,因为写入 SSD 会导致其“磨损”。最糟糕的情况是一个流程对同一个地方进行大量更改;它们中sync的每一个都会击中 SSD,而async(默认)SSD 由于内核缓冲而不会看到其中的大多数。

归根结底,不要理会sync,很可能您对此感到满意async

答案2

警告:如果您的安装不断被写入(例如有价值的日志、安全摄像头录音等)并且您无法免受突然断电的影响,那么使用“异步”安装选项可能不是最好的主意。它可能会导致记录丢失或数据不完整(无用)。不太聪明的例子:想象一个小偷进入商店并立即切断相机电源线。闯入的视频记录已被记录,但可能尚未刷新/同步到磁盘,因为它(或其中的一部分)可能已缓冲在内存中,因此在摄像机断电时丢失。

答案3

物有所值,截至 2022 年和 RHEL 7.9

使用自加密 SSD 的服务器或一些使用 Dell BOSS M.2 的 Linux 操作系统,速度超过 100gbps HDR infiniband...默认情况下 NFS 连接为同步在版本 4.1 和协议=tcp 下。即使/cat proc/fs/nfsd/versions显示,我也无法让 nfs v4.2 工作,+4.2但我不知道 nfs 4.2 比 4.1 好多少。

我尝试过/etc/exports本质/scratch *(rw)上是这样的同步对于 5GB tar 文件的单个 nfs 文件副本,平均 460 MB/秒(最大突发为 480)也/scratch *(rw,async)没有发现任何差异。rsync --progress <source> <dest>将同一文件本地复制到同一服务器上的另一个文件夹(不通过网络)的平均速度为 435 MB/秒。作为参考,我总是获得比传统 1gbps 铜缆稳定的 112MB/秒 ssh scp 速度。

/etc/exports   on rhel-7.9 nfs-server

    /scratch *(rw,no_root_squash)

exportfs -v  on rhel-7.9 nfs-server

    /scratch         <world>(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)

mount    on rhel 7.9 nfs-client

    server:/scratch on /scratch type nfs4 (rw,nosuid,noexec,relatime,vers=4.1,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=192.168.1.2,local_lock=none,addr=192.168.1.1,_netdev)

/etc/fstab      on rhel 7.9 nfs-client

    192.168.1.1:/scratch   /scratch   nfs4   _netdev,defaults,nosuid,noexec 0 0

还 :https://www.admin-magazine.com/HPC/Articles/Useful-NFS-Options-for-Tuning-and-Management (文章没有日期,没有提及 nfs v3 与 v4)

大多数人在 NFS 服务器上使用同步选项。对于同步写入,服务器仅在数据写入稳定存储时才回复 NFS 客户端。许多人更喜欢此选项,因为如果 NFS 服务器出现故障或网络连接丢失,他们丢失数据的可能性很小。

异步模式允许服务器在处理完 I/O 请求并将其发送到本地文件系统后立即回复 NFS 客户端;也就是说,它不会等待数据写入稳定存储才响应 NFS 客户端。这可以节省 I/O 请求的时间并提高性能。但是,如果 NFS 服务器在 I/O 请求到达磁盘之前崩溃,您可能会丢失数据。

当文件系统安装在客户端上时,只需在安装命令行或 NFS 文件系统的文件 /etc/fstab 中放置同步或异步即可设置同步或异步模式。如果要更改选项,首先必须卸载 NFS 文件系统,更改选项,然后重新挂载文件系统。

如果您选择使用异步 NFS 模式,则需要更多内存来利用异步,因为 NFS 服务器将首先将 I/O 请求存储在内存中,响应 NFS 客户端,然后通过以下方式退出 I/O:让文件系统将其写入稳定存储。因此,您需要尽可能多的内存才能获得最佳性能。

两种操作模式之间的选择取决于您。如果您在某处有数据副本,则也许可以异步运行以获得更好的性能。如果您没有副本或者无法轻松或快速地复制数据,那么同步模式可能是更好的选择。除了你之外,没有人可以做出这个决定。

相关内容