Score:1

Kerberized NFS4 ใช้เวลา 5 วินาทีในการเปิดไฟล์

ธง fr

ฉันตั้งค่าเซิร์ฟเวอร์ 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 มิลลิวินาที

ความคิดใด ๆ ที่เกิดขึ้นหรืออย่างน้อยก็จะระบุประเด็นต่อไปได้อย่างไร

user1686 avatar
fr flag
rpc.gssd ของไคลเอ็นต์กำลังบันทึกอะไรในโหมดดีบักหรือไม่ gssproxy ของเซิร์ฟเวอร์ (หรือ rpc.svcgssd แล้วแต่ว่า Debian 11 จะใช้แบบใด) บันทึกอะไรหรือไม่ หากคุณเรียกใช้ `sysctl sunrpc.rpc_debug=0xFFFF` บนไคลเอนต์ เคอร์เนลจะเริ่มบันทึกอะไรไปยัง dmesg หรือไม่ ไฟล์ส่งออกของคุณใช้ไวยากรณ์ที่ล้าสมัย `*(sec=krb5:krb5i:krb5p,rw)` เป็นวิธีเขียนปกติ
fr flag
ขอบคุณ @user1686 สำหรับความช่วยเหลือของคุณ ฉันยังไม่ได้เขียนไวยากรณ์การส่งออกของเซิร์ฟเวอร์ใหม่ อย่างไรก็ตาม จากข้อมูลการแก้ไขจุดบกพร่องของ RPC ฉันสงสัยว่าเป็นปัญหาฝั่งไคลเอ็นต์ และฉันไม่รู้ว่าสิ่งนี้ควรเป็นอย่างไร
user1686 avatar
fr flag
ลูกค้าเรียกใช้ rpc.gssd หรือไม่ gssproxy จะแทนที่ rpc.svcgssd ฝั่งเซิร์ฟเวอร์เท่านั้น แต่ไม่ได้แทนที่ rpc.gssd ในไคลเอ็นต์ทั้งหมด
fr flag
ใช่ ไคลเอ็นต์เรียกใช้ rpc.gssd

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา