2010-04-26 35 views
9

Tôi có một hệ thống Linux nhúng chạy trên bo mạch Atmel AT91SAM9260EK mà tôi có hai quy trình chạy ở mức ưu tiên thời gian thực. Một quy trình quản lý định kỳ "ping" một quy trình công nhân sử dụng hàng đợi thông điệp POSIX để kiểm tra sức khỏe của quy trình công nhân. Thông thường, vòng lặp ping mất khoảng 1ms, nhưng đôi khi phải mất nhiều thời gian hơn - khoảng 800ms. Không có quy trình nào khác chạy ở mức ưu tiên cao hơn.Tìm các vấn đề về độ trễ (các quầy hàng) trong các hệ thống Linux nhúng

Dường như gian hàng có thể liên quan đến ghi nhật ký (syslog). Nếu tôi ngừng đăng nhập thì vấn đề dường như biến mất. Tuy nhiên nó không tạo ra sự khác biệt nếu tệp nhật ký nằm trên JFFS2 hoặc NFS. Không có quá trình nào khác đang ghi vào "đĩa" - chỉ cần syslog.

Công cụ nào có sẵn cho tôi để giúp tôi theo dõi lý do tại sao các quầy hàng này đang xảy ra? Tôi biết về độ trễ và sẽ sử dụng nó. Có một số công cụ khác có thể hữu ích hơn không?

Một số chi tiết:

  • Kernel phiên bản: 2.6.32.8
  • libc (chức năng syslog): uClibc 0.9.30.1
  • syslog: busybox 1.15.2
  • Không gian hoán đổi cấu hình [thêm chỉnh sửa]
  • hệ thống tệp gốc nằm trên tmpfs (được tải từ initramfs) [được chỉnh sửa]
+0

LTTng là một tùy chọn ngay bây giờ, như được giải thích tại đây: http://lttng.org/blog/2015/02/04/web-request-latency-root-cause/ – camh

Trả lời

2

Vấn đề là (như bạn đã nói) syslogd. Trong khi quá trình của bạn đang chạy ở mức độ ưu tiên RT, syslogd là không phải là. Ngoài ra, syslogd không khóa heap của nó và có thể (và sẽ) được phân trang bởi kernel, đặc biệt là với rất ít 'khách hàng'.

gì bạn có thể thử là:

  • Bắt đầu một thread để quản lý một hàng đợi ưu tiên, có mà chủ đề nói chuyện với syslog. Đăng nhập sau đó sẽ chỉ cần có được một khóa và chèn một cái gì đó vào một danh sách. Chỉ với hai người đăng ký, bạn không nên dành nhiều thời gian để mua mutex.

  • Không sử dụng nhật ký hệ thống, thực hiện ghi nhật ký của riêng bạn (về cơ bản là đề xuất đầu tiên, trừ nói chuyện với syslog).

Tôi gặp sự cố tương tự và nỗ lực đầu tiên của tôi để khắc phục sự cố là sửa đổi chính syslogd để khóa đống của nó. Đó là một thảm họa. Sau đó tôi đã thử rsyslogd, cải thiện một số nhưng tôi vẫn có các đỉnh độ trễ ngẫu nhiên. Tôi đã kết thúc việc thực hiện đăng nhập của riêng mình bằng cách sử dụng hàng đợi ưu tiên để giúp đảm bảo rằng các thư quan trọng hơn đã được viết trước tiên.

Lưu ý, nếu bạn không sử dụng hoán đổi (ở tất cả), đường dẫn ngắn nhất để sửa lỗi này có thể là việc triển khai ghi nhật ký của riêng bạn.

+0

Không sử dụng trao đổi. Hơn nữa, rootfs là một tmpfs (initramfs) để văn bản chương trình (busybox) sẽ được phân trang từ ram. – camh

+0

@camh - Tôi ghét không đưa ra nhiều đề xuất hơn để giải quyết vấn đề của bạn trong tầm tay, nhưng trong thời gian cần thiết để điều tra điều này, bạn có thể đã triển khai ghi nhật ký của riêng mình. –

+0

Tôi không nghĩ rằng vấn đề là với syslog chính nó, nhưng một nơi nào đó trong hạt nhân.Busybox syslog là khá đơn giản, và reimplementing mà sẽ không thay đổi quá nhiều, vì tôi cần khả năng thu thập các bản ghi từ nhiều ứng dụng vào một bản ghi xoay duy nhất (dựa trên kích thước). Bên cạnh đó, tôi phải biết tại sao điều này là trì hoãn. Tôi không thể có nó trở lại trong lĩnh vực này. Cảm ơn câu trả lời của bạn. – camh

Các vấn đề liên quan