Freescale ran into problems while porting their LTE Layer 2 software stack from a single-core PowerQUICC processor to a dual core QorIQ P2020 processor. The existing LTE code was threaded, and the assumption was that a simple recompile would be enough to allow the SMP Linux operating system to distribute the threads across the 2 cores resulting in higher performance. Unfortunately the port exposed latent bugs that caused intermittent crashes and prevented the smooth migration of the threaded LTE stack to multicore.
CriticalBlue engineers took the Prism Technology onsite and used it to capture a trace of the memory accesses made by the LTE software as it executed on the P2020 device. Analysis of the resulting data highlighted that several locations in the code which caused data to be shared unintentionally between threads resulting in data races which caused the hard to find crashes.
Additional synchronization was added to correct the data races, but this produced a performance problem due to excessive serialization. The trace data was further analyzed to identify data dependencies between likely candidates for additional threads, reducing the risk of introducing further data races.
Once the original bugs were fixed the resulting performance drop was tackled with a combination of analysis technology and engineering knowledge. The project resulted in the deployment of Prism Technology within Freescale customized to track down multicore bugs and performance issues on QorIQ running Linux. CriticalBlue also developed and delivered Multicore programming training to Freescale employees, distributors and customers with the goal of increasing the success rate of multicore development projects targeting Freescale devices.