+1.
For reference, here's my current development workflow for Ubuntu 16.04:
1. Build and install 2x dpdk Debian packages
* From the workspace root: "make dpdk-install-dev"
* "cd dpdk; sudo dpkg -i *.deb"
2. Build and install vpp Debian packages
* "cd build-root; ./bootstrap.sh; make PLATFORM=vpp TAG=vpp_debug
install-deb"
* "sudo dpkg -i *.deb"
* "sudo service vpp stop"
The point of this dance is to modprobe drivers and to configure hugetlb pages
3. Run vpp in gdb [in emacs, in my case]
* "cd build-root"
* "# gdb ./install-vpp_debug-native/vpp/bin/vpp"
To fix a bug and retry:
* Fix the bug. Exercise for the reader. (;-)
* "cd build-root; make PLATFORM=vpp TAG=vpp_debug vpp-install"
* Depending on the set of files involved, this typically takes a few
seconds
* Step (3) above.
Once in gdb, you have options in terms of configuring vpp.
* To "just start it" in single-core mode: "(gdb) r unix interactive"
* To start it as if by systemd: "(gdb) r -c /etc/vpp/startup.conf"
* In this mode, I typically change "nodaemon -> interactive", and add
"cli-listen localhost:5002" to /etc/vpp/startup.conf
* Remember the debug CLI "exec <filename>" command, which executes debug
CLI scripts
* Remember the vpp_api_test "script" command, which executes binary API
scripts.
HTH... Dave
From: [email protected] [mailto:[email protected]] On
Behalf Of Mohsin Kazmi (sykazmi)
Sent: Wednesday, February 8, 2017 9:02 AM
To: Sreejith Surendran Nair <[email protected]>
Cc: vpp-dev <[email protected]>
Subject: Re: [vpp-dev] Query regarding VPP Pool allocation
Hi Sreejith,
If you would do "make", you will find the help menu. There is mentioned a way
to provide " startup.conf " :
make run STARTUP_CONF=startup.conf
-br
Mohsin
________________________________
From: [email protected]<mailto:[email protected]>
<[email protected]<mailto:[email protected]>> on behalf of
Sreejith Surendran Nair
<[email protected]<mailto:[email protected]>>
Sent: Wednesday, February 8, 2017 2:58 PM
To: Dave Barach (dbarach)
Cc: vpp-dev
Subject: Re: [vpp-dev] Query regarding VPP Pool allocation
Hi Dave,
Thanks a lot for the kind help. I was able to resolve the problem.
The issue appeared to occur due to incorrect interface name value set to
"mhash_set_mem" . When tried to get the interface using mhash_get incorrect
value was returned and "pool_elt_at_index" failed to get correct value.
Sorry I had an additional small doubt related to configuring VPP to test
multi-threading support in debug mode. I am building the package using "make
build" and running using "make run".I have configured the vpp startup.conf to
enable "workers"(value set to 2 have two core CPU). I had a confusion is it
possible to test this way in debug mode as startup file may not be used.
Thanks & Regards,
Sreejith
On 7 February 2017 at 22:37, Dave Barach (dbarach)
<[email protected]<mailto:[email protected]>> wrote:
If you continue to have trouble, please push a draft patch and I'll take a
look...
Thanks... Dave
From: Sreejith Surendran Nair
[mailto:[email protected]<mailto:[email protected]>]
Sent: Tuesday, February 7, 2017 11:24 AM
To: Dave Barach (dbarach) <[email protected]<mailto:[email protected]>>
Cc: vpp-dev <[email protected]<mailto:[email protected]>>
Subject: Re: [vpp-dev] Query regarding VPP Pool allocation
Hi Dave,
Thanks a lot for your kind help and the valuable inputs. Appreciate the same.
I will recheck my changes and identify the problem.
Thanks & Regards,
Sreejith
On 7 February 2017 at 18:44, Dave Barach (dbarach)
<[email protected]<mailto:[email protected]>> wrote:
There's no need to call pool_alloc(...) in typical cases. Pools are vectors
(dynamic arrays), they expand as necessary.
During initial development, please always run TAG=vpp_debug or equivalent
images. If you make mistakes with vector-based data structure(s), the code
tends to ASSERT(...) immediately.
There are a ton of pool-based examples. It's really no more complicated than:
typedef struct {
foo_t * foo_pool;
} my_main_t;
my_main_t my_main;
foo_t *object;
my_main_t *mp = &my_main;
pool_get (mp->foo_pool, object);
memset(object, 0, sizeof(*object));
object_index = object - mp->foo_pool; /* invariant forever */
/* recover object by index, safe across pool expansion */
object = pool_elt_at_index (mp->foo_pool, object_index);
/* Free the object */
pool_put (mp->foo_pool, object);
or
pool_put_index (mp->foo_pool, object_index);
Notes include: never memorize pointers to objects allocated in this manner,
unless you enjoy debugging dangling reference bugs. Always memorize pool
indices instead...
Thanks... Dave
From: [email protected]<mailto:[email protected]>
[mailto:[email protected]<mailto:[email protected]>] On
Behalf Of Sreejith Surendran Nair
Sent: Tuesday, February 7, 2017 7:19 AM
To: vpp-dev <[email protected]<mailto:[email protected]>>
Subject: [vpp-dev] Query regarding VPP Pool allocation
Hi All,
I am working on VPP/ODP Integration. I had query regarding "pool_get" API.
I am using call "pool_get(om->interfaces,oif) " with parameters
"om->interfaces" and "oif" should we need to allocate memory for
"om->interfaces" using "pool_alloc" before calling pool_get.
I am presently not using "pool_alloc" to allocate memory and using" pool_get"
during interface creation and "pool_put" during interface deletion. I followed
"af_packet/netmap" as reference implementation,
But when I tried to delete the interface I saw "pool_put" call is getting stuck
as the next statements are not executed. I thought it may be because
"pool_alloc" was not used for "om->interfaces".Also while creating multiple
interface and deleting the same I am getting a crash due to pool not free error.
If possible kindly request if anyone could please correct me.
Thanks & Regards,
Sreejith
_______________________________________________
vpp-dev mailing list
[email protected]
https://lists.fd.io/mailman/listinfo/vpp-dev