Các cuộc gọi để đồng bộ hóa / fsync chậm lại sau 30 phút thời gian hoạt động


7

Sau 30 phút thời gian hoạt động bằng Ubuntu 14.04 với ổ SSD lai, tôi thấy nhiều quy trình chặn IO sử dụng iotop. Đây là trong quá trình ghi đĩa, ví dụ nếu tôi mở và đóng một tệp trống trong gedit, có thể mất 2 giây để đóng do cài đặt ghi dcs, điều này ảnh hưởng đến các ứng dụng khác theo cách tương tự; làm chậm toàn bộ hệ thống xuống khá nghiêm trọng.

Sử dụng strace tôi đã quản lý để theo dõi điều này trở lại cuộc gọi fsync và từ đó quản lý để tái tạo nó bằng lệnh đồng bộ hóa.

Vì vậy, để tóm tắt lại, chỉ cần chạy syncliên tục từ thiết bị đầu cuối có thể mất theo thứ tự 1 - 2 giây nhưng CHỈ sau 30 phút thời gian hoạt động.

Để chứng minh điều này, tôi đã tạo một tập lệnh tạo ra thời gian hoạt động tính bằng giây so với thời gian thực hiện để đồng bộ hóa và chạy nó mỗi giây:

while true;
do
cat /proc/uptime | awk '{printf "%f ",$1}'; /usr/bin/time -f '%e' sync;
sleep 1;
done;

Tôi đã chạy đoạn script trên, đợi khoảng một giờ (hệ thống không hoạt động) và sau đó vẽ kết quả trong gnuplot (y = thời gian tính bằng giây để thực hiện đồng bộ hóa, x = thời gian hoạt động tính bằng giây):

thời gian đồng bộ hóa âm mưu với thời gian hoạt động

Thời điểm mà đồ thị tăng đột biến vào khoảng 1780 (1780/60 = khoảng 30 phút).

Không có gì nên ghi vào đĩa tại thời điểm này ngoài tập lệnh, do đó, không có gì bên trong bộ đệm trang sau khi đồng bộ hóa đầu tiên, mỗi lần đồng bộ hóa tiếp theo sẽ ghi chính xác những gì được ghi vào tập lệnh sẽ có khoảng 100 byte hoặc vì thế.

Vấn đề này vẫn tồn tại sau khi khởi động lại; ví dụ: nếu tôi đợi 30 phút cho quá trình chậm lại thì khởi động lại, sự chậm lại vẫn sẽ ở đó. Nếu tôi tắt nguồn thì khởi động lại vấn đề sẽ biến mất cho đến 30 phút sau.

Một sự tò mò khác là khi tôi kiểm tra biểu đồ trên và phóng to một khu vực xảy ra sự chậm lại, tôi đã nhận được điều này:

đồng bộ hóa thời gian âm mưu với thời gian hoạt động, phóng to

Các đỉnh và đáy lặp lại - điều này xảy ra gần như chính xác cứ sau 10 giây từ máng đến máng và cũng là các kẽ đỉnh khi nó rơi xuống.

Tôi cũng đã chạy thử nghiệm hdparm ( hdparm -t /dev/sdahdparm -T /dev/sda) trước khi chậm lại:

/dev/sda:
Timing cached reads:   23778 MB in  2.00 seconds = 11900.64 MB/sec
/dev/sda:
Timing buffered disk reads: 318 MB in  3.01 seconds = 105.63 MB/sec

và trong thời gian chậm lại:

/dev/sda:
 Timing cached reads:     2 MB in  2.24 seconds = 915.50 kB/sec
/dev/sda:
Timing buffered disk reads: 300 MB in  3.01 seconds =  99.54 MB/sec

Hiển thị rằng các lần đọc đĩa thực tế không bị ảnh hưởng nhưng các lần đọc được lưu trong bộ nhớ cache, điều đó có nghĩa là điều này có liên quan đến bus hệ thống chứ không phải HD?

Đây là những giải pháp tôi đã thử:

  • Thay đổi cài đặt spindown của HD, có thể HD sẽ chuyển sang chế độ tiết kiệm năng lượng:

    hdparm /dev/sda -S252 #(set it to 5 hours before spindown)
    
  • Thay đổi loại nhật ký của hệ thống tập tin thành văn bản thay vì ra lệnh để chúng tôi có được cải tiến hiệu suất - điều này không giải quyết được vấn đề mặc dù nó không giải thích được thời gian hoạt động chậm 30 phút.

  • CRON bị vô hiệu hóa vì dường như xảy ra sau 30 phút.

  • Việc sử dụng CPU vẫn ổn và hoàn toàn không hoạt động nên không có quy trình nào có thể bị đổ lỗi tuy nhiên tôi đã thử tắt mọi dịch vụ kể cả trình quản lý phiên (lightdm), điều này không có gì vì tôi tin rằng vấn đề ở mức thấp hơn.

  • Phân tích bất kỳ quy trình mới nào diễn ra sau 30 phút cho thấy không có thay đổi - Tôi đã làm giảm sản lượng của PS trước và sau và không có sự khác biệt.

Điều này chỉ bắt đầu xảy ra khoảng 2 tuần trước, không có gì được cài đặt và không có bản cập nhật nào được thực hiện trong khoảng thời gian đó. Tôi nghĩ vấn đề này ở mức độ thấp hơn nhiều nên thực sự sẽ đánh giá cao một số trợ giúp ở đây vì tôi không biết gì, thậm chí chỉ cho tôi đi đúng hướng sẽ hữu ích - ví dụ có cách nào để kiểm tra xem cái gì bị xóa khỏi bộ đệm trang?

Ghi bộ nhớ đệm được bật trên đĩa đang đề cập, tôi cũng đã thử vô hiệu hóa các rào cản ghi. Dữ liệu SMART trên HD cho thấy không có vấn đề gì với bản thân HD tuy nhiên tôi có nghi ngờ rằng đó là HD làm điều gì đó bí ẩn khi nó vẫn tồn tại sau khi khởi động lại.

BIÊN TẬP:

Tôi đã thực hiện :

watch -n 1 cat /proc/meminfo

... Để xem bộ nhớ thay đổi như thế nào, đặc biệt là nhìn vào hàng bẩn và hàng ghi lại mà tôi tin là bộ đệm đĩa HD. Tất cả đều ở mức 0 cho phần lớn nhất có lẽ là 300kb. Đồng bộ hóa cuộc gọi sẽ loại bỏ những điều này như mong đợi trở về 0 nhưng trong quá trình đồng bộ hóa cuộc gọi chậm lại khi không có trang bẩn và zero kb trong bộ đệm đĩa vẫn khóa IO. Những gì khác có thể đồng bộ hóa đang làm nếu không có gì để xóa bộ đệm trang và ghi bộ đệm?


Những hệ thống tập tin bạn đang sử dụng?
peterph

ext4, mục nhập trong fstab: / dev / mapper / ubfox-root / ext4 error = remount-ro 0 1
alex.p

Bạn có thể thử khởi động ấm sau 15 phút thời gian hoạt động. Hoặc giữ hệ thống ở màn hình khởi động trong 15 phút hoặc tạm dừng giữa khởi động, quay đĩa, trước khi hoàn thành khởi động. Nếu mũi nhọn tiếp theo là sau 15 phút nữa, thì đó là đĩa cứng. Nếu sau 30 phút kể từ khi hoàn thành khởi động, đó là một thứ gì đó trong HĐH ( chặn một số bộ đếm thời gian đĩa ma thuật khởi động lạ trên phần HĐH ).
LSerni

Cảm ơn các đề xuất, ổ đĩa đã được mã hóa và tôi đã khởi động đến điểm mà ổ đĩa được gắn dưới dạng một thiết bị được mã hóa và để nó ở dấu nhắc mật khẩu, sau đó khởi động sau 15 phút. Tôi nghĩ rằng điều này sẽ có tác dụng tương tự như bạn đã đề xuất và nó chỉ cần 15 phút để có hiệu ứng tương tự sau khi cài đặt nên tôi đồng ý với bạn về vấn đề HD có thể xảy ra mặc dù tôi cho rằng một phần của kernel vẫn còn sống ở thời điểm đó
alex.p

2
@KjetilJorgensen bạn đã giải quyết nó! Hoặc ít nhất là hướng tôi đến câu trả lời. Vấn đề có vẻ là do dữ liệu SMART được kích hoạt cho HD, tắt nó đi sudo smartctl --smart=off /dev/sdakhiến vấn đề không còn nữa. Điều thú vị là tôi đã bật lại dữ liệu SMART và vấn đề không còn tồn tại nên tôi chỉ có thể đoán rằng dữ liệu SMART ở trạng thái không nhất quán và tắt và bật lại. Nếu bạn thêm nó dưới dạng câu trả lời tôi sẽ chấp nhận câu trả lời của bạn. Cảm ơn sự giúp đỡ rất nhiều đánh giá cao.
alex.p

Câu trả lời:


3

Các triệu chứng rất phù hợp với hệ thống IO bão hòa, tuy nhiên phần lớn đã loại trừ tải IO từ phía hệ điều hành / không gian người dùng, một khả năng khác là ổ đĩa tự chạy, có thể bao gồm cả việc đọc từ tất cả các lĩnh vực. Điều này nên có thể truy vấn / điều chỉnh từ smartctl (Ít nhất một nơi là smartctl -c để truy vấn).

Về lý do tại sao nó đến và đi và bắt đầu đột ngột bây giờ:

  • Ổ đĩa đã vượt qua một giai đoạn nhất định trong vòng đời của nó (số lượng các lĩnh vực được viết, thời gian tăng lên, v.v.) và phần sụn trên ổ đĩa đã kích hoạt một trong những lần quét này
  • Tôi tin rằng điều này cũng có thể được kích hoạt thông qua smartctl, vì vậy có thể một số quy trình tự động đã kích hoạt nó
  • Có một trong những lần quét này được kích hoạt và gắn cờ khi đang trong quá trình hoặc bắt đầu, khi ổ đĩa đã sử dụng một khoảng thời gian nhất định, nó sẽ được kích hoạt lại từ đầu hoặc để tiếp tục khi nó dừng lại
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.