From: nobu@... Date: 2017-10-01T12:43:04+00:00 Subject: [ruby-core:83073] [Ruby trunk Feature#13951] [PATCH] File#rename releases GVL Issue #13951 has been updated by nobu (Nobuyoshi Nakada). Description updated normalperson (Eric Wong) wrote: > I consider the performance trade off acceptable as cases are avoided. I agree that it would be small enough. gcc for x86_64 warns: ``` file.c: In function 'no_gvl_rename': file.c:2886:12: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] return (void *)rename(ra->src, ra->dst); ^ file.c: In function 'rb_file_s_rename': file.c:2914:9: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] if ((int)rb_thread_call_without_gvl(no_gvl_rename, &ra, ^ ``` ---------------------------------------- Feature #13951: [PATCH] File#rename releases GVL https://bugs.ruby-lang.org/issues/13951#change-67021 * Author: normalperson (Eric Wong) * Status: Open * Priority: Normal * Assignee: * Target version: ---------------------------------------- rename(2) requires two pathname resolution operations which can take considerable time on slow filesystems, release the GVL so operations on other threads may proceed. On fast, local filesystems, this change results in some slowdown as shown by the new benchmark. I consider the performance trade off acceptable as cases are avoided. ``` benchmark results: minimum results in each 3 measurements. Execution time (sec) name trunk built file_rename 2.648 2.804 Speedup ratio: compare with the result of `trunk' (greater is better) name built file_rename 0.944 ``` * file.c (no_gvl_rename): new function (rb_file_s_rename): release GVL for renames * benchmark/bm_file_rename.rb: new benchmark I will commit this next week as well as work on releasing GVL for other operations where slow FS can have pathological slowdown (unlink, link, symlink, readlink, readdir, mkdir, chmod, ...) ---Files-------------------------------- 0001-File-rename-releases-GVL.patch (2.64 KB) -- https://bugs.ruby-lang.org/ Unsubscribe: