{"action":"created","issue":{"url":"https://api.github.com/repos/Igalia/snabb/issues/573","repository_url":"https://api.github.com/repos/Igalia/snabb","labels_url":"https://api.github.com/repos/Igalia/snabb/issues/573/labels{/name}","comments_url":"https://api.github.com/repos/Igalia/snabb/issues/573/comments","events_url":"https://api.github.com/repos/Igalia/snabb/issues/573/events","html_url":"https://github.com/Igalia/snabb/issues/573","id":188735430,"number":573,"title":"Measure impact of binding table updates on data-plane performance","user":{"login":"wingo","id":1745903,"avatar_url":"https://avatars.githubusercontent.com/u/1745903?v=3","gravatar_id":"","url":"https://api.github.com/users/wingo","html_url":"https://github.com/wingo","followers_url":"https://api.github.com/users/wingo/followers","following_url":"https://api.github.com/users/wingo/following{/other_user}","gists_url":"https://api.github.com/users/wingo/gists{/gist_id}","starred_url":"https://api.github.com/users/wingo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wingo/subscriptions","organizations_url":"https://api.github.com/users/wingo/orgs","repos_url":"https://api.github.com/users/wingo/repos","events_url":"https://api.github.com/users/wingo/events{/privacy}","received_events_url":"https://api.github.com/users/wingo/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":{"url":"https://api.github.com/repos/Igalia/snabb/milestones/6","html_url":"https://github.com/Igalia/snabb/milestone/6","labels_url":"https://api.github.com/repos/Igalia/snabb/milestones/6/labels","id":2129032,"number":6,"title":"v3.1.0","description":"In this milestone we release a lwAFTR with low-overhead integration with a NETCONF control plane.  This release builds on the previous one but adds the persistent \"snabb config listen\" channel, and does performance testing for all components.","creator":{"login":"wingo","id":1745903,"avatar_url":"https://avatars.githubusercontent.com/u/1745903?v=3","gravatar_id":"","url":"https://api.github.com/users/wingo","html_url":"https://github.com/wingo","followers_url":"https://api.github.com/users/wingo/followers","following_url":"https://api.github.com/users/wingo/following{/other_user}","gists_url":"https://api.github.com/users/wingo/gists{/gist_id}","starred_url":"https://api.github.com/users/wingo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wingo/subscriptions","organizations_url":"https://api.github.com/users/wingo/orgs","repos_url":"https://api.github.com/users/wingo/repos","events_url":"https://api.github.com/users/wingo/events{/privacy}","received_events_url":"https://api.github.com/users/wingo/received_events","type":"User","site_admin":false},"open_issues":6,"closed_issues":2,"state":"open","created_at":"2016-11-11T10:04:17Z","updated_at":"2016-12-09T13:22:40Z","due_on":"2016-12-06T00:00:00Z","closed_at":null},"comments":4,"created_at":"2016-11-11T10:59:15Z","updated_at":"2016-12-09T15:19:36Z","closed_at":null,"body":"When the data plane is operating at full load, both in bump-in-the-wire, 550 bytes/packet workloads and on-a-stick IMIX workloads, we need to make sure that we can update the binding table without causing packet drops.  To this end we need to create a test rig consisting of three components: one, a lwaftr; two, a load generator that measures and records packet loss; three, a \"snabb config\" workload that uses the listen interface to add and remove entries to the binding table.  To allow the packet loss characteristics to be measured, we should make these changes to softwires that are not seeing any traffic in the test workload.  The target is 1000 changes/second without packet loss.\r\n\r\nIdeally we should express this test as a hydra job.  Maybe we don't have to run this hydra job on every commit, but we should be able to run it manually."},"comment":{"url":"https://api.github.com/repos/Igalia/snabb/issues/comments/266038745","html_url":"https://github.com/Igalia/snabb/issues/573#issuecomment-266038745","issue_url":"https://api.github.com/repos/Igalia/snabb/issues/573","id":266038745,"user":{"login":"wingo","id":1745903,"avatar_url":"https://avatars.githubusercontent.com/u/1745903?v=3","gravatar_id":"","url":"https://api.github.com/users/wingo","html_url":"https://github.com/wingo","followers_url":"https://api.github.com/users/wingo/followers","following_url":"https://api.github.com/users/wingo/following{/other_user}","gists_url":"https://api.github.com/users/wingo/gists{/gist_id}","starred_url":"https://api.github.com/users/wingo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wingo/subscriptions","organizations_url":"https://api.github.com/users/wingo/orgs","repos_url":"https://api.github.com/users/wingo/repos","events_url":"https://api.github.com/users/wingo/events{/privacy}","received_events_url":"https://api.github.com/users/wingo/received_events","type":"User","site_admin":false},"created_at":"2016-12-09T15:19:36Z","updated_at":"2016-12-09T15:19:36Z","body":"To test this, you run a lwaftr.  Say it's running and named \"lwaftr\".  For this example:\r\n\r\n```\r\nsudo ./snabb lwaftr run --name lwaftr --reconfigurable --cpu 4 --conf program/lwaftr/tests/data/icmp_on_fail.conf --v4 03:00.0 --v6 03:00.1\r\n```\r\n\r\nNow run a loadtest:\r\n\r\n```\r\nsudo numactl -m 1 taskset -c 9 ./snabb lwaftr loadtest -D 5 --program=ramp_down -b 9.2e9 -s 1e5 program/lwaftr/tests/benchdata/ipv4-0550.pcap \"NIC 0\" \"NIC 1\" 83:00.0 program/lwaftr/tests/benchdata/ipv6-0550.pcap \"NIC 1\" \"NIC 0\" 83:00.1\r\n```\r\n\r\nNow we create a script of commands to add and remove softwires.  For example:\r\n\r\n```json\r\n{\"id\":\"add\",\"verb\":\"add\",\"path\":\"/softwire-config/binding-table/softwire\",\r\n \"value\":\"{ ipv4 178.79.150.1; psid 1; b4-ipv6 200:01:20:30:40:50:60:128; }\"}\r\n{\"id\":\"remove\",\"verb\":\"remove\",\r\n \"path\":\"/softwire-config/binding-table/softwire[ipv4=178.79.150.1][psid=1]\"}\r\n```\r\n\r\nCopy that like 100 or 1000 times in a file (say `commands.json`).  Then pass it to \"snabb config bench\":\r\n\r\n```\r\n$ while sleep 1; do sudo ./snabb config bench lwaftr ../../commands4.json ; done\r\nwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr\r\nIssued 378 commands in 0.23 seconds (1673.00 commands/s)\r\nwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr\r\nIssued 378 commands in 0.22 seconds (1701.78 commands/s)\r\n...\r\n```\r\n\r\nThe \"w\" entries indicate where \"snabb config bench\" was writing a request and \"r\" indicates when it read a response.  It will write requests while there is room in the pipe to `snabb config listen`, which by default can fill up 64 KB on modern Linux systems.  Then it will read responses to buffered writes, then buffer some more writes, and so on.  As you can see the rate in this example is about 1700 commands/s.\r\n\r\nNow check the loadtest results.  In my tests I see no drops at 1.75 MPPS FDX; I see some drops around 2 MPPS though."}}
{"actor":{"display_login":"wingo"}}