Điểm:1

Kerberized NFS4 mất 5 giây để mở tệp

lá cờ fr

Tôi thiết lập máy chủ NFSv4 và máy khách đều chạy Debian 11.3 trên Linux 5.10.0-13. Về cơ bản, nó hoạt động tức là tôi thấy tất cả các tệp có quyền chính xác và có thể mở, sửa đổi, v.v. Tuy nhiên, việc mở tệp gây ra độ trễ 5 giây.

Máy chủ xuất các thư mục như thế này trong /etc/exports:

/path/to gss/krb5(rw,sync,fsid=0,crossmnt,no_subtree_check)
/path/to/NFS gss/krb5(rw,sync,no_subtree_check)

Xuất NFS4 được gắn bằng cách sử dụng loại này /etc/fstab lối vào:

máy chủ:/NFS /path/to/nfs nfs4 defaults,auto,sec=krb5,proto=tcp,port=2049,nolock 0 3

Dữ liệu sau đề cập đến việc mở một tệp trong emac và đóng lại emac ngay sau khi nó được hiển thị.

phân tích bước đi Tôi thấy rằng tương ứng mở () syscall mất 5,1 giây khá ổn định! Khác openat(), stat(), ... các tòa nhà chọc trời liên quan đến NFS thực thi trong vòng micro giây. Đây là những gì tôi thấy nhất quán khi thực hiện, ví dụ: ls, không cảm thấy khác với hệ thống tệp cục bộ. Đây là đoạn trích của cuộc gọi tòa nhà liên quan đến tệp được đề cập trước thời gian dành cho cuộc gọi tòa nhà:

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 (Đối số 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 (Đối số 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 (Datei oder 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 ghi(14, "/path/to/nfs/file"..., 90) = 90 

Trong Wireshark tôi thấy như sau:

STT Thời gian Nguồn đích Giao thức Chiều dài Thông tin
7 0.623097 client.ip server.ip Cuộc gọi NFS 276 V4 (Trả lời bằng 8) GETATTR FH: 0xecf8d891
8 0.624231 server.ip client.ip NFS 376 V4 Trả lời (Gọi trong 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 Cuộc gọi NFS 344 V4 (Trả lời trong 11) MỞ DH: 0xecf8d891/
11 0.625669 server.ip client.ip NFS 452 V4 Reply (Call In 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 Cuộc gọi NFS 340 V4 (Trả lời trong 14) ĐÓNG StateID: 0xb42f
14 5.743331 server.ip client.ip NFS 232 V4 Trả lời (Gọi vào 13) TRÌNH TỰ | Trạng thái PUTFH: NFS4ERR_STALE
15 5.743359 client.ip server.ip TCP 72 951 â 2049 [ACK] Seq=1141 Ack=1457 Win=4176 Len=0 TSval=1071249523 TSecr=3950568029

Tôi không biết liệu điều này NFS4ERR_STALE điều kiện là một gợi ý cho vấn đề. Theo RFC7530, nó chỉ ra rằng đối tượng hệ thống tệp đã bị xóa. Vâng, các tập tin trong bị trì hoãn mở () chắc chắn là không bị xóa. Vì vậy, tôi không chắc nó đề cập đến cái gì. Tuy nhiên, nó cũng cho thấy độ trễ 5,1 giây trong khoảng từ 12 đến 13.

Tôi phải thừa nhận rằng tôi không hoàn toàn hiểu những gì tôi thấy ở đây. Tuy nhiên, tôi cũng thấy tình trạng chậm trễ tương tự với các chương trình khác, tức là, đây không phải là điều khó hiểu. emac. Tiết kiệm trong thư viện thậm chí có thể đóng băng cho đến khi tệp được truy cập bởi một chương trình khác.

Vì tôi đã thấy ở đâu đó có vấn đề với krb5p trong một số môi trường, tôi giảm xuống krb5, nhưng điều này không thay đổi bất cứ điều gì.

Cả máy khách và máy chủ đều chạy gsproxy. Trên máy khách, tôi thấy các mục gỡ lỗi của nfsidmapvà sau khi thiết lập sysctl sunrpc.rpc_debug=0xFFFF Tôi thấy những điều sau đây cho emac kịch bản:

[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

Tôi không biết làm thế nào để giải thích chính xác nhật ký này, nhưng nó cũng hiển thị rõ ràng độ trễ 5 giây và đối với tôi, có vẻ như tất cả các lệnh gọi RPC đều được xử lý trong vòng 100 mili giây.

Bất kỳ ý tưởng những gì đang xảy ra, hoặc ít nhất là làm thế nào để tiếp tục giải quyết vấn đề?

user1686 avatar
lá cờ fr
Rpc.gssd của khách hàng có ghi nhật ký gì trong chế độ gỡ lỗi không? Gssproxy của máy chủ (hoặc rpc.svcgssd, tùy theo Debian 11 sử dụng) có ghi nhật ký gì không? Nếu bạn chạy `sysctl sunrpc.rpc_debug=0xFFFF` trên máy khách, hạt nhân có bắt đầu ghi bất kỳ thứ gì vào dmesg không? Tệp xuất của bạn đang sử dụng cú pháp lỗi thời; `*(sec=krb5:krb5i:krb5p,rw)` là cách viết bình thường.
lá cờ fr
Cảm ơn @user1686 vì sự giúp đỡ của bạn. Tôi chưa viết lại cú pháp xuất của máy chủ. Tuy nhiên, từ thông tin gỡ lỗi RPC, tôi nghi ngờ có sự cố phía máy khách và tôi không biết đây là sự cố gì.
user1686 avatar
lá cờ fr
Máy khách có chạy rpc.gssd không? gssproxy chỉ thay thế rpc.svcgssd phía máy chủ, nhưng không thay thế hoàn toàn rpc.gssd trên máy khách.
lá cờ fr
Có, máy khách chạy rpc.gssd.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.