Any suggestions here.. Thanks Anshul Makkar
On Tue, Nov 18, 2014 at 5:34 PM, Anshul Makkar < anshul.mak...@profitbricks.com> wrote: > Sorry, forgot to mention I am using " git clone -b vhost-user-v5 > https://github.com/virtualopensystems/qemu.git" for vhost-user backend > implementation. > > and "git clone https://github.com/virtualopensystems/vapp.git " for > reference implementation. > > Anshul Makkar > > > On Tue, Nov 18, 2014 at 5:29 PM, Anshul Makkar < > anshul.mak...@profitbricks.com> wrote: > >> Hi, >> >> I am developing an application that is using vhost-user backend for >> packet transfer. >> >> The architecture: >> >> 1) VM1 is using Vhost-user and executing on server1. >> >> ".qemu-system-x86_64 -m 1024 -mem-path >> /dev/hugepages,prealloc=on,share=on -drive >> file=/home/amakkar/test.img,if=none,id=drive-virtio-disk0,format=raw,cache=none,aio=native >> -device >> virtio-blk-pci,bus=pci.0,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=2 >> -vga std -vnc 0.0.0.0:3 -netdev >> type=vhost-user,id=net0,file=/home/amakkar/qemu.sock -device >> virtio-net-pci,netdev=net0" >> >> 2) App1 on server1: executing in user-mode connects with vhost-user >> backend over qemu.sock. As expected, initialization is done and guest >> addresses including addresses of descriptor ring , available ring and used >> ring and mapped to my userspace app and I can directly access them. >> >> I launch PACKETH on VM1 and transfer some packets using eth0 on VM1 >> (packet transfer uses virtio-net backend. ifconfig eth0 shows correct TX >> stats) >> >> In App1 I directly access the avail_ring buffer and consume the packet >> and then I do RDMA transfer to server 2 . >> >> 3) VM2 and App2 executing on server2 and again using VHost-User. >> >> App2: Vring initializations are successfully done and vring buffers are >> mapped. I get the buffer from App1 and now *I want to transfer this >> buffer (Raw packet) to VM2.* >> >> To transfer the buffer from App2 to VM2, I directly access the descriptor >> ring, place the buffer in it and update the available index and then issue >> the kick. >> >> code snippet for it: >> >> dest_buf = (void *)handler->map_handler(handler->context, >> desc[a_idx].addr); >> memcpy(dest_buf + hdr_len, buf, size); >> avail->ring[avail->idx % num] = a_idx; >> avail->idx++; >> fprintf(stdout, "put_vring, synching memory \n"); >> sync_shm(dest_buf, size); >> sync_shm((void *)&(avail), sizeof(struct vring_avail)); >> >> kick(&vhost_user->vring_table, rx_idx); >> >> But the buffer never reaches to VM2. (I do ifconfig eth0 in VM2 and RX >> stats are 0) >> >> Please can you share if my approach is correct in transferring the packet >> from App2 to VM. Can I directly place the buffer in descriptor ring and >> issue a kick to notify virtio-net that a packet is available or you can >> smell some implementation problem. >> >> Thanks >> Anshul Makkar >> >> >