โลกของคอมพิวเตอร์ฝังตัวเพิ่งได้เห็นความสำเร็จที่น่าประทับใจของการปรับปรุงทางวิศวกรรม โปรโตไทป์ GRISP Nano ได้สำเร็จในการบูตสภาพแวดล้อมรันไทม์ Erlang แบบเต็มรูปแบบโดยใช้หน่วยความจำเพียง 16 MB เท่านั้น ซึ่งพิสูจน์ให้เห็นว่าภาษาโปรแกรมมิ่งที่มีประสิทธิภาพสูงสามารถทำงานบนฮาร์ดแวร์ที่มีข้อจำกัดได้อย่างน่าประหลาดใจ
ความสำเร็จนี้ไม่ได้วางแผนไว้ตั้งแต่เริ่มต้น การออกแบบเดิมกำหนดให้ใช้หน่วยความจำ 32 MB แต่ข้อบกพร่องของ CPU บังคับให้ทีมงานต้องหาชิปหน่วยความจำตัวอื่นที่เข้ากันได้กับแผงวงจรที่มีอยู่ บางครั้งนวัตกรรมที่ดีที่สุดเกิดขึ้นจากการแก้ไขปัญหาที่ไม่คาดคิด
ข้อมูลจำเพาะทางเทคนิคของ GRISP Nano :
- CPU: STM32U5G7 ARM Cortex-M33 (ใช้พลังงานต่ำมาก)
- RAM ภายใน: 3 MB
- RAM ภายนอก: 16 MB OctoSPI DRAM
- หน่วยความจำ Flash: 4 MB ภายใน
- หน่วยความจำภายนอก: ช่องเสียบการ์ด Micro SD
- การเชื่อมต่อ: USB-C (OTG), คอนโซล Micro-USB, ตัวเชื่อมต่อ PMOD 4 ตัว
- พลังงาน: โหมดทำงาน 18.6 μA/MHz ที่ 3.3V (61μW), รองรับการเก็บเกี่ยวพลังงาน
การปรับปรุงหน่วยความจำผ่านหกขั้นตอนเชิงกลยุทธ์
การทำให้ Erlang พอดีกับพื้นที่เล็กๆ เช่นนี้ต้องใช้งานวิศวกรรมอย่างระมัดระวัง ทีมงานเริ่มต้นด้วยระบบที่สามารถโหลดได้เพียง 7 โมดูลก่อนจะขัดข้อง โดยเหลือหน่วยความจำว่างเพียง 7.4 MB ผ่านการปรับปรุงแบบมีเป้าหมายหลายขั้นตอน พวกเขาค่อยๆ ขยายสิ่งที่ระบบสามารถจัดการได้
การเปลี่ยนแปลงที่มีประสิทธิภาพมากที่สุดรวมถึงการลบโมดูล crypto ชั่วคราว การใช้การตั้งค่าคอมไพเลอร์แบบเข้มงวดเพื่อลดขนาดโค้ด และการตัดข้อมูลที่ไม่จำเป็นออกจากไฟล์ที่คอมไพล์แล้ว พวกเขายังได้ปรับเปลี่ยนระบบปฏิบัติการ RTEMS ที่อยู่ข้างใต้และใช้กลยุทธ์การจัดการหน่วยความจำแบบกำหนดเอง แต่ละขั้นตอนช่วยเพิ่มพื้นที่ว่างและอนุญาตให้โมดูลเพิ่มเติมโหลดได้สำเร็จ
ความก้าวหน้าครั้งสุดท้ายเกิดขึ้นเมื่อพวกเขาจัดการกับโมดูล Unicode ซึ่งต้องการหน่วยความจำประมาณ 500 KB สำหรับตารางค้นหาตัวอักษร ด้วยการสร้างโมดูลทดแทนที่เรียบง่ายเฉพาะสำหรับแพลตฟอร์มของพวกเขา พวกเขาได้กำจัดอุปสรรคสุดท้ายที่ป้องกันไม่ให้ระบบเข้าถึงพรอมต์คำสั่ง Erlang
ผลลัพธ์การปรับปรุงหน่วยความจำ:
| ขั้นตอนการปรับปรุง | หน่วยความจำว่าง | โมดูลที่โหลด | การเปลี่ยนแปลงสำคัญ |
|---|---|---|---|
| สถานะเริ่มต้น | 7.4 MB | 7 | สถานะเริ่มต้น |
| การลบ Crypto + compiler flags | 8.5 MB | 52 | การปรับปรุง -Os, การกำจัดโค้ดที่ไม่ใช้ |
| การลอก BEAM file | 8.5 MB + 16KB | 54 | ลบข้อมูลการดีบัก |
| การปรับแต่ง RTEMS + GC | 9.4 MB | 79 | การใช้งาน RAM ภายใน, การเก็บขยะ |
| การปรับปรุงตัวจัดสรรหน่วยความจำ | 10.2 MB | 80+ | การตั้งค่าตัวจัดสรรหน่วยความจำแบบกำหนดเอง |
| การแทนที่ Unicode stub | บูตสำเร็จ | ระบบเต็มรูปแบบ | แทนที่ตารางค้นหา 500KB |
ความสามารถด้านประสิทธิภาพแบบเรียลไทม์
การอภิปรายในชุมชนเผยให้เห็นข้อมูลเชิงลึกที่น่าสนใจเกี่ยวกับลักษณะประสิทธิภาพของ Erlang บนระบบฝังตัว แม้ว่า Erlang มักถูกพิจารณาเป็นระบบซอฟต์เรียลไทม์ แต่การทำงานบน RTEMS แทน Linux สามารถปรับปรุงความสามารถในการคาดการณ์เวลาได้อย่างมีนัยสำคัญ บนระบบ Linux แบบดั้งเดิม นักพัฒนารายงานเวลาตอบสนองเฉลี่ยประมาณ 200 ไมโครวินาทีพร้อมความล่าช้าเป็นครั้งคราวที่เข้าถึงหลายร้อยมิลลิวินาที
แพลตฟอร์ม GRISP แก้ไขปัญหานี้โดยการรวมประโยชน์ของการโปรแกรมระดับสูงของ Erlang เข้ากับการจัดตารางเวลาแบบกำหนดได้ของ RTEMS สำหรับแอปพลิเคชันที่ต้องการเวลาตอบสนองที่รับประกัน ระบบสามารถลดลงไปใช้โค้ด C หรือใช้งานเรียลไทม์เฉพาะร่วมกับรันไทม์ Erlang
แอปพลิเคชันการเก็บเกี่ยวพลังงาน
ข้อจำกัดหน่วยความจำ 16 MB มีจุดประสงค์ที่ใหญ่กว่าการพิสูจน์ความเป็นไปได้ทางเทคนิค GRISP Nano มุ่งเป้าไปที่แอปพลิเคชันการเก็บเกี่ยวพลังงานที่อุปกรณ์ต้องทำงานด้วยพลังงานที่รวบรวมจากสภาพแวดล้อม เช่น ตัวแปลงพลังงานความร้อนหรือแผงโซลาร์เซลล์
ความท้าทายในการใช้ Erlang สำหรับระบบเช่นนั้นคือมันมีขั้นตอนการบูตซึ่งต้องผ่านไปจนกว่าเราจะสามารถจัดการพลังงานจากระดับ Erlang ได้
สิ่งนี้สร้างความท้าทายทางวิศวกรรมที่เป็นเอกลักษณ์ ระบบต้องเก็บพลังงานให้เพียงพอเพื่อทำกระบวนการบูตทั้งหมดให้เสร็จสิ้น หรือหาวิธีบูตเป็นขั้นตอนพร้อมช่วงพักระหว่างขั้นตอน การใช้หน่วยความจำที่เล็กลงช่วยลดการใช้พลังงานและทำให้การเก็บเกี่ยวพลังงานเป็นไปได้มากขึ้น
มองไปข้างหน้า
การเข้าถึงพรอมต์คำสั่งเป็นเพียงจุดเริ่มต้นมากกว่าเป้าหมายสุดท้าย ทีมพัฒนาวางแผนที่จะสร้างไลบรารีมาตรฐานของ Erlang เวอร์ชันน้ำหนักเบา ใช้ตรรกะการบูตที่ตระหนักถึงพลังงาน และในที่สุดเปิดตัวแคมเปญระดมทุนสำหรับหน่วยผลิต
โครงการนี้แสดงให้เห็นว่าระบบฝังตัวสมัยใหม่สามารถได้รับประโยชน์จากภาษาโปรแกรมมิ่งระดับสูงที่มักเชื่อมโยงกับแอปพลิเคชันเซิร์ฟเวอร์ เมื่อฮาร์ดแวร์มีความสามารถมากขึ้นและเทคนิคการปรับปรุงซอฟต์แวร์ดีขึ้น เราอาจเห็นตัวอย่างเพิ่มเติมของสภาพแวดล้อมรันไทม์ที่มีประสิทธิภาพทำงานบนข้อกำหนดฮาร์ดแวร์ที่เรียบง่ายอย่างน่าประหลาดใจ
RTEMS: ระบบปฏิบัติการแบบเรียลไทม์ที่ออกแบบสำหรับแอปพลิเคชันฝังตัวซึ่งให้การจัดตารางงานและการรับประกันเวลาแบบกำหนดได้
อ้างอิง: Booting Erlang in 16 MB - A New Milestone for GRISP Nano
