【问题标题】:SVN Workingcopy over NFSNFS 上的 SVN 工作副本
【发布时间】:2013-07-09 16:00:58
【问题描述】:

当工作副本在 NFS 上运行时,有没有办法提高 svn 的性能?

(*) 必须是和 NFS 挂载的分区 (/home)。

我猜 SVN 客户端在提交时会读取整个树以查找更改。我不知道是什么导致结账速度变慢。

【问题讨论】:

    标签: linux svn nfs


    【解决方案1】:

    根据Subversion FAQ

    工作副本可以存储在 NFS 上(一种常见的情况是您的主目录位于 NFS 服务器上)。在 Linux NFS 服务器上,由于在签出文件时 Subversion 内部使用的重命名量,一些用户报告说应该禁用“子树检查”(默认情况下启用)。有关如何禁用子树检查的更多信息,请参阅NFS Howto Server Guide 和exports(5)。

    结帐性能可能会受到几个因素的限制,但在您的情况下,最有可能的是该 NFS 挂载的 I/O - 除非您的网络连接已饱和,或者服务器容量过小。

    【讨论】:

    • 糟糕的性能不仅在结帐时可见 - 它还会影响合并和提交(这甚至更成问题,因为您执行这些操作的频率远高于结帐)。我希望使用数据库而不是每个目录中的 .svn 目录的 subversion 1.7 会大大加快 NFS 共享上的 svn 操作。然而,情况恰恰相反:对于大多数操作,性能都会略有下降。
    【解决方案2】:

    使用“nolock”选项挂载。它实际上是 OS 本地锁,而不是 NFS 服务器端锁。

    我从这个选项中获得了更好的性能。

    【讨论】:

      【解决方案3】:

      NFS 上的结帐性能非常糟糕,以至于它成为主要瓶颈,而不是 Subversion 服务器的带宽。 Bryce Denney 和 Wilson Snyder 的 rsvn 是一个 perl 脚本,它使用 ssh(假设允许)登录到 NFS 服务器并远程运行 svn 命令。在我的测试中,它提供了数量级更快的性能。摘自手册页:

      名字

      rsvn - 远程 svn - 如果可能,在文件服务器上运行颠覆命令

      概要

      rsvn ANY_SVN_COMMAND rsvn更新 rsvn --test

      描述

      如果可能,在不需要等待 NFS 的文件服务器上运行 svn 命令。否则像往常一样运行 svn。一些 SVN 命令将始终在本地运行,要么是为了“安全”,要么是因为在文件服务器上运行没有好处(svn 日志)。

      默认情况下将发送到文件服务器的命令是这些(及其缩写):

      add checkout cleanup diff merge resolved
      revert status switch update
      

      为什么 commit 不能远程运行?因为它要么会启动一个编辑器,它并不总是通过非交互式 SSH 工作,要么你可能会使用 -m "FOO BAR" 并且 shell 的引用被搞砸了。最好弄清楚如何解决这些问题,并将“提交”添加到列表中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-20
        • 1970-01-01
        • 2011-05-12
        • 1970-01-01
        • 1970-01-01
        • 2023-04-09
        • 2011-08-17
        • 2014-11-27
        相关资源
        最近更新 更多