Làm cách nào để cải thiện thời gian khởi động cho Raspberry Pi?


27

Tôi đang tạo một ứng dụng từ xa có thể nhúng mà sẽ không được bật vĩnh viễn. Tôi đã chơi xung quanh với các bản phân phối HĐH khác nhau và có thể giảm thời gian khởi động đáng kể bằng cách sử dụng thẻ SD tốt hơn với tốc độ đọc nhanh hơn. Tôi không cố định với bất kỳ phân phối cụ thể nào, vì vậy tôi có thể loại bỏ càng nhiều càng cần thiết để sử dụng phân phối Linux tối thiểu.

(Tôi đã cố gắng tìm kiếm điểm chuẩn mà mọi người đã chạy để cải thiện thời gian khởi động, nhưng tôi không tìm thấy bất cứ thứ gì có số liệu cứng.)

Tôi cũng có thể sử dụng bản dựng gốc (xem thêm video YouTube Raspberry Pi - Thời gian khởi động siêu nhanh - Hệ thống giải trí Marshmallow ) ...


Bạn nên bỏ phiếu để đóng câu hỏi này. Sau đó, người dùng sẽ được chuyển hướng đến câu hỏi ban đầu và thêm câu trả lời. Vì vậy, người ta chưa được đánh dấu là đã trả lời.
Piotr Kula

Tôi chỉ nghĩ rằng cái này có nhiều hoạt động (lượt xem rõ ràng không cao, đơn giản là vì cái này ít hơn một ngày), nhiều phiếu hơn, và nhiều câu trả lời hơn, vì vậy tôi nghĩ có lẽ tốt hơn nên rời khỏi cái này lên, và sau đó có thể di chuyển câu trả lời của bạn ở đây. Đó thực sự là một vấn đề thuận tiện. 1 người dùng chuyển câu trả lời của mình thay vì 3 người di chuyển và do đó mất tất cả phiếu bầu, cuộc trò chuyện và những thứ tương tự. Có bất kỳ lý do tại sao chúng ta nên đi bằng cách này hay cách khác? Tôi không bận tâm, tôi chỉ nghĩ rằng những người khác trả lời có thể không muốn di chuyển, và do đó chúng tôi mất nội dung
RPiAwesomeness

@ppumkin Kiểm tra bài viết Meta.SE này liên quan đến việc đóng bản sao : Không xóa các bản sao tốtbài đăng trên blog SE này . Tôi nghĩ rằng họ đồng ý với quan điểm trước đây của tôi. Trừ khi bản sao là bản sao dán của cái khác, hoặc chất lượng khủng khiếp, vì cái này có nhiều câu trả lời / hoạt động, chúng ta chỉ nên để cả hai mở.
RPiAwesomeness

1
@ppumkin Điểm tốt, miễn là cái này không bị xóa. Ban đầu tôi đã xem xét Rời khỏi Mở, nhưng tôi đoán đánh dấu đây là một bản sao đó là cách đúng đắn để đi. Điều duy nhất tôi có thể nghĩ là ít nhất tôi muốn có một Q / A chất lượng cao hơn trên bản gốc được đánh dấu, hơn là trên bản sao. Đó chắc chắn không phải là trường hợp ở đây.
RPiAwesomeness

1
Vâng, bạn đã đúng. Có nhiều câu trả lời hơn ở đây. Có vẻ như đã được chú ý nhiều hơn. Tôi cho rằng chúng ta cần để nó cho người điều hành quyết định vì họ sẽ biết rõ hơn phải làm gì ở đây. Dù sao. Hoàn thành tốt việc nhận được sự phân bổ phiếu bầu cho câu trả lời của bạn :) Tôi chắc chắn OP đánh giá cao sự đóng góp của bạn. +1
Piotr Kula

Câu trả lời:


13

Nếu bạn kết hợp Arch Linux với các tính năng mà Fred đề xuất, bạn sẽ có được một hệ điều hành khởi động thường nhanh.

Điều gì làm chậm thời gian khởi động của hệ điều hành là

  1. Tốc độ đọc / ghi chậm (I / O).

    Vì vậy, bạn sử dụng thẻ SD nhanh hơn sẽ giúp ích, thẻ Class 10 sẽ nhanh hơn đáng kể so với thẻ Class 4 . Tôi đã hiểu nhầm cách các lớp thẻ SD hoạt động, và điều đó đã được chỉ ra khá rõ ràng trong các bình luận, điều xấu của tôi. Trên thực tế, thẻ Class 10 sẽ nhanh hơn thẻ Class 4 để truyền tệp lớn như video HD và không có gì. Rõ ràng Class 4 thực hiện tốt như vậy với các tệp nhỏ hơn. Một lần nữa, xấu của tôi, nhưng hey, tất cả chúng ta học bây giờ và một lần nữa.

  2. Một chuỗi init sa lầy.

    Nếu bạn có nhiều phần mềm kích hoạt trong giai đoạn khởi động, thời gian khởi động sẽ chậm hơn. Thêm phần mềm bắt đầu == Thời gian khởi động lâu hơn.

    Vì vậy, nếu bạn cần khởi động nhanh, hãy cắt càng nhiều phần mềm khỏi chuỗi init càng tốt. Bạn có thể tạo một tập lệnh đơn giản (hoặc tôi chắc chắn có một tập lệnh ngoài đó) sẽ khởi chạy phần mềm sau khi trình tự khởi động chính hoàn thành, trải rộng tải thêm một chút.

Về cơ bản là vậy. Arch Linux có lẽ là con đường để đi, kết hợp với các tính năng mà Fred đã đề cập, như tôi đã nói trước đây. Arch là một hệ điều hành rất tối thiểu và có thể không phải là thứ tốt nhất cho người mới bắt đầu sử dụng, nhưng nếu bạn có kinh nghiệm về Linux, thì hãy dùng nó. Chỉ cần một chút thiết lập, vì nó đi kèm với mức tối thiểu để cài đặt và đó là nó .

Hy vọng dự án của bạn diễn ra tốt đẹp!


3
"Lớp" thẻ SD là một chỉ số hiệu suất rất kém trong một hệ thống nhúng. Xếp hạng "lớp" dành cho chuyển tập tin tuần tự lớn (giống như bạn có với máy ảnh kỹ thuật số nhiều megapixel), không dành cho các tệp nhỏ như tập lệnh khởi động. Thẻ Class 4 thường xuyên vượt trội so với hầu hết các thẻ Class 10 trên 4k thao tác đọc và ghi theo hệ số 100 trở lên. Có thẻ Class 10 với IOPS tốt, nhưng những mô hình đó rất ít và xa.
Ben Voigt

Phải, tôi đồng ý với @BenVoigt - khi tôi sử dụng lớp 4, có vẻ như các bài viết nhỏ và cập nhật nhanh nhưng phải chuyển khoản lớn trên lớp 10 thì tốt hơn nhiều. Tôi ước tôi có thể sử dụng thẻ RAM chạy bằng pin để có hiệu suất tức thì.
Piotr Kula

Tôi xin lỗi, tôi không biết điều đó. Tôi sẽ sửa nó ngay lập tức. Tôi đã hiểu rằng lớp càng cao thì tốc độ càng cao. Cảm ơn đã chỉ ra rằng, tôi chỉ học được một cái gì đó: D Cảm ơn các upvotes quá :)
RPiAwesomeness

Tôi đang tự hỏi tại sao câu trả lời của tôi bị hạ thấp. Tôi hoàn toàn không bận tâm đến việc mất đại diện, tôi chỉ muốn biết những gì xứng đáng với downvote, vì vậy tôi có thể cải thiện câu trả lời của mình.
RPiAwesomeness

7

Tôi đề nghị sử dụng Arch Linux.

Tôi nhận được thời gian khởi động bình thường là 5s (kernel) + 5s (đến không gian người dùng) và nó không đòi hỏi nhiều nỗ lực, vì nó đang sử dụng systemdcho init.


2
@goldilocks, bạn cũng có thể sử dụng systemd trên raspbian. Nó giảm một nửa thời gian khởi động cho tôi.
John La Rooy

@JohnLaRooy Tốt để biết. Tôi đã giả định sự khác biệt hiệu năng so với init truyền thống chủ yếu là do systemd có thể song song, nhưng có lẽ nó cũng tiết kiệm thời gian bằng cách không phải rẽ nhánh và giải thích các kịch bản shell cho mọi thứ.
goldilocks

@goldilocks Tôi không đồng ý, tôi đã thử và systemdtạo ra nhiều sự khác biệt so với sysvinit. Xem câu trả lời của tôi .
Basj

@Basj Thậm chí tốt hơn để biết. Tôi đã xóa nhận xét của mình về việc nó có thể không tạo ra "sự khác biệt nhiều về thời gian khởi động vì nó là [trên] một lõi". Tôi chủ yếu sử dụng systemd - nhưng TBH tôi không chú ý nhiều đến thời gian khởi động.
goldilocks

7

Tôi đã viết một bài báo ở đây về nó.

Tóm lại: sử dụng systemd.

Bạn có thể dễ dàng để ứng dụng RaspberryPi của bạn chạy ít hơn 8 giây sau khi bạn cắm dây nguồn hoặc chưa đến 3 giây sau khi khởi động Linux đã bắt đầu.

Một ví dụ ở đây, dịch vụ của tôi được gọi là samplerbox.service:

nhập mô tả hình ảnh ở đây

Lưu ý: Tôi chưa cố gắng tối ưu hóa thời gian không gian người dùng vì tôi không cần nó: dù sao ứng dụng của tôi cũng bắt đầu sớm, vì vậy tôi không phiền nếu phân bổ DHCP / IP mạng mất 8 giây sau khi ứng dụng của tôi được khởi chạy.


4

Giải pháp tối ưu có lẽ là xây dựng một bản phân phối chỉ thực hiện chính xác những gì bạn muốn khi khởi động, theo cách này bạn được đảm bảo thời gian tối thiểu (sử dụng hệ thống init tối giản như sinit ). Ngoài ra, bạn có thể cân nhắc sử dụng tính năng đình chỉ vào đĩa ( ngủ đông ) của nhân Linux. Sau khi khởi động, quá trình tạm dừng và tiếp tục hoạt động sau đó khá nhanh chóng và hệ thống hoàn toàn tắt trong thời gian này.


3

Sử dụng kernel được liên kết tĩnh thay vì trình điều khiển modpro cũng có thể tăng hiệu suất đáng kể. Có những tối ưu hóa khác được thực hiện bằng cách cấu hình cẩn thận và biên dịch lại kernel.


1
Xin lỗi để trả lời một câu trả lời cũ. Nhưng bạn có thể cung cấp thêm một số thông tin về cách người ta sẽ nói về "sử dụng hạt nhân được liên kết tĩnh" không?
Caesar


Để thêm vào điều này, để biên dịch kernel được liên kết tĩnh, bạn chỉ cần đi qua 'make menuconfig' hoặc 'make xconfig' và bao gồm các trình điều khiển bạn cần trong kernel, thay vì chọn chúng làm mô-đun. Làm như vậy sẽ nấu chúng vào vmlinuz và cho phép bạn bỏ qua trình tự modprobe khi khởi động, việc này cần một khoảng thời gian đáng kể để phát hiện và tải các mô-đun hạt nhân khi cần.
Mã Drunken Monkey

Cảm ơn bạn vì câu trả lời. Để nó hữu ích, bạn có thể bao gồm một vài bước có thể lặp lại để nó hoạt động không? (Một cái gì đó như 1) Do this in command line, 2) Do this and this 3) Modify this and this in config.txt 4) Boot, it will take 3.2 seconds! 5) Here is the result of my benchmarks: ...)
Basj

Không thực sự, biên dịch lại kernel không phải là một quá trình đơn giản gồm 5 bước. Có rất nhiều cách hướng dẫn trên web để chỉ cho bạn cách định cấu hình và biên dịch nhân Linux ...
Drunken Code Monkey

1

Sử dụng TinyCoreLinux . Nó được tạo ra để tải nhanh và để tồn tại khi mất điện.


Cảm ơn bạn vì câu trả lời. Bạn có thể bao gồm một vài bước tái tạo để nó hoạt động? (Một cái gì đó như 1) Download an image here: +link 2) Flash it on your microSD 3) Modify this and this in config.txt 4) Boot, it will take 3.2 seconds!)
Basj

0

Bạn có thể thử sử dụng eINIT để tăng tốc quá trình khởi động :: http://sourceforge.net/projects/einit/

Thật không may, hiện tại (tháng 10 năm 2016) trang chủ của eINIT lưu ý:

eINIT từng là một triển khai thay thế của chương trình / sbin / init cho Linux và FreeBSD. Chà, tôi cho rằng nó vẫn còn, nhưng dự án đã bị trì hoãn trong nhiều năm nay.


Chúng tôi đang thử một chính sách mới liên quan đến câu trả lời không có liên kết thông tin ở đây . Tuy nhiên, nếu bài đăng này không được chỉnh sửa để chứa thông tin có thể là câu trả lời, tuy nhiên tối thiểu, trong 48 giờ, nó sẽ được chuyển đổi thành Community Wiki để đơn giản hóa việc cộng đồng đã sửa nó.
Ghanima

-3

Xóa mọi mô-đun hạt nhân mà bạn sẽ không sử dụng.


4
Câu trả lời trên trang web này phải bao gồm các bước cần thiết để thực hiện các hành động được đề xuất (cách xác định mô-đun nào được tải, cần thiết và cách loại bỏ chúng), và các tham chiếu và liên kết đến thông tin khác.
Steve Robillard
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.