Skip navigation
2012

At the Intel Developer Forum in September 2011, 6WIND announced support for the Intel® Data Plane Development Kit (see the press release here). Since that time, we have provided expert technical support to a number of OEMs using the Intel® DPDK library to develop high-end networking, telecom and security products.

 

As many readers of this blog will know, the Intel® DPDK is a set of data plane libraries and optimized NIC drivers, licensed by Intel for incorporation either into high-performance networking stacks (like the 6WINDGate™ packet processing software) or directly into customers’ applications.

 

6WIND gained extensive experience with the Intel® DPDK library while integrating it into 6WINDGate to achieve industry-leading packet processing performance. As a result of that experience, 6WIND decided to offer Intel® DPDK support to OEMs under two models:

 

First, we offer an enhanced version of the standard Intel® DPDK library for packet processing applications. This includes a range of value-added enhancements, developed internally as part of our own integration work. These enhancements include: crypto support using the AES-NI instructions; device monitoring and statistics features; support for additional devices such as NICs; bug fixes. We also provide a set of optional add-on modules that provide increased system functionality and performance, in areas such as virtualization and crypto acceleration.

 

This enhanced version of the standard Intel® DPDK library is maintained by 6WIND and synchronized with Intel’s on-going releases of the baseline library. We provide this library to OEMs worldwide, backed by a variety of technical support models such as standard support and maintenance, professional services for custom software development and comprehensive support for specific Software License Agreements (SLAs).

 

A number of OEMs, who have chosen to the integrate the Intel® DPDK library directly into their applications, have significantly accelerated their development time while also improving the system-level performance of their products, thanks to 6WIND’s support and assistance.

 

Our second support/distribution model is for those OEMs who need a full-featured, commercial networking stack that delivers the maximum packet processing performance on Intel® Architecture platforms. To address these needs, 6WIND provides its enhanced version of the Intel® DPDK library pre-integrated into the 6WINDGate packet processing software. This enables OEMs to license a single software solution that has been optimized to fully exploit the features of the Intel® DPDK library while delivering a comprehensive set of high-performance networking protocols (routing, firewall, security, connectivity, QoS, VLAN, protocol termination etc.).

 

As an example of the performance delivered by 6WINDGate, on a dual-Intel® Xeon® processor E5645 platform with a clock speed of 3.33GHz, running the Intel® DPDK, 6WINDGate delivers over 16 million packets per second, per core of IP forwarding performance, thereby forwarding 10Gbps of network traffic in each core (64-byte packets). This performance scales linearly with the number of cores configured to run 6WINDGate until the maximum bandwidth of the hardware platform is reached. Processor cores not used to run 6WINDGate are available to run value-added application software or Virtual Machines (VMs), resulting in a highly efficient and flexible system for advanced networking equipment.

 

As in the case of the stand-alone Intel® DPDK library, the 6WINDGate software is backed by a variety of technical support models such as standard support and maintenance, professional services for custom software development and comprehensive support for specific SLAs.

 

Since announcing our support for the Intel® DPDK library four months ago, we have seen strong interest from OEMs in incorporating it into high-performance networking equipment.

 

Are you working with the Intel® DPDK? What benefits are you seeing in terms of performance and time-to-market?

Users of the next generation of fixed function embedded devices expect the immediate response and rapid boot-up sequences similar to the “always on” features of today’s consumer electronics technology. However, to obtain needed fast start performance, designers must modify or eliminate the typical basic input/output system (BIOS) found on most x86 processor platforms. The normal tasks for the BIOS are to initialize and identify system devices and then locate and execute the boot loader software transferring control to the operating system. In a typical embedded application, the configuration remains constant so there is no need for that portion of the BIOS that checks for and interfaces with new attached hardware. A much faster approach can be developed with a basic boot loader created specifically for the embedded application, adapted to one well-defined hardware configuration, and one version of the operating system.

 

Offering a shortcut to “instant on” operation, the Intel® Boot Loader Development Kit (Intel® BLDK) allows designers to create customized initialization firmware for embedded platforms such as the Intel® Atom™ processor E6xx series. The Intel® BLDK software toolkit simplifies the development of basic fixed-function firmware rather than the full capabilities delivered with a traditional BIOS. Customers can optimize initialization firmware for shorter boot times. The Intel® BLDK product brief list the baseline boot speed at under three seconds although several vendors have created embedded products that boot in under a second. The kit includes sample reference board images that developers can use as a starting point to customize their system firmware images. The Intel® BLDK is based on the Unified Extensible Firmware Interface (UEFI) standard and features an integrated development environment to ease the modification and debug of the underlying code base. Because the toolkit is based on open UEFI standards, a significant portion of the source code is openly available and only low-level CPU and chipset initialization code are abstracted in binary libraries. The Intel® BLDK also helps reduce recurring costs since there are no fees or royalties.

 

The Intel® BLDK is also available with off-the-shelf software development packages. For example, the popular SourcePoint debug interface From Arium now includes built-in features that allow developers to debug in the source code used in Intel® BLDK development. SourcePoint enables rapid development of firmware for fixed-function embedded designs and includes Intel® BLDK support with an extension of the current UEFI-aware features offered by Arium. The most recent feature additions include cache-as-RAM, DRAM code execution trace buffers, and Architectural Event Trace (AET). For Intel® Atom™ processor E6xx series support, developers can run SourcePoint with Arium’s ECM-XDP3 JTAG Emulator for real-time display and manipulation of source code (See figure 1). Arium designed the ECM-XDP3 and the Arium software interface to be optimized for the Intel® Atom™ processor family. The SourcePoint software runs on both Microsoft Windows and Linux hosts.

 

ECM XDP3.jpg

 

Several commercial off-the-shelf (COTS) module manufacturers also support the Intel® BLDK allowing designers to easily create embedded devices with rapid startup features. The SYS9400 Reference Platform from Inforce Computing is an example of a complete, ready-to-use developer kit based on Intel® Atom™ technology and specifically created for ultra-mobile, small form-factor applications (See figure 1). The Nano-ITX single board computer supports the Intel® Atom™ Processor E6xx Series, the Intel® Platform Controller Hub EG20T, and up to 1 GB of on-board DDR2 memory. Human interface features include VGA, HDMI, and LVDS plus HD Audio along with an integrated resistive touch controller. In addition, the SYS9400 has four USB 2.0 ports, two RS-232 serial ports, a parallel port, general purpose I/Os, and Gigabit Ethernet. The module also includes a SD Card Slot & dual SATA storage options.

 

sys9410_blcdiag.jpg

 

In addition to Intel® BLDK compatibility, Intel® Atom™E6xx series architecture provides a plenty of performance enhancements and features to simplify these “instant on” device applications.  One improvement over the previous generation architecture is the integration of the display, audio, and memory interfaces onto the CPU resulting in higher system bandwidth along with a reduced bill of materials (BOM) and board area. To deal with the potentially rugged environments found in some embedded applications the Intel® Atom™E6xx series processors are available in the -40 to 85 °C extended temperature range. If you are starting or have completed a fixed function embedded design with rapid start features, please offer your suggestions and share your experience or questions via comments with fellow followers of the Intel® Embedded Community.  You can keep up with the latest related technical articles and product announcements at the Embedded Computing Design archives on Intel® Atom™E6xx.

 

To view other community content on interoperability, see "Interoperability - Top Picks

interoperability.jpg

Warren Webb
OpenSystems Media®, by special arrangement with Intel® Embedded Alliance

 

Arium is an Affiliate member of the by Intel® Embedded Alliance. InForce Computing is a General member of the Alliance.

 

As designers transition to the latest generation multicore processors, software must be divided into separate partitions to gain the performance benefits of parallel execution.  With Intel® Core™ processors, developers have access to multiple techniques to enable this performance gain including symmetric or asymmetric multiprocessing and virtualization. In the symmetric multiprocessing (SMP) configuration, a single operating system allocates threads or tasks across the available cores while managing common memory and hardware resources. Asymmetric multiprocessing (AMP) allows each core to run independent software so that a single system can easily combine real-time, deterministic tasks with a graphical user interface. With virtualization, a hypervisor isolates and allocates system resources between the operating environments so that real-time, general-purpose, and legacy software can be readily integrated in a multicore system.

 

Each of these performance improvement techniques has some risks especially for safety-critical applications. For example, when parallel, multithreaded applications become part of the software structure they are vulnerable to “race conditions” which occur when concurrent routines have access to, and one of them modifies, a shared memory location. Software failures and bugs caused by these race conditions are not deterministic and may be extremely difficult to locate with normal testing procedures. When developing parallel software, programmers must anticipate these simultaneous activities and once a routine begins to access memory, it must lock out other activities until the transaction is completed.  Although this approach sounds feasible, in practice it may run into problems if two routines are trying to “lock out” other activities simultaneously. To tackle these somewhat subtle coding problems, a number of software vendors have integrated analysis tools into their development packages to optimize the transition from serial applications to parallelism.

 

For C, C++, Java, and C# software development projects, Klocwork offers the Insight static code analysis tools to automatically locate critical programming bugs and security vulnerabilities in source code (See figure 1).  Klocwork has developed several approaches to locate and eliminate coding problems associated with multicore architectures. In a whitepaper entitled “Developing Software in a Multicore & Multiprocessor World”, Klocwork CTO Gwyn Fisher discusses techniques to identify unique software problems - specifically concurrency errors and endian incompatibilities. The paper also cites a VDC Research report that multicore and multiprocessor software projects are 4.5 times more expensive and have 25% longer schedules than the single core equivalents. In addition, Klocwork offers an on-demand webinar outlining the complexity of porting software to multiprocessor architectures and demonstrating the use of their Truepath automated, whole-program analysis engine.

 

Klocwork-insight-config.png

 

Unlike other source code analyzers that run as separate tools, DoubleCheck from Green Hills Software is an integrated static analyzer built directly into the MULTI Integrated Development Environment allowing compilation and defect analysis in the same pass. DoubleCheck evaluates potential execution paths through the code to determine how the values of program variables could change across these paths. To simplify the debugging of complex projects with multiple threads of execution, multiple cores, or multiple boards, the Green Hills Integrated Target List displays all system components hierarchically, making it easier to see relationships among applications, address spaces, tasks, and threads (See figure 2). Status information is displayed for all components, so you can quickly check the system state. The target list in the debugger allows you to follow application execution from one context to another with a single click. You can watch as different threads interact and sort out complex interdependencies easily.

 

target_list.jpg

 

After software has been successfully divided into secure code segments using static analysis tools, the 2nd generation Intel® Core™ architecture provides multiple features that augment the performance benefits of parallel execution.  For example, specialized Intel® functions such as Extended Page Tables (EPT) and Page Attribute Table (PAT) provide a hardware assist to the partitioning and allocation of physical memory among multiple cores. The processors also feature Intel® Virtualization Technology for flexible virtualization and Intel® QuickPath Technology to maximize multi-core performance.  If you are starting a new multicore project with and you have questions about static analysis tools, please share your concerns with fellow followers of the Intel® Embedded Community. You can also keep up with the latest technical details and product announcements at the Embedded Computing Design archives on Multicore static code analysis.

 

To view other community content on interoperability, see "Interoperability - Top Picks

interoperability.jpg

Warren Webb
OpenSystems Media®, by special arrangement with Intel® Embedded Alliance

 

Klocwork and Green Hills Software are Affiliate members of the by Intel® Embedded Alliance.

The Android software platform offers a wide range of facilities that can be configured to meet many different tasks. Developing software to operate within the Android environment means writing in Java. Few embedded developers currently use Java for many historic reasons: concern about memory size, program performance, power consumption and more. Most of these concerns have proven to be unfounded, but the new style of embedded application development requires new thinking and new tools.

 

In this overview of Android software development we’ll explore how to develop a new application, power control, and some Android built-in functions like compressed binary Java code that reduces memory usage. Then we’ll consider COTS products from the Intel Embedded Alliance members that can run Android – regardless of their form factor.

 

The seventies, eighties, and nineties saw ‘C’ become the dominant language for programming a wide variety of systems. ‘C’ started as a systems-focused language for developing the Unix operating system and associated utilities. The University standard for developing programming skills was based on ‘C’ in North America until recent times. Now, Universities have adopted Java as the language of choice to teach new programmers fundamental skills.  Embedded systems programming is beginning to adopt Java as well, but Java-friendly operating environments are just beginning to add capabilities for hard real-time programming. Nevertheless, Java is on the cusp of acceptance as a required language for embedded systems programmers.

 

AndroidTools.jpg

 

Java is the product of decades of development based on threaded-interpretive machines. A Java platform includes an implementation of the Java Virtual Machine (JVM), a byte coded virtual computer. The fact that the intended environment for Java programs is interpretive, gives rise to both the flexibility of the system, and concern over performance. The use of the JVM extends the development platforms that may be used to create Java applications.

 

There are a number of ways to learn Java including free online tutorials such as:

 

  • www.udemy.com/Java-Tutorial
  • download.oracle.com/javase/tutorial/
  • www.javabeginner.com/
  • math.hws.edu/javanotes/

 

Realtime Java is addressed by other online tutorials:

 

 

 

As with most embedded programming, developing code for an embedded system is best run on the target hardware. Developing a Java-based application targeted for Android involves the same decisions as any other embedded project: will the software be developed initially using an emulator or on physical hardware with the same or similar capabilities as the final intended hardware platform, what tools are required to create an application delivery package, and can Android Java apps be developed using my existing tools?

 

Android embraces both emulated hardware and real physical hardware, providing flexibility for developers.  The choice is a matter of the state-of-readiness of the final hardware platform. Software development often needs to begin creating the application before final hardware is available. Emerson Network Power (1) provides a COTS hardware solution that is specifically promoted as a platform for Android-based systems. The Emerson NITX-300 Series Development Board I is based on the Intel® Atom™ processor and includes Gigabit Ethernet, SATA, USB, serial ports, touchscreen, LCD, PCI Express x1 and PCI Express Mini Card slots. The NITX-300 is used by Thunder Software Technology Co.,Ltd (Thundersoft) (2) to deliver a medical tablet computer software embedded applications package. The Android software supplied has been adapted to serve the Tablet market. Called the BigDroid, Thundersoft delivers new display management that handles large format displays and touch screen technology.

 

Advantech (3) HIT-W121 is another system that explicitly supports Android. It was featured as a “teardown” article in EETimes that attributed Intel’s Atom processor performance as one of the reasons why Advantech chose the processor – combined with Intel’s engineering support. The HIT-W121 includes a 11.6” touchscreen and Intel’s ICH8 I/O hub. The I/O Hub supports the PCI Express and local bus, ACPI power management, and enhanced DMA. It is also available with an expended number of USB ports, high-definition audio, and a Gigabit Ethernet controller.

The growing popularity of Android for non-telecommunications applications is spawning a new group of service providers.  Adeneo Embedded (4) is one of these companies. Adeneo is a full service contract engineering firm that  can assist is developing Android-based systems starting with evaluation, moving to systems architecture, on to applications development and finally to fielding the final system. Like Adeneo, ArcherMind Technology (Nanjing) Co., Ltd  (5), iwave systems technologies pvt ltd, and Mobica Limited (6) also provide similar engineering services for Android systems using Intel processors.

 

AnroidSDK.jpg

Developing an Android-based Java application requires creating an “.apk” file that has been signed with a key denoting the .apk is either for debug or release. Without automation, the development task requires that engineers perform a number of individual steps that are purely mechanical. Tool chain suppliers including Green Hills Software (7), Intel, and Wind River Systems (8) all base their development tool platform on the Eclipse environment. When using tool chains from any of these suppliers, developers may choose to use a utility supplied with the Android environment to automate the creation of an .apk file from the Java source and specified libraries and non-compiled objects like images.

 

Programming in Java is different from ‘C’ because it is completely object oriented and encompasses syntactic and semantic structures that serve to eliminate certain classes of programming errors.

 

Structurally, Java looks similar, but different from ‘C’:

 

public class HelloWorld

{

    public static void main(String args[])

    {

        System.out.println("Hello World!");

    }

}

 

The ubiquitous “Hello World” program is defined as a class in Java; the filename of the class must be the same as the class. By comparison, a ‘C’ program source file can be named as the programmer wishes. The Java compiler creates a new file with the extension class.  For the example above, a new file named HelloWorld.class is compiled from HelloWorld.java. Java programs are assembled in packages, but you don’t have to write all the necessary code yourself. Java includes more than 300 packages with thousands of individual functions. And Android has a rich library of functions already pretested and certified.

 

Android’s management of virtual devices and the associated API aids in the transition from emulated hardware to final hardware during the development process. Since most common peripherals are already defined as classes moving from an emulated environment to a delivery platform is simplified – providing that you use standard defined APIs. Some hardware, like Thundersoft’s BigDroid tablet displays, require extensions to the standard Android display class. But, it’s possible to maintain compatibility between standard Android environments and environments using tablet displays by defining the extended classes to that the same API is still used.

 

Java was developed by programmers developing for workstation environments, and the native Java tools reflect that viewpoint. Eclipse-based toolchains provide a convenient mechanism to replace workstation-focused scripting languages while providing all of the control that is intrinsic in the Android SDK.

Like many other systems, power control is best addressed at the software architectural layer because that’s where the biggest paybacks can happen. But there’s still low hanging fruit for Android applications – mostly related to wireless communications and display brightness settings. Many of these choices are selected by the Android user, but you can influence their choices. Apps in the Android Marketplace, like the Power Widget, give users the ability to control how their Android-based handheld uses power. But there are other choices that you can make. If the Android device is designed using an AMOLED display, choosing to use a black background as the default in your app will save up to 85% of the power as compared to a white background. You can also close the application automatically if a logical place exists to do so and further extend battery life. Lastly, design your software so that it makes minimal use of GPS and radio functions – permitting them to be turned off when not in actual use. Users may still select less optimal power configurations, but there’s plenty of room to influence their choices.

 

Some intrinsic Android design decisions serve to minimize memory usage - both for program storage and during runtime execution. Recall that we talked briefly about the multitude of steps required to compile and prepare a program for execution on an Android platform. Android is based on a byte-code Java virtual machine. This Java machine interprets the byte-codes that make up each specific program. By choosing to compile to a byte-code format, programs are automatically smaller than the typical native machine code that results if the Java program is compiled to the underlying, physical, target computer.  My experience with byte-coded machines is that byte-coded programs can be one third the size of natively compiled programs.  Android takes this a step further. A special tool is used by the Android SDK to translate “normal” Java byte-codes to another virtual machine called Dalvik. Dalvik includes a 16 word register file as part of its architecture which results in object code that is even smaller and faster than the original Java byte-codes.

 

Java is gaining more realtime facilities as embedded development demands more reliability and faster development times.

 

Is Android in your future?

 

_____________________________________________________________________________________________________________________________________

 

  1. Emerson Network Power is a Premier member of the Intel Embedded Alliance
  2. Thunder Software Technology Co. is a General member of the Intel Embedded Alliance
  3. Advantech is a Premier member of the Intel Embedded Alliance
  4. Adeneo Embedded is an Affiliate member of the Intel Embedded Alliance
  5. ArcherMind Technology (Nanjing) Co., Ltd is a General member of the Intel Embedded Alliance
  6. iWave Systems Technologies is a General member of the Intel Embedded Alliance
  7. Mobica Limited is a General member of the Intel Embedded Alliance
  8. Green Hills Software is an Affliate member of the Intel Embedded Alliance
  9. Wind River Systems is an Associate member of the Intel Embedded Alliance

 

Henry Davis
Roving Reporter (Intel Contractor)
Intel® Embedded Alliance