Feel free to email me: zhppan[at]cs.stonybrook[dot]edu
Internet data traffic goes through a series of devices called routers. Routers are high-speed devices, meant to move lots of data traffic very quickly from one place to another. In this project, I will learn how to program a real high-speed router (capable of processing 6 Terabits/s), including making the router move traffic to the right place, and ensuring that the network paths that data moves through, do not get congested. I will work towards the larger research effort intended to define mechanisms and policies that carve out University network resources to various users by programming routers appropriately.
Here are the weekly progress entries for my research project.
I started to learn about computer networks by watching videos, reading a few chapters of a textbook, reading through Srinivas's lecture slides, and searching up a bunch of concepts. I still have gaps in my knowledge, so I will likely review chapters in the textbook. My next step is to reread the OpenFlow and P4 papers to fully grasp what the research is trying to accomplish.
I read chapter 4 of the computer networks textbook. I also reread the P4 and OpenFlow papers. The concepts are starting to make a lot more sense. OpenFlow is a communication protocol and P4 is a data plane programming language. I completed the P4 tutorials on GitHub as well. It was fun and I learned a lot. Some things are still confusing, like the P4Runtime. I will revisit the tutorials and redo them from scratch to gain a more in-depth understanding of the material, and hopefully, that will clear up my confusion. My next step is to complete the mininet assignment that Srinivas emailed me and understand everything, including the python files.
I looked through the python files for the p4 exercises to get a feel of how they were programmed. Then I started reading the research paper about the reconfigurable match table. I struggled with understanding that paper, but after I met with Srinivas, it is starting to become clearer. I have read through it the second time and tried to understand what is going on. I am reading through the paper about the compiler that matches the programming language to the target switch hardware. My goal by the next meeting is to finish reading the paper and understand what the paper is about.
I read through the two new research papers again. I am also working through a new set of P4 tutorials. They feel a lot more involved than the previous set of exercises. Instead of teaching with small examples, this feels more like a project. I also received some sample code for the Tofino. My next step will be to understand the code and see if I can code something similar.
I finished all of the p4 learning exercises. The content is very interesting. It seems like there are a lot of probabilistic data structures in computer networks. Bloom filter is a popular one and is used for many different things. Flowlet switching is something else that I learned, which I thought was a cool way of handling incoming packets. The invertible bloom lookup table was a complex data structure to implement, though I do partially have a higher-level understanding of it. My mentor is on break next week, so my task is to figure out how to work with the Tofino switch environment.
Installing the switch environment took a surprisingly long time. There were a few outdated dependencies that I had to fix. There were also a few small issues with the kernel version and the program. Eventually, I did get it to work. I wrote a hello world data plane file, but I am still working on the control plane. I have to look through the other example files to see how they work and understand the parent classes that the file extends. My next goal before my next meeting is to get the control plane to work.
I explored the Tofino-model this week and found out where the table information was being stored. I also worked through a barefoot lab, but it was for an older version of P4. There was a multicast example already provided, so I spent most of the week dissecting that. I managed to figure out how multicast group ids are being stored. However, I haven't yet figured out what bridge ids, l1, and l2 nodes are for.
I am troubleshooting the SDE environment on the switch now. I was able to get the tofino-model to run before. Now, it's not working. I also can't seem to get the control plane for the actual device to run. I've been debugging a lot so far. I think I will try to reinstall the SDE and see what happens afterwards.
This is the last week and I have learned a lot throughout the entire research experience. I tinkered with NYU's Tofino device. I also wrote a paper and presented my work to both the 2020 DIMACS REU program and the OARC group at Rutgers. I do hope to continue my work with the team.