Embedded cloud computing

Door RoadRunner84 op donderdag 15 juli 2010 21:37 - Reacties (9)
Categorie: -, Views: 3.942

Embedded cloud computing: dood van de CPU deel 2
Eerder schreef ik al dat ik van mening was dat de centrale processor eenheid (ofwel CPU) zijn langste tijd gehad heeft. Nu kwam een ruime week geleden deze review voorbij op de frontpage en wil ik dit mijn eerdere blogartikel en dit frontpage artikel samen laten gaan in een nieuw blogartikel. Bij dezen dus een nieuw artikel dat ik wereldkundig maak waar het gros van de Tweakers niet op zit te wachten :P

Korte samenvatting van mijn vorige blog
Voor de luie lezer: steeds vaker zien we dat het centrale idee in computer systemen wordt losgelaten. Dit zien we in principe terug in de scheiding van grafische berekeningen en anderssoortige berekeningen in een GPU resp. CPU. We zien het recenter terug in multicore processors. Dit heeft zijn weerslag in de manier waarop wij applicaties opbouwen; van een hoofdtaak die subtaken aanroept gaan we naar een abstracter principe van taken die elkaar aanvuren of aangevuurd worden door events. In extreem zou een proces in honderden kleine microtaakjes verdeeld kunnen worden, al zien we dat nu niet niet terug.

Cloud computing
Even vooropgesteld: ik ga het niet hebben (denk ik) over IAAS, SAAS of PAAS (hupeldepup as a service). Dit zijn voornamelijk marketingtechnische begrippen en maken een ietwat kunstmatig onderscheid tussen de verschillende verantwoordelijkheidsgebieden die een clouddienst kan hebben. Ik gebruik dus ook een wat ruimere en misschien rekbaardere term voor cloud computing dan degenen die ermee werken hanteren.

Cloud computing is het organisch distribueren van taken, resources en infrastructuur over beschikbare middelen aan de hand van de eisen. De Apache webserver bijvoorbeeld (de <2.x serie ten minste) is geen cloudapplicatie omdat het alleen taken kan creeŽren aan de hand van de vraag, maar dit niet over de gehele breedte van beschibare middelen kan. Apache kan alleen organisch gedrag vertonen binnen de muren van een enkel server systeem. ... zolang we geen loadbalancer module laden die requests naar andere servers overdraagt.

Het kunnen overdragen van taken naar andere systemen is dus (volgens mijn inzichten) een essentieel onderdeel van wat cloud computing en dynamic resource allocation onderscheidt. Daar wil ik dus hieronder ook verder over uitweiden: kan cloud computing ook gebruikt worden voor andere taken dan de huidige set toepassingen? Of meer specifiek: kunnen de verworvenheden van cloud computing ook gebruikt worden op small scale embedded niveau?

Embedded distributed computing
Embedded netwerken zijn een relatief nieuwe ontwikkeling. Je zou een fabriekslijn met PLC componenten een embedded netwerk kunnen noemen, maar de iets serieuzere netwerken zijn tot nog toch maar op twee vakgebieden te vinden, de smartdust/sensorswarm lab projecten en domotica systemen. Smartdust of sensorswarm netwerken zijn helaas sterk hiŽrarchisch ingedeeld; een zeer beperkt aantal high-power transceivers (vaak maar ťťn) en een berg sensors/routers die allemaal dezelfde taak vervullen, maar op een net iets andere plek. Daarmee is domotica veel interessanter voor deze beschouwing.

Domotica systemen bevatten heden ten dage veel schakelaars en dimmers, gecomplementeerd met een beperkt aantal sensors. Hiermee probeert het voort te bouwen op het klassieke bedrade huis, maar met wat gemakken toegevoegd door sensors te gebruiken. Dat heeft natuurlijk te maken met de marketing erachter; domotica is ofwel zodat mensen langer zelfstandig thuis kunnen wonen, ofwel zodat er energie bespaard kan worden. Deze marketing laat ik even links liggen en zie domotica dus als het "huis van de toekomst", zoals we dat vroeger kenden, zonder me te bekommeren over de levensvatbaarheid van zo'n idee.

Dus, vanuit dit meer flexibele domotica systeem beschouwen we de mogelijkheden om hier cloud-achtige functies aan toe te kennen. In een statisch domotica systeem zal het "brein" van het systeem ofwel een centrale krachtige node zijn (bijvoorbeeld een PC), ofwel gedistribueerd over de verschillende elementen. Een schakelaar kan bijvoorbeeld een reeks dimmers instrueren, of andersom een dimmer luisteren naar events van verschillende schakelaars.

Embedded cloud computing
Om de kracht van cloud computing terug te zien in een embedded netwerk zoals een domotica systeem zal een soort tussenvorm moeten ontstaan tussen de hierboven genoemde benaderingen die als het ware de kracht van beiden combineert. Een cloud gebaseerd domotica systeem zal dus de intelligentie en taken verdelen over de elementen (verschillende microcontrollers die in het netwerk aanwezig zijn), maar op zo'n manier dat het beheer ervan is alsof er ťťn geheel van actuatoren en sensoren is; het netwerk wordt geheel transparant.

De mogelijkheden hiervan zijn in feite hetzelfde als die van een reguliere cloud: de beperkingen van ťťn microcontroller tellen niet meer, bij een tekort aan rekenkracht kan een deel van de taakhuishouding gemigreerd worden naar een andere microcontroller. Andersom kunnen taken geconcentreerd worden om zo meer microcontrollers in diepe stand-by mode te kunnen schakelen. Het vervangen van elementen is een minder groot issue, een element hoeft alleen zijn effectieve actuatoren en sensoren bekend te maken, de control software ervoor is immers al aanwezig in de cloud op de ene of de andere microcontroller.

De vraag is nu of dit zinvol is. Ik denk van wel, op deze manier kan er wat energiewinst gehaald worden. Maar dat is niet het grootste voordeel van embedded clouds; het grootste voordeel zit in de transparante structuur. Waar in een klassiek systeem iedere microcontroller expliciet voorzien werd van een firmware en een strikte taak toebedeeld kreeg, zal in een embedded cloud niet gedacht worden in losse controllers. Eerder wordt gedacht in fysiek afzonderlijke actuatoren of sensoren.

Waar eerst controllers met elkaar praatten zijn dat nu processen. Of die processen nou op dezelfde of op verschillende microcontrollers draaien is geen issue meer; de cloud abstractie zorgt voor de communicatie tussen de processen. Natuurlijk moet er in deze laag wel rekening gehouden worden met real-time gedrag; een lopende band mag niet per ongeluk een meter te ver draaien door "lag" in het netwerk. Gelukkig zijn deze problemen in multi-threading systemen al lang opgelost met charmante constructies, gelijkwaardige constructies voor multi-processor omgevingen zullen ook verwezenlijkt worden. Problemen als starvation en dead-lock zullen nu vervangen worden door denail-of-service en network reliability.

Embedded clouds in het extreme
In mijn vorige artikel trok ik het idee van multi-core door tot in het extreme, datzelfde doe ik nu ook. Noem het toekomstmuziek. Stel nou dat ik ieder klein aspect van mijn firmware kan indelen in een minuscuul procesje, dan wordt het mogelijk om niet alleen op microcontroller niveau taken te verdelen maar zelfs op peripheral niveau. En ook hier weer, de processor core van een microcontroller is net zo goed een peripheral als een analoog-digitaal converter, een seriŽle bus controller of een klokmodule. Een microcontroller die de mogelijkheid heeft om in een super-low power mode te gaan waarbij alleen de real-time clock nog werkt, wat is er dan op tegen om een taak over te hevelen naar een andere microcontroller en in deze slaapstand te gaan voor een gestelde tijd (bijvoorbeeld tot 12 uur 's nachts). Door op deze wijze taken te verschuiven afhankelijk van wat er gebeuren moet kan een cloud super efficiŽnt met zijn middelen omgaan.

Of dit een vatbaar idee is, en of het ooit gaat gebeuren weet ik niet. Maar het is een interessant idee. Er zijn talen die zich geheel richten op taken, events of actoren, in plaats van reeksen instructies. Wellicht dat dit in de toekomst de manier van werken wordt voor netwerken van intelligente stukjes huis of van de ingewanden van je telefoon. Tot die tijd blijf ik lekker doorgaan met gedachtespinsels over waar dit ons ooit gaat brengen.