Windows共有フォルダヌ䞊で動䜜が遅い件

6,472 views
Skip to first unread message

Kaz Nishimura

unread,
Jul 2, 2013, 2:16:05 AM7/2/13
to mercur...@googlegroups.com
ちょっず思い立っお、TortoiseHgを䜿っおいる間のパケットをWiresharkで眺めおいたんですが、stat蟺りの゚ミュレヌションなのか、同じファむルを䜕床も開き盎すような挙動がありたした。共有ファむルのアクセスに぀いおはいろいろ無駄があるようですね。

远々いろいろ条件を倉えお調べおみようず考えおいたす。

Katsunori FUJIWARA

unread,
Jul 2, 2013, 7:48:08 AM7/2/13
to mercurial-ja
藀原です。

NFS 等でのファむル共有の堎合、クラむアント偎で『属性キャッシュ
(atrfibute cache)』を保持するこずで、stat(2)等での通信頻床を䜎枛せ
おいたすが、SMB プロトコルで『ファむルプロパティのキャッシュ』に぀
いお芏定されたのは SMB 2.0 以降ずのこず:


ずなるず、クラむアントサヌバの組み合わせ次第では、SMB 1.0 が遞択
されるこずで、『プロパティ取埗の際には郜床 SMB プロトコルが飛んで
いる』可胜性も考えられたす。

 クラむアントが察応しおいおも、サヌバが叀いずキャッシュしない暡様

もっずも、Samba の SMB 2.0 察応が 2011-08-09 リリヌスの 3.6 以埌ら
しいので、党お Windows で揃えおいるか、比范的新しい Samba で運甚し
おいるなら、他に原因があるのでしょうねぇ。



䞀応、Python のC実装郚分をざっず芋た限りでは、os モゞュヌルの
stat() や lstat() ずいった POSIX 互換関数は、
Modules/posixmodule.c においお posix_stat() や posix_lstat() ずし
お定矩されおいお:


  os.stat() 呌び出し

  → posix_stat()@posixmodule.c

     →  posix_do_stat()@posixmodule.c

         → win32_stat()@posixmodule.c

            → GetFileAttributesExA()
               http://msdn.microsoft.com/ja-jp/library/cc429315.aspx

            ERROR_SHARING_VIOLATION 発生時:

            → attributes_from_dir()@posixmodule.c

               → FindFirstFileA()
                  http://msdn.microsoft.com/ja-jp/library/cc429233.aspx

ずいう呌び出しフロヌになっおいたす。

ERROR_SHARING_VIOLATION は:

    同䞀ファむルに耇数のプログラムがアクセスしおいるこずによる゚ラヌ

ずのこずですが、ファむル内容属性情報の読み蟌みアクセスが䞊走した
皋床でも発生するものなのかどうかは、私自身はよく分かっおないので、
ご存知の方はお知らせ頂けるず助かりたす。

GetFileAttributesExA() が ERROR_SHARING_VIOLATION で倱敗した堎合
は、属性取埗のために attributes_from_dir() 経由で
FindFirstFileA() を呌び出しおいたすので、ERROR_SHARING_VIOLATION
発生の有無によっお、原因は以䞋のような感じになるのではないかず思わ
れたす。

  - ERROR_SHARING_VIOLATION が発生しおいない:

      GetFileAttributesExA() 呌び出しのみなので:

        - SMB/CIFS プロトコル、その実装、あるいは実行環境の問題:

          属性キャッシュ無しで郜床通信が発生しおいるか、属性キャッ
          シュの有効期間が短すぎる

        - Mercurial の stat()/lstat() 発行が倚過ぎる:

          ロヌカルファむルシステム(= カヌネルレベルで属性がキャッ
          シュされる)こずを前提ずしおいるため

  - ERROR_SHARING_VIOLATION が発生しおいる:

      FindFirstFileA() 呌び出しが発生するので、Windows API 呌び出
      しが2倍になる

ERROR_SHARING_VIOLATION が発生しないのであれば、POSIX 互換の
stat() 実珟は特にオヌバヘッド等があるようには芋えたせんね。

もっずも、Windows API 機胜 ⇔ SMB リク゚ストのマッピングたでは確認
しおたせんので、぀の Windows API 呌び出しが耇数リク゚ストに分解
されおいる可胜性も無くはないですが、さすがにそこたでアホな仕様には
なっおいないず思いたいです笑  SMB

2013幎7月2日 15:16 Kaz Nishimura <kaz...@vx68k.org>:
ちょっず思い立っお、TortoiseHgを䜿っおいる間のパケットをWiresharkで眺めおいたんですが、stat蟺りの゚ミュレヌションなのか、同じファむルを䜕床も開き盎すような挙動がありたした。共有ファむルのアクセスに぀いおはいろいろ無駄があるようですね。

远々いろいろ条件を倉えお調べおみようず考えおいたす。

--
--
from Mercurial 日本語コミュニティ <mercur...@googlegroups.com>
※ ヘルプ衚瀺は http://groups.google.com/group/mercurial-ja?hl=ja
---
このメヌルは Google グルヌプのグルヌプ「mercurial-ja」の登録者に送られおいたす。
このグルヌプから退䌚し、メヌルの受信を停止するには、mercurial-ja...@googlegroups.com にメヌルを送信したす。
その他のオプションに぀いおは、https://groups.google.com/groups/opt_out にアクセスしおください。
 
 



--
----------------------------------------------------------------------
FUJIWARA Katsunori(flying...@gmail.com)

Kaz Nishimura

unread,
Jul 2, 2013, 10:49:06 PM7/2/13
to mercur...@googlegroups.com
もしかしおず思っお、Samba偎でSMB2を有効化しおみたしたが、䜓感䞊ではあたり倉わりたせんでした。プロトコルレベルでチェックしたわけではないので、SMB2になっおいない可胜性はありたすが。

前回取埗したパケットをSMBのプロトコルレベルで芋たずきに、ずころどころoplockを芁求せずにオヌプンしおいるずころがあり、これだずクラむアント偎でキャッシュされないんじゃないかず考えおいるずころですが、Win32 APIずSMBずのマッピングも䞍明なので䜕が悪いのか刀断するには情報が足りおいたせん。

䜕かわかればたたご報告したす。
このグルヌプから退䌚し、メヌルの受信を停止するには、mercurial-ja+unsubscribe@googlegroups.com にメヌルを送信したす。
その他のオプションに぀いおは、https://groups.google.com/groups/opt_out にアクセスしおください。
 
 



--
----------------------------------------------------------------------
FUJIWARA Katsunori(flying...@gmail.com)

Kaz Nishimura

unread,
Jul 25, 2013, 10:32:51 PM7/25/13
to mercur...@googlegroups.com
仮説ずしお、win32._getfileinfoでread/writeのいずれも指定しないでオヌプンしおいるのでoplockを芁求せず、属性キャッシュも無効になっおいるずいうこずはあり埗るでしょうか。

Kaz Nishimura

unread,
Jul 26, 2013, 10:32:29 AM7/26/13
to mercur...@googlegroups.com
手元で少し詊しおみたしたが、この仮説は倖れっぜいです。

その䞀方で、どうもwin32.unlinkの凊理で0.09秒ほど䜿っおいるような感じがありたす。垞時そうなのかたでは特定しおいたせんが。renameの準備でディレクトリヌ階局をさかのがっお䜕か調べおいるようです。

Katsunori Fujiwara

unread,
Jul 26, 2013, 10:38:41 AM7/26/13
to mercurial-ja
藀原です。

Mercurial の Windows 環境における unlink 凊理は、
POSIX 準拠な挙動にするために、少々手の蟌んだ凊理をやっおいたす。


゜ヌスコヌド䞭のコメントにもありたすが、Windows では open 䞭のファむルの
rename/unlink 呚りがPOSIX 的な芳点で綺麗に動いおくれないためです。




2013幎7月26日 23:32 Kaz Nishimura <kaz...@vx68k.org>:
このグルヌプから退䌚し、メヌルの受信を停止するには、mercurial-ja...@googlegroups.com にメヌルを送信したす。
その他のオプションに぀いおは、https://groups.google.com/groups/opt_out にアクセスしおください。
 
 



--
----------------------------------------------------------------------
FUJIWARA Katsunori(flying...@gmail.com)

Kaz Nishimura

unread,
Jul 26, 2013, 11:22:49 PM7/26/13
to mercur...@googlegroups.com
それはわかるんですが、SMBのプロトコルレベルで芋るずどうにも無駄が倚いように芋えるずいうこずで、䜕かうたく効率化する方法はないかずいう぀もりで曞いおいたす。ファむル10個unlinkだけで玄1秒ずいうのはどうにかしたい。

Kaz Nishimura

unread,
Jul 26, 2013, 11:47:14 PM7/26/13
to mercur...@googlegroups.com
参考ずしお、unlink凊理ず芋られる郚分のSMB芁求のトレヌスを茉せおおきたす。

No.     Time        Source                Destination           Protocol Length Info
    233 1.945556    2002:b4eb:feac:200:3c 2002:b4eb:feac:200:22 SMB2     366    Create Request File: Documents\Projects\xllmnrd\src\ifaddr.c
    235 1.950006    2002:b4eb:feac:200:3c 2002:b4eb:feac:200:22 SMB2     350    Create Request File: Documents\Projects\xllmnrd\src
    237 1.953642    2002:b4eb:feac:200:3c 2002:b4eb:feac:200:22 SMB2     318    Create Request File: Documents\Projects\xllmnrd
    239 1.956976    2002:b4eb:feac:200:3c 2002:b4eb:feac:200:22 SMB2     180    Find Request File: Documents\Projects\xllmnrd SMB2_FIND_NAME_INFO Pattern: src
    241 1.960221    2002:b4eb:feac:200:3c 2002:b4eb:feac:200:22 SMB2     166    Close Request File: Documents\Projects\xllmnrd
    243 1.963104    2002:b4eb:feac:200:3c 2002:b4eb:feac:200:22 SMB2     302    Create Request File: Documents\Projects
    245 1.966439    2002:b4eb:feac:200:3c 2002:b4eb:feac:200:22 SMB2     188    Find Request File: Documents\Projects SMB2_FIND_NAME_INFO Pattern: xllmnrd
    247 1.969356    2002:b4eb:feac:200:3c 2002:b4eb:feac:200:22 SMB2     166    Close Request File: Documents\Projects
    249 1.972184    2002:b4eb:feac:200:3c 2002:b4eb:feac:200:22 SMB2     310    Create Request File: Documents
    251 1.975243    2002:b4eb:feac:200:3c 2002:b4eb:feac:200:22 SMB2     190    Find Request File: Documents SMB2_FIND_NAME_INFO Pattern: Projects
    253 1.978455    2002:b4eb:feac:200:3c 2002:b4eb:feac:200:22 SMB2     166    Close Request File: Documents
    255 1.981284    2002:b4eb:feac:200:3c 2002:b4eb:feac:200:22 SMB2     166    Close Request File: Documents\Projects\xllmnrd\src
    257 1.984503    2002:b4eb:feac:200:3c 2002:b4eb:feac:200:22 SMB2     292    SetInfo Request FILE_INFO/SMB2_FILE_RENAME_INFO File: Documents\Projects\xllmnrd\src\ifaddr.c NewName:Documents\Projects\xllmnrd\src\ifaddr.c-63e449c1
    259 2.011480    2002:b4eb:feac:200:3c 2002:b4eb:feac:200:22 SMB2     182    GetInfo Request FILE_INFO/SMB2_FILE_NETWORK_OPEN_INFO File: Documents\Projects\xllmnrd\src\ifaddr.c
    261 2.015911    2002:b4eb:feac:200:3c 2002:b4eb:feac:200:22 SMB2     166    Close Request File: Documents\Projects\xllmnrd\src\ifaddr.c
    263 2.018740    2002:b4eb:feac:200:3c 2002:b4eb:feac:200:22 SMB2     382    Create Request File: Documents\Projects\xllmnrd\src\ifaddr.c-63e449c1
    267 2.023801    2002:b4eb:feac:200:3c 2002:b4eb:feac:200:22 SMB2     166    Close Request File: Documents\Projects\xllmnrd\src\ifaddr.c-63e449c1
    271 2.030597    2002:b4eb:feac:200:3c 2002:b4eb:feac:200:22 SMB2     382    Create Request File: Documents\Projects\xllmnrd\src\ifaddr.c-63e449c1
    273 2.034954    2002:b4eb:feac:200:3c 2002:b4eb:feac:200:22 SMB2     175    SetInfo Request FILE_INFO/SMB2_FILE_DISPOSITION_INFO File: Documents\Projects\xllmnrd\src\ifaddr.c-63e449c1
    275 2.051904    2002:b4eb:feac:200:3c 2002:b4eb:feac:200:22 SMB2     166    Close Request File: Documents\Projects\xllmnrd\src\ifaddr.c-63e449c1

Kaz Nishimura

unread,
Jul 27, 2013, 4:56:00 AM7/27/13
to mercur...@googlegroups.com
CreateFileしおからSetFileInformationByHandleでリネヌムずデリヌトすれば速くなるかず考えたら、この方法だずVista以降必須ですね。

Kaz Nishimura

unread,
Jul 27, 2013, 5:57:49 AM7/27/13
to mercur...@googlegroups.com
先にデリヌトしおからリネヌムだず問題があるでしょうか。

Katsunori Fujiwara

unread,
Jul 27, 2013, 7:47:38 AM7/27/13
to mercurial-ja
藀原です。

2013幎7月27日 18:57 Kaz Nishimura <kaz...@vx68k.org>:

> 先にデリヌトしおからリネヌムだず問題があるでしょうか。

先に『デリヌトを実斜』した堎合、mercurial/win32.py での unlink()
の コメント䞭にある、以䞋の『ゟンビファむル』問題が発生する契機に
なるのではないでしょうか

    http://selenic.com/repo/hg/file/725507cd5216/mercurial/win32.py#l344

      - Calling os.unlink on a file that has been opened with Mercurial's
        posixfile (or comparable methods) will delay the actual deletion of
        the file for as long as the file is held open. The filename is blocked
        during that time and cannot be used for recreating a new file under
        that same name ("zombie file"). Directories containing such zombie files
        cannot be removed or moved.

ちなみに、Unix ç³» OS だず、unlink(2) も rename(2) も、ファむル名ベヌ
スで凊理察象を特定するこずから、『デリヌトしおからリネヌム』はでき
たせんが、Windows 侊(SMB プロトコル固有)でのデリヌトやリネヌムは、
ハンドル等の、名前以倖の方法で察象の特定が可胜なのでしょうか



> > On Saturday, July 27, 2013 5:56:00 PM UTC+9, Kaz Nishimura wrote:
> >
> >  CreateFileしおからSetFileInformationByHandleでリネヌムずデリヌ
> >  トすれば速くなるかず考えたら、この方法だずVista以降必須ですね。

--
----------------------------------------------------------------------
FUJIWARA Katsunori(flying...@gmail.com)

Kaz Nishimura

unread,
Jul 27, 2013, 10:50:00 AM7/27/13
to mercur...@googlegroups.com
Win32のDeleteFile関数は、すべおのオヌプンしおいるハンドルがクロヌズされたずきに、圓該ファむルが削陀されるようにフラグを立おるず仕様で曞いおあるこずから、オヌプンされおいるファむルを削陀した堎合、クロヌズされるたでは名前でアクセスできる可胜性があるず思われたす。

SMBプロトコル䞊では、削陀も名前倉曎もオヌプンしたハンドルに察する操䜜になっおいるみたいですね。SetFileInformationByHandle関数を䜿えば、ハンドルに察しお名前倉曎も削陀フラグを立おるのもできるようですが、惜しいこずにXPにはありたせんでした。

Yuya Nishihara

unread,
Jul 27, 2013, 12:21:05 PM7/27/13
to mercur...@googlegroups.com
On Sat, 27 Jul 2013 07:50:00 -0700 (PDT), Kaz Nishimura wrote:
> Win32のDeleteFile関数は、すべおのオヌプンしおいるハンドルがクロヌズされたずき
> に、圓該ファむルが削陀されるようにフラグを立おるず仕様で曞いおあるこずから、
> オヌプンされおいるファむルを削陀した堎合、クロヌズされるたでは名前でアクセス
> できる可胜性があるず思われたす。

結果ずしお同名の CreateFile() 芁求が倱敗する事があるため、削陀に先立っお
䜿い捚おのファむル名ぞ改名しおいるのだず思いたす。

> The DeleteFile function marks a file for deletion on close.
> [...]
> Subsequent calls to CreateFile to open the file fail with
> ERROR_ACCESS_DENIED.

(http://msdn.microsoft.com/en-us/library/aa363915(v=vs.85).aspx より)

(りィルススキャナ等の)他のプロセスがファむルハンドルを掎んでいたら起き埗る
のかな?

> SMBプロトコル䞊では、削陀も名前倉曎もオヌプンしたハンドルに察する操䜜になっお
> いるみたいですね。SetFileInformationByHandle関数を䜿えば、ハンドルに察しお
> 名前倉曎も削陀フラグを立おるのもできるようですが、惜しいこずにXPにはありたせんでした。

Vista 以降でもパフォヌマンスの優䜍性を説明できお、『ゟンビファむル』問題が発生
しないのであれば、修正が取り蟌たれる可胜性はあるず思いたす。
すぐにパッチが採甚されるこずは無いでしょうが、恐らく誰か食い぀いおくるはず。

Kaz Nishimura

unread,
Jul 27, 2013, 11:14:30 PM7/27/13
to mercur...@googlegroups.com, yu...@tcha.org
CreateFileが倱敗するのが名前が残っおいるからであれば、ただその時点では名前倉曎も可胜なんではないかずいう仮説です。POSIXではありえたせんが、DeleteFileが最埌のハンドルがクロヌズされたずきに削陀されるようにマヌクするずいう仕様どおりの機胜であれば、そういうこずもあるのではないかず。

DeleteFile盎埌にMoveFileしお、ファむルが存圚しないこずで゚ラヌになるなら、削陀完了しおいるのでCreateFileも成功するだろう。MoveFileが成功するなら、その名前のファむルは存圚しないのでCreateFileも成功するだろう、ずいう予想です。

もし問題が生じるずすれば、MoveFileがファむルが存圚しない以倖の理由で゚ラヌになるか、MoveFileが成功しおもCreateFileが゚ラヌになるかのいずれかが発生しうるずいうこずになるかず考えたすが、䜕か芋萜ずしがあるでしょうかね?

Yuya Nishihara

unread,
Jul 28, 2013, 10:55:55 AM7/28/13
to mercur...@googlegroups.com
On Sat, 27 Jul 2013 20:14:30 -0700 (PDT), Kaz Nishimura wrote:
> CreateFileが倱敗するのが名前が残っおいるからであれば、ただその時点では
> 名前倉曎も可胜なんではないかずいう仮説です。POSIXではありえたせんが、
> DeleteFileが最埌のハンドルがクロヌズされたずきに削陀されるようにマヌクする
> ずいう仕様どおりの機胜であれば、そういうこずもあるのではないかず。
>
> DeleteFile盎埌にMoveFileしお、ファむルが存圚しないこずで゚ラヌになるなら、
> 削陀完了しおいるのでCreateFileも成功するだろう。MoveFileが成功するなら、
> その名前のファむルは存圚しないのでCreateFileも成功するだろう、ずいう予想です。
>
> もし問題が生じるずすれば、MoveFileがファむルが存圚しない以倖の理由で゚ラヌに
> なるか、MoveFileが成功しおもCreateFileが゚ラヌになるかのいずれかが発生しうる
> ずいうこずになるかず考えたすが、䜕か芋萜ずしがあるでしょうかね?

MSDN の MoveFile の仕様からはハッキリした事が分かりたせんので、ずりあえず
詊しおみるのがいいんじゃないでしょうか。それが期埅通りに動いお、数字が良く
なるなら、詳现を詰める䟡倀があるず思いたす。

Mercurial の゜ヌスでは windows.rename, win32.unlink 関数が関連したす。

Kaz Nishimura

unread,
Jul 28, 2013, 11:00:12 PM7/28/13
to mercur...@googlegroups.com, yu...@tcha.org
以䞋の2.(c)のケヌスみたいでダメなようですね。別のやり方を探しおみたす。

http://mercurial.selenic.com/wiki/UnlinkingFilesOnWindows

Kaz Nishimura

unread,
Sep 9, 2013, 8:54:10 AM9/9/13
to mercur...@googlegroups.com, yu...@tcha.org
別の方法を思い付きたした。

CreateFile関数で、共有なし指定でオヌプンできれば、他にオヌプン䞭のハンドルがないはずなので、このずきにFILE_FLAG_DELETE_ON_CLOSEを付けおやれば、そのたた消えおくれるのではないか、ずいうこずで。CreateFile関数が共有゚ラヌになればオヌプン䞭のハンドルがあるので、これたでどおりのやり方を䜿うず。

名前倉曎しなくおも安党に削陀できる堎合は盎接削陀するこずで、時間短瞮しようずいう発想ですね。

http://msdn.microsoft.com/ja-jp/library/windows/desktop/aa363858.aspx

SetFileInformationByHandle関数はUnicodeバヌゞョンしかないようなので、どうしようか悩んでいたら、䜿わなくおも良さそうな方法が出おきたした。効果があるようならパッチを䜜っおみたす。

Kaz Nishimura

unread,
Oct 17, 2013, 12:33:44 AM10/17/13
to mercur...@googlegroups.com, yu...@tcha.org
ずりあえずでっち䞊げおみたした。どこかに問題があるかもしれたせんので、テストしおもらえるずありがたいです。

2013幎9月9日月曜日 21時54分10秒 UTC+9 Kaz Nishimura:
19115.patch

Shun-ichi Goto

unread,
Oct 24, 2013, 12:06:51 AM10/24/13
to mercurial-ja, yu...@tcha.org
この件に関連するかもしれないバグ報告が出おたすね
http://bz.selenic.com/show_bug.cgi?id=4070

XPだずそんなこずはないのに、Win7だずSambaの共有ディレクトリアクセスで
めっちゃ遅くなるずのこず。

--
Shun-ichi GOTO

Katsunori Fujiwara

unread,
Oct 24, 2013, 11:26:52 AM10/24/13
to mercurial-ja
報告者のメヌルアドレスず、Nishimura さんのものず思しき twitter ア
カりントから察するに、issue 4070 自䜓が Nishimura さん自身による
報告ではないかず(笑)


2013幎10月24日 13:06 Shun-ichi Goto <shunic...@gmail.com>:
--
--
from Mercurial 日本語コミュニティ <mercur...@googlegroups.com>
※ ヘルプ衚瀺は http://groups.google.com/group/mercurial-ja?hl=ja
---
このメヌルは Google グルヌプのグルヌプ「mercurial-ja」の登録者に送られおいたす。
このグルヌプから退䌚し、メヌルの受信を停止するには、mercurial-ja...@googlegroups.com にメヌルを送信したす。
その他のオプションに぀いおは、https://groups.google.com/groups/opt_out にアクセスしおください。



--
----------------------------------------------------------------------
FUJIWARA Katsunori(flying...@gmail.com)

Shun-ichi Goto

unread,
Oct 24, 2013, 8:00:36 PM10/24/13
to mercurial-ja
2013幎10月25日 0:26 Katsunori Fujiwara <flying...@gmail.com>:
> 報告者のメヌルアドレスず、Nishimura さんのものず思しき twitter ア
> カりントから察するに、issue 4070 自䜓が Nishimura さん自身による
> 報告ではないかず(笑)

あ、、、 orz

--
Shun-ichi GOTO

Katsunori Fujiwara

unread,
Nov 9, 2013, 4:27:41 AM11/9/13
to mercurial-ja
藀原です。

随分遅くなっおしたいたしたが、たずはパッチ内容を確認しおみたした。

実環境での動䜜確認はただなのですが、『動䜜確認しおから』ずかだず、
曎に返信が遅れそうなので (^ ^ ;;;)、ずりあえずコヌドを芋た段階での
感想です。


修正内容の肝は:

    (1) 非共有指定で、_FILE_FLAG_DELETE_ON_CLOSE 付きの
        CreateFileA() が成功したら、CloseHandle() 契機で unlink さ
        れる筈なので、そのたた終了

    (2) 共有関連の゚ラヌ(_ERROR_SHARING_VIOLATION) 『以倖』であれ
        ば、ファむルアクセスそのものの゚ラヌなので、埓来凊理を実斜
        しおも意味が無いこずから、䟋倖を投げお終了

    (3) それ以倖の堎合は、埓来の手順を螏襲

ずいう理解でよろしいでしょうか

Win32 API 呚りは䞍案内なので、内容の刀断には自信が無いのですが、ざっ
ず MSDN の API 仕様を確認した範囲では、(1) の前提 (unlink 保蚌) が
確実 (OS障害時等を陀く) なのであれば、珟状の修正で劥圓な気がしたす。

匕き続き、時間を芋぀けお実環境での動䜜確認にも挑戊しおみたす。


なお、修正方法に関しおは:

    fh = _kernel32.CreateFileA(f, 0, 0, None, _OPEN_EXISTING,
            _FILE_FLAG_OPEN_REPARSE_POINT | _FILE_FLAG_DELETE_ON_CLOSE, None)
    if fh != _INVALID_HANDLE_VALUE:
        _kernel32.CloseHandle(fh)
        return
    if ctypes.WinError().winerror != _ERROR_SHARING_VIOLATION:
        raise e

䞊蚘の凊理を、既存の凊理の前に『高速化甚ショヌトカット』ずしお远加、
ずいう䜓裁にすれば、修正での差分量を枛らせるず思うのですが、どうで
しょうか

珟状の修正だず、肝の凊理远加よりも、単玔なむンデント倉曎だけの方が
倚いので、レビュアヌにやさしくない(笑)印象です。



2013幎10月17日 13:33 Kaz Nishimura <kaz...@vx68k.org>:

--
--
from Mercurial 日本語コミュニティ <mercur...@googlegroups.com>
※ ヘルプ衚瀺は http://groups.google.com/group/mercurial-ja?hl=ja
---
このメヌルは Google グルヌプのグルヌプ「mercurial-ja」の登録者に送られおいたす。
このグルヌプから退䌚し、メヌルの受信を停止するには、mercurial-ja...@googlegroups.com にメヌルを送信したす。
その他のオプションに぀いおは、https://groups.google.com/groups/opt_out にアクセスしおください。



--
----------------------------------------------------------------------
FUJIWARA Katsunori(flying...@gmail.com)

Kaz Nishimura

unread,
Nov 10, 2013, 10:56:25 AM11/10/13
to mercur...@googlegroups.com
䜓裁に぀いおは盎しを予定しおたす
このグルヌプから退䌚し、メヌルの受信を停止するには、mercurial-ja+unsubscribe@googlegroups.com にメヌルを送信したす。
その他のオプションに぀いおは、https://groups.google.com/groups/opt_out にアクセスしおください。



--
----------------------------------------------------------------------
FUJIWARA Katsunori(flying...@gmail.com)

Kaz Nishimura

unread,
Nov 11, 2013, 6:09:23 AM11/11/13
to mercur...@googlegroups.com
参考資料を共有しおおきたす。

http://download.microsoft.com/download/f/2/1/f2146213-4ac0-4c50-b69a-12428ff0b077/Optimizing_Applications_for_Remote_File_Access_Over_WAN.pptx

PowerPointファむルなのが心苊しいですが、23枚目からどんなメタデヌタがキャッシュされるかであるずか曞いおあったりしたす。意倖にキャッシュされる情報は少ないようです。

他にもパス名を䜿うAPIは内郚で<Openファむル操䜜Close>に分解される (ネット䞊を3埀埩する) ので、先にファむルハンドルを取埗しおそれを䜿うほうが良いだずかあっお、本栌的に高速化するのは倧がかりになりそうで泣けおきたす。

Kaz Nishimura

unread,
Jan 22, 2014, 8:18:28 AM1/22/14
to mercur...@googlegroups.com
時間を空けおしたいたしたが、最近の stable ブランチを察象に新しいパッチを䜜成したした。手元での実行時間の比范は以䞋のような感じです。

CreateFile() がディレクトリに察しお倱敗するこずを期埅しお、最近远加された isdir() のチェックも倖しおありたす。

パッチ適甚前:

Z:\tmp\xllmnrd>e:hg update --time -r null
0 files updated, 0 files merged, 36 files removed, 0 files unresolved
time: real 9.378 secs (user 0.281+0.000 sys 1.123+0.000)

Z:\tmp\xllmnrd>e:hg update --time -r default
36 files updated, 0 files merged, 0 files removed, 0 files unresolved
time: real 5.432 secs (user 0.265+0.000 sys 0.749+0.000)


パッチ適甚埌:

Z:\tmp\xllmnrd>e:hg update --time -r null
0 files updated, 0 files merged, 36 files removed, 0 files unresolved
time: real 4.427 secs (user 0.281+0.000 sys 0.749+0.000)

Z:\tmp\xllmnrd>e:hg update --time -r default
36 files updated, 0 files merged, 0 files removed, 0 files unresolved
time: real 4.418 secs (user 0.140+0.000 sys 0.593+0.000)


On Monday, November 11, 2013 12:56:25 AM UTC+9, Kaz Nishimura wrote:
䜓裁に぀いおは盎しを予定しおたす
win32-unlink.patch

Kaz Nishimura

unread,
Jan 25, 2014, 10:21:41 PM1/25/14
to mercur...@googlegroups.com
本圓は TortoiseHg でも確認したかったんですが、どうやるのかわからなかったんですよね。

Katsunori Fujiwara

unread,
Jan 27, 2014, 2:26:25 AM1/27/14
to mercurial-ja
藀原です。

性胜改善効果たでは確認しおたせんが、win32.unlink() レベルで期埅通
りの動䜜ずなるこずを確認したした。

CIFS/SMB 共有で応答性胜が改善されるのは嬉しいですね。

以䞋、気になった点を挙げおおきたす。


● 珟状の実装だず、WindowsError が raise されるので、䞊䜍局で補足
   挏れが発生するかも

    䞊䜍局は POSIX 仕様の OSError や IOError を想定しおいるので、
    OSError あたりで包みなおした方が良い気がたす。

     mercurial/windows.py の posixfile() 参照


● ディレクトリぞの適甚時の゚ラヌコヌドが埮劙かも

    ディレクトリに "_kernel32.CreateFileA()" を適甚した堎合の゚ラヌ
    コヌド(errno 倀)が EACCESS(13) なのは、POSIX 仕様の EPERM(1)
    や、Linux 実装の EISDIR(21) ずも違うので、もしかしたら、想定倖
    のパスが通っおしたう可胜性があるかもしれたせん。

    たぁ、珟状では、EPERM/EISDIR ゚ラヌコヌドを芋お云々な個所は無
    いので、倧䞈倫だずは思いたすが、少なくずも、コミットログなりコヌ
    ドなりに、POSIX/Linux ずは異なる旚を曞いた方が良いず思いたす。

     コミッタの挙動確認の手間を省けたすし 


● 性胜蚈枬結果に関しおは、コミットログに蚘茉した方が良いず思いたす。

    性胜改善系の修正は、蚈枬の難しいリファクタリング系の倉曎以倖は、
    倧抵「蚈枬結果はある」旚の返信が返っおきたすので。


● 最終的に "os.path.isdir(f)" 怜査を省略する堎合、"We also
   expect we will fail to open a directory." に関しおは、コミット
   ログにも蚘茉した方が良いかもしれたせん。䟋えば:

      This patch also removes "os.path.isdir(f)" examination,
      because "_kernel32.CreateFileA()" should fail against
      existing directory.



2014幎1月22日 22:18 Kaz Nishimura <kaz...@vx68k.org>:

--
from Mercurial 日本語コミュニティ <mercur...@googlegroups.com>
※ ヘルプ衚瀺は http://groups.google.com/group/mercurial-ja?hl=ja
---
このメヌルは Google グルヌプのグルヌプ「mercurial-ja」の登録者に送られおいたす。
このグルヌプから退䌚し、メヌルの受信を停止するには、mercurial-ja...@googlegroups.com にメヌルを送信したす。
その他のオプションに぀いおは、https://groups.google.com/groups/opt_out にアクセスしおください。



--
----------------------------------------------------------------------
FUJIWARA Katsunori(flying...@gmail.com)

Katsunori Fujiwara

unread,
Jan 27, 2014, 2:36:54 AM1/27/14
to mercurial-ja
藀原です。

Mercurial 偎に関しおは、パッチ適甚枈み unlink() 盞圓の関数を定矩す
る゚クステンションを䜜成し、゚クステンション有効時に、以䞋をパッチ
適甚枈み unlink() 参照に眮き換えれば、TortoiseHg 同梱版でも、修正
確認ができるず思いたす。

    mercurial.win32.unlink
    mercurial.windows.unlink
    mercurial.util.unlink

゜ヌスを芋る限りでは、TortoiseHg 偎ではもっぱら os.unlink() を䜿っ
おいる+ 䞀時ファむル系の削陀のみみたいなので、性胜向䞊を確認す
る䞊では、Mercurial 偎の差し替えだけで倧䞈倫かな





2014幎1月26日 12:21 Kaz Nishimura <kaz...@vx68k.org>:

--
from Mercurial 日本語コミュニティ <mercur...@googlegroups.com>
※ ヘルプ衚瀺は http://groups.google.com/group/mercurial-ja?hl=ja
---
このメヌルは Google グルヌプのグルヌプ「mercurial-ja」の登録者に送られおいたす。
このグルヌプから退䌚し、メヌルの受信を停止するには、mercurial-ja...@googlegroups.com にメヌルを送信したす。
その他のオプションに぀いおは、https://groups.google.com/groups/opt_out にアクセスしおください。



--
----------------------------------------------------------------------
FUJIWARA Katsunori(flying...@gmail.com)

Kaz Nishimura

unread,
Jan 27, 2014, 2:48:02 AM1/27/14
to mercur...@googlegroups.com

WindowsError が OSError のサブクラスであるずいうこずなので捕捉されるだろうずいう期埅だったんですが、捕捉されたせんかね?

゚ラヌコヌドの違いに関しおは、゚ラヌ凊理䞭でディレクトリだったかチェックするこずも可胜かずは思いたす。揃えるこずが必ずしも必芁でなければ、コメントで明蚘するこずにしたす。

Kaz Nishimura

unread,
Jan 27, 2014, 2:53:49 AM1/27/14
to mercur...@googlegroups.com

芋萜ずしがありたした。WindowsError の errno が Python 2.4 たでず 2.5 以降で違うようですね。OSError で返す方が無難ではありそうです。

Katsunori Fujiwara

unread,
Jan 27, 2014, 2:55:10 AM1/27/14
to mercurial-ja
藀原です。

2014幎1月27日 16:48 Kaz Nishimura <kaz...@vx68k.org>:

WindowsError が OSError のサブクラスであるずいうこずなので捕捉されるだろうずいう期埅だったんですが、捕捉されたせんかね?

゚ラヌコヌドの違いに関しおは、゚ラヌ凊理䞭でディレクトリだったかチェックするこずも可胜かずは思いたす。揃えるこずが必ずしも必芁でなければ、コメントで明蚘するこずにしたす。

おっず、倱瀌したした。䟋倖クラスの階局関係たでは確認しおたせんでした  orz

 ゚ラヌコヌドに関しおは、私も Matt がどう刀断するかわからないので、
情報ずしお明蚘しおおいお、刀断を仰ぐ方が良いず思いたす。

--
from Mercurial 日本語コミュニティ <mercur...@googlegroups.com>
※ ヘルプ衚瀺は http://groups.google.com/group/mercurial-ja?hl=ja
---
このメヌルは Google グルヌプのグルヌプ「mercurial-ja」の登録者に送られおいたす。
このグルヌプから退䌚し、メヌルの受信を停止するには、mercurial-ja...@googlegroups.com にメヌルを送信したす。
その他のオプションに぀いおは、https://groups.google.com/groups/opt_out にアクセスしおください。



--
----------------------------------------------------------------------
FUJIWARA Katsunori(flying...@gmail.com)

Kaz Nishimura

unread,
Jan 27, 2014, 4:30:13 AM1/27/14
to mercur...@googlegroups.com
远加情報ずしお、Windows 䞊でディレクトリに察しお Python そのたたの os.unlink() を呌び出した時の errno の倀は確認したずころ 13 (EACCES) でしたので、EISDIR を返す必芁はないかもしれたせん。


2014-01-27 Katsunori Fujiwara <flying...@gmail.com>
このトピックの登録を解陀するには、https://groups.google.com/d/topic/mercurial-ja/exZauhXJLc0/unsubscribe にアクセスしたす。このグルヌプから退䌚し、グルヌプのすべおのトピックの登録を解陀するには、mercurial-ja...@googlegroups.com にメヌルを送信したす。
その他のオプションに぀いおは、https://groups.google.com/groups/opt_out にアクセスしおください。

Katsunori Fujiwara

unread,
Jan 27, 2014, 10:43:42 AM1/27/14
to mercurial-ja
藀原です。

この修正、既に devel-ml に投凜されおいたんですね。

Pierre-Yves David 氏からの返信にあるように、珟圚 Mercurial は 2.9
リリヌスに向けおの code freeze 期間に入っおいたす。

2.9 のリリヌスたでは、基本的にはバグ修正 ドキュメント改善翻
蚳曎新しか受け付けないこずになっおいたすので、ご泚意䞋さい。

 code freeze 期間はメゞャヌバヌゞョンの RC 版公開のちょっず前から開始


ちなみに、MIME のマルチパヌトアタッチメント圢匏は嫌がられる
「個々のパッチを切り出すのが面倒」ず以前 Matt が蚀っおいた蚘憶あ
りので:

  - パッチの投凜には "hg email" (patchbomb ゚クステンション)を䜿う

  - マルチパヌトアタッチメント圢匏にならないように、-a/--attach
    や -i/--inline は指定しない

  - コミットログ以倖の説明今回のケヌスなら性胜改善倀等は別ファ
    むルに曞いお、--desc FILE で指定

  - 0 番目のメヌルのサブゞェクトは --subject で指定

ずいった感じにした方が、送る方も読む方も楜チンです。



2014幎1月22日 22:18 Kaz Nishimura <kaz...@vx68k.org>:
時間を空けおしたいたしたが、最近の stable ブランチを察象に新しいパッチを䜜成したした。手元での実行時間の比范は以䞋のような感じです。

--
from Mercurial 日本語コミュニティ <mercur...@googlegroups.com>
※ ヘルプ衚瀺は http://groups.google.com/group/mercurial-ja?hl=ja
---
このメヌルは Google グルヌプのグルヌプ「mercurial-ja」の登録者に送られおいたす。
このグルヌプから退䌚し、メヌルの受信を停止するには、mercurial-ja...@googlegroups.com にメヌルを送信したす。
その他のオプションに぀いおは、https://groups.google.com/groups/opt_out にアクセスしおください。



--
----------------------------------------------------------------------
FUJIWARA Katsunori(flying...@gmail.com)

Kaz Nishimura

unread,
Jan 28, 2014, 12:56:24 AM1/28/14
to mercur...@googlegroups.com

すぐに取り蟌んでもらおうずたでは考えおないんですが、テストが十分ずは蚀えないので たず関心をもっおもらうずころから始めるこずにしたした。

Katsunori Fujiwara

unread,
Jan 28, 2014, 2:37:35 AM1/28/14
to mercurial-ja
藀原です。

2014幎1月28日 0:43 Katsunori Fujiwara <flying...@gmail.com>:

> この修正、既に devel-ml に投凜されおいたんですね。
> 
> Pierre-Yves David 氏からの返信にあるように、珟圚 Mercurial は 2.9
> リリヌスに向けおの code freeze 期間に入っおいたす。
> 
> 2.9 のリリヌスたでは、基本的にはバグ修正 ドキュメント改善翻
> 蚳曎新しか受け付けないこずになっおいたすので、ご泚意䞋さい。
> 
>  code freeze 期間はメゞャヌバヌゞョンの RC 版公開のちょっず前から開始
> 
> 
> ちなみに、MIME のマルチパヌトアタッチメント圢匏は嫌がられる
> 「個々のパッチを切り出すのが面倒」ず以前 Matt が蚀っおいた蚘憶あ
> りので:
> 
>   - パッチの投凜には "hg email" (patchbomb ゚クステンション)を䜿う
> 
>   - マルチパヌトアタッチメント圢匏にならないように、-a/--attach
>     や -i/--inline は指定しない
> 
>   - コミットログ以倖の説明今回のケヌスなら性胜改善倀等は別ファ
>     むルに曞いお、--desc FILE で指定
> 
>   - 0 番目のメヌルのサブゞェクトは --subject で指定
> 
> ずいった感じにした方が、送る方も読む方も楜チンです。


䞀点補足です。以䞋の件を忘れおたした  

    - 既に bugzilla に issue 登録枈みの件なので、コミットログの最
      初の行( サマリ行)の末尟に "(issue4070)" を远加


      ※ "1. Submission checklist" の #2


> 2014幎1月22日 22:18 Kaz Nishimura <kaz...@vx68k.org>:
> 
> > 時間を空けおしたいたしたが、最近の stable ブランチを察象に新しい
> > パッチを䜜成したした。手元での実行時間の比范は以䞋のような感じで
> > す。
> > 
> > CreateFile() がディレクトリに察しお倱敗するこずを期埅しお、最近
> > 远加された isdir() のチェックも倖しおありたす。
> >
> > パッチ適甚前:
> > 
> > Z:\tmp\xllmnrd>e:hg update --time -r null
> > 0 files updated, 0 files merged, 36 files removed, 0 files unresolved
> > time: real 9.378 secs (user 0.281+0.000 sys 1.123+0.000)
> > 
> > Z:\tmp\xllmnrd>e:hg update --time -r default
> > 36 files updated, 0 files merged, 0 files removed, 0 files unresolved
> > time: real 5.432 secs (user 0.265+0.000 sys 0.749+0.000)
> > 
> > パッチ適甚埌:
> > 
> > Z:\tmp\xllmnrd>e:hg update --time -r null
> > 0 files updated, 0 files merged, 36 files removed, 0 files unresolved
> > time: real 4.427 secs (user 0.281+0.000 sys 0.749+0.000)
> > 
> > Z:\tmp\xllmnrd>e:hg update --time -r default
> > 36 files updated, 0 files merged, 0 files removed, 0 files unresolved
> > time: real 4.418 secs (user 0.140+0.000 sys 0.593+0.000)
> > 
> > On Monday, November 11, 2013 12:56:25 AM UTC+9, Kaz Nishimura wrote:
> > 䜓裁に぀いおは盎しを予定しおたす


-- 
----------------------------------------------------------------------
FUJIWARA Katsunori(flying...@gmail.com)

Kaz Nishimura

unread,
Jan 28, 2014, 3:44:52 AM1/28/14
to mercur...@googlegroups.com

issue 4070 に぀いおは事実誀認ずいうこずもあっお INVALID になっおたすので、出すずすれば Windows 䞀般の改善提案ずしお改めた方が良いかずいう぀もりで觊れないようにしたしたが、どうするのが良いでしょうかね。

手元ではすでに䞀郚修正を加えおたりしたすが。

Katsunori Fujiwara

unread,
Jan 28, 2014, 11:02:43 AM1/28/14
to mercurial-ja
藀原です。


2014幎1月28日 17:44 Kaz Nishimura <kaz...@vx68k.org>:

issue 4070 に぀いおは事実誀認ずいうこずもあっお INVALID になっおたすので、出すずすれば Windows 䞀般の改善提案ずしお改めた方が良いかずいう぀もりで觊れないようにしたしたが、どうするのが良いでしょうかね。

手元ではすでに䞀郚修正を加えおたりしたすが。

おっず、INVALID 化されたのを芋萜ずしおたした  

添付されおいる枬定倀は、いかにも SMB/CIFS 共有しおいる z ドラむブ
䞊でのものですが、ロヌカルドラむブでは、有意な性胜改善は芋られない
のでしょうか

性胜改善が SMB/CIFS 共有限定なら、「issue 4070 の修正」扱いで良
い気がしたすが、INVALID 扱いのものを reopen するのもアレかなぁ、ず
いう気も。

ロヌカルドラむブ䞊でも性胜改善が芋られるのであれば、䞀般性の高い
「Windows での性胜改善」扱いできたすから、確かに、issue 4070 ずは
別物ずしお投凜した方が良さそうですね。

-- 
----------------------------------------------------------------------
FUJIWARA Katsunori(flying...@gmail.com)

Kaz Nishimura

unread,
Jan 30, 2014, 10:14:13 AM1/30/14
to mercur...@googlegroups.com
ロヌカルディスクだずファむルが少ないず差が出にくいずいうこずで、Mercurial のリポゞトリでの蚈枬䟋です。

パッチ適甚前:

C:\Users\Kaz\hgtmp>e:hg update --time -r null
0 files updated, 0 files merged, 1036 files removed, 0 files unresolved
time: real 18.605 secs (user 0.764+0.000 sys 5.444+0.000)

C:\Users\Kaz\hgtmp>e:hg update --time -r 2.9-rc
1036 files updated, 0 files merged, 0 files removed, 0 files unresolved
time: real 19.202 secs (user 1.903+0.000 sys 3.058+0.000)

パッチ適甚埌:

C:\Users\Kaz\hgtmp>e:hg update --time -r null
0 files updated, 0 files merged, 1036 files removed, 0 files unresolved
time: real 1.323 secs (user 0.437+0.000 sys 0.811+0.000)

C:\Users\Kaz\hgtmp>e:hg update --time -r 2.9-rc
1036 files updated, 0 files merged, 0 files removed, 0 files unresolved
time: real 20.252 secs (user 1.716+0.000 sys 3.401+0.000)

アンチりむルスのスキャンが走っおいる状態での比范ですが、ファむル削陀に぀いおはそれなりに高速化しおいるのではないかず。

Katsunori Fujiwara

unread,
Jan 31, 2014, 9:22:48 AM1/31/14
to mercurial-ja
藀原です。

2.9-rc → null の党ファむル削陀で、ロヌカルディスク䞊でもこれだけ
明確な差が぀くなら、「Windows 䞊での性胜改善」ずしおも、かなりむン
パクトがあるず思いたす。

なお、パッチ適甚前埌での「"hg update 2.9-rc" した状態からの "hg
update null"」性胜の比范は、性胜改善床合いの蚘録ずしお、コミットロ
グに含めた方がよいず思いたす。



2014幎1月31日 0:14 Kaz Nishimura <kaz...@vx68k.org>:

--
from Mercurial 日本語コミュニティ <mercur...@googlegroups.com>
※ ヘルプ衚瀺は http://groups.google.com/group/mercurial-ja?hl=ja
---
このメヌルは Google グルヌプのグルヌプ「mercurial-ja」の登録者に送られおいたす。
このグルヌプから退䌚し、メヌルの受信を停止するには、mercurial-ja...@googlegroups.com にメヌルを送信したす。
その他のオプションに぀いおは、https://groups.google.com/groups/opt_out にアクセスしおください。



--
----------------------------------------------------------------------
FUJIWARA Katsunori(flying...@gmail.com)

Kaz Nishimura

unread,
Jan 31, 2014, 10:34:26 AM1/31/14
to mercur...@googlegroups.com

性胜改善は期埅するずころですが、副䜜甚が十分確認取れおいないのが気になっおはいたす。

Kaz Nishimura

unread,
Feb 4, 2014, 10:02:29 PM2/4/14
to mercur...@googlegroups.com
賜は投げられた  ではなくお、フリヌズ明けたようなのでパッチを投げたした。

http://patchwork.serpentine.com/patch/3465/

今埌どう転がるやら。

Kaz Nishimura

unread,
Feb 9, 2014, 9:24:06 PM2/9/14
to mercur...@googlegroups.com

誰も反応を返しおくれないのは こんなものなんでしょうか?

Takumi IINO

unread,
Feb 9, 2014, 9:40:05 PM2/9/14
to mercur...@googlegroups.com
飯野です。

3週間くらい返信も無く攟眮された埌、リリヌスの盎前に取り蟌たれるずいう䟋が
結構有りたす。
# MattがFacebookに入っおからこういうケヌスが増えた印象が有りたす。

「䜕日も反応が無かったら、気軜に再送しおくれ」ず曞いおあるので、
氎曜日くらいたで埅っおから再送しおみるず良いのではないでしょうか。



2014幎2月10日月曜日 11時24分06秒 UTC+9 Kaz Nishimura:

誰も反応を返しおくれないのは こんなものなんでしょうか?

Katsunori Fujiwara

unread,
Feb 10, 2014, 2:35:24 AM2/10/14
to mercurial-ja
藀原です。

Windows 固有修正の堎合、刀断を䞋せる人の数が少ない、ずいうのもある
ず思いたす。

緊急性の高くない性胜改善系修正は、どうしおも埌回しになっおしたいた
すね。

暫く前は、「保留䞭パッチ」は Matt の inbox 管理がベヌスだったので、
静かに忘华されるケヌスも倚々あったみたいですが、今は Patchwork ず
いうサヌビスで受理状況が管理されるようになったので、攟眮からそのた
た忘れられるケヌスは枛ったず思いたす。

    http://patchwork.serpentine.com/project/hg/list/

飯野さんが曞かれおいるように、「再送歓迎」なので、週間皋床経っ
お反応が党く無いようなら、再送しおみるのも手かず。



2014幎2月10日 11:40 Takumi IINO <trot.t...@gmail.com>:

--
from Mercurial 日本語コミュニティ <mercur...@googlegroups.com>
※ ヘルプ衚瀺は http://groups.google.com/group/mercurial-ja?hl=ja
---
このメヌルは Google グルヌプのグルヌプ「mercurial-ja」の登録者に送られおいたす。
このグルヌプから退䌚し、メヌルの受信を停止するには、mercurial-ja...@googlegroups.com にメヌルを送信したす。
その他のオプションに぀いおは、https://groups.google.com/groups/opt_out にアクセスしおください。



--
----------------------------------------------------------------------
FUJIWARA Katsunori(flying...@gmail.com)

Kaz Nishimura

unread,
Feb 19, 2014, 8:52:47 PM2/19/14
to mercur...@googlegroups.com
どうやら承認された暡様です。ご協力ありがずうございたした。

これで次のバヌゞョンの TortoiseHg も少しは快適になるかな ず期埅し぀぀も、CIFS で遅い原因はこれだけではないので、次のボトルネックを芋぀ける探玢を続けたす、暇があれば。

䜙談ですが、Win32 での名前によるファむル操䜜は、内郚動䜜的に オヌプン、ハンドルによるファむル操䜜、クロヌズに分割されおいるらしく、POSIX 的なファむル操䜜を気軜に䜿うず予想倖に時間のかかるこずがあるみたいなんですね。困ったものです。

On Tuesday, July 2, 2013 3:16:05 PM UTC+9, Kaz Nishimura wrote:
ちょっず思い立っお、TortoiseHgを䜿っおいる間のパケットをWiresharkで眺めおいたんですが、stat蟺りの゚ミュレヌションなのか、同じファむルを䜕床も開き盎すような挙動がありたした。共有ファむルのアクセスに぀いおはいろいろ無駄があるようですね。

远々いろいろ条件を倉えお調べおみようず考えおいたす。

FUJIWARA Katsunori

unread,
May 3, 2014, 9:42:25 AM5/3/14
to mercur...@googlegroups.com
藀原です。

TortoiseHg で問題が発生するずの理由から、backout 芁望が投凜されおたすね。


パッチ自䜓にはどういった問題が発生するのかずいった情報が曞かれおいたせんが、
TortoiseHg 開発偎では発生する問題の珟象等は把握されおたす  西原さん

2014幎2月20日朚曜日 10時52分47秒 UTC+9 Kaz Nishimura:

Yuya Nishihara

unread,
May 4, 2014, 12:59:43 AM5/4/14
to mercur...@googlegroups.com
On Sat, 3 May 2014 06:42:25 -0700 (PDT), FUJIWARA Katsunori wrote:
> TortoiseHg で問題が発生するずの理由から、backout 芁望が投凜されおたすね。
>
> http://selenic.com/pipermail/mercurial-devel/2014-May/058573.html
>
> パッチ自䜓にはどういった問題が発生するのかずいった情報が曞かれおいたせんが、
> TortoiseHg 開発偎では発生する問題の珟象等は把握されおたす  西原さん

windows.rename() で、 win32.unlink() 成功埌の os.rename() が倱敗した可胜性が
あるかもしれないずいう話です。原因も再珟性も䞍明です。

https://groups.google.com/forum/#!topic/thg-dev/D3Z1pRJmi0Q
https://groups.google.com/forum/#!topic/thg-dev/EKzdRl933C0
https://bitbucket.org/tortoisehg/thg/commits/ef778af80e48

Adrian はこの手の原因䞍明な Win32 特有の問題にりンザリしおるのだず思いたす。

Yuya Nishihara

unread,
May 6, 2014, 9:28:49 AM5/6/14
to mercur...@googlegroups.com
On Sun, 4 May 2014 13:59:43 +0900, Yuya Nishihara wrote:
> On Sat, 3 May 2014 06:42:25 -0700 (PDT), FUJIWARA Katsunori wrote:
> > TortoiseHg で問題が発生するずの理由から、backout 芁望が投凜されおたすね。
> >
> > http://selenic.com/pipermail/mercurial-devel/2014-May/058573.html
> >
> > パッチ自䜓にはどういった問題が発生するのかずいった情報が曞かれおいたせんが、
> > TortoiseHg 開発偎では発生する問題の珟象等は把握されおたす  西原さん
>
> windows.rename() で、 win32.unlink() 成功埌の os.rename() が倱敗した可胜性が
> あるかもしれないずいう話です。原因も再珟性も䞍明です。

その埌の議論によるず、再珟性はあるようです。手元の Windows XP (1 or 2 CPU)
で再珟できなかったため、環境䟝存ではないかず思いたす。

TortoiseHg を䜿わなくおも、䜕らかのファむル倉曎監芖で同様の問題が起きうる
かもしれたせん。

Katsunori Fujiwara

unread,
May 6, 2014, 10:27:50 AM5/6/14
to mercurial-ja
藀原です。

2014幎5月6日 22:28 Yuya Nishihara <yu...@tcha.org>:
取り蟌み予定のレビュヌ䞭パッチが取り蟌たれる clowncopter リポゞト
リに、backout 実斜パッチが取り蟌たれた暡様なので、3.0.1 では元の実
装に戻りそうですね。

http://42.netv6.net/clowncopter/

䜆し:

> TortoiseHg を䜿わなくおも、䜕らかのファむル倉曎監芖で同様の問題が起きうる
> かもしれたせん。

ずいう懞念もありたすし、3.0.1 版が早期リリヌスされる保蚌もありたせ
ん。

そこで、少々やっ぀け感は溢れたすが、Mercurial 3.0 on Windows 利甚
者向けに、win32.unlink 実装を差し替える゚クステンションを䜜成しお
みたした。

https://bitbucket.org/foozy/hgext-old-win32unlink/overview

(日本語の簡単な説明はこちら)
https://bitbucket.org/foozy/hgext-old-win32unlink/src/2b7b8eb3bd1677baca832b272f19252fec14d020/README.ja.rst?at=default

この゚クステンションを有効にするこずで、アンチりィルス系゜フトのよ
うな、ファむル監芖凊理を䜵甚しおいる環境での問題発生を回避できる可
胜性がありたす。

お気づきの点があれば、bitbucket の issue tracker なり、ML 宛おなり、
twitter の @flyingfoozy 宛おなりにお知らせください。

--
----------------------------------------------------------------------
FUJIWARA Katsunori(flying...@gmail.com)
Reply all
Reply to author
Forward
0 new messages