9.4. glock debugfs 인터페이스
glock debugfs
인터페이스를 사용하면 glock과 홀더의 내부 상태를 시각화할 수 있으며 경우에 따라 잠긴 객체에 대한 몇 가지 요약 세부 정보도 포함되어 있습니다. 파일의 각 줄은 들여쓰기 없이 G를 시작하거나(G: glock 자체 참조) 또는 다른 문자로 시작하여 단일 공백으로 들여쓰고, 파일 위의 glock과 연결된 구조를 나타냅니다(H: is a holder, I: an inode, and R: a resource group). 다음은 이 파일의 내용은 다음과 같습니다.
G: s:SH n:5/75320 f:I t:SH d:EX/0 a:0 r:3 H: s:SH f:EH e:0 p:4466 [postmark] gfs2_inode_lookup+0x14e/0x260 [gfs2] G: s:EX n:3/258028 f:yI t:EX d:EX/0 a:3 r:4 H: s:EX f:tH e:0 p:4466 [postmark] gfs2_inplace_reserve_i+0x177/0x780 [gfs2] R: n:258028 f:05 b:22256/22256 i:16800 G: s:EX n:2/219916 f:yfI t:EX d:EX/0 a:0 r:3 I: n:75661/219916 t:8 f:0x10 d:0x00000000 s:7522/7522 G: s:SH n:5/127205 f:I t:SH d:EX/0 a:0 r:3 H: s:SH f:EH e:0 p:4466 [postmark] gfs2_inode_lookup+0x14e/0x260 [gfs2] G: s:EX n:2/50382 f:yfI t:EX d:EX/0 a:0 r:2 G: s:SH n:5/302519 f:I t:SH d:EX/0 a:0 r:3 H: s:SH f:EH e:0 p:4466 [postmark] gfs2_inode_lookup+0x14e/0x260 [gfs2] G: s:SH n:5/313874 f:I t:SH d:EX/0 a:0 r:3 H: s:SH f:EH e:0 p:4466 [postmark] gfs2_inode_lookup+0x14e/0x260 [gfs2] G: s:SH n:5/271916 f:I t:SH d:EX/0 a:0 r:3 H: s:SH f:EH e:0 p:4466 [postmark] gfs2_inode_lookup+0x14e/0x260 [gfs2] G: s:SH n:5/312732 f:I t:SH d:EX/0 a:0 r:3 H: s:SH f:EH e:0 p:4466 [postmark] gfs2_inode_lookup+0x14e/0x260 [gfs2]
위의 예는 단일 노드 GFS2 파일 시스템에서 postmark 벤치마크를 실행하는 동안 cat /sys/kernel/gfs2/unity:myfs/glocks >my.lock
명령으로 생성된 일련의 발췌 (18MB 파일에서)입니다. 그림의 glocks는 glock dumps의 더 흥미로운 기능을 표시하기 위해 선택되었습니다.
glock 상태는 EX (exclusive), DF (deferred), SH (shared) 또는 UN (unlocked)입니다. 이러한 상태는 DLM null 잠금 상태를 나타내는 UN을 제외하고 DLM 잠금 모드와 직접 대응하거나, GFS2가 DLM 잠금을 유지하지 않습니다(위에 설명된 대로 I 플래그에 따라 다름). glock의 s: 필드는 잠금의 현재 상태를 나타내고 홀더의 동일한 필드는 요청된 모드를 나타냅니다. 잠금이 부여된 경우 홀더는 H 비트가 플래그 (f: 필드)에 설정됩니다. 그렇지 않으면 W wait 비트가 설정됩니다.
n: 필드(number)는 각 항목과 관련된 번호를 나타냅니다. glocks의 경우, 즉 유형 번호이며 위의 예에서 첫 번째 glock은 n:5/7532mtls이며, inode 75320과 관련된 iopen
glock을 나타냅니다. inode와 iopen
glocks의 경우 glock 번호는 항상 inode의 디스크 블록 번호와 동일합니다.
debugfs glocks 파일의 glock 번호(n: 필드)는 16진수에 있는 반면 tracepoints 출력은 10진수로 나열됩니다. 이것은 과거의 이유 때문입니다. glock 번호는 항상 16진수로 작성되었지만 추적점에 대해 10진수가 선택되었으므로 다른 추적 포인트 출력(예: blktrace
부터)과 stat
(1)의 출력과 비교될 수 있습니다.
소유자와 glock 모두에 대한 모든 플래그의 전체 목록은 아래의 "Glock Flags" 테이블 및 Glock 보유자 의 "Glock Holder 플래그" 테이블에 설정됩니다. 잠금 값 블록의 내용은 현재 glock debugfs
인터페이스를 통해 사용할 수 없습니다. 다음 표에서는 다른 glock 유형의 의미를 보여줍니다.
유형 번호 | 잠금 유형 | 사용 |
---|---|---|
1 | trans | 트랜잭션 잠금 |
2 | inode | inode 메타데이터 및 데이터 |
3 | rgrp | 리소스 그룹 메타데이터 |
4 | meta | 수퍼 블록 |
5 | iopen | inode 마지막 더 가까운 탐지 |
6 | flock |
|
8 | 할당량 | 할당량 작업 |
9 | journal | 비트랜스커뮤니스 |
가장 중요한 glock 플래그 중 하나는 l (locked) 플래그입니다. 이는 상태 변경을 수행해야 할 때 glock 상태에 대한 액세스를 중재하는 데 사용되는 비트 잠금입니다. 상태 시스템이 DLM을 통해 원격 잠금 요청을 보내려는 경우 설정되고 전체 작업이 수행된 경우에만 삭제됩니다. 경우에 따라 여러 번 발생하는 다양한 무효화로 두 개 이상의 잠금 요청이 전송됨을 의미할 수 있습니다.
다음 표는 다른 glock 플래그의 의미를 보여줍니다.
플래그 | 이름 | meaning |
---|---|---|
d | 보류 중인 데모 | Deploying (remote) demote 요청 |
D | 데모 | 데모 요청(로컬 또는 원격) |
f | 로그 플러시 | 이 glock을 해제하기 전에 로그를 커밋해야합니다. |
F | 설정되지 않았습니다. | 원격 노드의 응답 무시 - 복구가 진행 중입니다. |
i | 진행 중 검증 | 이 glock 아래의 페이지를 무효화하는 과정에서 |
I | 초기 | DLM 잠금이 이 glock과 연결될 때 설정 |
l | 잠긴 | glock이 상태를 변경하는 중입니다. |
L | LRU | LRU 목록에 glock이 있을 때 설정 |
o | 개체 | glock이 오브젝트와 연결될 때 설정(즉, 유형 2 glock의 inode, 유형 3 glock의 리소스 그룹) |
p | 진행 중인 데모 | glock은 데모 요청에 응답하는 중입니다. |
q | Queue | 홀더가 glock에 대기 중일 때 설정된 후 glock이 유지될 때 지워지지만 남아 있는 홀더는 없습니다. 알고리즘의 일부로 사용되는 경우 glock의 최소 대기 시간을 계산합니다. |
r | 응답 보류 | 원격 노드에서 수신한 응답 처리 대기 |
y | 더티 | 이 잠금을 해제하기 전에 데이터가 디스크로 플러시해야 합니다. |
로컬 노드에서 보유 중인 것과 충돌하는 모드에서 잠금을 가져오려는 노드에서 원격 콜백을 수신하면 두 플래그 D(demote) 또는 d(demote pending) 중 하나 또는 기타와 충돌합니다. 특정 잠금에 경합이 있을 때 배지 상태를 방지하기 위해 각 잠금에는 최소 대기 시간이 할당됩니다. 최소 보류 시간에 대한 잠금이 없는 노드는 간격이 만료될 때까지 해당 잠금을 유지할 수 있습니다.
시간 간격이 만료된 경우 D(demote) 플래그가 설정되고 필요한 상태가 기록됩니다. 이 경우 다음에 홀더 큐에 잠금이 부여되지 않으면 잠금이 차단됩니다. 시간 간격이 만료되지 않은 경우 d(demote pending) 플래그가 대신 설정됩니다. 또한 최소 대기 시간이 만료되면 d(데류 중 보류 중)를 지우도록 상태 시스템을 예약하고 D(demote)를 설정합니다.
glock에 DLM 잠금이 할당되면 I(initial) 플래그가 설정됩니다. 이는 glock이 처음 사용되고, I 플래그는 glock이 최종적으로 해제될 때까지( DLM 잠금을 잠금 해제) 때까지 설정된 상태로 유지됩니다.