[ 
https://issues.apache.org/jira/browse/PROTON-1021?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Justin Ross updated PROTON-1021:
--------------------------------
    Labels: features patch  (was: features)

> ProtonE - the Deeply Embedded ProtonC variant
> ---------------------------------------------
>
>                 Key: PROTON-1021
>                 URL: https://issues.apache.org/jira/browse/PROTON-1021
>             Project: Qpid Proton
>          Issue Type: Improvement
>          Components: proton-c
>         Environment: Embedded C - IAR or GCC.
>            Reporter: German Shepherd (PrE)
>            Priority: Minor
>              Labels: features, patch
>             Fix For: Future
>
>
> Let me introduce a project I've started on 2013, when I've been tasked with a 
> solution on how to connect an deeply embedded Wi-Fi enabled device to MS 
> Azure Cloud (the plan is to connect millions of such devices).
> The obvious solution was to go with ServiceBus and AMQP over TLS. Since the 
> embedded stuff is always written in plain C, the ProtonC is choice was 
> obvious.
> The Proton-C typically requires a 230kB of RAM by default (most of it 
> dynamically allocated), which is way too much of what is physically available 
> in any embedded CPU of the general class (those typically end up with RAM 
> sizes in 192kB area) - so there is no way on how to directly use the ProtonC 
> on such CPUs.
> *Solution?*
> The outcome of my work is the *Proton-E*, based off the Proton-C library, 
> squeezed to run on 32kB of total RAM usage (without sacrificing any 
> functionality) and with a TLS on side taking addition approx. 11kB.
> This allows you to fit the AMQPS into any connected embedded CPU with 128kB 
> of RAM (or more) - which most of the commonly available CPUs on market 
> provide (for a great price).
> The "embedded" modifications are backwards applicable to the ProtonC, and 
> this is what I would like to introduce through this JIRA Ticket.
> *Note*
> This work was picked up by Microsoft in mid-2014, and I have personally 
> cooperated with them; but I have not seen any result being provided to 
> community, as it seems the whole effort on their side vanished (and if not, 
> they stopped the cooperation - so they won't have my latest sources).
> Never mind, as I have the most actual source code (as I've never stopped the 
> development, and I do follow every commit the ProtonC community does), none 
> is lost.
> At this moment, before the ProtonE source gets out, let me use this ticket to 
> provide an assurance, that indeed the ProtonE (resp. modified ProtonC) can be 
> used on the constrained system, and, most importantly, it is production ready 
> for Azure Cloud.
> *ProtonE Features*
> * Super-Low RAM footprint: total 32kB of RAM usage, for a AMQP message with 
> 1.5kB of payload
> * Azure Cloud: Service Bus / eventHub - both verified (IoT Hub - very close 
> future, will definitely work - my colleagues cooperate with MS on this)
> * Azure Cloud: SASL PLAIN over TLS (Active Directory) - verified
> * Azure Cloud: SAS tokens (CBS) - verified
> * No modifications to ProtonC API what-so-ever
> * TCP stack, and RTOS, independent
> *The ProtonE has been made to run and personally tested, by myself, with the 
> following setup: *
> * CPUs: 32-bit ARM - Cortex M3 (STM32, SAM3), Cortex M4 (Atmel SAM4), Cortex 
> M7 (Atmel SAM S70/V71), I also run this on TI Sitara with embedded RTOS
> * There is no reason why this would not work on any other CPUs (all is just a 
> plain-C code)
> * RTOS: FreeRTOS/SafeRTOS; but primarily: expressLogic ThreadX
> * TCP/IP stack: expressLogic NetX & NetX-Duo TCP/IP
> * Comms: Broadcom WICED Wi-Fi solution
> * TLS via Mocana NanoSSL (v6.0 or newer)
> * TLS via MatrixSSL (3.6.1 or newer)
> *SSL/TLS*
> This is quite a huge memory hog, but should you understand it deeply, you 
> won't have trouble managing this.
> Some numbers I've got:
> * Handshake establishment: RAM usage peak is 30kB for TLS itself (handshake: 
> RSA)
> * After the Handshake is done and the TLS tunnel is open: the TLS itself 
> requires 11kB of RAM (tunnel: AES)
> I'm looking forward to have Microsoft to switch the Azure solely to ECC for 
> us (now they have RSA and ECC, and the server-side cert is solely RSA). Then 
> the handshake number will be even much more positive.
> *Final words*
> Once you realize that the AMQPS is the only possible scalable future for the 
> IoT (... hate this buzzword, BTW.), where the 95% of devices will be deeply 
> embedded ones, then it is obvious what role the ProtonE will play.
> Best regards from CZ,
>  Adam N



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@qpid.apache.org
For additional commands, e-mail: dev-h...@qpid.apache.org

Reply via email to