ANLAB-KAIST/rust-dpdk

libclang 필요하다고 명시해야함

Closed this issue · 13 comments

되도록 Ubuntu/Centos에서 설치하는 방법도..

.. and libnuma

그리고 다음을 사용자가 굳이 설정하지 않아도 컴파일 되는 방법을 찾으면 좋겠습니다.

export RUSTFLAGS="-C link-arg=-L/home/jeehoonkang/Works/rust-dpdk/target/debug/build/rust-dpdk-sys-cd70b13e628fe826/out/3rdparty/dpdk/build/lib -C link-arg=-Wl,--whole-archive -C link-arg=-lrte_kvargs -C link-arg=-Wl,--no-whole-archive -C link-arg=-lnuma -C link-arg=-lm -C link-arg=-lc

그리고 위 사항을 해야한다는 사실은 README에 적혀있어야 합니다.

여기 보니 rustflags cargo.toml에서 지정하는 방법이 있네요 https://doc.rust-lang.org/cargo/reference/config.html

@leeopop 제 워크플로우에서는 RUSTFLAGS 설정해야하는 사실이 크게 방해됩니다. IDE에서 자주 자동으로 cargo build를 수행하기도 하고 저도 CLI가 아니라 IDE 내에서 cargo build를 해서요.

이 이슈를 먼저 해결해주시길 부탁드립니다. 일반적으로, 지금 단계에서는 더 많은 기능이나 최적화보다 협업이 쉬운 방향으로 만들고 진화해야한다고 생각합니다. 여의치 않으면 다른 사람들이 만든 rust-dpdk를 쓰는게 더 나을 수도 있겠습니다.

Cargo.toml에 rustflags지정하는건 왜 안되나요? 된다면 제 모든 작업환경에서 rustflags env variable 안넣어도 될거같아서요.

@jeehoonkang rust-dpdk에서 넣어도 FPS에서 rust-dpdk를 의존했을 때 FPS의 Rustflag에 안들어갔던걸로 기억합니다. 혹시 모르니 다시 한번 시도해보겠습니다.

cargo 측에 제안한 issue 입니다.
rust-lang/cargo#7586

저도 이부분은 정말 마음에 안 드는 부분이라 일단 시간을 내서 다른 방법이 없나 살펴보고 있습니다.

  1. cargo 에서 rustflags 지정하는 경우에는 -l, -L 옵션만 지정 가능합니다.
    https://doc.rust-lang.org/cargo/reference/build-scripts.html#cargorustc-flagsflags

기존 구현체로 실행했을때의 로그입니다.

["target/debug/dpdk_sys_test"]
EAL: Detected 48 lcore(s)
EAL: Detected 2 NUMA nodes
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'PA'
EAL: No available hugepages reported in hugepages-1048576kB
EAL: Probing VFIO support...
EAL: PCI device 0000:01:00.0 on NUMA socket 0
EAL:   probe driver: 8086:1528 net_ixgbe
EAL: PCI device 0000:01:00.1 on NUMA socket 0
EAL:   probe driver: 8086:1528 net_ixgbe
EAL: PCI device 0000:03:00.0 on NUMA socket 0
EAL:   probe driver: 8086:1583 net_i40e
i40e_GLQF_reg_init(): i40e device 0000:03:00.0 changed global register [0x002689a0]. original: 0x00000000, new: 0x00000029 
i40e_GLQF_reg_init(): i40e device 0000:03:00.0 changed global register [0x00268ca4]. original: 0x00001840, new: 0x00009420 
EAL: PCI device 0000:03:00.1 on NUMA socket 0
EAL:   probe driver: 8086:1583 net_i40e
EAL: PCI device 0000:81:00.0 on NUMA socket 1
EAL:   probe driver: 8086:1583 net_i40e
i40e_GLQF_reg_init(): i40e device 0000:81:00.0 changed global register [0x002689a0]. original: 0x00000000, new: 0x00000029 
i40e_GLQF_reg_init(): i40e device 0000:81:00.0 changed global register [0x00268ca4]. original: 0x00001840, new: 0x00009420 
EAL: PCI device 0000:81:00.1 on NUMA socket 1
EAL:   probe driver: 8086:1583 net_i40e
["af_packet", "ark", "atlantic", "avp", "axgbe", "bbdev_fpga_lte_fec", "bbdev_null", "bbdev_turbo_sw", "bnxt", "bond", "caam_jr", "crypto_scheduler", "cxgbe", "dpaa", "dpaa2", "dpaa2_event", "dpaa2_sec", "dpaa_event", "dpaa_sec", "dsw_event", "e1000", "ena", "enetc", "enic", "failsafe", "fm10k", "hinic", "hns3", "i40e", "iavf", "ice", "ifc", "ionic", "ixgbe", "kni", "lio", "memif", "netvsc", "nfp", "nitrox", "null", "null_crypto", "octeontx", "octeontx2", "octeontx2_crypto", "octeontx2_event", "octeontx_crypto", "octeontx_ssovf", "octeontx_zip", "opdl_event", "qat", "qede", "ring", "sfc_efx", "skeleton_event", "softnic", "sw_event", "tap", "thunderx_nicvf", "vdev_netvsc", "vhost", "virtio", "virtio_crypto", "vmxnet3_uio"]

net_i40e 드라이버가 로드되어 정상 인식이 됩니다.

반면에 cargo link 옵션으로 -ldpdk 만을 주면 다음과 같이 됩니다.

EAL: Detected 48 lcore(s)
EAL: Detected 2 NUMA nodes
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'PA'
EAL: No available hugepages reported in hugepages-1048576kB
EAL: Probing VFIO support...
["af_packet", "ark", "atlantic", "avp", "axgbe", "bbdev_fpga_lte_fec", "bbdev_null", "bbdev_turbo_sw", "bnxt", "bond", "caam_jr", "crypto_scheduler", "cxgbe", "dpaa", "dpaa2", "dpaa2_event", "dpaa2_sec", "dpaa_event", "dpaa_sec", "dsw_event", "e1000", "ena", "enetc", "enic", "failsafe", "fm10k", "hinic", "hns3", "i40e", "iavf", "ice", "ifc", "ionic", "ixgbe", "kni", "lio", "memif", "netvsc", "nfp", "nitrox", "null", "null_crypto", "octeontx", "octeontx2", "octeontx2_crypto", "octeontx2_event", "octeontx_crypto", "octeontx_ssovf", "octeontx_zip", "opdl_event", "qat", "qede", "ring", "sfc_efx", "skeleton_event", "softnic", "sw_event", "tap", "thunderx_nicvf", "vdev_netvsc", "vhost", "virtio", "virtio_crypto", "vmxnet3_uio"]

Resolved by #25