Introduction
As the world moves ever forward to smaller embedded systems, the difficulty of selecting the right hardware for the job becomes increasingly difficult. Our RAPID software is built to run on Mini PCs within a towing or trucking vehicle. As a result, they need to be ruggedized to handle the extremes possible within this environment ranging from freezing to incredibly hot temperatures as well as withstanding any bumps and bruises they may receive during normal operating conditions and potential snow/water entering the cabin. We do as much as we can to mitigate potential external environmental conditions such as water and temperatures by mounting our hardware in a secure box within the vehicles as well as selecting cases for our hardware that meet our requirements for environmental conditions. Some difficulties that come with these requirements though is finding the hardware that can run our software as well as meet the conditions demanded by the environment. As such we need to make a few sacrifices in terms of hardware power, meaning we need to do some optimization on the software side to meet our customer’s requirements for features.Hardware Selection
Determining viable hardware for our use-cases is difficult due to the necessity of keeping cost low per unit, but still being able to handle all of RAPID’s features. The biggest to manage features of RAPID is local video recording and video streaming. As such we decided to pick our hardware mostly based on how well it can handle these two features since the other RAPID features are relatively lightweight such as GPS location management, and accelerometer data reading. Our requirement for managing the video streams is the ability to record locally from at least 4 cameras concurrently as well as support live video streams from each of those cameras. So to manage that we decided to look into multithreading as our potential biggest source of optimization. As such, we needed to look into hardware that had robust threading support which is almost any respectable CPU nowadays, but that didn’t make the search easy. Just because the CPU has robust multithreading support we needed to track down and test hardware that had enough cores and processor speed to manage the camera threads. Here are a few examples from that blog of some processors we tested using a specific camera setup at 480p and 10fps.CPU Downscaling Enabled
CPU | # of concurrent streams supported | Avg. CPU Usage per thread (depending on load from other applications) |
i7-8700T 2.4GHz 6 Core | 4 | ~25% |
i5-4200U Dual Core 1.6GHz | 1 | 50-80% |
Celeron J3160 Quad Core 1.6GHz | ~1 | 70-110% |
CPU Downscaling Disabled
CPU | # of concurrent streams supported | Avg. CPU Usage per thread (depending on load from other applications) |
i7-8700T 2.4GHz 6 Core | 8 | ~5% |
i5-4200U Dual Core 1.6GHz | 4 | 10-15% |
Celeron J3160 Quad Core 1.6GHz | 4 | 15-20% |