sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextEnglish}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget/filesystems/gfs2-glocksmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/zh_TW/filesystems/gfs2-glocksmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/it_IT/filesystems/gfs2-glocksmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/ja_JP/filesystems/gfs2-glocksmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/ko_KR/filesystems/gfs2-glocksmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget+/translations/sp_SP/filesystems/gfs2-glocksmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageChinese (Simplified)uh1h hh _documenthsourceNlineNubhcomment)}(h SPDX-License-Identifier: GPL-2.0h]h SPDX-License-Identifier: GPL-2.0}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhhX/var/lib/git/docbuild/linux/Documentation/translations/zh_CN/filesystems/gfs2-glocks.rsthKubhnote)}(hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。h]h paragraph)}(hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。h]hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hh5Documentation/translations/zh_CN/disclaimer-zh_CN.rsthKhhubah}(h]h ]h"]h$]h&]uh1hhhhhhhhNubh field_list)}(hhh](hfield)}(hhh](h field_name)}(hOriginalh]hOriginal}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhKubh field_body)}(h*Documentation/filesystems/gfs2-glocks.rst h]h)}(h)Documentation/filesystems/gfs2-glocks.rsth]h)Documentation/filesystems/gfs2-glocks.rst}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhubah}(h]h ]h"]h$]h&]uh1hhhubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hhh](h)}(h翻译h]h翻译}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhKubh)}(h1邵明寅 Shao Mingyin h]h)}(h0邵明寅 Shao Mingyin h](h邵明寅 Shao Mingyin <}(hj hhhNhNubh reference)}(hshao.mingyin@zte.com.cnh]hshao.mingyin@zte.com.cn}(hj*hhhNhNubah}(h]h ]h"]h$]h&]refurimailto:shao.mingyin@zte.com.cnuh1j(hj ubh>}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK hjubah}(h]h ]h"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hhh](h)}(h校译h]h校译}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPhhhKubh)}(h)杨涛 yang tao h]h)}(h(杨涛 yang tao h](h杨涛 yang tao <}(hjehhhNhNubj))}(hyang.tao172@zte.com.cnh]hyang.tao172@zte.com.cn}(hjmhhhNhNubah}(h]h ]h"]h$]h&]refurimailto:yang.tao172@zte.com.cnuh1j(hjeubh>}(hjehhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK hjaubah}(h]h ]h"]h$]h&]uh1hhjPubeh}(h]h ]h"]h$]h&]uh1hhhhK hhhhubeh}(h]h ]h"]h$]h&]uh1hhhhhhhhKubhsection)}(hhh](htitle)}(hGlock 内部加锁规则h]hGlock 内部加锁规则}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhhhKubh)}(h本文档阐述 glock 状态机内部运作的基本原理。每个 glock(即 fs/gfs2/incore.h 中的 struct gfs2_glock)包含两把主要的内部锁:h]h本文档阐述 glock 状态机内部运作的基本原理。每个 glock(即 fs/gfs2/incore.h 中的 struct gfs2_glock)包含两把主要的内部锁:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh block_quote)}(hXt1. 自旋锁(gl_lockref.lock):用于保护内部状态(如 gl_state、gl_target)和持有者列表(gl_holders) 2. 非阻塞的位锁(GLF_LOCK):用于防止其他线程同时调用 DLM 等操作。若某线程获取此锁,则在释放时必须调用 run_queue(通常通过工作队列),以确保所有待处理任务 得以完成。 h]henumerated_list)}(hhh](h list_item)}(hy自旋锁(gl_lockref.lock):用于保护内部状态(如 gl_state、gl_target)和持有者列表(gl_holders)h]h)}(hy自旋锁(gl_lockref.lock):用于保护内部状态(如 gl_state、gl_target)和持有者列表(gl_holders)h]hy自旋锁(gl_lockref.lock):用于保护内部状态(如 gl_state、gl_target)和持有者列表(gl_holders)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h非阻塞的位锁(GLF_LOCK):用于防止其他线程同时调用 DLM 等操作。若某线程获取此锁,则在释放时必须调用 run_queue(通常通过工作队列),以确保所有待处理任务 得以完成。 h]h)}(h非阻塞的位锁(GLF_LOCK):用于防止其他线程同时调用 DLM 等操作。若某线程获取此锁,则在释放时必须调用 run_queue(通常通过工作队列),以确保所有待处理任务 得以完成。h]h非阻塞的位锁(GLF_LOCK):用于防止其他线程同时调用 DLM 等操作。若某线程获取此锁,则在释放时必须调用 run_queue(通常通过工作队列),以确保所有待处理任务 得以完成。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]enumtypearabicprefixhsuffix.uh1jhjubah}(h]h ]h"]h$]h&]uh1jhhhKhjhhubh)}(hgl_holders 列表包含与该 glock 关联的所有排队锁请求(不 仅是持有者)。若存在已持有的锁,它们将位于列表开头的连 续条目中。锁的授予严格遵循排队顺序。h]hgl_holders 列表包含与该 glock 关联的所有排队锁请求(不 仅是持有者)。若存在已持有的锁,它们将位于列表开头的连 续条目中。锁的授予严格遵循排队顺序。}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hglock 层用户可请求三种锁状态:共享(SH)、延迟(DF)和 排他(EX)。它们对应以下 DLM 锁模式:h]hglock 层用户可请求三种锁状态:共享(SH)、延迟(DF)和 排他(EX)。它们对应以下 DLM 锁模式:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK!hjhhubhtable)}(hhh]htgroup)}(hhh](hcolspec)}(hhh]h}(h]h ]h"]h$]h&]colwidthK uh1j0hj-ubj1)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1j0hj-ubj1)}(hhh]h}(h]h ]h"]h$]h&]colwidthK5uh1j0hj-ubhthead)}(hhh]hrow)}(hhh](hentry)}(hhh]h)}(h Glock 模式h]h Glock 模式}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK%hj\ubah}(h]h ]h"]h$]h&]uh1jZhjWubj[)}(hhh]h)}(hDLMh]hDLM}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK%hjsubah}(h]h ]h"]h$]h&]uh1jZhjWubj[)}(hhh]h)}(h 锁模式h]h 锁模式}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK%hjubah}(h]h ]h"]h$]h&]uh1jZhjWubeh}(h]h ]h"]h$]h&]uh1jUhjRubah}(h]h ]h"]h$]h&]uh1jPhj-ubhtbody)}(hhh](jV)}(hhh](j[)}(hhh]h)}(hUNh]hUN}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK'hjubah}(h]h ]h"]h$]h&]uh1jZhjubj[)}(hhh]h)}(hIV/NLh]hIV/NL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK'hjubah}(h]h ]h"]h$]h&]uh1jZhjubj[)}(hhh]h)}(h)未加锁(无关联的 DLM 锁)或 NLh]h)未加锁(无关联的 DLM 锁)或 NL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK'hjubah}(h]h ]h"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]uh1jUhjubjV)}(hhh](j[)}(hhh]h)}(hSHh]hSH}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK(hjubah}(h]h ]h"]h$]h&]uh1jZhjubj[)}(hhh]h)}(hPRh]hPR}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK(hjubah}(h]h ]h"]h$]h&]uh1jZhjubj[)}(hhh]h)}(h 受保护读(Protected read)h]h 受保护读(Protected read)}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK(hj1ubah}(h]h ]h"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]uh1jUhjubjV)}(hhh](j[)}(hhh]h)}(hDFh]hDF}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK)hjQubah}(h]h ]h"]h$]h&]uh1jZhjNubj[)}(hhh]h)}(hCWh]hCW}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK)hjhubah}(h]h ]h"]h$]h&]uh1jZhjNubj[)}(hhh]h)}(h并发写(Concurrent write)h]h并发写(Concurrent write)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK)hjubah}(h]h ]h"]h$]h&]uh1jZhjNubeh}(h]h ]h"]h$]h&]uh1jUhjubjV)}(hhh](j[)}(hhh]h)}(hEXh]hEX}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK*hjubah}(h]h ]h"]h$]h&]uh1jZhjubj[)}(hhh]h)}(hEXh]hEX}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK*hjubah}(h]h ]h"]h$]h&]uh1jZhjubj[)}(hhh]h)}(h排他(Exclusive)h]h排他(Exclusive)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK*hjubah}(h]h ]h"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]uh1jUhjubeh}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]colsKuh1j+hj(ubah}(h]h ]h"]h$]h&]uh1j&hjhhhhhNubh)}(h因此,DF 本质上是一种与“常规”共享锁模式(SH)互斥的共 享模式。在 GFS2 中,DF 模式专用于直接 I/O 操作。Glock 本质上是锁加缓存管理例程的组合,其缓存规则如下:h]h因此,DF 本质上是一种与“常规”共享锁模式(SH)互斥的共 享模式。在 GFS2 中,DF 模式专用于直接 I/O 操作。Glock 本质上是锁加缓存管理例程的组合,其缓存规则如下:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK-hjhhubj')}(hhh]j,)}(hhh](j1)}(hhh]h}(h]h ]h"]h$]h&]colwidthK uh1j0hjubj1)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1j0hjubj1)}(hhh]h}(h]h ]h"]h$]h&]colwidthK uh1j0hjubj1)}(hhh]h}(h]h ]h"]h$]h&]colwidthK uh1j0hjubj1)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1j0hjubjQ)}(hhh]jV)}(hhh](j[)}(hhh]h)}(h Glock 模式h]h Glock 模式}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK2hjIubah}(h]h ]h"]h$]h&]uh1jZhjFubj[)}(hhh]h)}(h缓存元数据h]h缓存元数据}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK2hj`ubah}(h]h ]h"]h$]h&]uh1jZhjFubj[)}(hhh]h)}(h 缓存数据h]h 缓存数据}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK2hjwubah}(h]h ]h"]h$]h&]uh1jZhjFubj[)}(hhh]h)}(h 脏数据h]h 脏数据}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK2hjubah}(h]h ]h"]h$]h&]uh1jZhjFubj[)}(hhh]h)}(h 脏元数据h]h 脏元数据}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK2hjubah}(h]h ]h"]h$]h&]uh1jZhjFubeh}(h]h ]h"]h$]h&]uh1jUhjCubah}(h]h ]h"]h$]h&]uh1jPhjubj)}(hhh](jV)}(hhh](j[)}(hhh]h)}(hUNh]hUN}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK4hjubah}(h]h ]h"]h$]h&]uh1jZhjubj[)}(hhh]h)}(h否h]h否}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK4hjubah}(h]h ]h"]h$]h&]uh1jZhjubj[)}(hhh]h)}(h否h]h否}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK4hjubah}(h]h ]h"]h$]h&]uh1jZhjubj[)}(hhh]h)}(h否h]h否}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK4hjubah}(h]h ]h"]h$]h&]uh1jZhjubj[)}(hhh]h)}(h否h]h否}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK4hj*ubah}(h]h ]h"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]uh1jUhjubjV)}(hhh](j[)}(hhh]h)}(hDFh]hDF}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK5hjJubah}(h]h ]h"]h$]h&]uh1jZhjGubj[)}(hhh]h)}(h是h]h是}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK5hjaubah}(h]h ]h"]h$]h&]uh1jZhjGubj[)}(hhh]h)}(h否h]h否}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK5hjxubah}(h]h ]h"]h$]h&]uh1jZhjGubj[)}(hhh]h)}(h否h]h否}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK5hjubah}(h]h ]h"]h$]h&]uh1jZhjGubj[)}(hhh]h)}(h否h]h否}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK5hjubah}(h]h ]h"]h$]h&]uh1jZhjGubeh}(h]h ]h"]h$]h&]uh1jUhjubjV)}(hhh](j[)}(hhh]h)}(hSHh]hSH}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK6hjubah}(h]h ]h"]h$]h&]uh1jZhjubj[)}(hhh]h)}(h是h]h是}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK6hjubah}(h]h ]h"]h$]h&]uh1jZhjubj[)}(hhh]h)}(h是h]h是}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK6hjubah}(h]h ]h"]h$]h&]uh1jZhjubj[)}(hhh]h)}(h否h]h否}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK6hj ubah}(h]h ]h"]h$]h&]uh1jZhjubj[)}(hhh]h)}(h否h]h否}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK6hj"ubah}(h]h ]h"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]uh1jUhjubjV)}(hhh](j[)}(hhh]h)}(hEXh]hEX}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK7hjBubah}(h]h ]h"]h$]h&]uh1jZhj?ubj[)}(hhh]h)}(h是h]h是}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK7hjYubah}(h]h ]h"]h$]h&]uh1jZhj?ubj[)}(hhh]h)}(h是h]h是}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK7hjpubah}(h]h ]h"]h$]h&]uh1jZhj?ubj[)}(hhh]h)}(h是h]h是}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK7hjubah}(h]h ]h"]h$]h&]uh1jZhj?ubj[)}(hhh]h)}(h是h]h是}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK7hjubah}(h]h ]h"]h$]h&]uh1jZhj?ubeh}(h]h ]h"]h$]h&]uh1jUhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]colsKuh1j+hj ubah}(h]h ]h"]h$]h&]uh1j&hjhhhhhNubh)}(h这些规则通过为每种 glock 定义的操作函数实现。并非所有 glock 类型都使用全部的模式,例如仅 inode glock 使用 DF 模 式。h]h这些规则通过为每种 glock 定义的操作函数实现。并非所有 glock 类型都使用全部的模式,例如仅 inode glock 使用 DF 模 式。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK:hjhhubh)}(h-glock 操作函数及类型常量说明表:h]h-glock 操作函数及类型常量说明表:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK>hjhhubj')}(hhh]j,)}(hhh](j1)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1j0hjubj1)}(hhh]h}(h]h ]h"]h$]h&]colwidthK8uh1j0hjubjQ)}(hhh]jV)}(hhh](j[)}(hhh]h)}(h字段h]h字段}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKAhj ubah}(h]h ]h"]h$]h&]uh1jZhjubj[)}(hhh]h)}(h用途h]h用途}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKAhj!ubah}(h]h ]h"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]uh1jUhjubah}(h]h ]h"]h$]h&]uh1jPhjubj)}(hhh](jV)}(hhh](j[)}(hhh]h)}(hgo_synch]hgo_sync}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKChjJubah}(h]h ]h"]h$]h&]uh1jZhjGubj[)}(hhh]h)}(h3远程状态变更前调用(如同步脏数据)h]h3远程状态变更前调用(如同步脏数据)}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKChjaubah}(h]h ]h"]h$]h&]uh1jZhjGubeh}(h]h ]h"]h$]h&]uh1jUhjDubjV)}(hhh](j[)}(hhh]h)}(h go_xmote_bhh]h go_xmote_bh}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKDhjubah}(h]h ]h"]h$]h&]uh1jZhj~ubj[)}(hhh]h)}(h0远程状态变更后调用(如刷新缓存)h]h0远程状态变更后调用(如刷新缓存)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKDhjubah}(h]h ]h"]h$]h&]uh1jZhj~ubeh}(h]h ]h"]h$]h&]uh1jUhjDubjV)}(hhh](j[)}(hhh]h)}(hgo_invalh]hgo_inval}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKEhjubah}(h]h ]h"]h$]h&]uh1jZhjubj[)}(hhh]h)}(h-远程状态变更需使缓存失效时调用h]h-远程状态变更需使缓存失效时调用}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKEhjubah}(h]h ]h"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]uh1jUhjDubjV)}(hhh](j[)}(hhh]h)}(hgo_instantiateh]hgo_instantiate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKFhjubah}(h]h ]h"]h$]h&]uh1jZhjubj[)}(hhh]h)}(h获取 glock 时调用h]h获取 glock 时调用}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKFhjubah}(h]h ]h"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]uh1jUhjDubjV)}(hhh](j[)}(hhh]h)}(hgo_heldh]hgo_held}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKGhj&ubah}(h]h ]h"]h$]h&]uh1jZhj#ubj[)}(hhh]h)}(h%每次获取 glock 持有者时调用h]h%每次获取 glock 持有者时调用}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKGhj=ubah}(h]h ]h"]h$]h&]uh1jZhj#ubeh}(h]h ]h"]h$]h&]uh1jUhjDubjV)}(hhh](j[)}(hhh]h)}(hgo_dumph]hgo_dump}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKHhj]ubah}(h]h ]h"]h$]h&]uh1jZhjZubj[)}(hhh]h)}(hL为 debugfs 文件打印对象内容,或出错时将 glock 转储至日志h]hL为 debugfs 文件打印对象内容,或出错时将 glock 转储至日志}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKHhjtubah}(h]h ]h"]h$]h&]uh1jZhjZubeh}(h]h ]h"]h$]h&]uh1jUhjDubjV)}(hhh](j[)}(hhh]h)}(h go_callbackh]h go_callback}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKIhjubah}(h]h ]h"]h$]h&]uh1jZhjubj[)}(hhh]h)}(h,若 DLM 发送回调以释放此锁时调用h]h,若 DLM 发送回调以释放此锁时调用}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKIhjubah}(h]h ]h"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]uh1jUhjDubjV)}(hhh](j[)}(hhh]h)}(h go_unlockedh]h go_unlocked}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKJhjubah}(h]h ]h"]h$]h&]uh1jZhjubj[)}(hhh]h)}(h+当 glock 解锁时调用(dlm_unlock())h]h+当 glock 解锁时调用(dlm_unlock())}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKJhjubah}(h]h ]h"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]uh1jUhjDubjV)}(hhh](j[)}(hhh]h)}(hgo_typeh]hgo_type}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKKhj ubah}(h]h ]h"]h$]h&]uh1jZhjubj[)}(hhh]h)}(hglock 类型,``LM_TYPE_*``h](hglock 类型,}(hj hhhNhNubhliteral)}(h ``LM_TYPE_*``h]h LM_TYPE_*}(hj& hhhNhNubah}(h]h ]h"]h$]h&]uh1j$ hj ubeh}(h]h ]h"]h$]h&]uh1hhhhKKhj ubah}(h]h ]h"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]uh1jUhjDubjV)}(hhh](j[)}(hhh]h)}(hgo_flagsh]hgo_flags}(hjL hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKLhjI ubah}(h]h ]h"]h$]h&]uh1jZhjF ubj[)}(hhh]h)}(h:若 glock 关联地址空间,则设置GLOF_ASPACE 标志h]h:若 glock 关联地址空间,则设置GLOF_ASPACE 标志}(hjc hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKLhj` ubah}(h]h ]h"]h$]h&]uh1jZhjF ubeh}(h]h ]h"]h$]h&]uh1jUhjDubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]colsKuh1j+hjubah}(h]h ]h"]h$]h&]uh1j&hjhhhhhNubh)}(hXf每种锁的最短持有时间是指在远程锁授予后忽略远程降级请求 的时间段。此举旨在防止锁在集群节点间持续弹跳而无实质进 展的情况,此现象常见于多节点写入的共享内存映射文件。通 过延迟响应远程回调的降级操作,为用户空间程序争取页面取 消映射前的处理时间。h]hXf每种锁的最短持有时间是指在远程锁授予后忽略远程降级请求 的时间段。此举旨在防止锁在集群节点间持续弹跳而无实质进 展的情况,此现象常见于多节点写入的共享内存映射文件。通 过延迟响应远程回调的降级操作,为用户空间程序争取页面取 消映射前的处理时间。}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKOhjhhubh)}(hk未来计划将 glock 的 "EX" 模式设为本地共享,使本地锁通 过 i_mutex 实现而非 glock。h]ho未来计划将 glock 的 “EX” 模式设为本地共享,使本地锁通 过 i_mutex 实现而非 glock。}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKUhjhhubh)}(h$glock 操作函数的加锁规则:h]h$glock 操作函数的加锁规则:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKXhjhhubj')}(hhh]j,)}(hhh](j1)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1j0hj ubj1)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1j0hj ubj1)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1j0hj ubjQ)}(hhh]jV)}(hhh](j[)}(hhh]h)}(h操作h]h操作}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK[hj ubah}(h]h ]h"]h$]h&]uh1jZhj ubj[)}(hhh]h)}(hGLF_LOCK 位锁持有h]hGLF_LOCK 位锁持有}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK[hj ubah}(h]h ]h"]h$]h&]uh1jZhj ubj[)}(hhh]h)}(hgl_lockref.lock 自旋锁持有h]hgl_lockref.lock 自旋锁持有}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK[hj ubah}(h]h ]h"]h$]h&]uh1jZhj ubeh}(h]h ]h"]h$]h&]uh1jUhj ubah}(h]h ]h"]h$]h&]uh1jPhj ubj)}(hhh](jV)}(hhh](j[)}(hhh]h)}(hgo_synch]hgo_sync}(hj> hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK]hj; ubah}(h]h ]h"]h$]h&]uh1jZhj8 ubj[)}(hhh]h)}(h是h]h是}(hjU hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK]hjR ubah}(h]h ]h"]h$]h&]uh1jZhj8 ubj[)}(hhh]h)}(h否h]h否}(hjl hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK]hji ubah}(h]h ]h"]h$]h&]uh1jZhj8 ubeh}(h]h ]h"]h$]h&]uh1jUhj5 ubjV)}(hhh](j[)}(hhh]h)}(h go_xmote_bhh]h go_xmote_bh}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK^hj ubah}(h]h ]h"]h$]h&]uh1jZhj ubj[)}(hhh]h)}(h是h]h是}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK^hj ubah}(h]h ]h"]h$]h&]uh1jZhj ubj[)}(hhh]h)}(h否h]h否}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK^hj ubah}(h]h ]h"]h$]h&]uh1jZhj ubeh}(h]h ]h"]h$]h&]uh1jUhj5 ubjV)}(hhh](j[)}(hhh]h)}(hgo_invalh]hgo_inval}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK_hj ubah}(h]h ]h"]h$]h&]uh1jZhj ubj[)}(hhh]h)}(h是h]h是}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK_hj ubah}(h]h ]h"]h$]h&]uh1jZhj ubj[)}(hhh]h)}(h否h]h否}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK_hj ubah}(h]h ]h"]h$]h&]uh1jZhj ubeh}(h]h ]h"]h$]h&]uh1jUhj5 ubjV)}(hhh](j[)}(hhh]h)}(hgo_instantiateh]hgo_instantiate}(hj( hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK`hj% ubah}(h]h ]h"]h$]h&]uh1jZhj" ubj[)}(hhh]h)}(h否h]h否}(hj? hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK`hj< ubah}(h]h ]h"]h$]h&]uh1jZhj" ubj[)}(hhh]h)}(h否h]h否}(hjV hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK`hjS ubah}(h]h ]h"]h$]h&]uh1jZhj" ubeh}(h]h ]h"]h$]h&]uh1jUhj5 ubjV)}(hhh](j[)}(hhh]h)}(hgo_heldh]hgo_held}(hjv hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKahjs ubah}(h]h ]h"]h$]h&]uh1jZhjp ubj[)}(hhh]h)}(h否h]h否}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKahj ubah}(h]h ]h"]h$]h&]uh1jZhjp ubj[)}(hhh]h)}(h否h]h否}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKahj ubah}(h]h ]h"]h$]h&]uh1jZhjp ubeh}(h]h ]h"]h$]h&]uh1jUhj5 ubjV)}(hhh](j[)}(hhh]h)}(hgo_dumph]hgo_dump}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKbhj ubah}(h]h ]h"]h$]h&]uh1jZhj ubj[)}(hhh]h)}(h有时h]h有时}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKbhj ubah}(h]h ]h"]h$]h&]uh1jZhj ubj[)}(hhh]h)}(h是h]h是}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKbhj ubah}(h]h ]h"]h$]h&]uh1jZhj ubeh}(h]h ]h"]h$]h&]uh1jUhj5 ubjV)}(hhh](j[)}(hhh]h)}(h go_callbackh]h go_callback}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKchj ubah}(h]h ]h"]h$]h&]uh1jZhj ubj[)}(hhh]h)}(h有时(N/A)h]h有时(N/A)}(hj) hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKchj& ubah}(h]h ]h"]h$]h&]uh1jZhj ubj[)}(hhh]h)}(h是h]h是}(hj@ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKchj= ubah}(h]h ]h"]h$]h&]uh1jZhj ubeh}(h]h ]h"]h$]h&]uh1jUhj5 ubjV)}(hhh](j[)}(hhh]h)}(h go_unlockedh]h go_unlocked}(hj` hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKdhj] ubah}(h]h ]h"]h$]h&]uh1jZhjZ ubj[)}(hhh]h)}(h是h]h是}(hjw hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKdhjt ubah}(h]h ]h"]h$]h&]uh1jZhjZ ubj[)}(hhh]h)}(h否h]h否}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKdhj ubah}(h]h ]h"]h$]h&]uh1jZhjZ ubeh}(h]h ]h"]h$]h&]uh1jUhj5 ubeh}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]colsKuh1j+hj ubah}(h]h ]h"]h$]h&]uh1j&hjhhhhhNubh)}(h若入口处持有锁则操作期间不得释放位锁或自旋锁。 go_dump 和 do_demote_ok 严禁阻塞。 仅当 glock 状态指示其缓存最新数据时才会调用 go_dump。h]h)}(h若入口处持有锁则操作期间不得释放位锁或自旋锁。 go_dump 和 do_demote_ok 严禁阻塞。 仅当 glock 状态指示其缓存最新数据时才会调用 go_dump。h]h若入口处持有锁则操作期间不得释放位锁或自旋锁。 go_dump 和 do_demote_ok 严禁阻塞。 仅当 glock 状态指示其缓存最新数据时才会调用 go_dump。}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKihj ubah}(h]h ]h"]h$]h&]uh1hhjhhhhhNubh)}(h$GFS2 内部的 glock 加锁顺序:h]h$GFS2 内部的 glock 加锁顺序:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKmhjhhubj)}(hXK1. i_rwsem(如需要) 2. 重命名 glock(仅用于重命名) 3. Inode glock (父级优先于子级,同级 inode 按锁编号排序) 4. Rgrp glock(用于(反)分配操作) 5. 事务 glock(通过 gfs2_trans_begin,非读操作) 6. i_rw_mutex(如需要) 7. 页锁(始终最后,至关重要!) h]j)}(hhh](j)}(hi_rwsem(如需要)h]h)}(hj h]hi_rwsem(如需要)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKohj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(h'重命名 glock(仅用于重命名)h]h)}(hj h]h'重命名 glock(仅用于重命名)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKphj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hIInode glock (父级优先于子级,同级 inode 按锁编号排序)h]h)}(hIInode glock (父级优先于子级,同级 inode 按锁编号排序)h]hIInode glock (父级优先于子级,同级 inode 按锁编号排序)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKqhj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(h+Rgrp glock(用于(反)分配操作)h]h)}(hj0 h]h+Rgrp glock(用于(反)分配操作)}(hj2 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKshj. ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(h8事务 glock(通过 gfs2_trans_begin,非读操作)h]h)}(hjG h]h8事务 glock(通过 gfs2_trans_begin,非读操作)}(hjI hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKthjE ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hi_rw_mutex(如需要)h]h)}(hj^ h]hi_rw_mutex(如需要)}(hj` hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKuhj\ ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(h+页锁(始终最后,至关重要!) h]h)}(h*页锁(始终最后,至关重要!)h]h*页锁(始终最后,至关重要!)}(hjw hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKvhjs ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]jjjhjjuh1jhj ubah}(h]h ]h"]h$]h&]uh1jhhhKohjhhubh)}(hX$每个 inode 对应两把 glock:一把管理 inode 本身(加锁顺 序如上),另一把(称为 iopen glock)结合 inode 的 i_nlink 字段决定 inode 生命周期。inode 加锁基于单个 inode,rgrp 加锁基于单个 rgrp。通常优先获取本地锁再获 取集群锁。h]hX$每个 inode 对应两把 glock:一把管理 inode 本身(加锁顺 序如上),另一把(称为 iopen glock)结合 inode 的 i_nlink 字段决定 inode 生命周期。inode 加锁基于单个 inode,rgrp 加锁基于单个 rgrp。通常优先获取本地锁再获 取集群锁。}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKxhjhhubj)}(hhh](j)}(h Glock 统计h]h Glock 统计}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj hhhhhKubh)}(h统计分为两类:超级块相关统计和单个 glock 相关统计。超级 块统计按每 CPU 执行以减少收集开销,并进一步按 glock 类 型细分。所有时间单位为纳秒。h]h统计分为两类:超级块相关统计和单个 glock 相关统计。超级 块统计按每 CPU 执行以减少收集开销,并进一步按 glock 类 型细分。所有时间单位为纳秒。}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubh)}(h超级块和 glock 统计收集相同信息。超级块时序统计为 glock 时序统计提供默认值,使新建 glock 具有合理的初始值。每个 glock 的计数器在创建时初始化为零,当 glock 从内存移除时 统计丢失。h]h超级块和 glock 统计收集相同信息。超级块时序统计为 glock 时序统计提供默认值,使新建 glock 具有合理的初始值。每个 glock 的计数器在创建时初始化为零,当 glock 从内存移除时 统计丢失。}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubh)}(hX-统计包含三组均值/方差对及两个计数器。均值/方差对为平滑 指数估计,算法与网络代码中的往返时间计算类似(参见《 TCP/IP详解 卷1》第21.3节及《卷2》第25.10节)。与 TCP/IP 案例不同,此处均值/方差未缩放且单位为整数纳秒。h]hX-统计包含三组均值/方差对及两个计数器。均值/方差对为平滑 指数估计,算法与网络代码中的往返时间计算类似(参见《 TCP/IP详解 卷1》第21.3节及《卷2》第25.10节)。与 TCP/IP 案例不同,此处均值/方差未缩放且单位为整数纳秒。}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubh)}(h+三组均值/方差对测量以下内容:h]h+三组均值/方差对测量以下内容:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubj)}(ho1. DLM 锁时间(非阻塞请求) 2. DLM 锁时间(阻塞请求) 3. 请求间隔时间(指向 DLM) h]j)}(hhh](j)}(h"DLM 锁时间(非阻塞请求)h]h)}(hj h]h"DLM 锁时间(非阻塞请求)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hDLM 锁时间(阻塞请求)h]h)}(hjh]hDLM 锁时间(阻塞请求)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(h#请求间隔时间(指向 DLM) h]h)}(h"请求间隔时间(指向 DLM)h]h"请求间隔时间(指向 DLM)}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj#ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]jjjhjjuh1jhj ubah}(h]h ]h"]h$]h&]uh1jhhhKhj hhubh)}(hX5非阻塞请求指无论目标 DLM 锁处于何种状态均能立即完成的请求。 当前满足条件的请求包括:(a)锁当前状态为互斥(如锁降级)、 (b)请求状态为空置或解锁(同样如锁降级)、或(c)设置"try lock" 标志的请求。其余锁请求均属阻塞请求。h]hX9非阻塞请求指无论目标 DLM 锁处于何种状态均能立即完成的请求。 当前满足条件的请求包括:(a)锁当前状态为互斥(如锁降级)、 (b)请求状态为空置或解锁(同样如锁降级)、或(c)设置”try lock” 标志的请求。其余锁请求均属阻塞请求。}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubhdefinition_list)}(hhh]hdefinition_list_item)}(h两个计数器分别统计: 1. 锁请求总数(决定均值/方差计算的数据量) 2. glock 代码顶层的持有者排队数(通常远大于 DLM 锁请求数) h](hterm)}(h两个计数器分别统计:h]h两个计数器分别统计:}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j`hhhKhj\ubh definition)}(hhh]j)}(hhh](j)}(h:锁请求总数(决定均值/方差计算的数据量)h]h)}(hjzh]h:锁请求总数(决定均值/方差计算的数据量)}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjxubah}(h]h ]h"]h$]h&]uh1jhjuubj)}(hNglock 代码顶层的持有者排队数(通常远大于 DLM 锁请求数) h]h)}(hMglock 代码顶层的持有者排队数(通常远大于 DLM 锁请求数)h]hMglock 代码顶层的持有者排队数(通常远大于 DLM 锁请求数)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjuubeh}(h]h ]h"]h$]h&]jjjhjjuh1jhjrubah}(h]h ]h"]h$]h&]uh1jphj\ubeh}(h]h ]h"]h$]h&]uh1jZhhhKhjWubah}(h]h ]h"]h$]h&]uh1jUhj hhhNhNubh)}(hW为什么收集这些统计数据?我们需深入分析时序参数的动因如下:h]hW为什么收集这些统计数据?我们需深入分析时序参数的动因如下:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubj)}(hhh](j)}(h*更精准设置 glock "最短持有时间"h]h)}(hjh]h.更精准设置 glock “最短持有时间”}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(h快速识别性能问题h]h)}(hjh]h快速识别性能问题}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(hN改进资源组分配算法(基于锁等待时间而非盲目 "try lock") h]h)}(hM改进资源组分配算法(基于锁等待时间而非盲目 "try lock")h]hQ改进资源组分配算法(基于锁等待时间而非盲目 “try lock”)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubeh}(h]h ]h"]h$]h&]jjjhjjuh1jhj hhhhhKubh)}(h因平滑更新的特性,采样量的阶跃变化需经 8 次采样(方差需 4 次)才能完全体现,解析结果时需审慎考虑。h]h因平滑更新的特性,采样量的阶跃变化需经 8 次采样(方差需 4 次)才能完全体现,解析结果时需审慎考虑。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubh)}(h通过锁请求完成时间和 glock 平均锁请求间隔时间,可计算节 点使用 glock 时长与集群共享时长的占比,对设置锁最短持有 时间至关重要。h]h通过锁请求完成时间和 glock 平均锁请求间隔时间,可计算节 点使用 glock 时长与集群共享时长的占比,对设置锁最短持有 时间至关重要。}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubh)}(h我们已采取严谨措施,力求精准测量目标量值。任何测量系统均 存在误差,但我期望当前方案已达到合理精度极限。h]h我们已采取严谨措施,力求精准测量目标量值。任何测量系统均 存在误差,但我期望当前方案已达到合理精度极限。}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubh)}(h超级块状态统计路径::h]h超级块状态统计路径:}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubh literal_block)}(h'/sys/kernel/debug/gfs2//sbstatsh]h'/sys/kernel/debug/gfs2//sbstats}hjVsbah}(h]h ]h"]h$]h&]hhuh1jThhhKhj hhubh)}(hGlock 状态统计路径::h]hGlock 状态统计路径:}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubjU)}(h'/sys/kernel/debug/gfs2//glstatsh]h'/sys/kernel/debug/gfs2//glstats}hjrsbah}(h]h ]h"]h$]h&]hhuh1jThhhKhj hhubh)}(he(假设 debugfs 挂载于 /sys/kernel/debug,且 替 换为对应 GFS2 文件系统名)h]he(假设 debugfs 挂载于 /sys/kernel/debug,且 替 换为对应 GFS2 文件系统名)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubh)}(h输出缩写说明:h]h输出缩写说明:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubj')}(hhh]j,)}(hhh](j1)}(hhh]h}(h]h ]h"]h$]h&]colwidthK uh1j0hjubj1)}(hhh]h}(h]h ]h"]h$]h&]colwidthK,uh1j0hjubj)}(hhh](jV)}(hhh](j[)}(hhh]h)}(hsrtth]hsrtt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jZhjubj[)}(hhh]h)}(h)非阻塞 DLM 请求的平滑往返时间h]h)非阻塞 DLM 请求的平滑往返时间}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]uh1jUhjubjV)}(hhh](j[)}(hhh]h)}(hsrttvarh]hsrttvar}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jZhjubj[)}(hhh]h)}(hsrtt 的方差估计h]hsrtt 的方差估计}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]uh1jUhjubjV)}(hhh](j[)}(hhh]h)}(hsrttbh]hsrttb}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj*ubah}(h]h ]h"]h$]h&]uh1jZhj'ubj[)}(hhh]h)}(h2(潜在)阻塞 DLM 请求的平滑往返时间h]h2(潜在)阻塞 DLM 请求的平滑往返时间}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjAubah}(h]h ]h"]h$]h&]uh1jZhj'ubeh}(h]h ]h"]h$]h&]uh1jUhjubjV)}(hhh](j[)}(hhh]h)}(hsrttvarbh]hsrttvarb}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjaubah}(h]h ]h"]h$]h&]uh1jZhj^ubj[)}(hhh]h)}(hsrttb 的方差估计h]hsrttb 的方差估计}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjxubah}(h]h ]h"]h$]h&]uh1jZhj^ubeh}(h]h ]h"]h$]h&]uh1jUhjubjV)}(hhh](j[)}(hhh]h)}(hsirth]hsirt}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jZhjubj[)}(hhh]h)}(h%DLM 请求的平滑请求间隔时间h]h%DLM 请求的平滑请求间隔时间}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]uh1jUhjubjV)}(hhh](j[)}(hhh]h)}(hsirtvarh]hsirtvar}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jZhjubj[)}(hhh]h)}(hsirt 的方差估计h]hsirt 的方差估计}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]uh1jUhjubjV)}(hhh](j[)}(hhh]h)}(hdlmh]hdlm}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jZhjubj[)}(hhh]h)}(h,DLM 请求数(glstats 文件中的 dcnt)h]h,DLM 请求数(glstats 文件中的 dcnt)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]uh1jUhjubjV)}(hhh](j[)}(hhh]h)}(hqueueh]hqueue}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj=ubah}(h]h ]h"]h$]h&]uh1jZhj:ubj[)}(hhh]h)}(h8排队的 glock 请求数(glstats 文件中的 qcnt)h]h8排队的 glock 请求数(glstats 文件中的 qcnt)}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjTubah}(h]h ]h"]h$]h&]uh1jZhj:ubeh}(h]h ]h"]h$]h&]uh1jUhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]colsKuh1j+hjubah}(h]h ]h"]h$]h&]uh1j&hj hhhhhNubh)}(hsbstats文件按glock类型(每种类型8行)和CPU核心(每CPU一列) 记录统计数据集。glstats文件则为每个glock提供统计集,其格式 与glocks文件类似,但所有时序统计量均采用均值/方差格式存储。h]hsbstats文件按glock类型(每种类型8行)和CPU核心(每CPU一列) 记录统计数据集。glstats文件则为每个glock提供统计集,其格式 与glocks文件类似,但所有时序统计量均采用均值/方差格式存储。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubh)}(hgfs2_glock_lock_time 跟踪点实时输出目标 glock 的当前统计 值,并附带每次接收到的dlm响应附加信息:h]hgfs2_glock_lock_time 跟踪点实时输出目标 glock 的当前统计 值,并附带每次接收到的dlm响应附加信息:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubj')}(hhh]j,)}(hhh](j1)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1j0hjubj1)}(hhh]h}(h]h ]h"]h$]h&]colwidthK uh1j0hjubj)}(hhh](jV)}(hhh](j[)}(hhh]h)}(hstatush]hstatus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jZhjubj[)}(hhh]h)}(hDLM 请求状态h]hDLM 请求状态}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]uh1jUhjubjV)}(hhh](j[)}(hhh]h)}(hflagsh]hflags}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jZhjubj[)}(hhh]h)}(hDLM 请求标志h]hDLM 请求标志}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jZhjubeh}(h]h ]h"]h$]h&]uh1jUhjubjV)}(hhh](j[)}(hhh]h)}(htdiffh]htdiff}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj.ubah}(h]h ]h"]h$]h&]uh1jZhj+ubj[)}(hhh]h)}(h该请求的耗时h]h该请求的耗时}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjEubah}(h]h ]h"]h$]h&]uh1jZhj+ubeh}(h]h ]h"]h$]h&]uh1jUhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]colsKuh1j+hjubah}(h]h ]h"]h$]h&]uh1j&hj hhhhhNubh)}(h(其余字段同上表)h]h(其余字段同上表)}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubeh}(h]id1ah ]h"] glock 统计ah$]h&]uh1jhjhhhhhKubeh}(h]glockah ]h"]glock 内部加锁规则ah$]h&]uh1jhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(jN generatorN datestampN source_linkN source_urlN toc_backlinksjZfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(jjjju nametypes}(jjuh}(jjjj u footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}jKsRparse_messages]transform_messages] transformerN include_log]