ฉันตั้งค่าเซิร์ฟเวอร์ NFSv4 และไคลเอนต์ทั้งที่ใช้ Debian 11.3 บน Linux 5.10.0-13 มันใช้งานได้โดยทั่วไป กล่าวคือ ฉันเห็นไฟล์ทั้งหมดที่มีสิทธิ์ที่ถูกต้อง และสามารถเปิด แก้ไข ฯลฯ อย่างไรก็ตาม การเปิดไฟล์ทำให้เกิดความล่าช้า 5 วินาที
เซิร์ฟเวอร์ส่งออกไดเร็กทอรีเช่นนี้ใน /etc/export
:
/path/to gss/krb5(rw,sync,fsid=0,crossmnt,no_subtree_check)
/path/to/NFS gss/krb5(rw,ซิงค์,no_subtree_check)
การเอ็กซ์พอร์ต NFS4 ถูกเมาต์โดยใช้ชนิดนี้ /etc/fstab
รายการ:
เซิร์ฟเวอร์:/NFS /path/to/nfs nfs4 ค่าเริ่มต้น,อัตโนมัติ,วินาที=krb5,proto=tcp,พอร์ต=2049,nolock 0 3
ข้อมูลต่อไปนี้หมายถึงการเปิดไฟล์ใน อีแมค
และปิด อีแมค
ทันทีที่มีการแสดง
กำลังวิเคราะห์ สเตรส
ฉันเห็นว่าสอดคล้องกัน เปิด ()
syscall ใช้เวลาค่อนข้างเสถียร 5.1 วินาที! อื่น เปิด (), สถิติ (), ...
syscalls ที่เกี่ยวข้องกับ NFS ดำเนินการภายในไมโครวินาที นี่คือสิ่งที่ฉันเห็นอย่างสม่ำเสมอเมื่อทำเช่น ล
ซึ่งไม่รู้สึกแตกต่างจากระบบไฟล์ในเครื่อง นี่คือข้อความที่ตัดตอนมาจาก syscall ที่เกี่ยวข้องกับไฟล์ที่เป็นปัญหา ซึ่งต่อท้ายด้วยเวลาที่ใช้ใน syscall:
0.000014 openat(AT_FDCWD, "/path/to/nfs/file", O_RDONLY|O_CLOEXEC|O_PATH|O_DIRECTORY) = -1 ENOTDIR (Ist kein Verzeichnis)
0.000005 readlinkat(AT_FDCWD, "/path/to/nfs/file", 0x7fff202f6880, 1024) = -1 EINVAL (อาร์กิวเมนต์ Das ist ungültig)
0.000006 openat(AT_FDCWD, "/path/to/nfs/file", O_RDONLY|O_NOFOLLOW|O_CLOEXEC|O_PATH) = 14
0.000005 readlinkat(AT_FDCWD, "/path/to/nfs/file", 0x7fff202f64d0, 1024) = -1 EINVAL (อาร์กิวเมนต์ Das ist ungültig)
0.000005 openat(AT_FDCWD, "/path/to/nfs/file", O_RDONLY|O_NOFOLLOW|O_CLOEXEC|O_PATH) = 14
5.108682 openat(AT_FDCWD, "/path/to/nfs/file", O_RDONLY|O_CLOEXEC) = 14
0.000006 faccessat(AT_FDCWD, "/path/to/nfs/file", W_OK) = 0
0.000005 stat("/path/to/nfs/file", {st_mode=S_IFREG|0640, st_size=2192, ...}) = 0
0.000007 faccessat(AT_FDCWD, "/path/to/nfs/file,v", F_OK) = -1 ENOENT (วันที่อื่น Verzeichnis nicht gefunden)
0.000009 openat(AT_FDCWD, "/path/to/nfs/file", O_RDONLY|O_CLOEXEC|O_PATH|O_DIRECTORY) = -1 ENOTDIR (Ist kein Verzeichnis)
0.000008 openat(AT_FDCWD, "/path/to/nfs/file", O_RDONLY|O_CLOEXEC|O_PATH|O_DIRECTORY) = -1 ENOTDIR (Ist kein Verzeichnis)
0.000008 openat(AT_FDCWD, "/path/to/nfs/file", O_RDONLY|O_CLOEXEC|O_PATH|O_DIRECTORY) = -1 ENOTDIR (Ist kein Verzeichnis)
0.000008 openat(AT_FDCWD, "/path/to/nfs/file", O_RDONLY|O_CLOEXEC|O_PATH|O_DIRECTORY) = -1 ENOTDIR (Ist kein Verzeichnis)
0.000008 openat(AT_FDCWD, "/path/to/nfs/file", O_RDONLY|O_CLOEXEC|O_PATH|O_DIRECTORY) = -1 ENOTDIR (Ist kein Verzeichnis)
0.000012 stat("/path/to/nfs/file", {st_mode=S_IFREG|0640, st_size=2192, ...}) = 0
0.000015 เขียน(14, "/path/to/nfs/file"..., 90) = 90
ใน wireshark ฉันเห็นสิ่งต่อไปนี้:
ไม่ ข้อมูลความยาวโพรโทคอลปลายทาง แหล่งเวลา
7 0.623097 client.ip server.ip NFS 276 V4 โทร (ตอบกลับใน 8) GETATTR FH: 0xecf8d891
8 0.624231 server.ip client.ip NFS 376 V4 ตอบกลับ (โทรเข้า 7) GETATTR
9 0.624239 client.ip server.ip TCP 72 951 â 2049 [ACK] Seq=601 Ack=917 Win=4176 Len=0 TSval=1071244404 TSecr=3950562910
10 0.624696 client.ip server.ip NFS 344 V4 โทร (ตอบกลับใน 11) เปิด DH: 0xecf8d891/
11 0.625669 server.ip client.ip NFS 452 V4 ตอบกลับ (โทรเข้า 10) OPEN StateID: 0xb42f
12 0.625693 client.ip server.ip TCP 72 951 â 2049 [ACK] Seq=873 Ack=1297 Win=4176 Len=0 TSval=1071244405 TSecr=3950562911
13 5.742166 client.ip server.ip NFS 340 V4 โทร (ตอบกลับใน 14) ปิด StateID: 0xb42f
14 5.743331 server.ip client.ip NFS 232 V4 ตอบกลับ (โทรเข้า 13) ลำดับ | สถานะ PUTFH: NFS4ERR_SALE
15 5.743359 client.ip server.ip TCP 72 951 â 2049 [ACK] Seq=1141 Ack=1457 Win=4176 Len=0 TSval=1071249523 TSecr=3950568029
ฉันไม่รู้ว่าสิ่งนี้ NFS4ERR_STALE
เงื่อนไขเป็นคำแนะนำสำหรับปัญหา ตาม RFC7530 ระบุว่าวัตถุระบบไฟล์ถูกลบออก ดีไฟล์ในล่าช้า เปิด ()
ไม่ลบแน่นอน เลยไม่แน่ใจว่าหมายถึงอะไร อย่างไรก็ตาม มันยังแสดงความล่าช้า 5.1 วินาทีระหว่าง 12 และ 13
ฉันต้องยอมรับว่าฉันไม่ค่อยเข้าใจสิ่งที่ฉันเห็นที่นี่ อย่างไรก็ตาม ฉันเห็นความล่าช้าแบบเดียวกันกับโปรแกรมอื่นๆ เช่นกัน กล่าวคือ นี่ไม่ใช่สิ่งที่แปลก อีแมค
. ประหยัดเข้า libreoffice
สามารถตรึงได้จนกว่าโปรแกรมอื่นจะเข้าถึงไฟล์ได้
เนื่องจากฉันเคยเห็นที่ไหนสักแห่งที่มีปัญหาเกี่ยวกับ krb5p
ในบางสภาพแวดล้อม ฉันลดเหลือ krb5
แต่สิ่งนี้ไม่ได้เปลี่ยนแปลงอะไรเลย
ทำงานทั้งไคลเอ็นต์และเซิร์ฟเวอร์ gssproxy
. บนไคลเอ็นต์ ฉันเห็นรายการการดีบักของ nfsidmap
และหลังจากตั้งค่าแล้ว sysctl sunrpc.rpc_debug=0xFFFF
ฉันเห็นสิ่งต่อไปนี้สำหรับ อีแมค
สถานการณ์:
[423544.865600] RPC: gss_get_mic_v2
[423544.865628] RPC: xs_tcp_send_request(200) = 0
[423544.867049] RPC: xs_data_ready...
[423544.867309] RPC: gss_verify_mic_v2
[423545.373665] RPC: gss_get_mic_v2
[423545.373691] RPC: xs_tcp_send_request(200) = 0
[423545.374692] RPC: xs_data_ready...
[423545.374748] RPC: gss_verify_mic_v2
[423545.375009] RPC: gss_get_mic_v2
[423545.375025] RPC: xs_tcp_send_request(268) = 0
[423545.375909] RPC: xs_data_ready...
[423545.375957] RPC: gss_verify_mic_v2
[423550.467227] RPC: gss_get_mic_v2
[423550.467307] RPC: xs_tcp_send_request(216) = 0
[423550.468395] RPC: xs_data_ready...
[423550.468513] RPC: gss_verify_mic_v2
[423550.468621] RPC: gss_get_mic_v2
[423550.468646] RPC: gss_get_mic_v2
[423550.468689] RPC: xs_tcp_send_request(264) = 0
[423550.469403] RPC: xs_data_ready...
[423550.469541] RPC: gss_verify_mic_v2
[423550.469564] RPC: gss_verify_mic_v2
[423550.472794] RPC: gss_get_mic_v2
[423550.472849] RPC: xs_tcp_send_request(208) = 0
[423550.473758] RPC: xs_data_ready...
[423550.473903] RPC: gss_verify_mic_v2
[423550.474234] RPC: gss_get_mic_v2
[423550.474290] RPC: xs_tcp_send_request(200) = 0
[423550.475147] RPC: xs_data_ready...
[423550.475257] RPC: gss_verify_mic_v2
ฉันไม่รู้ว่าจะตีความบันทึกนี้อย่างไร แต่มันยังแสดงการหน่วงเวลา 5 วินาทีอย่างชัดเจน และสำหรับฉันแล้ว ดูเหมือนว่าการโทร RPC ทั้งหมดจะได้รับการประมวลผลภายใน 100 มิลลิวินาที
ความคิดใด ๆ ที่เกิดขึ้นหรืออย่างน้อยก็จะระบุประเด็นต่อไปได้อย่างไร