Abhishek Nandi
Abhishek Nandi

Reputation: 1

Error in running DPDK L2FWD application on a container managed by Kubernetes

I am trying to run DPDK L2FWD application on a container managed by Kubernetes.

To achieve this I have done the below steps -

FROM ubuntu:16.04 RUN apt-get update
RUN apt-get install -y net-tools
RUN apt-get install -y python
RUN apt-get install -y kmod RUN apt-get install -y iproute2
RUN apt-get install -y net-tools ADD ./dpdk/ /home/sdn/dpdk/
WORKDIR /home/sdn/dpdk/

/mnt/huge
/usr
/lib
/etc

Below is k8s deployment yaml used to create the POD

apiVersion: v1
kind: Pod
metadata:
  name: dpdk-pod126
spec:
  containers:
  - name: dpdk126
    image: dpdk-test126
    imagePullPolicy: IfNotPresent
    command: ["/bin/sh"]
    args: ["-c", "while true; do echo hello; sleep 10;done"]
    resources:
      requests:
        memory: "2Gi"
        cpu: "100m"
    volumeMounts:
      - name: hostvol1
        mountPath: /mnt/huge
      - name: hostvol2
        mountPath: /usr
      - name: hostvol3
        mountPath: /lib
      - name: hostvol4
        mountPath: /etc
    securityContext:
      privileged: true
  volumes:
  - name: hostvol1
    hostPath:
      path: /mnt/huge
  - name: hostvol2
    hostPath:
      path: /usr
  - name: hostvol3
    hostPath:
      path: /home/sdn/kubernetes-test/libtest
  - name: hostvol4
    hostPath:
      path: /etc

root@dpdk-pod126:/home/sdn/dpdk# ./examples/l2fwd/build/l2fwd -c 0x0f -- -p 0x03 -q 1
EAL: Detected 16 lcore(s)
EAL: Detected 1 NUMA nodes
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: No free hugepages reported in hugepages-1048576kB
EAL: 1007 hugepages of size 2097152 reserved, but no mounted hugetlbfs found for that size
EAL: FATAL: Cannot get hugepage information.
EAL: Cannot get hugepage information.
EAL: Error - exiting with code: 1
Cause: Invalid EAL arguments

Upvotes: 0

Views: 1133

Answers (2)

Mikhail Kozlov
Mikhail Kozlov

Reputation: 1

First of all, you have to verify, that you have enough hugepages in your system. Check it with kubectl command:

kubectl describe nodes

where you could see something like this:

Capacity:
  cpu:                12
  ephemeral-storage:  129719908Ki
  hugepages-1Gi:      0
  hugepages-2Mi:      8Gi
  memory:             65863024Ki
  pods:               110

If your hugepages-2Mi is empty, then your k8s don't see mounted hugepages

After mounting hugepages into your host, you can prepare your pod to work with hugepages. You don't need to mount hugepages folder as you shown. You can simply add emptyDir volume like this:

  volumes:
  - name: hugepage-2mi
    emptyDir:
      medium: HugePages-2Mi

HugePages-2Mi is a specific resource name that corresponds with hugepages of 2Mb size. If you want to use 1Gb size hugepages then there is another resource for it - hugepages-1Gi

After defining the volume, you can use it in volumeMounts like this:

    volumeMounts:
    - mountPath: /hugepages-2Mi
      name: hugepage-2mi

And there is one additional step. You have to define resource limitations for hugepages usage:

    resources:
      limits:
        hugepages-2Mi: 128Mi
        memory: 128Mi
      requests:
        memory: 128Mi

After all this steps, you can run your container with hugepages inside container

As @AdamTL mentioned, you can find additional info here

Upvotes: 0

AdamTL
AdamTL

Reputation: 180

According to this, you might be missing medium: HugePages from your hugepage volume.

Also, hugepages can be a bit finnicky. Can you provide the output of:
cat /proc/meminfo | grep -i huge
and check if there's any files in /mnt/huge?

Also maybe this can be helpful. Can you somehow check if the hugepages are being mounted as mount -t hugetlbfs nodev /mnt/huge?

Upvotes: 0

Related Questions