จะปรับปรุงเวลาบูตสำหรับ Raspberry Pi ได้อย่างไร


27

ฉันกำลังสร้างแอปพลิเคชันระยะไกลแบบฝังที่ไม่สามารถเปิดอย่างถาวรได้ ฉันเล่นด้วยการกระจาย OS ที่แตกต่างกันและสามารถลดเวลาในการบู๊ตได้อย่างมากโดยใช้การ์ด SD ที่ดีกว่าด้วยความเร็วในการอ่านที่เร็วขึ้น ฉันไม่ยึดติดกับการแจกจ่ายเฉพาะดังนั้นฉันสามารถตัดส่วนที่จำเป็นเพื่อใช้การกระจาย Linux ที่น้อยที่สุด

(ฉันพยายามค้นหามาตรฐานที่ผู้คนวิ่งเพื่อปรับปรุงเวลาบูต แต่ฉันไม่พบสิ่งใดที่มีตัวเลขยาก)

ฉันยังสามารถใช้build root (ดูวิดีโอ YouTube Raspberry Pi - เวลาบูตเร็ว Super Fast - ระบบความบันเทิง Marshmallow ) ...


คุณควรลงคะแนนให้ปิดคำถามนี้ จากนั้นผู้ใช้จะถูกนำไปยังคำถามเดิมและเพิ่มคำตอบเพิ่มเติม เนื่องจากว่ายังไม่ได้ทำเครื่องหมายเป็นคำตอบ
Piotr Kula

ฉันแค่คิดว่าอันนี้มีกิจกรรมมากมาย (มุมมองไม่สูงอย่างเห็นได้ชัดเพียงเพราะอันนี้น้อยกว่าหนึ่งวัน) โหวตมากขึ้นและคำตอบเพิ่มเติมดังนั้นฉันคิดว่ามันจะดีกว่าถ้าปล่อยไว้ ขึ้นแล้วอาจย้ายคำตอบของคุณที่นี่ ฉันคิดว่ามันเป็นเรื่องของความสะดวกสบายจริงๆ ผู้ใช้ 1 คนย้ายคำตอบของเขาไปเมื่อเทียบกับ 3 คนย้ายและทำให้คะแนนโหวตทั้งหมดการสนทนาและสิ่งที่คล้ายกันหมด มีเหตุผลใดที่เราควรไปทางเดียวหรืออย่างอื่น? ฉันไม่รังเกียจฉันแค่คิดว่าคนอื่นที่ตอบอาจไม่ต้องการย้ายและดังนั้นเราจึงสูญเสียเนื้อหา
RPiAwesomeness

@ppumkin ตรวจสอบโพสต์ Meta.SE นี้เกี่ยวกับการปิดการหลอก: อย่าลบรายการที่ซ้ำซ้อนและโพสต์บล็อก SEนี้ ฉันคิดว่าพวกเขาเห็นด้วยกับจุดก่อนหน้าของฉัน นอกจากว่าสำเนานั้นเป็นสำเนาของอีกอันหนึ่งหรือมีคุณภาพแย่และเนื่องจากอันนี้มีคำตอบ / กิจกรรมมากมายเราควรเปิดพวกเขาไว้ทั้งคู่
RPiAwesomeness

1
@ppumkin คะแนนที่ดีตราบใดที่สิ่งนี้ไม่ถูกลบ ฉันได้ตรวจสอบเดิมเปิดทิ้งไว้ แต่ฉันเดาว่าการทำเครื่องหมายว่านี่เป็นสิ่งที่ซ้ำกันเป็นวิธีที่ถูกต้อง สิ่งเดียวที่ฉันคิดได้ก็คืออย่างน้อยที่สุดฉันก็อยากจะมี Q / A ที่มีคุณภาพสูงกว่าในต้นฉบับที่ทำเครื่องหมายไว้ นั่นไม่ใช่กรณีที่นี่อย่างแน่นอน
RPiAwesomeness

1
ใช่คุณพูดถูก มีคำตอบเพิ่มเติมที่นี่ ดูเหมือนว่าจะได้รับความสนใจมากขึ้น ฉันคิดว่าเราต้องปล่อยให้ผู้ดูแลตัดสินใจเพราะพวกเขาจะรู้ดีกว่าว่าจะทำอย่างไรที่นี่ อย่างไรก็ตาม. ทำได้ดีมากกับการได้รับคะแนนโหวตในคำตอบของคุณ :) ฉันมั่นใจว่า OP เห็นคุณค่าของการมีส่วนร่วมของคุณ +1
Piotr Kula

คำตอบ:


13

หากคุณรวม Arch Linux เข้ากับคุณสมบัติที่ Fred แนะนำคุณควรได้รับระบบปฏิบัติการบูทที่รวดเร็วโดยทั่วไป

สิ่งที่ทำให้ระบบบู๊ตช้าลงคืออะไร

  1. อ่าน / เขียน (I / O) ช้า

    ดังนั้นคุณใช้การ์ด SD ที่เร็วกว่าจะช่วยได้การ์ดClass 10 จะเร็วกว่าการ์ดคลาส 4อย่างมาก ฉันเข้าใจผิดว่าคลาสการ์ด SD ทำงานอย่างไรและมีการชี้ให้เห็นอย่างชัดเจนในความคิดเห็นของฉัน ที่จริงแล้วการ์ด Class 10 จะเร็วกว่าการ์ด Class 4 สำหรับการถ่ายโอนไฟล์ขนาดใหญ่เช่นวิดีโอ HD และอะไรก็ตาม Apparently Class 4 มีประสิทธิภาพเช่นเดียวกับไฟล์ขนาดเล็ก อีกครั้งที่ไม่ดีของฉัน แต่เฮ้เราทุกคนเรียนรู้ตอนนี้และอีกครั้ง

  2. ลำดับ init แบบจมลง

    หากคุณมีซอฟต์แวร์จำนวนมากที่เริ่มทำงานในระหว่างขั้นตอนการบู๊ตเวลาบูตจะช้าลง ซอฟต์แวร์เพิ่มเติมเริ่มต้น == เวลาบูตนานขึ้น

    ดังนั้นหากคุณต้องการการบูทอย่างรวดเร็วให้ตัดซอฟท์แวร์จากลำดับ init ให้มากที่สุด คุณสามารถสร้างสคริปต์อย่างง่าย (หรือฉันแน่ใจว่ามีหนึ่งในนั้น) ที่จะเปิดตัวซอฟต์แวร์หลังจากลำดับการบู๊ตหลักเสร็จสมบูรณ์แล้วกระจายการโหลดออกไปอีกเล็กน้อย

แค่นั้นแหละ Arch Linux อาจเป็นวิธีที่จะไปรวมกับคุณสมบัติที่ Fred พูดถึงอย่างที่ฉันพูดไว้ก่อนหน้านี้ Arch เป็นมาก OS น้อยที่สุดและไม่อาจจะเป็นสิ่งที่ดีที่สุดสำหรับการเริ่มต้นที่จะใช้งาน แต่ถ้าคุณมีประสบการณ์ในลินุกซ์นั้นไปได้ ใช้เวลาเพียงเล็กน้อยในการติดตั้งเนื่องจากมาพร้อมกับขั้นต่ำในการติดตั้งและนั่นก็คือ

หวังว่าโครงการของคุณจะเป็นไปด้วยดี!


3
การ์ด SD "class" เป็นตัวบ่งชี้ประสิทธิภาพที่แย่มากในระบบฝังตัว การจัดระดับ "คลาส" ใช้สำหรับการถ่ายโอนไฟล์ขนาดใหญ่ตามลำดับ (เช่นเดียวกับที่คุณมีกล้องดิจิตอลหลายล้านพิกเซล) ไม่ใช่สำหรับไฟล์ขนาดเล็กเช่นสคริปต์เริ่มต้น การ์ดคลาส 4 มีประสิทธิภาพเหนือกว่าการ์ดคลาส 10 ส่วนใหญ่ในการอ่านและเขียน 4k โดยใช้แฟคเตอร์ 100 หรือมากกว่า มีการ์ด Class 10 ที่มี IOPS ที่ดี แต่รุ่นเหล่านั้นอยู่ห่างกันไม่มากนัก
Ben Voigt

ใช่ฉันเห็นด้วยกับ @BenVoigt - เมื่อฉันใช้คลาส 4 ดูเหมือนว่าการเขียนขนาดเล็กและการอัปเดตนั้นรวดเร็ว แต่การถ่ายโอนจำนวนมากในชั้น 10 นั้นดีกว่ามาก ฉันหวังว่าฉันจะสามารถใช้การ์ดแรมที่ใช้พลังงานจากแบตเตอรี่เพื่อประสิทธิภาพที่รวดเร็ว
Piotr Kula

ฉันขอโทษฉันไม่รู้ ฉันจะแก้ไขทันที ฉันเข้าใจว่ายิ่งระดับสูงเท่าไหร่ความเร็วก็ยิ่งสูงขึ้นเท่านั้น ขอบคุณที่ชี้ให้เห็นว่าฉันเพิ่งเรียนรู้บางสิ่ง: D ขอบคุณสำหรับ upvotes ด้วย :)
RPiAwesomeness

ฉันสงสัยว่าทำไมคำตอบของฉันถูกลดระดับลง ฉันไม่สนใจการสูญเสียตัวแทนฉันแค่อยากรู้ว่าอะไรคือข้อดีของ downvote ดังนั้นฉันจึงสามารถปรับปรุงคำตอบของฉันได้
RPiAwesomeness

7

ฉันแนะนำให้ใช้ Arch Linux

ฉันได้รับเวลาบูตปกติ 5 วินาที (เคอร์เนล) + 5s (ไปยังพื้นที่ผู้ใช้) และไม่ต้องใช้ความพยายามมากนักเพราะใช้systemdสำหรับ init


2
@ goldilocks คุณสามารถใช้ systemd กับ raspbian ได้เช่นกัน มันลดเวลาการบู๊ตของฉันลงครึ่งหนึ่ง
John La Rooy

@JohnLaRooy ดีใจที่ได้ทราบ ฉันสมมติว่าความแตกต่างของประสิทธิภาพเทียบกับ init ดั้งเดิมส่วนใหญ่จะเป็นเพราะ systemd สามารถทำขนานกันได้ แต่มันอาจช่วยประหยัดเวลาได้โดยไม่ต้องแยกและตีความเชลล์สคริปต์สำหรับทุกสิ่ง
goldilocks

@goldilocks ผมไม่เห็นด้วยผมพยายามและทำให้แตกต่างกันมากเมื่อเทียบกับsystemd sysvinitดูคำตอบของฉัน
Basj

@Basj ยิ่งกว่าที่จะรู้ ฉันได้ลบความคิดเห็นของฉันเกี่ยวกับเรื่องนี้แล้วอาจไม่ทำให้ "แตกต่างกันมากในแง่ของเวลาบูตเนื่องจากมันเป็น [ใน] แกนเดียว" ฉันใช้ systemd เป็นส่วนใหญ่ - แต่ TBH ฉันไม่สนใจเวลาบูตมาก
goldilocks

7

ผมเขียนบทความที่นี่เกี่ยวกับเรื่องนี้

ในระยะสั้น: systemdการใช้งาน

คุณสามารถทำให้แอป RaspberryPi ของคุณทำงานได้อย่างง่ายดายน้อยกว่า 8 วินาทีหลังจากที่คุณต่อสายไฟหรือน้อยกว่า 3 วินาทีหลังจากบูต Linux เริ่มทำงาน

ตัวอย่างที่นี่บริการของฉันเรียกว่าsamplerbox.service:

ป้อนคำอธิบายรูปภาพที่นี่

หมายเหตุ: ฉันไม่ได้พยายามปรับเวลาผู้ใช้ให้เหมาะสมเพราะฉันไม่ต้องการ: แอพของฉันเริ่มเร็วดังนั้นฉันไม่รังเกียจหากการระบุแหล่งที่มาของเครือข่าย DHCP / IP ใช้เวลา 8 วินาทีหลังจากเปิดแอปของฉัน


4

ทางออกที่ดีที่สุดน่าจะสร้างการกระจายที่ทำในสิ่งที่คุณต้องการในการบู๊ตด้วยวิธีนี้คุณจะรับประกันเวลาน้อยที่สุด (โดยใช้ระบบ init minimalist เช่นsinit ) หรือคุณอาจลองใช้คุณสมบัติ suspend to disk ( hibernation ) ของเคอร์เนล Linux เมื่อบู๊ตแล้วการหยุดทำงานชั่วคราวและดำเนินการต่อในภายหลังจะค่อนข้างเร็วและระบบจะปิดตัวลงในระหว่างนี้


3

การใช้เคอร์เนลที่เชื่อมโยงแบบสแตติกแทนที่จะเป็นไดร์เวอร์ตัวดัดแปลงสามารถเพิ่มประสิทธิภาพได้อย่างมาก มีการปรับให้เหมาะสมอื่น ๆ ที่จะทำโดยการกำหนดค่าและการคอมไพล์เคอร์เนลอย่างระมัดระวังอีกครั้ง


1
ขออภัยที่จะตอบคำถามนานหลายปี แต่คุณสามารถให้ข้อมูลเพิ่มเติมเกี่ยวกับวิธีการ "ใช้เคอร์เนลที่เชื่อมโยงแบบคงที่" ได้อย่างไร
Caesar

มีลักษณะที่นี่: raspberrypi.org/documentation/linux/kernel/building.md
Drunken Code Monkey

ในการเพิ่มสิ่งนี้การรวบรวมเคอร์เนลที่เชื่อมโยงแบบสแตติกคุณเพียงแค่ต้องผ่าน 'make menuconfig' หรือ 'make xconfig' และรวมไดรเวอร์ที่คุณต้องการในเคอร์เนลแทนที่จะเลือกเป็นโมดูล การทำเช่นนั้นจะปรุงให้เป็น vmlinuz และช่วยให้คุณข้ามลำดับ modprobe บน bootup ซึ่งใช้เวลานานพอสมควรในการตรวจจับและโหลดโมดูลเคอร์เนลตามที่ต้องการ
Drunken Code Monkey

ขอบคุณสำหรับคำตอบ. เพื่อให้มีประโยชน์คุณสามารถรวมขั้นตอนที่ทำซ้ำได้สองสามอย่างเพื่อให้ทำงานได้หรือไม่? (บางอย่างเช่น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

ไม่จริงการคอมไพล์เคอร์เนลไม่ใช่ขั้นตอนง่าย ๆ 5 ขั้นตอน มีมากมายของวิธีการบนเว็บที่จะแสดงให้คุณเห็นวิธีการกำหนดค่าและรวบรวมเคอร์เนลลินุกซ์ ... เป็น
เมาลิงรหัส

1

ใช้TinyCoreLinux มันทำเพื่อการโหลดที่รวดเร็วและเพื่อความอยู่รอดของพลังงานที่ล้มเหลว


ขอบคุณสำหรับคำตอบ. คุณสามารถรวมขั้นตอนการทำซ้ำสองสามอย่างเพื่อให้ทำงานได้หรือไม่ (บางอย่างเช่น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

คุณสามารถลองใช้ eINIT เพื่อเร่งกระบวนการบูต:: http://sourceforge.net/projects/einit/

น่าเสียดายที่ปัจจุบัน (ตุลาคม 2016) บันทึกหน้าแรกของ eINIT:

eINIT เคยเป็นการนำมาใช้อีกทางหนึ่งของโปรแกรม / sbin / init สำหรับ Linux และ FreeBSD ฉันคิดว่ามันยังคงเป็น แต่โครงการได้ถูกระงับมาหลายปีแล้ว


เรากำลังพยายามที่นโยบายใหม่เกี่ยวกับการ informationless มีการเชื่อมโยงอย่างเดียวคำตอบที่นี่ หากโพสต์นี้ไม่ได้ถูกแก้ไขเพื่อให้มีข้อมูลที่สามารถเป็นคำตอบได้ แต่น้อยที่สุดใน 48 ชั่วโมงโพสต์นี้จะถูกแปลงเป็น Community Wiki เพื่อให้ง่ายต่อการแก้ไขโดยชุมชน
Ghanima

-3

ลบโมดูลเคอร์เนลใด ๆ ที่คุณจะไม่ใช้


4
คำตอบในเว็บไซต์นี้ควรมีขั้นตอนที่จำเป็นในการดำเนินการตามที่แนะนำ (วิธีการกำหนดโมดูลที่โหลดซึ่งจำเป็นและวิธีการลบ) และการอ้างอิงและลิงก์ไปยังข้อมูลเพิ่มเติม
Steve Robillard
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.