{"action":"reopened","issue":{"url":"https://api.github.com/repos/SnabbCo/snabbswitch/issues/555","labels_url":"https://api.github.com/repos/SnabbCo/snabbswitch/issues/555/labels{/name}","comments_url":"https://api.github.com/repos/SnabbCo/snabbswitch/issues/555/comments","events_url":"https://api.github.com/repos/SnabbCo/snabbswitch/issues/555/events","html_url":"https://github.com/SnabbCo/snabbswitch/issues/555","id":94201874,"number":555,"title":"Idea: Layer-2 switch scalable design","user":{"login":"lukego","id":13791,"avatar_url":"https://avatars.githubusercontent.com/u/13791?v=3","gravatar_id":"","url":"https://api.github.com/users/lukego","html_url":"https://github.com/lukego","followers_url":"https://api.github.com/users/lukego/followers","following_url":"https://api.github.com/users/lukego/following{/other_user}","gists_url":"https://api.github.com/users/lukego/gists{/gist_id}","starred_url":"https://api.github.com/users/lukego/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lukego/subscriptions","organizations_url":"https://api.github.com/users/lukego/orgs","repos_url":"https://api.github.com/users/lukego/repos","events_url":"https://api.github.com/users/lukego/events{/privacy}","received_events_url":"https://api.github.com/users/lukego/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/SnabbCo/snabbswitch/labels/idea","name":"idea","color":"009800"}],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":47,"created_at":"2015-07-10T03:05:11Z","updated_at":"2015-07-21T14:44:25Z","closed_at":null,"body":"This is an idea for how we could parallelize the [labswitch](https://groups.google.com/d/msg/snabb-devel/gdMF5Vmd-YI/J3mkO2apkbIJ) application to give it suitable performance characteristics.\r\n\r\nGoals:\r\n\r\n1. Support many ports e.g. 32 x 10G.\r\n2. Support line rate with small packets on all ports in simple configurations.\r\n3. Support additional features (tunnels, filters, etc) with overhead only on the ports that use them.\r\n\r\nThe idea is as follows:\r\n\r\n* One snabb process per 10G of traffic (one 10G port or multiple 1G ports).\r\n* Local Layer-2 switch app for each port.\r\n* Layer-2 switch apps all connected together in a fully meshed topology.\r\n\r\nHere is the idea in picture form. Each color (red, brown, blue) is a distinct process.\r\n\r\n![scan](https://cloud.githubusercontent.com/assets/13791/8695397/0129472e-2ae5-11e5-8780-cd50e3cea83a.png)\r\n\r\nDesign notes:\r\n\r\n* Loops between Layer-2 switches will have to be managed to avoid [broadcast storms](https://en.wikipedia.org/wiki/Switching_loop). Suggestion is that the Layer-2 switch will have a rule that it does not send multicast packets between switch interconnect ports (curly lines). That is, multicast packets are \"flooded\" by the source Layer-2 switch to all of the other Layer-2 switches, which then transmit only to their own locally attached NICs.\r\n* This should scale. In a 32 x 10G configuration each CPU core could be processing only 10 Gbps of traffic i.e. the packets received and transmitted to the local NICs.\r\n* The design depends on processing functions to be able to run per-port including switching. If we wanted to add routing support (for example) it would also have to fit this model."}}