17216 >>: Jin Li: It's our great pleasure to have Professor Keith Ross to come here and give us talk again on the Advances in P2P Live Streaming. Professor Ross is a Chair Professor in the CS Department of Polytechnic Institute of NYU. That's basically Brooking-Poly merged with NYU. I believe he also is the current department head of CS Department. Professor Ross has worked on a large range of topics including peer-to-peer networking, internet measurement, video streaming, web caching, multi-service loss network, etcetera. He also has popular books, Computer Networking: A Top-Down Approach Featuring the Internet, that many of us have read. And this book is already in its fifth edition, being translated into 12 languages, I believe, and is the most popular book nationally and internationally for the CS Department networking aspect. Professor Ross is an IEEE Fellow and serves as Associate Editor for IEEE/ACM social networking and is PC chair of many, many conferences. Today he will talk about the new research work on peer-to-peer video streaming including View-Upload Decoupling theoretical analyses of how we upload the coding. Decoupling is going to help with peer-to-peer live streaming. Without further ado, let's hear what Professor Ross has to say. >> Keith Ross: Thank you very much, Jin. Also thank you very much for inviting me to Microsoft once again this summer to MSR. It's always a great pleasure to be here. It's a very, very simulating environment. >>: [inaudible]. >> Keith Ross: Yeah. So it's something that I enjoy every year. I mean, every year I come here it's like having a mini sabbatical. It's very, very pleasant. So what I want to do is talk about two recent papers that we've completed in the area of P2P Live Video Streaming. And both of them appeared at Infocom in Rio de Janeiro this past spring. The first one appeared in the mini conference, and the second one appeared at the regular conference. The second one also, much to our surprise, also won the best paper award this year at Infocom. So that's what we're going to talk about here today. They're two very related papers; and so it makes for one coherent presentation, I hope. So first just a very brief overview of P2P Video Streaming. We have many experts here in this room here on P2P Video Streaming, so I don't want to spend too much time. I assume that we have right here in this room some of the leading researchers in the field. So we'll talk about that quickly; and then we'll talk about video uploading, video upload -- View-Upload Decoupling. That's VUD, which stands for View-Upload Decoupling. And then some queing models for P2P Streaming, which apply both to traditional designs of P2P live streaming and also to VUD as well. So peer-assisted video streaming, for those who have not seen this before, the basic idea is that peers redistribute video chunks to each other, similar to BitTorrent. It's really been inspired by the BitTorrent design. The idea is to use the peer upload capacity and reduce the load on the server. The main reason why you're doing this P2P video streaming is, in fact, to reduce the load on the server and use the upload capacity of the peers to do the work for you. So the basic, you know, situation is as follows: You have a single live video that a server wants to transmit to a large number of peers, maybe a thousand or more. Here is just a fixture of six. The server sends video chunks to just some of those peers -- in this case peers 2, 6 and 5 -- and then the peers redistribute the chunks among themselves. Again, the idea is the peers are assisting the video distribution of the live video channel. There are many large-scale deployments today of this. This concept has been demonstrated, you know, to work quite well. There's a number of them: CoolStreaming, PPStream, PPLive. So let's just say a few words about them, some historical things. CoolStreaming was the first one. I believe it was developed at the University of Hong Kong of Science and Technology. And so that was sort of the first one to show that this concept can actually work. It had over one million users. More recently there's a number of other companies involved. PPLive is one example. It has today over 85 million users. It has over 800 channels available. Another very popular one, which is perhaps the most popular now, at least my post doc tells me that, is PPStream. That has over 350 million installations and 12 million active users every day. So it's really more on the order of something like Skype with 12 million active users every day and has thousands of channels as well. So what are some of the common features of the live streaming systems? These companies I just talked about, they offer both live and on-demand streaming. We're focusing here today on live streaming. What are some of the common features? One major feature is that they have multiple channels. That's something we want to look at carefully in this talk today. In addition to there being peer churn, there is channel churn. That is users tend to jump from one channel to another. Most of the literature in P2P is focused on system churn, just on the actual -- people bringing their laptops and starting up the P2P application and then turning off the application. But there's actually another type of churn that happens at a much faster time scale than tradional churn, and that's channel churn. So we'll come back to that. But that's something that we're very concerned about in this talk here. Another thing is of course their heterogeneous streaming rates. Different channels are being offered at different rates, some at high HDTV rates, some at VCR quality rates, et cetera. Of course the channels have heterogeneous popularity. Some channels are extremely popular with tens of thousands of simultaneous users, and others have just maybe a handful of users watching simultaneously. In all of the existing systems of PPStream, PPLive, et cetera, they use today what we refer to as an isolated channel design or ISO. And in this design, the traditional design that's going on now, is a viewer only distributes a channel that it's watching. So if a viewer is watching the World Cup Soccer game, then it will redistribute the World Cup Soccer game. It will not redistribute something else, like a tennis match or Desperate Housewives. It only redistributes what it's watching. This is the classical design. This is similar to the BitTorrent philosophy. In BitTorrent when you're downloading a file, the same file that you're downloading you're redistributing it; you're not redistributing some other file. So what are some of the problems? Even though they're very successful with tens of millions of simultaneous users, these systems still have some performance problems. There's room here for improvement, so room here for a competitor to come onto the market and try to build a better system that overcomes these problems. One of the bigger problems that we've observed is that there's generally a large channel switching delay. As we know when we watch TV at home which comes from cable or sattelite, the switching delay from one channel to another is on the order of only one or two seconds typically. But in these systems the switching delay is much longer. It's in the order of 10 to 60 seconds. The systems still have a while to go to really approach the switching delay that we have in the systems that we're used to. Another problem is that there's often a large playback delay. The playback delay is defined from when -- for example, if you're watching a soccer game, from when the goal actually occurs in realtime until it appears on your screen. So the playback delay in these systems can be from five to even 60 seconds long. So what that means is when you see the goal, it actually occurred a minute earlier. So you might hear your neighbors cheering and screaming 30 or 40 seconds before you actually see the goal occur. So that's one problem. Another thing that's been observed is small channel you have sometimes poor performance for small channels. So if the channel is very small, just three or four simultaneous users, and you have a lot of those channels, performance may be erratic and not very good. You have a similar type of phenomena in BitTorrent as well. Generally speaking, in BitTorrent you get better download rates when you join a channel that has a larger number of users than when you join a swarm that has a small number of users. Now, one of the root causes of these three problems here -- there are really two root causes. One, we argue, is channel churn where we have these users who are rapidly jumping around from one channel to the next; and because of that -- we're going to show you some slides here. But they're impacting the distribution swarms in a very negative way. The second is resource and balance. That is to say that there's this notion of a resource index in these P2P live streaming systems. Each channel has its own resource index, and it can be very different from one channel to the next. That causes problems as well. We're going to elaborate on that in a few seconds. So let's look at the channel churn problem in the ISO designs. Here we have a very simple situation where there's only two channels, Channel 1 and Channel 2. So Channel 1 might be World Cup Soccer game. Channel 2 might be Desperate Housewives, for example. So we have viewers in Channel 1, and we have viewers in Channel 2. They're each getting their video chunks and redistributing their video chunks to each other. Everyone is happy. But now we have some channel churn. And viewers 3 and 1 all of a sudden decide they want to watch Channel 2. Viewers C and F all of a sudden decide they want to watch Channel 1. So what's going to happen then? That's going to cause the following: Now all of a sudden, for example, Peer 4, who was previously getting chunks from 1 through 6 is no longer getting chunks from Peers 3 and 1. It's missing these chunks. Now it has fewer places to go to get chunks. So that's going to potentially cause problems. Now we're setting up for a situation for missed chunks. We're not going to get all the chunks that we need. Also probably you may need to find other peers, other sources of data where we can get chunks from. That's going to take some time for, say, Peer 4 to find that. Same thing when C and F come here and join, because now it's not a very stable system if peers are leaving and going. It's going to take a longer time for C and F to find stable peers that can supply chunks. That is going to impact the performance of the system. That was the first problem. That was the channel switching problem. The other problem is the resource and balance that we mentioned. So to describe resource and balance, we need to introduce this concept here of this instantaneous resource index. Many people have used this measure in analyzing video streaming systems over the years. We're not the first to introduce it, but it's an important measure. Basically what it is is if you have end users watching a channel -- this is for a particular channel -- and the rate of the channel is "r", this is a total demand for that channel. It's n x r. This is how many bits that need to be uploaded to all the end users. This here is the upload capacity that's brought by the end users. This is the upload capacity of the server and the upload capacity of the end user. This is the aggregate upload capacity. So in order for the channel to function properly, the total upload capacity needs to exceed the demand, n x r. So the supply needs to exceed the demand. If this value segment here is less than one, then you're going to have trouble. Then the supply cannot meet the demand. So we're going to come back to this. This is an important ratio here, this resource index. We're going to come back to it a few times during this talk. Now the problem we have is there are multiple channels. This resource index, which is also a function of time -- because things are changing. The number of peers in a channel are changing. The resource index from one channel to the next is typically very different. Some channels may have a very high resource index, and others are very low. And there's potentially a great imbalance when you're using this isolated design. So that's another thing that we're going to solve. I'm not only going to try to solve the channel switching problem but also this resource index imbalance across channels. So that gets into this new design that we refer to as VUD or View-Upload Decoupling. So let's talk about that. Here's the new design. As an example here, we have two channels for illustrative purposes. What we're going to do is first we're going to break each channel into a certain number of substreams. The reason we're doing this is because -- I'm going to come back to this a little later. But this VUD design introduces new overhead. In order to reduce the overhead, we use this substreaming. But we're going to come back to that. So we're going to break each channel into a substream. >>: For example, right now you are doing -- let me just propose some possible links here. >> Keith Ross: Okay. >>: So for example 1, 3 left, right-hand side. hosts. [inaudible] problem for the other. >> Keith Ross: Now there's other Right. >>: The simplest way to start using this one would be -- the problem you ask [inaudible] even though they are switching to another channel, you can still supply to the [inaudible] user up. Essentially they become useless. [inaudible] longer meaning overlap [inaudible] consistency. I swap. I switch to another channel, commence supply five minutes or whatever over some fixed time supplier until five more minutes or do something. Would that solve a problem instead of using that more fancier version? >> Keith Ross: I guess this is fancier than that. Um, that is something a little bit along the lines of this in some sense. But would that solve the problem as well if those guys are still there. >>: Five more minutes. >> Keith Ross: But here though we have a lot of users that are jumping around every ten seconds. You've got to keep in mind that we find that the average -- 70 percent of the holding times in a study that's been given by Atelephonica -- is less than ten seconds you're staying in there. So a guy is going to go in there for ten seconds, and you're going to ask him to stay for another five minutes. >>: Five minutes as a simple rule. Until you become useless. Meaning [inaudible] therefore you can go now. >> Keith Ross: Right. >>: I'm just throwing something directly. simplest version. Just asking you if that's a >> Keith Ross: I'll have to think about it more. But my gut feeling is that that might make sense. If users really were staying there for a long time, then why not just have them stay for another ten seconds. But here they're really jumping around quite a bit here. >>: Usually in the peer systems such as this, mostly important resources rather than the cache. So in effect a piece of video may not actually be that worse rather than the resource. >>: But well probably to include -- >> Keith Ross: Okay. So now what we're going to do is we are going to -- since we have all these peers that are jumping around all the time, we're going to say if you're one of those peers or persons, one of those users, we're going to put you in a fixed channel. Your job now is to distribute that channel no matter what you're viewing. So this is why we're decoupling -- it's called Video-Upload Decoupling. What you're uploading is going to be independent of what you're viewing. That's the basic idea. So what we're going to do is organize the peers so these three peers here are assigned to substream one. No matter what they're watching, they just always redistribute substream one, as long as they're in the system. This is crude form. And these guys here -- and then so we send channel substream one and they redistribute it among each other. Usually it may be a bigger group here. But in the end each one of these guys gets all of substream one, has all the chunks of substream one. These guys here redistribute, get substream two. And going over here, these guys get Channel 2 substream one; and these guys redistribute substream two of Channel 2. So these guys are fixed here, and they just serve as redistribution groups. These guys here, all these peers -- 1, 2, 3, 4, 6 -- want to watch Channel 1, then what they need to do is get substream one from this group here; and then they need to get substream two from this group over here. So what that means here now is that each peer -- for example, peer one it's downloading these two substreams because its viewing these two substreams; but it's also getting a substream here, this orange one that's not even interested whatsoever. This might be watching World Cup Football; and this might correspond to Desperate Housewives. He's downloading Desperate Housewives even though he doesn't want it. But that's part of the design here. >>: [inaudible]. >> Keith Ross: Yeah, we're going to get into that. There's an overhead issue, there's no doubt about that. There's an overhead issue. So putting aside the overhead issue, let's suppose now that all of a sudden we have some switching just like before. So C and F move over to Channel 1 and start watching Channel 1 and 1 and 3 start watching Channel 2. When these people switch channels -so they're switching back and forth -- these distribution groups remain constant. Nothing happens in the distribution groups. So when C comes over here, it's relatively easy for C to find the substream that it needs because these guys are constant. They're always there. They're always providing the video. We don't have to search too hard, ask a lot of peers, "Do you have the chunks?" Those guys have the chunks. So that will help us reduce the switching delay significantly. So putting aside the overhead issue, let's suppose now that all of a sudden we have some switching just like before. So C and F move over to Channel 1. They start watching Channel 1, and 1 and 3 start watching Channel 2. When these people switch channels -- so they're switching back and forth -- these distribution groups remain constant. Nothing happens in the distribution groups. So when C comes over here, it's relatively easy for C to find the substream that it needs because these guys are constant. They're always there. They're always providing the video. We don't have to search too hard, ask alot of peers, "Do you have the chunks?" These guys have the chunks. That will help us reduce the switching delay significantly. So the other thing we can do here is we have the possibility of dimensioning the substream groups in some kind of sophisticated manner if we want. We can now, just like in traditional teletraffic engineering, we can start to try to dimension these groups to suit the demand. So there's going to be demand for each substream, and we can try to dimension these groups to try to match the demand for the substreams. In that way we're going to be able to get to this up here, this cross-channel provisioning. Since we can dimension each of these substream groups, we can dimension them in a way that the resource index hopefully is basically balanced. Before we said that the resource index is often very highly -- it's very different. Often small channels have a lower resource index than large channels. What we can do now is dimension those so that they have essentially the same resource index. So the two advantages of this approach so far is that we can address this channel churn, and we can have a more balanced resource index across channels. The third thing also that this provides is more structured streaming. So within a distribution group -- let's see if we can go back here. There's a lot of work on how you should do the distribution within an ISO system. Should you do a Push-Push system, a Pull system, Push-Pull trees? There's been already twenty papers written on that in the world. But in fact, the thing is that when the system is very stable, you can go back to sort of tree-like structures, which have better performance properties. So the advantage again with VUD here is that since this is very stable, we can optimize the distribution, the scheduling and routing, within the group to improve performance. So that's the third advantage here. If I can just get up there. So that's the structured streaming. Scheduling and routing can be optimized within the stable VUD swarms. So as mentioned here, one of the problems is overhead. The way we address the overhead is to use substreaming. The more -- if you take a channel and you break it up into more and more substreams, you're going to reduce the overhead because the amount that you're downloading now -- how much do you download as a user? You download the video that you want to watch, just like you've always had to, plus one or more substreams. Suppose you're only assigning one substream and that substream is very thin, then you're not downloading very much. So the total amount of upload traffic in these. Systems is equal to the total amount of download traffic. The total amount of upload traffic across all users is equal to the total amount of download traffic across all users. So by using substreaming -you're using very thin substreams, you reduce the overhead traffic significantly. And we'll have some figures on that in a few minutes. So that's that there. The other issue is how do you go about dimensioning these groups? In particular there's still peer churn here. Peers are still coming and leaving. And some channels are becoming more popular than others over time. So you need to do something intelligent to dimension these groups and in realtime. So that's what we're going to talk about. The goal is to maximize the resource index across substreams. And you can formulate this as an optimization problem. And this turns out to be a mixed-lineation programming problem, which is -- you know, it's something we wouldn't want to do in practice anyway. We need to do this in realtime. So I'm going to skip over this. This is what we want to do. So how do you create these groups dynamically? How do we maintain these groups? So we're going to do this with the goal of maximizing the minimum resource index. So each channel or each substream has a resource index. We would like to get all those resource indexes as high as possible, equally high. So the goal is going to be to maximize the minimum resource index. Hopefully in doing so, all of these resource indices will be significantly above 1. So what do we do here? So when a new peer joins, where do you put that new peer? This is the main method we use to dimension a group. So when a new peer comes, we look at all the resource indices of all the groups; and we find the one that's the lowest. So we assign that peer just to that one. So the peer joins the resource group for the group that needs it the most, it needs the upload capacity the most. So assign peer to the most resource-poor substream distribution group. We may actually assign it to more than one group. So the peer comes with a certain amount of upload bandwidth available, say one megabit per second or two megabits per second. And maybe the video rate is 500 kilobits per second. So we can assign it to more than one group. I'm going to talk about it in a second how we do that. But we may assign it to more than one group. >>: Like a reserve? >> Keith Ross: Reserve? >>: Yes, for example, like [inaudible] you put some people wait until you have [inaudible] and here it's a great algorithm, whenever a new peer join, what do you start a new channel, for example. Now you have a problem. >> Keith Ross: >>: New channel. So a channel becoming very tolerant, for example. >> Keith Ross: Right. >>: Then the ratio would be unbound. Then you look around and you don't have a reserve. What I want to do is provision each channel to reach a certain provision level, for example. 1.5. 1.8, whatever. And all those have got to be reserved, meaning they're not joining any channel and because I think one reason actually is -- suddenly one becomes popular and one can may not, [inaudible] supplied by a particular channel. >> Keith Ross: Right. The reserve is an interesting idea. It's another approach taken. There's many variations. That's an interesting one. So, yeah, good. So basically this is just the approach we take in this particular simulation, heuristic we're using here but there are other interesting variations is the following thing. So basically we're going to use a water filling policy. Here's the different groups here and here's the current values of their resource index, and when a new peer arrives we're going to assign its up load capacity most likely here but we don't have to assign all of it here. If we assign a little bit and it brings us up to here, for example, we might now go ahead and start assigning some of its extra upload capacity to this peer over here. So what we're going to do is we're going to allocate when I arrive, I have a certain amount of up load capacity that I bring to the system. And I'm going to first look at the subsidy, the group that needs it the most. Allocate some of my resource capacity to that group. If there's still some capacity left, I go to the next group over here and allocate that. And when I do these allocations I follow this rule here, this is a detail we won't worry about that but there's some number of little rules that we must follow. So okay that's basically it. That doesn't necessarily solve the problem. So because there might be a flash corral like you say or something going on, maybe not an immediate change in the popularity of the channel but a slow change of the popularity of the channel. If the sigma K falls below the threshold then what happens, maybe you can't wait for new peers to arrive to repair the problem. You need to repair the problem immediately. So then you're going to have to do something. The first thing we try to do is shift bandwidth without being, without being reassigned to new sub streams. So let me just finish that and I'll get to that. When I'm in there, I'm typically uploading, the way this is designed, I may be uploading more than one substream as part of VUD. I'm not just up loading one substream. I'm opening two, three, up to five substreams. If I see that, if I know that one group needs more bandwidth, I can shift some of my bandwidth from a substream that doesn't need it to a substream that does need it. So in this way, in doing that groups. Everyone can stay in things a little bit simpler. that need it from groups that I don't have to get reassigned to new their same group and so this will keep We just shift our bandwidth from groups don't need it to groups that need it. And just one last thing. So there's still not might not be enough. There's still some situations where just shifting bandwidth is not enough. And there are times when we may even need to actually move peers from one group to another. That's sort of the worst case situation and that happens as well but we account for that in our design. Another question? >>: I realize I actually don't understand the resource ratio. So my -- first I thought sort of the views are the capacities of the upload capacities. >> Keith Ross: >>: Right. Versus the amount that they're actually consuming. >> Keith Ross: Exactly. >>: But now that you have multiple things going on, I'm not sure I understand. So the use -- the upload capacities don't change, right? Or they do? >> Keith Ross: The up load capacities of peers don't change. But I'm going to take my up load capacity, whatever that is, and I'm going to allocate portions of that to different groups. Different distribution groups. >>: Okay. Allocated, not necessarily used. So, for example, if we're just counting the use as being as how much bandwidth say UI is the bandwidth that we're actually using to up load, up load I for something. >> Keith Ross: Right. >>: Then the resource ratio is going to be identitily at one, that's for all those different channels, right, if that was ->> Keith Ross: You're right. That's right. >>: But that's not obviously not the interpretation, because you have these different resource ratios varying one. >> Keith Ross: >>: Right. So they must be the allocated bandwidth for that stream. >> Keith Ross: It's the allocated, right. The allocated, right. >>: So is that a different, another problem, then? It used to be that you don't allocate it, you just have some upload bandwidth. And now I mean how are these resource ratios defined really? What do those use now? Because you're going to have different channels, different use for each channel coming out of a particular node? And you have to allocate them. You have a total amount of up load from a particular node. >> Keith Ross: Right. >>: You're going to compute resource ratios for each of the channels separately, right. >> Keith Ross: Right. >>: Now we're going to have somehow have different -- partition the total upload bandwidth into the different channels. >> Keith Ross: >>: Those would be the use for each channel. >> Keith Ross: >>: Exactly. So -- I don't understand it. >> Keith Ross: >>: Right. How do we do that partitioning? >> Keith Ross: >>: Right. Huh? Go ahead. >> Keith Ross: Well, how we do with that assignment. So, again, like I come in with -- I'm not sure -- two megabits per second of bandwidth. And I look at the current resource ratios using -- and again the resource ratio is defined on how much is allocated as you say. And I find the group that has the lowest ratio, maybe it's, I find a group lowest one maybe it's 1.1. The 1.1 is a dangerous situation to be in. It's still above -- even though 1.1 has been allocated, even though -in theory it's enough to supply. Some peers may not have actually the content and others will. So you may be missing a lot of chunks. So you want to be at -- so the lowest one is 1.1 I see this guy is 1.1 I'll give all my bandwidth maybe to him and all my upload bandwidth that I'm ready to allocate. So now he goes up to 1.3 and he's in a better situation. That group is in a better situation now. >>: But do the peers have to communicate with each other their location? >> Keith Ross: Right now they're just assuming centralized design. that some central controller sees everything. I mean, future works might look at some decentralized version. So >>: Another thing say you allocate for peer, allocate [inaudible] for the stream but actually is not using because it's not using 200 [inaudible] because that means that part of the bandwidth cannot be used by others. >> Keith Ross: It cannot be used by others, that's right. Right. >>: And that's there. And it depends on whether their system is pull or push. There could be -- if you allocate to 200 it can be. But not enough pull coming from there, then that resource is based ->> Keith Ross: I guess -- I guess that's sort of true. >>: In a sense it's going to be wasted anyway, right? Just because you allocate it is not going to use it. If the total -- if the presumption is that all the -- as a whole system the whole use will be something more than what you're consuming. >> Keith Ross: I think in a future paper we can look at some kind of a more intelligent scheduling algorithm where you do this allocation and those allocations are just priorities. If someone else went to use that bandwidth when no one else is using it, then you could let other channels use that bandwidth, for example, right? But for the time being we're not doing that. >>: So how do you figure out the bandwidth at the beginning? >> Keith Ross: >>: That you -- [Inaudible]. >> Keith Ross: That you make available? >>: I mean, how do you know like the UI, the value? it may change. Because I think >> Keith Ross: How much your UI is? Well, like -- yeah, in bit turn you can figure in bit turn how much your upload bandwidth is going to be. How much up load bandwidth you're going to supply to the bit torn application. So that's basically so what's going on here, is that you can figure that value and that's what you would report to the server. That's what you would report to sort of centralized controller. >>: What would happen if you cannot bridge that break? >> Keith Ross: Then you won't give -- I guess -- those are issues -those are issues that can be worked on in a more refined discussion, design. But I think roughly if you don't contribute all the bandwidth that you -- you still have the overall system measuring how much uploading is going on in the channel and what the demand is. So the system is still measuring the resource index sigma for everyone. And if because someone is not contributing as much as they said they are, then you'll just see a lower sigma value than perhaps you're expecting. So you'll have to put more people into that channel. Okay. So here's a simulation result. And so this simulation basically we used a packet level simulator that was developed at Chingwa University and modified that a bit. And the simulation takes into account channel switching, peer churn, heterogeneous upload bandwidth, packet level transmission, round trip time latency. Vise [phonetic] light channel popularity. And we're going to use push/pull scheduling for both ISO and VUD to make this comparison fair. And in the simulation there are the trace-driven simulation. 50 channels. Each one has 400 kilobits per second. There are The 2000 peers, we use the upload rates that came from a study that was done here at Microsoft a few years ago. The average peer system time is 67 minutes. We just take that -- the channel churn that we use follows an IPTV study that was done out of Telefonika a year or so back. So we used the numbers there. Again, we found in that there's a huge amount of channel churn with 70 percent of the peers staying in there for less than a channel for less than 10 seconds, if I recall. And five substreams per channel. And so just some results here is that here we're looking at popular and unpopular channels for both VUD and ISO. And this is the channel switching delay. And we see that the channel switching delay for -- there's the channel switching delay is the time to acquire five seconds of the new channel, by the way. And we see that the switching delay for five tends to be almost less than 10 seconds, whereas the switching delay for isois, can be much much longer. We have a lot of delays that are over 25, 30 seconds for both the popular and unpopular channels. So we see that VUD does much better in terms of switching delay. Playback lag is a similar kind of thing. We see -- this is the VUD design here, and this is the playback delay for ISO. You see play back lag for ISO is particularly very long 15, 20 seconds. It can be long for some peers here as well in VUD but on average it's much smaller than it is for ISO. Chunk missed ratio. Similar kind of thing. This is what we get here for VUD here. This is chunk missed ratio is relatively low. This is a situation where the resource index is, the overall resource index is low. So performance is tight. Whereas the chunk missed ratio for ISO is again in this particular scenario is very, very high. It's really unacceptable. And finally just getting on the overhead from the simulation, we look at a different number of substreams and determine the overhead, define the overhead as the bandwidth used to upload video to distribution peers, divided by the bandwidth used to upload video to the viewing peers. I just burnt out the laser, I guess. And as expected as you increase the number of substreams the overhead can drop down. So as we get down to five, six substreams, the overhead is less than 20 percent. So there's a trade-off here. We are introducing more additional overhead. We need more upload capacity to do this, maybe 20 percent more upload capacity. But it seems that the advantages outweigh the disadvantages. >>: I don't quite understand this. The collecting bucket. Overhead I think is probably the following, a simple way -- you know how many substream you're going to have. Let's focus on one stream. >> Keith Ross: >>: One channel? One substream. >> Keith Ross: One substream. >>: You have one substream, multiple, doesn't matter. So let's do a very simple high level supply demand analysis. Okay. So no matter what -- substream I assume they have received all sub streams. So let's look at one substream. Original support you have end users in your channel. They all need to supply end units. And [inaudible] centrally account for receivers. That's the end. >> Keith Ross: >>: Yes. N times. N receivers. Receive one substream? Or NP four, watch this channel. >> Keith Ross: So it's going to be cheaper Right. >>: Now the overhead now is essentially is the size of the [inaudible] group. Write an analysis of the substream to N users. Suppose you have, okay, distributed node. Now a total number of receivers of this one would be N plus K. [Inaudible] so overhead K divided by N. >> Keith Ross: >>: K divided by N. Because ordinarily -- >> Keith Ross: K is -- >>: K is the size, how many users in the distribution group. So originally 100 people watching. So if I get help, [inaudible] overhead five divided by 100. So given this, I don't understand why these are even [inaudible] with substream. >> Keith Ross: Again, I think the way to look at it is the amount of up load capacity is used, is equal to the aggregate amount of up load capacity is used is equal to the total amount of download capacity that's used. The download capacity that's used, right, is how much is being used is everyone needs, and for the overhead, is that we're downloading now just rather than a whole channel, we're downloading just a substream that we distribute. And so if we can make that substream thinner, the amount that we're downloading, the aggregate amount we're downloading is less therefore the aggregate amount that we're uploading is less. This is a tricky issue. We have actually worked that out in the first paper. Maybe we can talk about that a little later. Okay. >>: Look at the second paper. >> Keith Ross: Yeah, we'll get into that. on -- how much time do we have. >>: We have one and a half hours. So now this one is more 40 minutes left. >> Keith Ross: I don't want to bore everyone too much. We have queueing models. So this is the second paper. This is a bit more mathematical. So our goal is to -- but not very mathematical. It's very simple math, actually. So the goal is to develop analytical framework for multi-channel live video streaming systems. So that apply both to ISO, what we were just talking about and VUD. And the other thing we want to do once we have this analytical framework we want to use it to optimize by performance. We'd like to use it to dimension those VUD groups. And in this discussion we're going to use the following performance measure a lot. It doesn't have to be this measure. There are other ones that could be used that are also tractable. But just to keep things simple we'll use this one here. It's what we call the probability of universal streaming. And that's the fraction of time, the resource index is greater than one for all channels. So, again, we want that resource index is sigma. We said if sigma is greater than one typically a channel has good performance. And so we want to now look at the time, the fraction of time that all the channels are happy. Every single channel has a resource index that's one. Maybe that happens 10 percent of the time 20 percent of the time. If it happens 20 percent of the time then our probability of universal streaming is .2. If it happens 90 percent it's .9. That's what we'll focus on here. Here's this very simple qeueing networking model of the system. We'll view each channel as a queue and view each viewer as a customer. So a customer is going from one Q to another because they're changing channels. When a viewer changes channels it's going to be rooted to a new queue. We assume there's some kind of matrix, switching matrix given over here. This is the probability that a user goes from channel I to channel J. And so customers move about -- customers don't other, obviously, as they move from channel to channels, it's not going to have any impact on channels. So because of that we naturally use each queue here. interfere with each channel. If I change whether Jin changes an infinite server at And let's let 1 over mu J denote the average sojourn time. Since we have infinite server queues there's the so called insensitivity property from queuing theory which says we can have any distribution we want for the sojourn time. We're not limited to exponential distribution. We can use an arbitrary distribution here. We're not assuming anything about the distribution amount of time is someone spends in the channel. But let's let 1 over mu J denote the average time we spend in a channel. So this is a classic queueing model. I don't know how many of you studied qeueing theory, but when I was a Ph.D. student back in the old days that was like one of the main things they were always teaching was qeueing networkings. And now it's sort of gone out of fashion a little bit but it's turns out it's very useful here. It's not a real stretch to use it. It's a very natural model. It's not like we're trying to put a square peg into a round hole. It's actually the right model for the situation. So anyway so once you have that, then you can actually -- okay. So first thing you have is that this very standard result is that the probability that there are M 1 users watching channel 1 and M 2 users watching channel 2 and MJ users using channel J as given by this expression here. And here we're going to look at, first of all, in the closed qeueing network. Assuming here there's no peer churn. It says that peers come and they stay in the system forever for the time being. We're going to look when there's peer churn as well. But peers stay in the system but there's channel churn. This would be a situation and model, for example, set top box environment. So you have this whole thing running at set top boxes which are always on. So there will be no peer churn, only channel churn. And so, and there's a number of, number of peers. Row I is lambda J times mu J. So 1 over mu J is the average sojourn time in channel J. Lambda J is what you get from the trapping equation, the standard thing you get from qeueing theory from a trapping equation. Well known result from Jackson networks. And so everything is pretty straight forward. The case of -- when you have a case of pure churn then we use an open qeueing model. And so there peers would arrive at some constant rate and join a channel J with probability P 0 J. There's a new traffic equation that's the standard equation that's used for open qeueing networks. You get a new value of row J accordingly and you get a slightly different formula. In this talk we're going to talk about the closed [inaudible] case, the whole analysis goes through for the open qeueing case as well. You can definitely handle peer churn. We're going to look at the closed case when there's no peer churn for illustrative purposes here. So given that now, we're going to go ahead and do some analysis. And it's very, very straightforward analysis we'll see here. So first thing we want to ask is the goal is we want to determine the probability of universal streaming. The probability of universal streaming is the probability that every channel is happy. Okay? And we're going to do this for the case of VUD initially. And so what is this quantity here? This is the resource index for channel J substream S. S substream and channel J. And MJ is currently, is a random variable. It's the number of users watching channel J. That has the distribution over here that we could drive from over here. So this is the resource index for channel J and of course it's random because the number of users watching channel J is random. We want that to be greater than one for all substreams in channel J for all channels. If that is the case, if this is greater than one for every single substream, then we have universal streaming. So we want to calculate that probability. Again, that's the measure we're using here. There are other measures that are possible. So it's the probability of universal streaming. So, again, the resource index, just go back up here for channel J is given by this formula. Again, this is the number of users watching channel J. This is the -- so this is channel J's substream S. This is the rate of substream S. And this is the amount of bandwidth that's been allocated to that amount of substream. This is the amount of bandwidth coming from the server. This is the amount of bandwidth that we're getting from each of the users that have been assigned the substream S in channel J. And this here is the rate that is being taken away because there's -- because this is the rate that's being taken away because there's some users watching us. This is the number of users watching substream S and this is the rate at which they're watching it. So that's the sigma J there. And so just one assumption that we're making here, we're assuming for the time being in this analysis, just to make things simple, that a user allocates all its bandwidth to one of the substreams. So we don't break up our bandwidth among multiple substreams, we allocate all our bandwidth to one substream, in this analysis here. So that's the thing. And so then you can go ahead then and since you have an explicit equation for the joint distribution of MJ, from Jackson network, you can go and calculate this probability. And the probability looks like something like this. And then that is the kind of thing like if you look in the literature and lost networks and qeueing networks, people wrote half a -- dozens of papers on that on how to calculate that efficiently. So you can just use that if you want. And sigma J is given by this expression here. So it's all very straightforward type of stuff. So the thing is that once you have this kind of qeueing and loss network model, what you can go ahead and do, you don't have to reinvent the wheel, you can just go into the literature and start reusing, not exactly you have to modify things a little bit but not a lot. You can crank out all kinds of nice results. That's basically what the paper was about, is going back to the old literature and just applying it to this kind of context here. >>: Check my -- so if you know the number of people watching a particular -- I guess substream a channel, a substream. Then you can compute sigma -- so the sigma -- the equation on the top just a function of -- I mean all the numbers besides M are. >> Keith Ross: Are constant, exactly, uh-huh, right. numbers are constant. >>: Don't depend on N. All the other >> Keith Ross: Don't depend on N. Here what we've done is we're doing VUD and we're assuming now that we have assigned, we have a fixed number of peers in the system N. And we have assigned each peer to a particular VUD group, fixed for the time being. And each peer gets assigned to exactly one VUD group. Okay? And so that's -- so the groups are determined here. So NJS is a set of peers that have been assigned to the substream, the group substream S channel J. All right. So one thing we can do, for example, is an asymptotic analysis of VUD. So if you look at the literature things like Frank Kelly did on loss networks back in the '90s where what he did is he studied loss networks, which are like circuit switch telephone networks, and there's a product form solution there. And then what you can do is that he looked at what happens when those loss networks get larger and larger, things simplify. We looked at doing something similar to that and came up with a theory that works out nicely here. So here, for example, we fixed the number of channels, the number of channels are fixed. And we let the number of peers go to infinity. So you get larger and larger. We'll look at bigger and bigger systems. And for simplicity we're going to assume there's no sub streaming. You can do this for sub streaming but to make it simple suppose there's no sub streaming. And we're going to look at an asymptotic regime. This is the number of peers that we assign to channel J and the number of peers we assign to channel J will be proportional to the total number of peers in the system according to a fixed ratio here, factor KJ. So K sub J, which is going to be fixed in this model here is the relevant -- is the relative number of peers or the fraction of peers that have been assigned to channel J. Channel J for distribution. So the question is then for a large system, how should we set KJ? We'd like to know how big each of our VUD groups should be. Can we come up with a simple formula that tells us how big -- what should be the relative number of peers we assign to channel J? So that's one thing we're looking at here. So I'm not going to go through the proof. It's not that hard, actually. But it turns out, let's look first at the case at the homogeneous case, when each upload rate is the same. Turns out there's this critical parameter that's called alpha given explicitly by this formula. What's this formula, RJ is the rate of channel J. Row J is essentially the utilization of channel J. It's the lambda J divided by mu J. U is the up load capacity of a peer, and RJ is the rate of a peer, I'm sorry, the rate of channel J. And the theorem says that if alpha is greater than one, then the probability of universal streaming goes to zero. system gets larger, universal streaming goes to zero. That as the You're not going to have good performance if alpha is greater than one. On the other hand, if alpha is less than one, then if you set the KJs equal to this particular value here, and there's other -- but this value here, RJ times row J divided by this then the probability of universal streaming goes to one. So there's this alpha provides this kind of threshold here, this dichotomy, where if alpha is greater than 1 there's nothing you can do, you have bad performance. If alpha is less than 1 you can have good performance. If you dimension properly, the fraction of peers that you put into channel J is given by this value over here. So that's just kind of analysis. Then if you you have heterogeneous rate, UL and some that dimension the system? the results you can get from this qeueing look at a somewhat more interesting case where peer types where you have some that have low have high rate, UH, can you still find how to And so let's suppose the fraction of low rate peers is F. That's given. And again you have these two rates. How do we find the alpha model allocation so KJL would be the fraction of low rate peers you put into channel J and KJH is a fraction of high bandwidth peers that you put into channel J. And then what you can do is you can formulate this linear program here where A to Js -- these are put in here they're given constants that come from the basic data of the system. I didn't bother to write it here. These are the variables. The KJs, and you can solve this simple linear program. This is a relatively easy linear program to solve. You can't solve it by hand, generally, but you only have two times J variables here and not very many equations, obviously. And turns out that if the value of this linear program is less than zero, then you can prove that the probability of universal stream goes to zero as the system gets very large. And if the value is greater than one then the probability of universal stream goes to one and the KJs you're going to use are the optimal solutions. So the amount of peers you're going to put into each group high and low bandwidth peers are given by the solution to this equation. Okay. Now if you want to do analysis of ISO, then you still have these MJs. It's the same expression for MJ is the number of peers watching channel J. It has nothing to do with the design. That's just user behavior that determines how many peers are watching channel J. And so the probability of universal streaming is given by this expression. Now what is this here? Script MJ, that's the set of peers that are currently watching channel J. So the amount of -- this is isonow. It's not VUD anymore. The amount of bandwidth that's being provided to channel J is the amount of bandwidth that's coming from the server plus the amount of bandwidth that's coming from the set of peers that are watching channel J. So if you're watching channel J then you're providing all your bandwidth to channel J. That's the amount of upload bandwidth that you're providing to channel J. This is demand for channel J. The number of peers watching channel J times the rate of channel J. So in order to get this basically -- this is greater than this, and sigma is greater than 1 for that channel and you need that to hold for all the channels. So that's the probability of universal streaming for the traditional isolated design. Once again you have this thing here. Now, this is more difficult to solve, right? And as it turns out in the VUD case you have this nice little formula if you wanted to, you could go ahead and solve this using standard convolution algorithms very quickly. Here you don't have anything like that. But because of the special structure, you could use Monte Carlo important sampling methods to rapidly solve that if you wanted to. Again, that thing has been looked at in the qeueing literature. So for the asymptotic analysis, there's a critical value as well for ISO it's even easier to derive. It's given by this expression. And once again if alpha is less than one then probability of universal streaming goes to zero. Now what we could do asymptotic case, VUD just an example here bandwidth peers have rate of 2 R. is we could compare, for example, in the and ISO, by using those analysis. And this is where we have heterogeneous bandwidth, the high a rate of 4 R and the low bandwidth peers have a There's two types of streams in there. One stream has a rate of 5 R. One video channel has a rate of 5 R and the other has a rate of R. I guess there's just two channels in this example. There's just -- and one channel has, channel 1 has a row value of .2. Channel 2 has a row value of .8 and you can easily go through the calculations. Isohas an alpha value that's greater than one that means the probability of universal streaming will go to 0 in this particular case. And in VUD you can do the allocations so that -- well, the alpha in this case is less than 1. And so in theory you can do the allocation. So probability of universal goes to 1, in fact you can do those allocations. So this is just a little example there. So some -- any questions about any of this at this point here? Any of this kind of stuff? Okay. >>: Can you, going back to the sample, there's only one rate case. >> Keith Ross: >>: Okay. Can you give an interpretation for the allocation? >> Keith Ross: That's a good question. I don't know if I can. I'm trying to find it here. Here it is. Alpha here is just sort of the excess. I wouldn't worry about that too much. So alpha here is less than 1. So -- okay, but anyway, some interpretation here is that one thing we see is that KJ is proportional to row J. Row J is the popularity of the channel. It can be viewed as the popularity of the channel, the relative popularity of the channel. Row J is actually the expected number. It's the -- it's the relative -- it's the fraction of peers, right, that are watching channel J on average. So the more peers that are watching -- so that's fairly intuitive. The more peers watching channel J the bigger we need to have the bigger distribution group. Second, also we have this RJ here, in there, but it's not quite proportional to the example to RJ down here. But as you would expect, as the streaming rate becomes larger and larger for that channel, then you would want to have more peers in that channel to distribute there. Because here each peer is contributing the same amount of upload capacity U in this homogeneous case. Finally, how should we interpret this. And -- U minus RJ. Term there. >>: [Inaudible] I mean generally in this assignment you would not be actually assigning the peer, which is watching the channel, to that channel. >> Keith Ross: Exactly. >>: So if that's alignment, I mean let's say you've done everything wrong. You are wasting RJ for each of the peer you designed that way. Of course that peer doesn't need that basically channel J but you are downloading it anyway. >>: When you're doing the ISO analysis for a single upload rate, up load rate, does it reduce to this thing without the RJ at the bottom? >> Keith Ross: Isoanalysis you don't do any assignments there. There's no notion of KJ in ISO and ISO -- yeah. >>: Do you have any ways of -- >>: Okay, maybe what I mean is the alpha then, the critical parameter. >> Keith Ross: that. >>: The critical parameter. Okay. Let's take a look at Here you kind of -- let's say UL and UH are the same. >> Keith Ross: Right. intuitive there. So that becomes just U. Right. So it's very So basically what we're saying in the ISO case is that the maximum rate has to be less than the upload rate of a link in order for that to work there. So that's very easy to derive in that case. >>: I think basically if I try to interpret the case, can you go back to the ->> Keith Ross: >>: Sure. [Inaudible]. >> Keith Ross: This one here. >>: So my interpretation is this: Each of this RJ row J divided by U minus RJ is a kind of supply and demand factor for each of the channels. But the demand is this RJ times row J. If we break up the channel kinds of popularity of the channel, the supply's U minus RJ, how much rate is available minus redundant rate that you think you need. Now, the sigma of all the channels which derives R is the forgiveness factor of all the systems. Basically each channels you have to basically -- it's an oversupply and undersupply which says how much resource you can allocate more to each channel. But if you look at over all the systems, how hard is the value [inaudible] whether the system is oversupplied, overdemand. >> Keith Ross: >>: That's right. That may be basically -- maybe [inaudible]. >>: So in the previous paper you mentioned if you have more substreams you have lower [inaudible] but in this model only universal substreams, just the one substream. >> Keith Ross: Right. >>: So if that's true, if you have more substreams here, then that equation can be changed. >> Keith Ross: >>: [Inaudible] change, right. Right. >> Keith Ross: That's right. And I think in the paper we actually -actually, we created an extended version of the paper for journal submission. And we do it for sub streaming case there. Go ahead, I'm sorry. >>: Suppose you have infinite number of substreams and we will -that's the equation that evolves to U minus RJ becomes U minus zero. Is that true. >> Keith Ross: Good point. I think it is true, actually. That's correct. Yeah, that should be the case. Okay. So this is an example here that shows even though when you're not using substreams, even in the case where you're not using substreams, there's still situations where some natural situations where Y is going to be doing even better in ISO there. Even with the additional overhead that VUD brings you still have better performance with VUD. And why is that? It's because VUD is handling the channel switching a lot better than ISO is. >>: But, for example, you're going to have from ISO case you're always going to have zero doesn't go to zero. For channel one demand 5 R. The output supply ratio is four, therefore channel one cannot ever supply itself. >> Keith Ross: Zero. Always zero. an illustrative example here, yeah. >>: PS is zero for all cases. This is In that case [inaudible] because it's always what it wants. >>: Yeah because my supply R [inaudible] in particular you're shopping resources a little bit. >> Keith Ross: Right. VUD offers that flexibility to be able to shuffle resources to be able to meet the demand. Some more numerical results here very quickly. These results are not simulations, they're are all results calculated from the qeueing model here. If we can look at much bigger systems. We have 1800 peers, 20 channels. We have two classes of links here, upload rates. .2 R and 3 R, we're assuming that every video is at rate R in this situation here. So we have some that can upload at three times video rate and some that can only upload at 20 percent of the video rate. And we use these asymptotic heuristic to mention the substream swarms. And so here's the kind of -- this is a plot where now we're looking at the probability of universal streaming versus a Zipf parameter. We see popularity falls with Zipf distribution, and what we're seeing here VUD versus ISO in that example, as you increase the Zipf parameter, then you increase the number of small channels. And the problem with ISO with small channels is that you very often have a resource index that's lower than 1. Why is that, do you think? So a small channel with ISO, small channel means you have like two or three users, the resource index can go below 1, because what we're having here is there's the channel's going to be composed of these high bandwidth and low bandwidth peers. And in the small channel, in a large channel, there's a law of large number effect where so that you have all these, in the peers joining randomly. And on average the amount of resources that they contribute will be greater than demand. In a small channel, very often you're going to have the -- you're not going to -- the resources contributed will not meet the demand. That's why small channels are particularly -- are a particular problem for the ISO design, whereas for VUD where we're dimensioning to handle those small channels to some extent, that, so when we use that heuristic, we still have some drop-off here with the small channels. But we don't have -- we have performance on the whole that's much better. So the probability with universal streaming is much better in this example here. Here now what we're looking at is the probability of universal -- of having a resource index greater than one for each individual channel when using Ziff parameter set to one. If Zipf parameter is now set to one we're looking at the channel IDs here ranging from 2 to 20. These are the biggest channels, the most popular channels to the least most popular channels. And once again we're seeing that for ISO, for these smaller channels, ones that are less popular, we have the -- they might have, for example, probability of -- the probability that sigma is greater than 1 is only 80 percent. Whereas for VUD we see that it's very high and consistently. Very quickly here, there's one additional refinement that one can do to get better performance. It's just a heuristic but it's a very simple idea. Now what we'd like to do is try to get the probability that the resource index is greater than one to be the same for all channels or all substreams. So we're going to develop a heuristic now to get it to be, so that we give -- we give -- we make each channel of equal importance. The channels that are popular and channels that are unpopular. And in this heuristic we're going to assume a normal distribution for MJ. So we're going to solve this equation. Rather than using the distribution that comes from the product form solution we're going to use a normal distribution, which the actual distribution is binomial. This is going to approximate the binomial. And just for a time being let's assume that all stream rates are R. When you do that you get this following closed form solution for how you should dimension all the divide groups. So channel J, substream S -- this is the number of high bandwidth peers that you should put in channel J, substream F. Number of low bandwidth peers that you should put in there. You get these closed form solutions here using this normal distribution. And when you do that we get now -- this is what we get for ISO this is what we get for VUD using that asymptotic heuristic, this is what we get using this new heuristic, you get solid performance even for the unpopular channels, the probability universal streaming is essentially one using that heuristic. So that's just sort of nice. So just in conclusion, then, what this stream of research was about was, first of all, sort of identifying that in addition to peer churn there's channel churn which happens at a much higher scale. And try to -- and also taking notice that among channels there's typically a very large resource imbalance across channels. So try to design a new kind of P2P live video streaming design that takes into account this channel churn and that was the first half of the talk and the second half of the talk was about developing some simple mathematical models that can be useful for modeling both the isodesign and the VUD design. And so I'm going to thank everyone again for your excellent questions and comments. If you have more, we can do it now or later. >> Jin Li: [applause] You have an excellent talk. >> Jin Li: Questions from the audience? >>: I have a question. Probably related to [inaudible] like application [inaudible] at least when I was talking with like a live stream allocation, those two developers, they tend to like -- they're software is even like nonpopular channels may suffer when the peers [inaudible] channels, they don't worry too much about uncovered channels, because this is out there like -- they don't put much effort on that, on those channels. But they worried a little -- a lot more on their like popular channels, serving a lot of people. But so in the solution, I feel that you're trying to somehow switch or use those like some like extra capacity of those popular channels to surf on, those public channels. >> Keith Ross: To some extent. >>: Do we have any indication or evidence that a real system have that like motivation [inaudible]. >> Keith Ross: Well, I think they look at like, for example, we've done a different study on bit turn recently. Bit turn, it turns out, has a very thick tail, for example. There's a lot of people downloading videos and the swarms are very small. There's some swarms that are big, like 10,000, 20,000 people. But the vast majority of the swarms, 90 percent of the swarms have fewer than 10 users in it. Most likely in these systems in the long run you probably expect to see a lot of small channels there. Now, this is a very competitive business. Bau Chen and Li was talking about. He works with some of the companies out there so he knows this better than anyone, but I'm trying to convince him how important it is. But here's all these companies in there, right, China. This is another way that one can distinguish themselves from one company can distinguish them from another by saying that we support small channels. We have lower switching delays. We have [inaudible] it's one possibility. I'm just going to say I had a very interesting discussion, and the point he made I agree is that he's been very quiet. We figure they would say some of the things that's very polite. But his argument would be, Well those companies, one thing live streaming is not their main concern right now. Their main concern is video on demand. Much more action happening in video on demand than live streaming. That's probably true. So they're less concerned about perhaps improved lives improving which more or less works, it's possible they could get additional improvements using this or something else. But their focus is really on on demand since that's the more killer of the applications. But what we're seeing in the literature in Infocom and elsewhere is a lot of focus on live streaming, one of the reasons why is it's intellectually interesting, I personally think it's more interesting than the video on demand stuff. But anyway. Fair enough. >>: Did I paraphrase your comments properly? There's other ones. >> Keith Ross: Right. Technical demand. >>: One last comment, it seemed like when people watch TV initially they switch between channels but once they start therefore. Seemed like for that kind of user we can switch from this channel-based, your thought ->> Keith Ross: Right. We've been looking at actually that, too. So we've been -- we've sketched out some designs for that. I'm not sure if we're going to write a paper on it. But we sketched out -- in the end it's just -- it's true, it's something we can do if you get better efficiency. >> Jin Li: Okay. [Inaudible] if you need to discuss with him, he's on the second floor. 7975. Let's thank him again.