{"id":5244,"date":"2013-08-19T10:52:28","date_gmt":"2013-08-19T09:52:28","guid":{"rendered":"https:\/\/blogs.mentor.com\/colinwalls\/?p=5244"},"modified":"2026-03-26T17:02:16","modified_gmt":"2026-03-26T21:02:16","slug":"big-little","status":"publish","type":"post","link":"https:\/\/blogs.sw.siemens.com\/embedded-software\/2013\/08\/19\/big-little\/","title":{"rendered":"big.LITTLE"},"content":{"rendered":"<p>From time to time, a concept or some terminology pops up and suddenly everyone is talking about it. That is usually the point when I think &#8220;I wonder what that is all about.&#8221; and start to investigate. That is what happened with ARM&#8217;s <a href=\"http:\/\/www.thinkbiglittle.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">big.LITTLE<\/a> concept.<\/p>\n<p>As a C programmer at heart, any terminology that uses the case of letters in an odd way gets my attention &#8211; and big.LITTLE is certainly an original construct. Fortunately, there is rather more to it than that &#8230;<!--more--><\/p>\n<p>There are a number of current technology trends that are current in the world of embedded software and a key one, that I have written about before, is reducing\/optimizing power consumption. The motivations for doing this are obvious; the way that it might be achieved is less so.<\/p>\n<p>Historically, power consumption was considered to be exclusively a hardware issue. Increasingly, software has become a more significant factor in the power management of a device. In general, power consumption is minimized by switching off peripherals that are not in use and reducing the voltage\/frequency of the CPU when high levels of processing power are not required. Along with the availability of low power modes [suspend, hibernate etc.], these capabilities are provided by the underlying hardware [obviously], but managed by software.<\/p>\n<p>ARM have always been known as leaders in low power CPUs and the popular power management techniques are widely applied on ARM-based devices. It is, therefore, unsurprising that they would come up with other, novel techniques to optimize power. This is exactly what big.LITTLE is all about.<\/p>\n<p>Nearly two years ago, ARM announced the Cortex-A7, which was architecturally compatible with the more powerful Cortex-A15. At the same time, they announced the big.LITTLE concept. The idea is actually quite simple: in a multicore design, instead of simply instantiating a number of CPUs, the CPUs are configured as pairs &#8211; a high power [&#8220;big&#8221;] CPU and a compatible low power [&#8220;LITTLE&#8221;] CPU. Code is then executed on whichever CPU makes sense at a given time and the other CPU is normally powered down.<\/p>\n<p>The hardware concept is, as you see, quite simple. It is the software [the operating system] that does the smart stuff. ARM envisages three ways in which big.LITTLE may be implemented:<\/p>\n<p><strong>Cluster Migration<\/strong> &#8211; This is the &#8220;simple&#8221; case. When the OS determines that more\/less CPU power is suitable for the application as a whole, processing is swapped between the big and LITTLE CPU clusters. The OS is only &#8220;aware&#8221; of the possibility of the two clusters. The OS would either be an <a href=\"https:\/\/blogs.mentor.com\/colinwalls\/blog\/2010\/06\/07\/amp-vs-smp\/\" target=\"_blank\" rel=\"noopener noreferrer\">SMP<\/a> system or a hypervisor controlling OSes in an AMP system.<\/p>\n<p><strong>CPU Migration<\/strong> &#8211; A more sophisticated way to control power using big.LITTLE means that the OS sees each CPU pair and swaps between big and LITTLE on a per CPU basis, as the need for CPU power demands. I guess this could be applied to an AMP or SMP multicore system.<\/p>\n<p><strong>Global Task Scheduling<\/strong> &#8211; The greatest flexibility is offered by this mode, where the [SMP] OS can &#8220;see&#8221; all the CPUs, both big and LITTLE, and can utilize as few or as many as are needed at many particular moment.<\/p>\n<p><a href=\"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/51\/2013\/08\/100821_694267.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-5248\" src=\"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/51\/2013\/08\/100821_694267.jpg\" alt=\"\" width=\"415\" height=\"283\" \/><\/a><\/p>\n<p>Three main software usage models for big-little. (Source: ARM)<\/p>\n<p>There is certainly a logic in the big.LITTLE concept, as it addresses what [IMHO] multicore is often about: having enough CPU power for the job in hand, but being able to tune it to avoid waste. Only time will tell if ARM are on to another winner.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>From time to time, a concept or some terminology pops up and suddenly everyone is talking about it. That is&#8230;<\/p>\n","protected":false},"author":71677,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"spanish_translation":"","french_translation":"","german_translation":"","italian_translation":"","polish_translation":"","japanese_translation":"","chinese_translation":"","footnotes":""},"categories":[1],"tags":[391,537,300,328,329,377],"industry":[],"product":[],"coauthors":[],"class_list":["post-5244","post","type-post","status-publish","format-standard","hentry","category-news","tag-arm","tag-big-little","tag-embedded-software","tag-multi-core","tag-multi-os","tag-multicore"],"_links":{"self":[{"href":"https:\/\/blogs.sw.siemens.com\/embedded-software\/wp-json\/wp\/v2\/posts\/5244","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.sw.siemens.com\/embedded-software\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.sw.siemens.com\/embedded-software\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/embedded-software\/wp-json\/wp\/v2\/users\/71677"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/embedded-software\/wp-json\/wp\/v2\/comments?post=5244"}],"version-history":[{"count":1,"href":"https:\/\/blogs.sw.siemens.com\/embedded-software\/wp-json\/wp\/v2\/posts\/5244\/revisions"}],"predecessor-version":[{"id":9692,"href":"https:\/\/blogs.sw.siemens.com\/embedded-software\/wp-json\/wp\/v2\/posts\/5244\/revisions\/9692"}],"wp:attachment":[{"href":"https:\/\/blogs.sw.siemens.com\/embedded-software\/wp-json\/wp\/v2\/media?parent=5244"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/embedded-software\/wp-json\/wp\/v2\/categories?post=5244"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/embedded-software\/wp-json\/wp\/v2\/tags?post=5244"},{"taxonomy":"industry","embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/embedded-software\/wp-json\/wp\/v2\/industry?post=5244"},{"taxonomy":"product","embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/embedded-software\/wp-json\/wp\/v2\/product?post=5244"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/embedded-software\/wp-json\/wp\/v2\/coauthors?post=5244"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}