<commit_before>edpdk
=====

A set of Erlang port commands for using Intel DPDK PMDs (Poll-Mode Drivers).  edpdk initially provides the following port
commands to allow an Erlang node to receive and transmit packets through DPDK PMDs.  

1. {recv, <<>>, PortNo} - Receive a packet from PortNo in the follwing formats:
   
  * {ok, <<packet>>}. 
  * {fail, empty}.
   
     
2. {xmit, <<packet>>, PortNo} - Transmit a packet to PortNo and returns a status in the following formats:
   
  * {ok, queued}.
  * {fail, full_or_busy}.
   
The driving motivation for this specific Intel DPDK support is to achieve a "fast path" for an Erlang-based packet
forwarder (e.g. soft switch).  Based on a very simple experiment, a dumb packet forwarder (fwdr.erl) showed better
packet forwarding performance over a soft switch when forwarding a packet with a very simple rule.  However, since
edpdk is implemented with Erlang ports, a packet copy from C to Erlang space plus stdin/stdout sys calls are introduced.
Nevertheless, it could be improved to use Erlang drivers or NIFs to eliminate these overheads. Yet Intel DPDK needs
to be evaluated for these approaches since it does not directly provide system integration facilities.  Integrating
Intel DPDK with Erlang VM is yet an area to explore and test.

For more information on Intel DPDK please see the following links:

[Intel DPDK Packet Processing Overview](http://www.intel.ph/content/dam/www/public/us/en/documents/presentation/dpdk-packet-processing-ia-overview-presentation.pdf).
[dpdk.org](http://dpdk.org/)<commit_msg>Reformat README using a markdown editor.  This is much easier and cleaner.<commit_after>edpdk
=====

A set of Erlang port commands for using Intel DPDK PMDs (Poll-Mode Drivers).  Edpdk initially
provides the following commands to allow an Erlang node to receive or transmit packets through
DPDK PMDs.

- {recv, <<>>, PortNo} - Receive a packet from PortNo with the following formats:
  
  - {ok, << packet>>}
  - {fail, empty}
  


- {xmit, << packet>>, PortNo} - Transmit a packet to PortNo and returns a status in the following formats:

    - {ok, queued}
    - {fail, full_or_busy}
    
The driving motivation for this specific Intel DPDK support is to achieve a "fast path" for an Erlang-based packet forwarder (e.g. soft switch).  Based on a very simple experiment, a dumb packet forwarder (fwdr.erl) showed better packet forwarding performance over a soft switch when forwarding a packet with a very simple rule.  However, since edpdk is implemented with Erlang ports, a packet copy from C to Erlang space plus stdin/stdout sys calls are introduced.  Nevertheless, it could be improved to use Erlang drivers or NIFs to eliminate these overheads. Yet Intel DPDK needs to be evaluated for these approaches since it does not directly provide system integration facilities.  Integrating Intel DPDK with Erlang VM is yet an area to explore and test.
 

For more information on Intel DPDK please see the following links:


- [dpdk.org](http://dpdk.org/)
- [Intel DPDK Packet Processing Overview](http://www.intel.ph/content/dam/www/public/us/en/documents/presentation/dpdk-packet-processing-ia-overview-presentation.pdf)
{'fraction_non_alphanumeric': 0.07245922208281054, 'fraction_numerical': 0.0006273525721455458, 'mean_word_length': 4.094249201277956, 'pattern_counts': {'":': 0, '<': 15, '<?xml version=': 0, '>': 15, 'https://': 0, 'lorem ipsum': 0, 'www.': 4, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '841682', 'n_tokens_mistral': 914, 'n_tokens_neox': 877, 'n_words': 427}