@@ -278,17 +278,22 @@ def best_extra_offset(t: np.ndarray | LazyNumpyTensor | None, current_offset: in
278278 return best_offset
279279
280280
281- def count_reflinkable_size (tensors : Iterable [np .ndarray | LazyNumpyTensor | None ]) -> int :
281+ def count_reflinkable_size (tensors : Iterable [tuple [ str , np .ndarray | LazyNumpyTensor | None ] ]) -> int :
282282 if not hasattr (os , "copy_file_range" ):
283283 return 0
284-
285284 size = 0
286- for t in tensors :
285+ for name , t in tensors :
287286 if isinstance (t , LazyNumpyTensor ) and len (t ._ranges ) > 0 :
288287 align_offset = best_extra_offset (t , 0 )
288+ misaligned = 0
289289 for range in t ._ranges :
290- if range .block_size > 0 and range .offset % range .block_size == align_offset :
291- size += range .size
290+ if range .block_size > 0 :
291+ if range .offset % range .block_size == align_offset :
292+ size += range .size
293+ else :
294+ misaligned += 1
295+ if misaligned > 0 :
296+ logger .debug (f"{ name } misaligned for reflinking, fallback to copy for { misaligned } of { len (t ._ranges )} parts" )
292297 return size
293298
294299
@@ -317,7 +322,7 @@ def copy_tensor_ranges(t: LazyNumpyTensor, fout: BufferedWriter):
317322
318323 has_copy_file_range = hasattr (os , "copy_file_range" )
319324
320- for i , r in enumerate ( ranges ) :
325+ for r in ranges :
321326 src = src_files [r .filename ]
322327 if has_copy_file_range :
323328 if r .block_size > 0 and (r .offset % r .block_size ) == (start_offset % r .block_size ):
@@ -354,8 +359,6 @@ def copy_tensor_ranges(t: LazyNumpyTensor, fout: BufferedWriter):
354359 os .copy_file_range (src .fileno (), fout .fileno (), size , offset_src , dst_offset )
355360 dst_offset += r .size - extra_size
356361 else :
357- if r .block_size > 0 :
358- logger .debug (f"misaligned for reflinking, falling back to copy ({ i } /{ len (ranges )} )" )
359362 # not trying to use reflinks, but still using os.copy_file_range for speed
360363 os .copy_file_range (src .fileno (), fout .fileno (), r .size , r .offset , dst_offset )
361364 dst_offset += r .size
0 commit comments