https://github.com/aliireza/cachedirector

CacheDirector - Sending Packets to the Right Slice by Exploiting Intel Last-Level Cache Addressing

https://github.com/aliireza/cachedirector

Science Score: 23.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
  • codemeta.json file
  • .zenodo.json file
  • DOI references
    Found 2 DOI reference(s) in README
  • Academic publication links
    Links to: acm.org
  • Academic email domains
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (10.6%) to scientific vocabulary

Keywords

cachedirector dpdk nuca
Last synced: 5 months ago · JSON representation

Repository

CacheDirector - Sending Packets to the Right Slice by Exploiting Intel Last-Level Cache Addressing

Basic Info
  • Host: GitHub
  • Owner: aliireza
  • Language: C
  • Default Branch: cachedirector
  • Homepage:
  • Size: 52.8 MB
Statistics
  • Stars: 10
  • Watchers: 3
  • Forks: 1
  • Open Issues: 0
  • Releases: 0
Fork of DPDK/dpdk
Topics
cachedirector dpdk nuca
Created about 7 years ago · Last pushed almost 7 years ago

https://github.com/aliireza/CacheDirector/blob/cachedirector/

# CacheDirector

CacheDirector is a network I/O solution that exploits [slice-aware memory management][slice-aware-repo], extends Data Direct I/O ([DDIO][ddio]),  and sends each packet's header directly to the correct slice in the LLC; hence, the CPU core that is responsible for processing a packet can access the packet header in fewer CPU cycles. For more information, check out our [paper][cachedirector-eurosys-paper] and my talk at [EuroSys'19][cachedirector-video].


## Building CacheDirector

To build, you can use the default DPDK build system.
```
make install T=x86_64-native-linuxapp-gcc
```
The current version of CacheDirector is tested on systems with Intel(R) Xeon(R) E5-2667 v3 and Intel(R) Xeon(R) Gold 6134, which are equipped with Mellanox ConnectX-4 MT27700 card. 

### Extra Consideration 

- Please set `CONFIG_RTE_PKTMBUF_HEADROOM` according to your CPU architecture. You can find more information in `./config/common_base`.
- Please define/undefine `HASWELL` or `SKYLAKE` in `./lib/librte_msr/rte_msr.h` according to your CPU architecture.
- Please define/undefine `UNCORE` in `./lib/librte_slice/rte_slice.h` for using uncore performance counters, rather than hash function. It is important to notice that hash function only works on Haswell architecture.

## Using CacheDirector with FastClick

You can try CacheDirector with any DPDK-based application. However, if you want to use [FastClick][fastclick] or [Metron][metron]. You have to modify `$fastclick-path/userlevel/dpdk.mk` to support new libraries added for CacheDirector, as below:

```
ifneq ($(CONFIG_RTE_BUILD_COMBINE_LIBS),y)
_LDLIBS-$(CONFIG_RTE_LIBRTE_MSR)            += -lrte_msr 	  # Added
_LDLIBS-$(CONFIG_RTE_LIBRTE_SLICE)          += -lrte_slice  # Added
_LDLIBS-$(CONFIG_RTE_LIBRTE_KVARGS)         += -lrte_kvargs
_LDLIBS-$(CONFIG_RTE_LIBRTE_MBUF)           += -lrte_mbuf
_LDLIBS-$(CONFIG_RTE_LIBRTE_MBUF_OFFLOAD)   += -lrte_mbuf_offload
_LDLIBS-$(CONFIG_RTE_LIBRTE_IP_FRAG)        += -lrte_ip_frag
```

Then, you need to configure and make FastClick:

```
./configure RTE_SDK=$CACHEDIRECTORPATH RTE_TARGET=x86_64-native-linuxapp-gcc --enable-multithread --disable-linuxmodule --enable-intel-cpu --enable-user-multithread --verbose CFLAGS="-std=gnu11 -O3" CXXFLAGS="-std=gnu++14 -O3" --disable-dynamic-linking --enable-poll --enable-bound-port-transfer --enable-dpdk --enable-batch --with-netmap=no --enable-zerocopy --disable-dpdk-pool --disable-dpdk-packet --enable-local --enable-nanotimestamp --enable-ipsec --enable-analysis --disable-ip6 --enable-simple --enable-etherswitch --enable-json --enable-all-elements

make

```


## Building an emulated slice-aware Key-Value Store (KVS)

```
export RTE_SDK=$CACHEDIRECTOR_PATH
export RTE_TARGET=x86_64-native-linuxapp-gcc
cd examples/KVS
make
```


## Citing our paper

If you use CacheDirector or [slice-aware memory management][slice-aware-repo] in any context, please cite our [paper][cachedirector-eurosys-paper]:

```
@inproceedings{farshin-slice-aware,
 author = {Farshin, Alireza and Roozbeh, Amir and {Maguire Jr.}, Gerald Q. and Kosti\'{c}, Dejan},
 title = {{Make the Most out of Last Level Cache in Intel Processors}},
 booktitle = {Proceedings of the Fourteenth EuroSys Conference 2019},
 series = {EuroSys '19},
 year = {2019},
 isbn = {978-1-4503-6281-8},
 location = {Dresden, Germany},
 pages = {8:1--8:17},
 articleno = {8},
 numpages = {17},
 url = {http://doi.acm.org/10.1145/3302424.3303977},
 doi = {10.1145/3302424.3303977},
 acmid = {3303977},
 publisher = {ACM},
 address = {New York, NY, USA},
 keywords = {Cache Allocation Technology, Cache Partitioning, CacheDirector, DDIO, DPDK, Key-Value Store, Last Level Cache, Network Function Virtualization, Non-Uniform Cache Architecture, Slice-aware Memory Management},
}
```

## Getting Help

If you have any questions regarding our code or the paper, you can contact Amir Roozbeh (amirrsk at kth.se) and/or Alireza Farshin (farshin at kth.se).

[cachedirector-eurosys-paper]: https://people.kth.se/~farshin/documents/slice-aware-eurosys19.pdf
[cachedirector-video]: https://play.kth.se/media/Make+the+Most+out+of+Last+Level+Cache+in+Intel+Processors+%28EuroSys+%2719%29/0_jqd1pfa9
[slice-aware-repo]: https://github.com/aliireza/slice-aware
[ddio]: https://www.intel.com/content/www/us/en/io/data-direct-i-o-technology.html
[fastclick]: https://github.com/tbarbette/fastclick/
[metron]: https://github.com/tbarbette/fastclick/tree/metron

Owner

  • Name: Alireza Farshin
  • Login: aliireza
  • Kind: user
  • Location: Stockholm, Sweden
  • Company: KTH

Networked Systems Researcher | Doctoral Student

GitHub Events

Total
  • Watch event: 1
Last Year
  • Watch event: 1