text:
Nathan vs Video Games: Week in Review for 3/11/2012
By theuselessgod 3 Comments
We celebrated this week by reviewing a batch of my favorite games, and got through a decent amount of them with some atrociously long-winded reviews. I also caught up on my two longest-standing requests, so hooray for that.
10 reviews this week, with us crossing 100 to hit 102 total! Nice! For a month and a half of doing this, that ain't that bad. I hope you all have enjoyed reading my reviews as much as I've enjoyed writing them.
We are killing sacred cows this upcoming week, with the theme being Overrated Games week. Keep in mind: just because I say these games are overrated doesn't mean I hate them. It's just games I feel get way too much appreciation when they really are just average or above-average games. From the header picture you can probably guess who will be the star this week, but don't worry...I'm going to rip up some more favorites than you even know. I'm actually pretty excited about one of them.
Again, this is my blog, so keep in mind all my views are subjective. You've probably figured out my taste in games by this point (especially based on this last week being a lot of my favorite games, though I didn't get to the Portal games or Enslaved or Katamari Damacy or Resident Evil 4) so if you have a problem with a review please think it over before bashing me via email or in the comments. I'm more than willing to discuss views on games in a rational manner: I get that some games just don't click with me like they do with others. But we can at least be civil. No more hate mail, guys.
Now that I'm done complaining, let's give a rundown of this week's massive review-a-thon.
Prince of Persia: The Sands of Time - 5 / 5 Stars
Super Mario RPG: The Legend of the Seven Stars - 5 / 5 Stars
The Incredible Machine 2 - 5 / 5 Stars
Warcraft III: Reign of Chaos - 4 / 5 Stars
Warcraft III: The Frozen Throne - 5 / 5 Stars
Final Fantasy VI - 5 / 5 Stars (Review #100!)
Super Mario Bros 2 - 5 / 5 Stars
Saints Row: The Third - 5 / 5 Stars
See all you cats this week!


text:
Really not a whole lot to know about me, or should I say "You wouldn't believe me anyway" LOL. My first priority in life is Jesus Christ, my personal Lord and Savior. That would be followed by my dear wife, Bonny. She has no problem taking back seat to Jesus and that is a blessing. Just in case you can't tell by my photo, I am a HUGE and long time Dallas Cowboys fan! Yep! Even when they are not doing so well. Ain't nothing fair weather about me. I am true blue at what I do.
Did ya' hear about the work being done on The Redskin's Stadium!? Yep! They are widening the exits!! LOL
Your wife is a Redskins fan?! Boy, God must indeed work in mysterious ways. I would have thought you'd have better luck marrying a Catholic LOL
Well, I'm sure she's a wonderful soul and this is certainly aided by the fact that these she's not an Eagles fan LOL! At least her team has also had a taste of true success.
Anyway, Merry Christmas Gary and you guys have a Happy New Year!

subset: commoncrawl


text:
|You are in: UK: Northern Ireland
Saturday, 29 September, 2001, 21:15 GMT 22:15 UK
Reid vows to catch journalist's killers
Northern Ireland Secretary John Reid has said he is appalled at what he described as the "barbaric killing" of the Sunday World journalist Martin O'Hagan.
Mr O'Hagan, 51, was shot near his home in Lurgan at about 2230BST on Friday.
The Red Hand Defenders, a cover name used in the past by both the Ulster Defence Association and the Loyalist Volunteer Force (LVF), said they carried out the murder in a call to the BBC newsroom in Belfast on Saturday.
Dr Reid said on Saturday he was absolutely determined to track down the killers.
"It shows contempt for human life, contempt for the freedom of the press and contempt for the people of Northern Ireland," he said
"I have spoken to the chief constable and I share his absolute determination to track down those responsible for this act of savagery."
Mr O'Hagan worked in the Belfast office of the Dublin-based Sunday World newspaper where he built a reputation covering paramilitary and drugs-related stories.
He was shot just yards from his home on the Tandragee Road as he and his wife walked home from a pub.
A car pulled alongside the couple and a gunman shot Mr O'Hagan, who died at the scene.
Marie O'Hagan escaped death when her husband pushed her into a hedge to protect her.
She said on Saturday: "I can't really remember what happened.
"People tell me Martin shoved me into the hedge and used his own body to try to shield me.
"It's coming back to me in flashes but the fact that I wasn't shot dead or wounded speaks for itself."
One of his three daughters, Ciara who is due to be married in a few weeks time, was passing by in a car when she saw her father slumped on the ground.
Ceasefire doubts
The murder comes at a time when the government has the UDA ceasefire under close scrutiny.
Dr Reid warned on Friday that he would declare the ceasefire over if there was any more UDA inspired violence, following a week of serious rioting in north Belfast.
However, at the early stages of the investigation into Mr O'Hagan's murder, it is understood the main focus is on the LVF.
The journalist had recently been working on a number of stories involving LVF members.
The shooting occurred in Wheatfield Gardens, a mixed Protestant-Catholic area on the edge of the town.
A car which police believed to be the vehicle used in the killing was discovered burned out a short distance away.
The Taoiseach Bertie Ahern has also condemned the killing.
The Belfast editor of the Sunday World, Jim McDowell, said he was "devastated".
Death threats
"He was a journalist who never stood back in his life. If there were issues to be addressed, then he did it," he said.
"As a fearless journalist and a secretary of the NUJ in Belfast, an attack on someone of his stature is an attack on the freedom of speech and freedom of the press."
The chairman of the Ulster Democratic Party, John White, condemned the killing but said Mr O'Hagan had made enemies of many loyalists.
"He did cross many loyalists over the years, as did a number of Sunday World reporters, but in this day and age with the peace process at the stage it is and the difficulties going on this certainly doesn't help and there can be no justification for it."
The leader of the Ulster Unionist Party and Upper Bann MLA, David Trimble has condemned the murder.
Mr O'Hagan had received death threats before and had to leave Northern Ireland at one time.
See also:
29 Sep 01 | Northern Ireland
Murder condemned as 'despicable act'
29 Sep 01 | Northern Ireland
The killing of a journalist
Internet links:
The BBC is not responsible for the content of external internet sites
Top Northern Ireland stories now:
Links to more Northern Ireland stories are at the foot of the page.
Links to more Northern Ireland stories
|^^ Back to top
News Front Page | World | UK | UK Politics | Business | Sci/Tech | Health | Education | Entertainment | Talking Point | In Depth | AudioVideo
To BBC Sport>> | To BBC Weather>>
© MMIII | News Sources | Privacy


text:
Teachers become students during in service program
Gail Maholick/TIMES NEWS Richard P. Gallagher, CSP, an educational consultant from Philadelphia presented "How to Study - 10 Minutes to an A" to Lehighton Area School District teachers to teach them how to help children become better students.
Lehighton Area School District teachers were the students during Monday's in service program.
Richard P. Gallagher, CSP, an educational consultant from Philadelphia presented "How to Study - 10 Minutes to an A" to teach teachers how to help children become better students.
Gallagher unlocked the mystery of studying during the three hour program that keep the teachers on their toes as they listened to Gallagher's tips on studying methods and hints.
His list was logical and if students follow the plan, they can become successful students.
Gallagher is the author of "How to Study" and is a study skills expert.
"No one ever taught me how to study so I strongly feel the need to help others overcome this difficult area," said Gallagher. "With the proper study techniques, I firmly believe the difference between a "D" and an "A" is 10 quality minutes of work each night.
Every parent wants their child to succeed and work independently but no one ever shows them how, he said.
Gallagher said many students have problems in memory methods, reading to remember, note taking, test taking and concentration.
Gallagher gave specific confidence building skills in each of these areas to share with their students so the students can reach the conclusion that "I can do it."
His presentation was insightful and upbeat. If students follow the methods on a regular basis, they will remember the answers to questions on their tests and earn better grades.
During the presentation, Gallagher provided sheets with the suggestions to each teacher to pass on to their students.
He also provided a list of 40 study hints that will help students succeed.
The general methods include note taking, eliminating distractions and reading materials and keeping notes.
The 40 study hints are simple exercises in writing, reading and saying things out loud to remember the items they need to remember.
"It takes three weeks to create a new habit," said Gallagher. "The methods, if followed, will become habits that will make students successful."
He suggested flash cards and index cards to help students remember.
"We've all been given talents, but we've all been given different talents," he said. ""We have to keep learning. It's the people you meet and books you read who change you or otherwise you stay the same person."
Gallagher is also an author of "How to Study" videos and audio cassettes.
"The biggest hassle in a child's life can be school work,' he added. "As someone who has been in over 800 schools and with four children of my own, I have come to the conclusion that once a child knows how to study then the social and sports life of the student can fall into place."
Gallagher is an active member of the National Speakers Association and is a designated Certified Speaking Professional. Less than 400 of the over 3900 embers have earned this standard of excellence.


text:
Monday, April 23 at 2:30 p.m. ET
Boris Yeltsin and His Legacy
Monday, April 23, 2007; 2:30 PM
Washington Post Assistant Managing Editor David Hoffman, who was the paper's Moscow correspondent from 1995 to 2001, will be online Monday, April 23 at 2:30 p.m. ET to discuss the life and times of former Russian president Boris Yeltsin, who died today at 76.
Former Russian Leader Boris Yeltsin, 76, Dies (Post, April 23)
David Hoffman: Hello everyone. It is a good day to reflect on Yeltsin's legacy. I was the Moscow correspondent of The Post from 1995-2001, and wrote a book about the rise of Russian capitalism then, "The Oligarchs: Wealth and Power in the New Russia," (New York: PublicAffairs, 2002)
I don't have all the answers about Yeltsin and Russia. I will try to give you my perspective, but hope you'll understand this was an enormously complex time, and we still haven't figured it all out.
Arlington, Va.: Although I don't love what happened to Russia during and after the Yeltsin years, I think we have to admit that none of us, even here in the West, had any real idea how to transform the USSR into a capitalist democracy. Our advice was as bad as Yeltsin's management. For that reason, I think his true legacy will be that heroic stand on the tank and all it symbolized. Yeltsin will come out a hero in history. Your thoughts?
David Hoffman: I would hesitate to put it all on the tank. Yes, this was a courageous moment at which Yeltsin showed us his remarkable political instincts. But his legacy will also have to be judged by other moments as well. One of them is mass privatization, taking the entire industrial and natural resources stock and suddenly putting it in private hands. Another is Chechnya, a war that did not have to be fought.
washingtonpost.com: For Russians, how much of Yeltsin's legacy is tied up in the conflict in Chechnya?
David Hoffman: This war is certainly one of the lowest moments of recent Russian history. I have often wondered if it could have been averted. What would have been the consequence if Yeltsin had not launched it? Tens of thousands of lives would have been spared. Would Russia have broken up if Chechnya had been allowed to go its own way, to be independent? I doubt it. Tatarstan was given a lot of autonomy short of war, and no one sent in the tanks because the Tatar flag was flying in Kazan.
Annapolis, Md.: Yeltsin always appeared to be an opportunist moreso than a leader. He sided with the right side of change and road the wave moreso than leading the movement to a great outcome. Not a Russian expert by any means, but it appears his gaffes allowed Russia to revert back to the state it is now, which I do not see as good in the long run. Comments?
David Hoffman: I would disagree. If he was just riding the wave, he would never have dared those populist moves in Moscow, or quitting the party or climbing the tank or mass privatization. I think he was a revolutionary, but like many revolutionaries, he didn't know what to do afterwards.
washingtonpost.com: You mention the privatization of Russian industries under Yeltsin, something Putin largely has undone. Is Russia better off with or without the oligarchs who built up empires after the fall of communism?
David Hoffman: Putin has only partially undone the privatization, and it will be impossible to reverse it entirely. The most important point is this: a lot of history shows that states and governments are lousy managers of capitalism. They should set rules but not run companies. Anyone who ever saw a Soviet state-owned factory, or one in China, or anywhere else will get the idea. If you look at the Russian oil companies about 2002, when a big study was made of them, it was fascinating: those that had been totally privatized had the best oil production, profits, etc. Well, now Putin is going back to state ownership of hydrocarbons -- oil and gas. He wants to build "state champions," like Gazprom. Well, history shows that state champions is an oxymoron when it comes to capitalism. It doesn't work.
All that said, there's no going back to the USSR, and a big chunk of property in Russia is still private.
washingtonpost.com: What has been the source of Putin's popularity as compared with Yeltsin? Did the present and former Russian leaders maintain close ties after the transfer of power?
David Hoffman: I have no idea if they maintained contact.
Putin's popularity may be attributed to several things. One factor is that oil prices skyrocketed in his time. This allowed him to pay salaries on time, to begin to rebuild. You can imagine how history might have been different to Yeltsin if oil had gone to $70 a barrel on his watch. A second reason for Putin's popularity is that I think people hunger for order, and a pause. Too much upheaval in the 1980s and 1990s -- and Putin seems to stand for that. Yet another reason is that there is no competition. Putin has all but obliterated serious political competition. If people don't hear about competitors on television, then how are they going to know?
Detroit: I read that Yeltsin died of heart failure. (Was this alcoholic cardiomyopathy?) How much was alcohol abuse a problem for him during his life and how much did it interfere with his governing duties and health?
David Hoffman: I heard the same. Don't forget he had major heart surgery in 1996. I don't know about the alcohol, but it was clearly part of his life, and in that he was not atypical.
Bethesda, Md.: What will Russians say about Yeltsin a hundred years from now?
David Hoffman: I won't hazard a guess about 100 years from now, but I would suggest a couple of things about the legacy. First, although most people associate him with getting up on the tank, it was the things he did after the 1991 coup attempt that were most important. In October, he was writing up a radical economic policy speech and wrote in there, "free prices" immediately. his aides were aghast! they crossed it out. "you can't do that!" they said. they were afraid of such sudden change. Yeltsin then went on television and said: prices are free. it was revolutionary. the next year or two he freed property. he freed trade. these were mammoth changes which set russia on the path it is on today. Yeltsin also took a "let many flowers bloom" attitude to democracy. he didn't know how to build a political party, but he should have -- and if he had really built a party to support his reforms, things might have turned out differently. one part of his legacy is that his democratic reforms were relatively easy to reverse under putin.
Fairfax, Va.: Has Yeltsin ever regretted breaking up USSR? History will not be too kind on him for this big mistake.
David Hoffman: No, I don't think he ever uttered regret, but he bombed the hell out of a lot of people in Chechnya. For what? If he meant that every republic should take as much independence as it could swallow, why did he, only a few years later, go to war against Chechnya? One of many unanswered questions.
Freising, Germany: Corruption and organized crime were no doubt present in the Soviet Union, but often it sounds like both flourished during the Yeltsin era. Was Yeltsin in any way at fault for this, and has Putin been able to reign things in?
David Hoffman: You know, the laws of the Soviet Union, in place when it collapsed, said that entrepreneurship was criminal. These laws were only gradually replaced in the early 1990s. So, it was a lawless space. I think "organized crime" is kind of a misnomer for what happened. If there weren't rules, if the laws were old or unenforced, can there be organized crime? Yes, indeed there were some gangs, violent and thieving. But the little secret is they didn't fool with the big money. The really huge riches were grabbed by the fellows I wrote about in my book, the Oligarchs. And I would say they were ruthless hustlers in a society without rules or laws. That's where the big money lived. Yeltsin created it! He didn't know how to fix it. One way, I think, was to let it evolve. Our own American history teaches us the power of this evolution (Carnegie, etc). However, Putin didn't take that path. Instead, he decided to impose his own will on the oligarchs, and create a kind of state capitalism. Today Russia seems to have swapped one group of hustlers for another.
Washington: What is the reaction in Russia to his death? How does Putin regard Yeltsin? It seems so many Russian leaders in the past seem to be totally disregarded by whatever current "administration" runs the country.
David Hoffman: The announcement came late so I don't know that there's been time to get much reaction yet. Tomorrow will be very interesting. This is an interesting moment to reflect on Yeltsin's legacy, but many people remember only the chaos. I will be very interested to see how the legacy is interpreted by today's leaders in Moscow, and by people.
Fairfax, Va.: I seem to recall Yeltsin stumbling about a couple times during his tenure, and didn't he even go to some kind of "rehab" while in office to "recuperate"? Was he a heavy drinker, and how much of an effect, if any, did it have on his holding office and his credibility among his own people and the world?
David Hoffman: As I said earlier, I think alcohol was part of his life before his 1996 heart surgery, and in that respect he was more like the people he led, than different.
Poplar Bluff, Mo.: What is your views concerning the relationship between Yeltsin and Gorbachev? What was the basis of them being rivals?
David Hoffman: Gorbachev wanted to save Soviet socialism. Yeltsin wanted to wreck it. We would not have had the change without both of them. Gorbachev's steps were absolutely revolutionary but they were also limited by his ultimately hope to create some kind of workable socialism. Yeltsin's reforms were incredibly radical, but also limited by his inability to move beyond the role of destroyer to the role of builder. In the end, Gorbachev's hopes to save socialism were probably misplaced, it was just too far gone by 1985 (although there remains an argument about this among scholars.) Yeltsin's hopes that a big-bang would solve everything obviously were misplaced too.
Naylor, Mo.: Have you heard where Mr. Yeltsin will be buried? Aren't many Russian leaders buried in the Kremlin?
David Hoffman: The wires say Novodevichy, not the Kremlin. For those who don't know, this is a beautiful spot in Moscow, where many writers and artists also lie.
Moscow: The current state of Russia's economy often makes me wonder, how would Yeltsin's presidency have been different had oil prices been at the level they are today?
David Hoffman: It might have been remarkably different. Yeltsin would have enjoyed the breathing room to build a real political constituency -- a party -- to support reform, and he might have not endured such disappointment over democracy. However, we can't just blame oil prices. The truth is that Yeltsin, and those who worked shoulder to shoulder with him, did not devote enough time and attention to building. My wish is not so much for a different oil price, but that Yeltsin had realized he needed to consolidate his revolution, create a functioning civil society and rule of law. These would have been sustaining gifts to Russia.
Editor's Note: washingtonpost.com moderators retain editorial control over Discussions and choose the most relevant questions for guests and hosts; guests and hosts can decline to answer questions. washingtonpost.com is not responsible for any content posted by third parties.


text:
Holiday Shipping Deadlines CLOSE X
Mercerized Italian cotton with a high yarn count gives this piqué-knit shirt an incredibly luxurious texture.
It is our priority to provide you with the exceptional service you have come to expect from Ralph Lauren. Your feedback is important to us.
For press inquiries, e-mail us at email@example.com
Phone: +44 (0) 203 450 7750
Please note that RalphLauren.co.uk does not use your email for promotional purposes or disclose it to a third party. Privacy Notice.


text:
Lobelia Road resident Myrtle Bohall called about a 10-year-old kumquat tree that was loaded with hundreds of small fruit.
Kumquats are good bets for people who want citrus, but live in northern Florida. It is the most cold-hardy citrus variety, says Stan DeFreitas, author and gardening authority.
Kumquats are small evergreen trees that grow to a height of about 10 feet.
While many kumquat trees are grown for their sweet, edible fruits, they are also used as ornamental plants because of their attractive, shiny leaves and delicate white flowers in summer.
The nagami kumquat tree produces small, edible fruits that look similar to oranges. These fruits are extremely juicy and tasty and usually have a sweet, outer skin accompanied by a tart, inner flesh.
An exception to this is the Meiwa kumquat. This kumquat type has a sweet outer skin and a sweet inner flesh.
Kumquats are approximately 1 to 1 inches in length and are either oval or round in shape depending on the type grown.
The most common use for the fruit is to eat it whole, as is. Pieces of the fruit can be added to salads or to dessert recipes. Kumquats are also used to make jellies, jams and marmalades and are often pickled, whole or preserved in syrups for future use.
Kumquats also offer many nutritional benefits. They are cholesterol, fat and sodium free and provide a good source of fiber and of the vitamins A and C. Additionally, kumquats contain traces of calcium and iron.
A member of Amaryllis Circle, Bohall has a variety of plants in her landscape that include azalea, amaryllis, about 75 she retrieved from a neighbor who was throwing them away; shrimp plant, philodendron and angel trumpet.
"Gardening makes me feel better," Bohall said. And, she attributes her longevity -- she'll be 92 this year -- to gardening.
Some information in this article is from the University of Florida, Institute of Food and Agricultural Sciences (UF/IFAS) Web site.
© 2017. All Rights Reserved. Contact Us


text:
|Número de publicación
|Tipo de publicación
|Número de solicitud
|Fecha de publicación
|18 Feb 2003
|Fecha de presentación
|25 Jun 1998
|Fecha de prioridad
|6 May 1998
|Número de publicación
|Gregory M. Waters, Larry R. Dennison, Philip P. Carvey, William J. Dally, William F. Mann
|Cesionario original
|Avici Systems
|Exportar cita
|BiBTeX, EndNote, RefMan
|Citas de patentes (13), Otras citas (7), Citada por (75), Clasificaciones (6), Eventos legales (7)
|Enlaces externos: USPTO, Cesión de USPTO, Espacenet
This application claims benefit of Provisional Application No. 60/084,434, filed May 6, 1998, the entire teachings of which are incorporated herein by reference.
A prefix search is used in networking to route and classify packets. The route to be used for a packet and its classification are determined by finding the longest matching prefix in a set. For example a packet using IPv6 (internet protocol version 6) has a 128-bit destination address. A router determines the output port over which such a packet should be routed by searching a set of variable-length binary strings to find the longest string that matches a prefix of the destination address. For classification purposes, other fields of the header, such as the port number, may also be included in the string to be matched.
To illustrate the problem of prefix search, consider the list of prefix character strings shown in FIG. 1 in alphabetical order. The principle is the same with binary strings. Given a search string, such as "cacea", the goal is to find the longest stored string that exactly matches a prefix of this string. Although a simple linear search of the list finds that this string falls between "cab" and "cad", one must scan several strings backward from this point to find that the longest matching prefix is "ca" In actual routing tables, which may contain hundreds of thousands of entries, the matching prefix may be far from the point where the linear search fails. An optimized data structure is needed to efficiently find the matching prefix.
A prior method for performing longest prefix matching employs a data structure called a trie. A trie for the prefix list of FIG. 1 is shown in FIG. 2. As shown, the trie is a tree structure in which each node of the tree resolves one character of the string being matched. Each internal node consists of a list of characters. Associated with each character is an outgoing link either to another internal node, a rectangle in the figure, or to a leaf node, a circle in the figure. A slash at the start of a node indicates that a prefix leading to that node with no additional characters is part of the list. Each leaf node holds the result data associated with the prefix leading to that leaf node, and in the figure, the leaf nodes are labeled with these prefixes. The result data might, for example, be the output port associated with a data packet and a flow-identifier.
To search the trie, one starts at the root node, node 1 in the figure, and traverses the tree by following the outgoing link at each node corresponding to the next character in the string to be matched. When no matching outgoing link can be found, the longest matching prefix has been found. For example, given the string "cacea" we start at node 1. The "c" directs us to node 4. The "a" directs us to node 8. As we cannot find a match for the next character, "c", at node 8, we follow the link associated with the slash to the leaf node associated with the longest matching prefix, "ca". Note that if prefix "ca" were not in the list, we would need to backtrack at this point to node 4 for prefix "c".
Another prior method for prefix matching is to perform binary search on a table. However, as described by Radia Perlman, Interconnections, Bridges and Routers, Addison Wesley, 1992, pages 233-239, and shown in FIG. 3, since binary search will find the closest matching string, rather than the longest matching prefix, we must make two modifications to the list to apply this technique. First, we insert two entries for every entry in the list that encloses other entries, that is, that would serve as a longest matching prefix for another prefix in the list but for the other prefix itself being in the list. One of those entries is terminated by the symbol 0, which comes alphabetically before all characters, and one by the symbol 1, which comes alphabetically after all characters. These two entries act as parentheses enclosing all entries that contain the prefix. Second, we attach to each entry in the list not ending in a 0 a pointer to the nearest enclosing entry. FIG. 3 shows the list of FIG. 1 augmented in this manner. Note that the prefix "ca" has been replaced by the two entries "ca0" and "ca1" that bracket all entries containing the prefix "ca" and that all of these entries have a pointer back to "ca0".
To search the augmented list of FIG. 3 for the longest matching prefix, one searches for a string equal to a prefix of the target or the alphabetically closest pair of strings. Strings ending in "0" or "1" never exactly match a prefix of the target string because "0" and "1" do not match any character of the target string. If the search finds an exact prefix of the target string, the result data associated with the string is retrieved. Otherwise, the search found the closest pair of stored strings, Sa and Sb. In this case there are three possibilities:
1. If Sa ends in a "0" symbol, then the longest matching prefix is this string with the "0" removed.
2. If Sb ends in a "1" symbol, then the longest matching prefix is this string with the "1" removed.
3. Otherwise, an enclosing pointer from Sa is followed to find a string ending in a "0" symbol which encloses Sa and the nearest match is that string with the "0" symbol removed.
For example, a search for "cacea" will end between "cab" and "cad". Since this is not an exact match, "cab" does not end in "0", and "cad" does not end in "1", the pointer from "cab" is followed back to "ca0" giving the longest matching prefix, "ca". Similarly a search for "cb" will end between "ca1" and "cc" and follow the pointer from "ca1" back to the common prefix, "c".
While the trie structure and binary search strategy work, they are not well suited for implementation in a hardware search engine. The trie requires a memory access for every character of a string and possible backtracking if a match is not found. This makes it inefficient in terms of memory bandwidth usage. The binary search strategy requires storing two result pointers for the majority of prefixes, one for a direct match and one to the enclosing string or its associated result. This makes it inefficient in terms of memory usage.
The present invention relies on a data structure, an augmented tree, that stores prefix sets in a manner that enables efficient searching and a hardware engine for searching the augmented tree. The augmented tree stores the prefix set with enclosing prefixes in a tree structure similar to a B-tree, a tree with a radix greater than one previously used to efficiently search for exact matches by optimizing the tree node size to the size of data blocks retrieved from storage discs.
In accordance with the invention, a prefix search data structure comprises a tree structure having internal nodes for identifying subsequent nodes from prefix search keys. Leaf nodes each comprise a set of prefix keys to be compared to a prefix search key. The sets of prefix keys of plural leaf nodes together form a list of prefix keys including enclosing prefix key pairs.
In preferred embodiments, the internal nodes include partitioning nodes, each comprising a set of prefix keys to be compared to a prefix search key. Prefix keys from one node point to subsequent nodes through a common pointer and indexes. Each internal node may also comprise a node-size parameter that defines the size of that node and a child-node-size parameter that defines the size of fixed size child nodes to which the common pointer of the internal node points.
Each of plural leaf nodes may comprise a single enclosing pointer associated with an enclosing prefix key which encloses a prefix key of the leaf node. Preferably, a common pointer of each leaf node is a result pointer to a block of results for the node, and the enclosing pointer points to a result in a block of results for another node. Each leaf node may comprise a node-size parameter that defines the size of the leaf node as well as the size of the results block.
Individual nodes can be sized to optimize memory timing. In particular, the data retrieved for any node may correspond to the size of the data block most efficiently retrieved from memory storage. Preferably, each of the nodes identifies a middle prefix key and low and high sets of prefix keys. Each node can be laid out to optimize memory bandwidth by storing the middle prefix key ahead of the low and high prefix keys so that the upper or lower set of strings in the node can be conditionally fetched based on a comparison of the middle prefix. Within each low and high set of search keys, middle prefix keys may be further identified with low and high sets of prefix keys.
The data structure results in significant savings in both storage and bandwidth compared to previous methods for storing prefix sets. To further reduce storage, the stored prefix keys of select nodes may be only portions of the full prefixes. Each of the select nodes may include an indication of the portion of the prefix search key to be compared to the prefix keys. Further, one or more tree nodes may comprise a table indexed by a prefix search key rather than a list of partitioning strings. A table may also be indexed by only a portion of the prefix search key.
The foregoing and other objects, features and advantages of the invention will be apparent from the following more particular description of preferred embodiments of the invention, as illustrated in the accompanying drawings in which like reference characters refer to the same parts throughout the different views. The drawings are not necessarily to scale, emphasis instead being placed upon illustrating the principles of the invention.
FIG. 1 is a list of prefixes used to illustrate the invention.
FIG. 2 is a prior art trie used to search prefixes.
FIG. 3 is the prefix list of FIG. 1 modified to include enclosing prefixes and pointers in accordance with another prior art approach.
FIGS. 4a and 4 b illustrate a tree data structure embodying the present invention.
FIG. 5 is a flow chart of the search method using the tree of FIGS. 4a and 4 b.
FIG. 6 is an alternative tree having both partitioning nodes and table nodes in accordance with the invention.
FIG. 7 is a block diagram of a hardware search engine used to implement the prefix search of the present invention.
FIG. 8 is a timing diagram illustrating access of data from a single SDRAM bank of FIG. 7.
FIG. 9 illustrates the alternating access of data from two banks of an SDRAM chip.
FIG. 10 is a timing diagram illustrating shows a timing diagram for two search engines axing their respective two blanks of SDRAM memory over a common set of address and control lines.
FIG. 11 illustrates the orientation of data within a node to store the middle key before low keys and high to improve performance.
FIG. 12 illustrates a leaf node in an alternative embodiment.
FIG. 13 is a flow chart for processing a leaf node as illustrated in FIG. 12.
FIG. 14 is a graph of search time as a function of node size.
FIG. 15 is a block diagram of a search engine for processing a search algorithm including the process of FIG. 13 in the system of FIG. 7.
FIGS. 4a and 4 b show an augmented tree for the prefix list of FIG. 1 modified to include the same enclosing prefixes as in FIG. 3. This particular augmented tree has a single internal node, node 1, which is also the root node for the tree. It has four leaf nodes, labeled 2-5. Each node holds a set of prefixes, which we shall also call keys in the discussion to follow. Each internal node, such as node 1, holds the set of keys that divide the key space across its children. A suitable set of keys is the alphabetically lowest key in each subtree except the first. Each child node holds a contiguous set of keys from the complete key list. To facilitate access by a hardware engine, as described below, the keys in each node, internal or leaf, are stored in three parts. The middle key is stored first, followed by a set of keys that are all less (in alphabetical order) than the middle key (the low keys). The low keys are in turn followed by the high keys, a set of keys that follow the middle key. While the example shows a total of three keys in the one internal node and five keys in each leaf node, larger nodes are preferable to optimize memory bandwidth. In the preferred embodiment, each node holds 1 to 16 keys including one middle key, zero or more low keys, and zero to seven high keys.
The structure is best understood by means of an example. Consider searching for the search key "cacea" using the augmented tree of FIGS. 4a and 4 b. The search begins at the root node (labeled 1). This node contains some parameters, a single child pointer, and a set of dividing keys partitioned into three sets as described above. The parameters encode the size of the node and its children. They include the number of low keys (one in this example), the number of high keys (one), and the size of each child node (×bytes). The child pointer, p, identifies a block of memory that holds contiguous child nodes of uniform size. The pointer directly identifies the first child node. Subsequent child nodes are found by indexing off of this pointer after scaling by the child node size. Simplistically, the ith child node is located at (p+i*x). (Keys in a node are numbered 1 . . . k as are results associated with a leaf node's keys. Children of an internal node are numbered 0 . . . k.).
In the preferred embodiment, the augmented tree is stored in dynamic random access memory (DRAM) which permits rapid access within a memory "row" of 512 bytes. Nodes are up to 64 bytes in size, an internal node has one to 16 children, and the "contiguous" children start on any 64-byte boundary. Therefore the children of one internal node may occupy parts of one to three DRAM rows. In order to read any parts of a node quickly, each node is confined to one DRAM row. To achieve this, the ith child of an internal node is stored at (p+i*x+r) where, for the second and third rows, r accounts for wasted space at the ends of one and two DRAM rows, respectively, containing lower-numbered children of the same internal node.
The child node to be accessed is determined by comparing the search key to the entries stored in the internal node. The key, in this case "cacea," is first compared to the middle key, "bcc1" in this example, and since it is lexicographically larger than this key, it is then compared against the high keys, "caaf" in the example. As the search key is greater than all of the keys in the internal node, the last child (index i=3) is selected and the search proceeds to this child, labeled 5.
Node 5 is a leaf node. The sets of prefix keys of plural leaf nodes together form a list of prefix keys including enclosing prefix key pairs. A leaf node could return the longest matching prefix from which the output port and flow identifier, for example, could then be determined. Preferably, however, the leaf nodes comprise result pointers which directly point to the desired output port and/or flow identifier associated with the longest matching prefix. Such data could also be stored directly in the leaf nodes, but in view of varying lengths of results and sharing of results, pointers result in more efficient storage of data.
Leaf node 5 contains parameters, a result block pointer, an enclosing result pointer, and a list of keys divided into three sets. The parameters include the number of low keys (3) and the number of high keys (3). At this node, the search key is again compared to the stored keys. As the key "cacea" is less than the middle key of this node, "ca1", it is compared against the low keys and it is found to fall between keys "cab" and "cad". Since no exact match is found, the search must now scan for the longest enclosing prefix. If the keys are stored in alphabetical order, this is accomplished by scanning backwards through the keys in this node, starting at "cab", to look for the nearest start or end key, a string ending in "0" or "1." As no such prefix is found in the node, the enclosing result pointer is followed to find the result record for the enclosing prefix for the block, "ca". Following this pointer directly gives the result associated with key "ca", r(ca).
If the search ends at or just after a key that is a prefix of the search key (that is, the search ends between a matching prefix and the next prefix key), that key is the longest matching prefix, and the result is identified using the result block pointer. If we search the structure of FIGS. 4a and 4 b for the search key "cadam", the search would proceed as above except for the final step. Once key "cad" is found as the third key associated with node 5 and determined to be a prefix of "cadam", the result block pointer is followed to result block 9 and the third result (corresponding to the third key) is retrieved giving r(cad).
If, in scanning backwards, the search ends in a start or end key, the result is identified using the result block pointer. A start key, a string ending in a 0, is the enclosing key for the prefix being searched and points to the result for that enclosing key. On the other hand, if the scan backwards identifies an end key, a string ending in a 1, that key will not be an enclosing key for the search key but it does point to the result for that key's enclosing prefix.
A flow-chart of the augmented tree search method is shown in FIG. 5. The method starts at decision box 100 with variable "N" equal to the root node of the augmented tree and variable "key" equal to the key being searched for. As long as N is an internal node, the search proceeds down the left side of the figure (boxes 101 to 104) to identify the child node to search next by comparing against the partitioning keys stored in node N, k[1] . . . k[n]. Box 101 checks if "key" is less than all of these stored keys. In this case the child pointer is followed directly (box 102) to find the first child and the search continues from point A before box 100. If "key" is greater than k[1], the key list is scanned to find the last key, k[j], less than or equal to "key" (box 103). The index of this key, j, is used to compute the address of the j-th child node in box 104 and the search continues from point A.
After traversing a number of internal nodes, the search eventually arrives at a leaf node (like node 5 in FIG. 4a and 4 b) and the search proceeds down the right side of FIG. 5 (boxes 105 to 114). There are three possible ways in which the longest prefix matching the search key can be found corresponding to boxes 107, 110, and 111. First, box 105 scans the stored keys to find the last key, k[j], less than or equal to the search key, "key." Box 106 checks if k[j] is a prefix of key and, if so, the corresponding result is returned in box 107. This path is followed, for example, in the search for "cadam" in the augmented tree of FIGS. 4a and 4 b as described above.
If not, the keys k[j] . . . k[1] are scanned for a prefix start key or end key, that is a key ending in the symbol 0 or the symbol 1, respectively. Box 109 checks if such a key, k[m], j>=m>=1, is found. If so, the corresponding result is returned in box 110. This path is followed, for example, if we search the augmented tree of FIGS. 4a and 4 b for the search key "baz". The search terminates on leaf node 2 with j=6 and k[j]="bae". Scanning backward finds the prefix start key k[m]="b0" with m=5. The fifth entry of the result block (6), r(b), is thus returned. The path to box 110 is also followed if a prefix end key (ending in the symbol 1) is found during the backward scan. For example, suppose we search for key "cd" in the augmented tree of FIGS. 4a and 4 b. The search will terminate on leaf node 5 with j=5 and k[j]="cc". Scanning backward we encounter k[m]="ca1" at m=5. Associated with each prefix end key is the result not for that key but for that key's enclosing prefix. In this case, the result for enclosing prefix "c", r(c), is associated with "ca1" and is returned from this search. We know that the longest prefix enclosing "ca" is the same as the longest prefix enclosing the search key because "ca1" and the search key are between the same bounding start and end keys or parentheses. If there were a prefix that enclosed "ca" but not the search key, we would have encountered the end key of that prefix in our backward scan.
If k[j] is not a prefix of the search key and we find no prefix start or end keys between k[j] and k[1], then the search proceeds to box 111 and the enclosing result for the node is returned. This path is followed, for example, in the search for "cacea" in the augmented tree of FIGS. 4a and 4 b as described above. By building the augmented tree so that the enclosing pointer of each node points to the result for the enclosing prefix of the first key of the node, we bound the number of keys we must scan to find an enclosing prefix to the contents of a single node.
With very long keys, e.g. 64-bits, the amount of storage required to hold the augmented tree is significant. An augmented tree with 300,000 prefixes of 64-bit keys, for example may contain up to 19 million bits of storage. The actual number will be smaller as most prefixes do not contain the full 64 bits. The storage requirements for the augmented tree can be reduced by starting the search by indexing a table using the most significant several bits of the search key and then discarding these bits. The table lookup returns a pointer to the root node of an augmented tree holding stored keys beginning with those bits. As all entries in the tree have the same most significant bits, these bits can be omitted from the stored keys resulting in considerable storage savings. For our example 300,000 key tree, a table of 4096 20-bit root node pointers (to be indexed with the most significant 12-bits of the search key) takes about 80,000 bits. Removing the 12 most significant bits from all 300,000 stored keys saves 3.6 million bits.
This approach of stripping a common prefix off of all stored prefixes in a subtree to save space can be applied independently of the use of root tables. Any internal node of an augmented tree that roots a subtree for which all stored prefixes share a common prefix can apply this method.
Similarly, the use of tables is not restricted to the root of a tree. At any point in the tree structure where it would be advantageous to index on a prefix of the search key rather than to compare the search key against partitioning keys, a table node can be inserted in place of an internal tree node.
FIG. 6 illustrates the use of a root table and the use of prefix stripping both in conjunction with the table and with normal augmented tree internal nodes. The figure shows five tree nodes, labeled 20-24, forming the upper portion of the tree. The lower portions of the tree and all of the leaf nodes are not shown. Each of the tree nodes is tagged with its type: "table" or "internal". A leaf node would be tagged with type "leaf". A root pointer identifies the root node, which in this case is a table node (20). The search tree in the figure is configured for use with 32-bit search keys.
Table node 20 includes its tag, two parameters, and a table of pointers to subtrees. The two parameters indicate the number of bits from the search key to use in indexing the table (12), and the number of bits from the search key to discard before indexing (0). The remainder of the node contains the table which is of size 2k where k is the first parameter. Thus, the table portion of node 20 contains 212=4096 entries. For clarity only four of these entries are shown in the figure.
The first of these entries, at index 0FE (hexadecimal), holds a null pointer, denoted by the slash. It is not unusual for many of the entries in a root table to be empty (no stored prefixes start with the index of that table entry). These empty entries are marked by storing a null pointer. If almost all of the entries in a table are empty, it may be more efficient to replace the table node with a partitioning internal node since partitioning nodes do not consume any space representing null entries.
The second entry shown in the table, at index 1AC (hexadecimal), points to internal node 21 that roots a subtree where all of the stored prefixes start with the prefix 1AC. Thus each stored prefix can be shortened by discarding these common 12 bits. The internal node format is as described in conjunction with FIGS. 4a and 4 b above with two additions. First, the node is tagged with its type, "internal" to distinguish it from "table" nodes and "leaf" nodes. Second, a parameter is added (12) indicating the number of bits to strip from the search key before comparing the key against the partitioning prefixes stored in the node. If our search key is hexadecimal 1AC27EF4, for example, this node directs us to strip the most significant 12-bits (1AC) before searching this node and its associated subtree with the remaining 20-bit key, 27EF4.
In some cases, a prefix stored in an augmented tree is shorter than the index used to index a table node in the tree. This situation is handled as illustrated by the third entry shown in the table. In this case, the prefix "3" is stored in the augmented tree. To encode this in the table, all indexes starting with 3 (hexadecimal) hold pointers to internal node 22. This causes any search with a key beginning with "3" to proceed to node 22. Node 22 in turn specifies that only 4-bits are to be stripped off the search key. This allows the search proceeding from this point to distinguish keys starting with prefixes "3 a" and "3 b" for example. While this causes internal node 22 to use more storage, to hold 28-bit keys, the keys can be compressed at the next level of the tree by specifying that additional bits are to be discarded before searching that level. As with null entries, duplicate entries in a table waste space, and in cases where there are many short prefixes, replacing the table node with an internal node may result in a more efficient representation.
The final entry shown in node 20 of FIG. 6 illustrates the case where a table entry points to another table node. In this case, index 57F (hexadecimal) directs the search to table node 23. The parameters in node 23 direct that 12-bits (the prefix 57F) be stripped from the search key, and that the next 8-bits be used to index the table. For example, if the search key is 57F1A1DE, the top 12-bits are first stripped, leaving 1A1DE. The next 8-bits, 1A (hex), are then used to index the table. The resulting pointer directs the search to internal node 24 where these 8-bits are then stripped, leaving the search to continue with the remaining 12-bits, 1DE (hex).
One skilled in the art will understand that the possibilities for arranging augmented trees using table nodes, internal nodes and bit stripping extend beyond the simple example presented here. In general, an augmented tree may be arranged with any combination of table nodes and internal nodes, and one or more bits may be discarded from the search key at each node along a search path. By optimizing the combination of node types and bit stripping, the resulting tree can be made to consume considerably less storage than if all nodes were internal nodes and all prefixes were stored full length.
An augmented tree can be constructed using well known techniques for constructing B-Trees. For example, the method described in Cormen, Leiserson, and Rivest, Introduction to Algorithms, 1990, pp. 381-399 for incrementally constructing a B-Tree by inserting one node at a time into an empty tree may be employed. Alternatively, one can construct an augmented tree directly from a list of prefixes augmented with parentheses, such as the list shown in FIG. 3. This is accomplished by segmenting the list into fixed sized blocks that become the leaf nodes of the tree. A new list is then constructed comprising the first prefix of each node except of the first node. This list is then segmented into fixed size blocks that form a rank of internal nodes in the tree. The process, making a list from the first prefix of a set of nodes and constructing a new set of nodes by segmenting this list, is then repeated until the list fits into a single node. For example, the leaves of the tree of FIGS. 4a and 4 b are constructed from the list of FIG. 3 by segmenting the list into blocks of 7 prefixes. Each 7-prefix block becomes one leaf node of the tree. The first prefix of each block except the first block is then extracted and used to construct a new prefix list that fits entirely into the one internal node of FIGS. 4a and 4 b.
In the past, prefix search algorithms for packet header processing have been executed in software running on a conventional processor. At the very high packet rates required for internet backbone routing, however, (about 5M packets/sec), software searching is too slow to keep up. To operate at these speeds, a hardware prefix search engine is required.
A block diagram of a hardware search engine is shown in FIG. 7. The search ASIC (30) accepts input packet descriptors, the packet header plus auxiliary information. For each input packet descriptor, the ASIC performs a prefix search to route and classify the packet, appends this information to the packet descriptor and outputs the augmented descriptor. As shown in the figure, the ASIC comprises an input packet descriptor queue (31), an output packet descriptor queue (32), and a plurality of search engines (35). Multiple search engines are required to meet the high packet throughput requirements of backbone routing. A single search engine cannot keep up with this rate.
In the preferred embodiment there are six search engines. However one skilled in the art will understand that any number of search engines can be employed. Packet descriptors arriving at the search ASIC are queued in the input queue (31). When a search engine becomes idle, it is dispatched to handle one of the waiting descriptors over distribution bus (33). When a search is completed, the augmented descriptor is enqueued in the output queue via output bus (34).
The augmented tree search structure requires large amounts of memory and is too large to be stored on the search ASIC. It must be stored in off-chip memory. In the preferred embodiment, a separate copy of the search structure is stored in a separate synchronous dynamic random access memory (SDRAM) for each search engine. For six search engines there are six SDRAM chips each holding a complete copy of the augmented tree. One skilled in the art will understand that it is also possible to interleave a single copy across the SDRAM chips or to interleave a smaller number of duplicate copies. In the preferred embodiment, each SDRAM is a single 64 Mb (4M×16) chip.
To economize on ASIC package pins, the search engines are organized into pairs and each pair of search engines shares a set of address and control pins (except chip selects) (36). This set of pins is in turn connected to the pair of SDRAMs associated with the pair of search engines. As data bandwidth is critical, each search engine and its corresponding SDRAM exchange data over a dedicated 16-bit data bus (37). This bus is used primarily for reading during search operations. However it is also used to write to the SDRAM when initializing the augmented tree structures and when broadcasting updates to the search tree across the SDRAMS.
Each SDRAM chip contains a plurality of memory banks. In the preferred embodiment there are two banks, denoted A (39) and B (40). This banked structure permits data to be read from one bank while the other bank is being precharged or addressed. To optimize bandwidth, the preferred embodiment stores a copy of all internal nodes of the augmented tree in both banks. This permits rapid access during most of the search, the traversal of internal nodes. To optimize storage, the leaf nodes are not duplicated, but rather are interleaved across the two banks.
The timing of a typical access to an SDRAM chip is shown in FIG. 8. The figure shows time, in cycles, across the top. The value of the signals on the address/control or data lines, if any, during a particular cycle are shown below. The address of the location being referenced is divided into two parts, the high-order bits form a row address and the low-order bits form a column address. These two components are used in turn to address the row and column of the two-dimensional memory array on the SDRAM chip. As shown in the figure, the search engine presents the row address (RA) to the chip on the address/control lines during cycle 1. The search engine then waits four cycles while the SDRAM fetches the requested row of memory. The column address (CA) is then presented during cycle 5. Another four cycles elapse while the SDRAM extracts this column from the previously fetched row. Starting in cycle 9, the SDRAM sends a burst of 20-bytes of data, two bytes per cycle over the data lines. The first two bytes (DO) are sent in cycle 9, then next two (D1) are sent in cycle 10, and so on. One cycle before the end of the burst, in cycle 17, the search engine sends a request to precharge the selected bank (PA), in this case bank A, to the SDRAM. Four cycles later, the bank is precharged and able to accept another row address in cycle 21.
Transferring two consecutive bursts of data from a single SDRAM bank, as shown in FIG. 8, is rather inefficient because the data lines remain idle while the bank is precharged and addressed. In this example, the data lines have a duty factor of 50% (busy 10 cycles of 20). FIG. 9 shows how a transfer efficiency of 100% can be achieved by alternating accesses to the two banks on the SDRAM chip. The signals shown in italics in the lighter-shaded boxes are directed to bank B. During cycles 11 and 15, while the data from bank A is being transferred, bank B is being addressed. Thus, during cycle 19, after the data burst from bank A is complete, the transfer from bank B begins. By alternating accesses to banks A and B in turn, the data pins are used every cycle maintaining maximum bandwidth.
During most of the augmented tree search, the search engine is accessing internal nodes. Because these nodes are stored in both banks of the SDRAM, the search engine is always able to find the node that it needs to access next while alternating banks. At the end of the search, the search engine accesses a leaf node that is stored in only one bank. At this point, the search engine may idle the SDRAM pins if, for example, the current access is directed to bank A and the required leaf node is stored only in bank A. However, this overhead is not severe because a leaf node is accessed only once during each search.
To avoid idling the memory when a search task must read two blocks of data from the same bank in successive accesses, each search engine in the preferred embodiment operates two instances of the search algorithm (two search tasks). The two tasks normally alternate their accesses to the memory. Thus each task normally is able to examine the data coming back from one node before providing the row address for its next read. Also, if one task must momentarily idle because it must make two successive accesses to the same bank, the other task may be able to use the idle time productively.
The address and control lines are only lightly utilized in the timing diagram of FIG. 9. This low duty factor can be exploited to reduce pin count on the prefix search ASIC by having two search engines share a single set of address and control pins as shown in FIG. 7. The two search engines each communicate with their own SDRAM chip over a common set of address and control lines by multiplexing their row access, column access, and precharge requests on these lines. Dedicated chip select lines (not shown in FIG. 7) are used to indicate the SDRAM to which the request is targeted.
The timing of this multiplexing is shown in FIG. 10. Search engine 1 places its requests on the shared address and control lines during odd cycles (1, 5, 11, . . . ) and search engine 2 places its requests on the control lines during even cycles (2, 6, 12, . . . ). This guarantees that there is never a conflict over access to the lines. The two search engines transfer their data over separate dedicated data buses as shown.
One skilled in the art will understand that alternative SDRAM timing schemes are possible. For example, one can vary the number of cycles between the steps of precharge, row access, column access, and data transfer. Also, one can transfer more or fewer bytes of data during each burst. A designer will optimize the timing and the transfer size for a particular implementation.
By arranging the storage of nodes in memory so that the middle partitioning key is stored first, as illustrated in FIG. 11, the performance of the search engine can be further enhanced. With the arrangement, the search engine reads the middle key, along with parameters and other overhead information on its first access to the node. Based on a comparison of the search key to the middle key, it then reads either the low keys or the high keys on its second access, but not both. Compared to the conventional approach of reading the entire node from memory on each access, this method results in a significant performance improvement.
The timing of a middle-key-first node read can be understood in conjunction with FIGS. 9 and 11. Each row of FIG. 11 corresponds to two bytes of data, the amount transferred by the search engine in one cycle. The search engine starts reading data from the beginning of the node record in cycle 9 of FIG. 9. In cycle 9 it reads two parameter bytes. These parameters, stored ahead of the middle key, are those required to interpret the middle key, such as the number of bits to strip before comparison and the size of the middle key, and those required to locate the start of the high and low key blocks, such as the type of node, total space for low keys, and the number of low keys. In cycles 10-11, the search engine reads the 4 bytes of the middle key. Other parameter information, such as the size and number of the high keys and the size of each child (for internal nodes) along with the child pointer and result pointer (for leaf nodes) is then read during cycles 12-18. If there is not sufficient parameter and pointer information to fill all of these cycles, the search engine speculatively starts reading low keys. In parallel with reading the parameters and pointers, in cycles 12-14, the search engine compares the search key with the middle key and, depending on the result, calculates the address for either the low keys or the high keys. This calculated address is used to modify the column address for bank B that is output in cycle 15. Based on this address, the search engine then reads just the low keys, or just the high keys from bank B in cycles 21-30.
As described earlier, the preferred embodiment stores a copy of all internal nodes of the augmented tree in both banks A and B, while leaf nodes are stored only once to conserve memory space. Also, the preferred embodiment alternates reading nodes for two instances of the search algorithm. By the latter property, the search engine would know in advance that it will read a leaf node from bank B upon finishing the current internal node. In that case, the sequence in FIG. 9 can be adjusted to eliminate idle SDRAM data cycles due to successive accesses to bank B. The second row address, RB in cycle 11, is suppressed, as is the first precharge, PA in cycle 17. The second column address, CB in cycle 15, is directed to bank A instead, as is the second precharge, PB in cycle 27. Thus an internal node can be processed using either one SDRAM bank or two, and the search engine can prepare either SDRAM bank to read the following leaf node without any idle cycles.
Optimizing the structure of the node and the search tree to match the latency and burst-access size of the memory can be generalized. For example, one could divide the low keys into two parts and store the middle low key first. These parts could in turn be subdivided and so on. Also, the choice of the overall size of each node, which trades off the depth of the tree, and hence the number of accesses required, against the size of each node, and hence the amount of data transferred on each access, can be optimized to match the timing characteristics of the memory device. With different memory timing the node size and organization may be optimized differently than presented here for the preferred embodiment.
One skilled in the art will understand that the size of an augmented tree node should be set to a size determined by the timing parameters of the tree memory to optimize DRAM bandwidth and hence search time. Two parameters, t1 and t2 characterize the memory timing. The first parameter, t1, is the time required to access the first word of a node from the first address cycle, 8 cycles in FIGS. 8-10. The second parameter, t2, is the time to reference each subsequent word, 1 cycle in FIGS. 8-10. Given these parameters, the time to reference N words can be calculated as t(N)=t1+(N−1)t2.
As the node size, N, gets larger, the time to access each node increases according to the formula above. This increased access time is offset, however, because the number of nodes that must be accessed to complete the search decreases with node size. This number is given by d(N,M)=log(M)/log(N) where M is the size of the tree. The total search time is the product of these two formula T(N)=log(M)(t1+(N−1)t2)/log(N). We can ignore the log(M) term as it is independent of node size and focus on the remaining component of search time, T1(N)=(t1+(N−1)t2/log(N). By solving this equation for the value of N that gives a minimum T1(N), we can optimize the node size for a given set of memory timing parameters.
For example, the graph of FIG. 14 shows how search time, T1, varies as the node size is varied from 2 to 20 keys with the DRAM timings shown in FIGS. 8-10. The figure shows that the optimum node size for these timing parameters is 8 words. The figure also shows that there is a steep penalty for smaller node sizes but a more gradual penalty for using node sizes that are larger than optimal.
In an alternate embodiment of the invention, the leaf node is organized as shown in FIG. 12 and searched using the algorithm shown in the flowchart of FIG. 13. The modifications of this embodiment allow the longest matching prefix to be determined during the single forward scan to a point within the node where the search key is greater than or equal to the prefix key stored in the node; that is, the backwards scan of FIG. 5 is not required. Further, this embodiment only requires scan of either the high or low keys within a node.
Processing with only a forward scan is obtained by ordering the closing prefixes within a high or low set without considering the trailing 1. The node within which a closing prefix resides and the high or low set of prefixes in which it resides remain determined by order with the trailing 1 considered; it is only the order within the high or low set which changes. As a result, within a high or low set of prefixes, a matching closing prefix will be noted in forward scan before locating any longer matching prefix. Any closing prefix will be reached from within the closing parenthesis, so the closing prefix can point directly to the result for that prefix.
With only one of the high and low sets of prefixes searched, the system must account for the possibility that a search prefix, which falls within the range of low prefixes, does not match any of those low prefixes but is within a parenthetical having its closing prefix in the high set. On the other hand, a search prefix within the range of the high prefixes, but not matching any of those prefixes, may be within a parenthetical having an opening prefix in the low set. In either case, the enclosing prefix defined by the enclosing pointer would not be the closest matching enclosing prefix. In this embodiment, the leaf node is augmented with three fields that facilitate finding the closest matching prefix without scanning all of the prefixes in a node. The binary field, "high closer match," if true indicates that the node contains a longer (hence closer) enclosing prefix for the high keys in the node than the prefix corresponding to the enclosing result pointer. The "low closer match" field performs an identical function for the low keys. If one of these two binary fields is true, the location of the closer matching prefix is encoded in the "closer match offset" field as an offset from the first key in the node.
At most one of these two fields may be true in any given leaf node. If the low is true, there must be a closing parenthetical in the high set for which no opening parenthetical is found in the low set; and if the high is true, there must be an opening parenthetical in the low set for which the closing parenthetical is outside the node. Both cases being true would violate the requirement that parentheticals be nested.
Specifically, enclosing keys are handled differently in the embodiment of FIG. 12 than in the embodiment of FIGS. 4a and 4 b:
1. The result pointer associated with a closing parenthesis prefix, one ending in 1 in the figure, points to the result for that prefix, not for an enclosing prefix as in FIGS. 3, 4 a and 4 b. For example, the result for ca1 is the result for the prefix ca, not the result for the prefix c.
2. Within a list of high keys or a list of low keys enclosing prefixes are ordered by their prefix without considering the trailing 1 or 0. (The 1s in FIG. 12 are enclosed in brackets to indicate that they are not used in ordering the keys in the list). If both parentheses are in one such list, they would be adjacent in the ordering and one may be discarded as redundant.
The flow chart of FIG. 13 shows the algorithm for searching a leaf node augmented with closest match information as in FIG. 12. The flow chart is best understood by means of an example. Consider, for instance, searching the leaf node of FIG. 12 for the key "cac." The procedure starts at box 201 where the key, "cac," is compared to mid, the middle key stored in the node, "cadd." As "cac" is lexicographically less than "cadd" the search proceeds to box 210 to search the low keys. In box 210 the low keys are searched to find the last low key, k[j], that is a prefix of the search key. In performing this search, the trailing 1 or 0 of an enclosing prefix is ignored. Because the keys are sorted in lexicographical order ignoring the trailing 1s and 0s, the last key that matches a prefix of the search key is the longest matching prefix. The results of this search are checked in box 211 to see if a matching prefix was found. If a prefix is found, it is the longest matching prefix, and the result associated with this prefix is returned in box 212. If no matching prefix was found in box 210, which is the case when the key is "cac," the search proceeds to box 212.
Box 212 uses the new fields of the leaf node to check for a closer match elsewhere in the node without the need to scan the rest of the node. The box checks the value of the "low closer match" field in the augmented leaf node. If this field is false there is no closer match within the node so the search proceeds to box 223 to return the result associated with the enclosing pointer. If this field is true, then there is a closer match in the node and the search proceeds to box 222 where the result associated with this match is returned. In our example, where we are searching for a prefix of the key "cac" in the leaf node of FIG. 12, the "low closer match" field is true so the search proceeds to box 222. In this box, the value of the "closer match offset" field, 5 (abbreviated "closer" in FIG. 13) is used to find the closest matching prefix at an offset of 5 keys after the first key in the node. This corresponds to the closing parenthesis of the prefix, "ca," stored in the sixth position, so the result associated with "ca" is returned. This closing prefix must be a prefix for all unmatched prefixes within the low set of prefixes because closing prefixes are by definition matching prefixes of all prefixes between the opening and closing parentheticals, and if any prefix were outside the parentheticals in the low set, the opening parenthetical would have been encountered and returned a result.
FIG. 15 shows a block diagram of a search engine for executing the alternate search algorithm of FIG. 5 with FIG. 13 substituted for the leaf node processing. The engine consists of a set of registers, 310-314, to hold the state of the search, a comparator 303, control logic 302, address calculation logic 301, and an address multiplexer 304. The search is initiated by loading the address register with the address of the root node of the augmented tree and loading the key register with the search key. The control logic then presents the root address to the SDRAM and starts an access sequence to read a burst of data as illustrated in the timing diagram of FIG. 8. When the data returns from the off-chip SDRAM, it is clocked into a data register. From this register the data is routed to the appropriate location depending on its type. The parameter fields at the start of the node are latched into the parameter register where they are used by the control logic to direct the search. Stored key fields are routed to the comparator where they are compared against the search key 16-bits at a time. Note that while the key register is large enough to accommodate the longest possible search key, it is accessed 16-bits at a time to facilitate comparison with the 16-bit wide data stream returning from the SDRAM. Finally, when the search is complete, the result data is routed to the result register from which it is placed in the output FIFO.
When key fields of an internal or leaf node are being read from the SDRAM, the comparator performs a masked compare to compare just the bits of the stored prefix key to the search key. Masking is required because the variable length prefixes within the node may not be aligned to a 16-bit boundary and thus only part of the 16-bit word read from memory may contain the stored prefix. The remaining bits must be masked from the comparison. The results of the comparison are passed to the control logic to direct the search.
During the traversal of internal nodes, the comparison result determines the index of the child node, j in FIG. 5, that is to be visited next. This information is passed from the control logic to the address calculation logic where it is used to compute the address of the next node to visit according to the equation in Box 104 of FIG. 5. The address calculation logic consists of an adder, some multiplexers, and a lookup table to compute the value of r, the DRAM page roundoff factor.
When the search reaches a leaf node, the control logic carries out the algorithm of FIG. 13. As with an internal node, the parameters including the enclosing result and first result pointers, are first loaded into the parameter register. Next, as the middle key is read, it is compared (16 bits at a time) to the search key. The result of this comparison, along with the parameter values is used in an address calculation to determine whether to read the high or low keys and where to find them in the SDRAM. Finally, the scan of the high or low keys determines a prefix index, j, and an indication of whether a matching prefix was found. If the prefix was found, the address calculation logic computes the address for the result according to box 221 of FIG. 13. Otherwise the address calculation logic returns the closer result within the node (box 222 of FIG. 13) or the enclosing result pointer (box 223 of FIG. 13). This result address, whatever its source, is used to read the final result from the SDRAM. This result is passed to the result register. One skilled in the art will understand that depending on the circumstances the result may be returned in different forms. In some cases the result itself may be returned. In other cases just the pointer to the result (from the address register) is returned, and in still other cases a portion of the result and a pointer to the remainder of the result are returned.
While this invention has been particularly shown and described with references to preferred embodiments thereof, it will be understood by those skilled in the art that various changes in form and details may be made therein without departing from the spirit and scope of the invention as defined by the appended claims.
|Patente citada
|Fecha de presentación
|Fecha de publicación
|28 Sep 1989
|13 Abr 1993
|Bull Hn Information Systems Inc.
|Prefix search tree partial key branching
|2 Sep 1994
|18 Jun 1996
|Panasonic Technologies, Inc.
|Trie based method for indexing handwritten databases
|6 Jul 1995
|17 Mar 1998
|International Business Machines Corp.
|Parallel compression and decompression using a cooperative dictionary
|30 Jun 1994
|28 Jul 1998
|International Business Machines Corporation
|Variable length data sequence backtracking a trie structure
|16 Dic 1996
|1 Jun 1999
|Juniper Networks
|High speed variable length best match look-up in a switching device
|31 Jul 1997
|31 Ago 1999
|Torrent Networking Technologies, Corp.
|System and method for locating a route in a route table using hashing and compressed radix tree searching
|6 May 1997
|9 Nov 1999
|Novell, Inc.
|Method and apparatus for determining a longest matching prefix from a dictionary of prefixes
|20 Mar 1997
|4 Ene 2000
|Washington University
|Method and apparatus for fast hierarchical address lookup using controlled expansion of prefixes
|9 Sep 1997
|25 Ene 2000
|Washington University
|Scalable high speed IP routing lookups
|24 Feb 1998
|18 Abr 2000
|Nortel Networks Corporation
|Address lookup in packet data communication networks
|18 May 1998
|23 May 2000
|Lucent Technologies Inc
|High speed routing using compressed tree process
|30 Jun 1997
|27 Jun 2000
|Sun Microsystems, Inc.
|System and method for a multi-layer network element
|4 Ago 1995
|14 Nov 2000
|Cisco Technology, Inc.
|Pipelined multiple issue packet switch
|"Computer dictionary", Microsoft Press, Redmond, Washington. 1997, p. 456.
|Cormen, Leiserson and Rivest, "Introduction to Algorithms," 1990, pp 381-399.
|Doreinger et al. "Routing On Longest-Matching Prefixes", IEEE/ACM Transactions on Networking, vol. 4, No. 1, Feb. 1996. pp. 86-97.
|Lampson, B., et al. paper, "IP Lookups using Multiway and Multicolumn Search," 25 pages, May 11, 1998 (Presented Mar. 29, 1998).
|Lampson, B., et al. paper, "IP Lookups using Multiway and Multicolumn Search," INFOCOM '98, 17th Annual Joint Conference of the IEEE Computer and Communications Societies; Proceedings. 3:1248-1256 (1998).
|Perlman, Radia, "Interconnections, Bridges and Routers," Addison Wesley, 1992, pp 233-239.
|Zitterbart et al, "Efficient Routing Table Lookup for IPv6", High-performance Communication Systems, Jun. 1997, The Fourth IEEE Workshop, pp. 1-9.
|Patente citante
|Fecha de presentación
|Fecha de publicación
|10 Ago 2001
|20 Abr 2004
|International Businesss Machines Corporation
|Partitioning search key thereby distributing table across multiple non-contiguous memory segments, memory banks or memory modules
|16 Dic 1999
|4 May 2004
|Method and apparatus for routing information packets associated to addresses represented through numerical strings
|23 Abr 2002
|9 Ago 2005
|Integrated Silicon Solution, Inc.
|Prefix match search scheme
|16 Sep 2002
|23 Ago 2005
|North Carolina State University
|Methods and systems for fast binary network address lookups using parent node information stored in routing table entries
|18 Oct 2001
|10 Ene 2006
|North Carolina State University
|Methods and systems for fast packet forwarding
|9 Abr 2001
|31 Ene 2006
|Nec Corporation
|Cache table management device for router and program recording medium thereof
|18 Jul 2001
|11 Abr 2006
|P-Cube Ltd.
|Method and apparatus for set intersection rule matching
|17 Jul 2002
|2 May 2006
|Intel Corporation
|Technique to improve network routing using best-match and exact-match techniques
|13 Jun 2002
|6 Jun 2006
|Intel Corporation
|Method and apparatus to perform network routing using multiple length trie blocks
|6 Dic 2002
|29 Ago 2006
|Stmicroelectronics, Inc.
|Method for increasing average storage capacity in a bit-mapped tree-based storage engine by using remappable prefix representations and a run-length encoding scheme that defines multi-length fields to compactly store IP prefixes
|28 Ago 2003
|10 Oct 2006
|International Business Machines Corporation
|Full match (FM) search algorithm implementation for a network processor
|19 Jun 2000
|5 Dic 2006
|F5 Networks, Inc.
|Method and system for network load balancing with a compound data structure
|31 Dic 2001
|22 Jul 2008
|Electronics And Telecommunications Research Institute
|Method for generating nodes in multiway search tree and search method using the same
|21 Nov 2003
|28 Oct 2008
|University Of Florida Research Foundation, Inc.
|Prefix partitioning methods for dynamic router tables
|21 Nov 2003
|6 Ene 2009
|University Of Florida Research Foundation, Inc.
|Partitioning methods for dynamic router tables
|18 Sep 2006
|15 Sep 2009
|F5 Networks, Inc.
|Method and system for network load balancing with a compound data structure
|13 Feb 2007
|13 Oct 2009
|Netlogic Microsystems, Inc.
|Integrated search engine devices having pipelined search and b-tree maintenance sub-engines therein
|3 Feb 2003
|3 Nov 2009
|Microsoft Corporation
|System and method for creating improved overlay network with an efficient distributed data structure
|3 Abr 2007
|1 Dic 2009
|At&T Intellectual Property Ii, L.P.
|Method for fast network-aware clustering
|13 Feb 2007
|26 Ene 2010
|Netlogic Microsystems, Inc.
|Integrated search engine devices having pipelined search and tree maintenance sub-engines therein that support variable tree height
|8 Ago 2002
|23 Mar 2010
|Intel Corporation
|Logarithmic time range-based multifield-correlation packet classification
|15 Sep 2006
|13 Abr 2010
|Netlogic Microsystems, Inc.
|Integrated search engine devices and methods of updating same using node splitting and merging operations
|10 Sep 2003
|20 Abr 2010
|Samsung Electronics Co., Ltd.
|Apparatus and method for performing high-speed lookups in a routing table
|21 Dic 2007
|11 May 2010
|Netlogic Microsystems, Inc.
|Handle allocation managers and methods for integated circuit search engine devices
|14 Mar 2007
|25 May 2010
|Netlogic Microsystems, Inc.
|Integrated search engine devices having pipelined search and tree maintenance sub-engines therein that maintain search coherence during multi-cycle update operations
|19 Jul 2005
|29 Jun 2010
|Netlogic Microsystems, Inc.
|Integrated search engine devices that utilize hierarchical memories containing b-trees and span prefix masks to support longest prefix match search operations
|14 Abr 2008
|21 Sep 2010
|Netlogic Microsystems, Inc.
|Handle memory access managers and methods for integrated circuit search engine devices
|28 Sep 2007
|28 Sep 2010
|Netlogic Microsystems, Inc.
|Integrated search engine devices that support multi-way search trees having multi-column nodes
|20 Sep 2007
|9 Nov 2010
|Netlogic Microsystems, Inc.
|Integrated search engine devices having a plurality of multi-way trees of search keys therein that share a common root node
|24 Sep 2007
|8 Feb 2011
|Integrated Device Technology, Inc.
|DDR memory system for measuring a clock signal by identifying a delay value corresponding to a changed logic state during clock signal transitions
|6 Abr 2005
|22 Mar 2011
|SAtech Group, A.B. Limited Liability Company
|Method and apparatus for physical width expansion of a longest prefix match lookup table
|31 Ene 2003
|24 May 2011
|Hewlett-Packard Development Company, L.P.
|Method and apparatus for discovering topology information in a network
|21 Dic 2007
|31 May 2011
|Netlogic Microsystems, Inc.
|Integrated search engine devices that support database key dumping and methods of operating same
|21 Abr 2005
|21 Jun 2011
|Network element and method of mapping address information
|21 Jun 2001
|21 Jun 2011
|SAtech Group, A.B. Limited Liability Company
|Method and apparatus for logically expanding the length of a search key
|15 Abr 2008
|19 Jul 2011
|International Business Machines Corporation
|Longest prefix match (LPM) algorithm implementation for a network processor
|21 Dic 2007
|26 Jul 2011
|Netlogic Microsystems, Inc.
|Integrated search engine devices having pipelined node maintenance sub-engines therein that support database flush operations
|17 Dic 2008
|27 Dic 2011
|Netlogic Microsystems, Inc.
|Integrated search engine devices that utilize SPM-linked bit maps to reduce handle memory duplication and methods of operating same
|2 Dic 2010
|20 Ago 2013
|Electronics And Telecommunications Research Institute
|Method and apparatus for indexing suffix tree in social network
|31 Ago 2011
|3 Sep 2013
|International Business Machines Corporation
|Generating a checkpoint image for use with an in-memory database
|6 Mar 2012
|24 Sep 2013
|International Business Machines Corporation
|Generating a checkpoint image for use with an in-memory database
|26 Jun 2007
|11 Nov 2014
|Netlogic Microsystems, Inc.
|Integrated search engine devices that support LPM search operations using span prefix masks that encode key prefix length
|3 May 2012
|6 Oct 2015
|International Business Machines Corporation
|Prefix-based leaf node storage for database system
|16 Mar 2012
|13 Oct 2015
|International Business Machines Corporation
|Prefix-based leaf node storage for database system
|26 Oct 2012
|26 Ene 2016
|Cisco Technology, Inc.
|System and method for packet classification and internet protocol lookup in a network environment
|10 May 2012
|9 May 2017
|Uber Technologies, Inc.
|Systems and methods for performing geo-search and retrieval of electronic documents using a big index
|9 Abr 2001
|11 Oct 2001
|Tutomu Murase
|Cache table management device for router and program recording medium thereof
|18 Jul 2001
|23 Ene 2003
|P-Cube Ltd.
|Method and apparatus for set intersection rule matching
|10 Ago 2001
|13 Feb 2003
|International Business Machines Corporation
|Partitioning search key thereby distributing table across multiple non-contiguous memory segments, memory banks or memory modules
|20 Ago 2002
|13 Mar 2003
|Reuven Moskovich
|Tree search unit
|18 Oct 2001
|15 May 2003
|Pronita Mehrotra
|Methods and systems for fast packet forwarding
|31 Dic 2001
|3 Jul 2003
|Kang-Bok Lee
|Method for generating nodes in multiway search tree and search method using the same
|13 Jun 2002
|8 Ene 2004
|Mathew Philip P.
|Method and apparatus to perform network routing using multiple length trie blocks
|17 Jul 2002
|22 Ene 2004
|Ranjeeta Singh
|Technique to improve network routing using best-match and exact-match techniques
|8 Ago 2002
|12 Feb 2004
|Priya Govindarajan
|Logarithmic time range-based multifield-correlation packet classification
|16 Sep 2002
|18 Mar 2004
|North Carolina State University
|Methods and systems for fast binary network address lookups using parent node information stored in routing table entries
|3 Feb 2003
|18 Mar 2004
|Microsoft Corporation
|System and method for creating improved overlay network with an efficient distributed data structure
|6 Dic 2002
|10 Jun 2004
|Stmicroelectronics, Inc.
|Method for increasing average storage capacity in a bit-mapped tree-based storage engine by using remappable prefix representations and a run-length encoding scheme that defines multi-length fields to compactly store IP prefixes
|20 Oct 2003
|15 Jul 2004
|Hui Ronald Chi-Chun
|Virtual content addressable memory with high speed key insertion and deletion and pipelined key search
|31 Ene 2003
|5 Ago 2004
|Mandavilli Swamy J.
|Method and apparatus for discovering topology information in a network
|31 Dic 2003
|7 Oct 2004
|Perricone Nicholas V.
|Stable topical drug delivery compositions
|21 Nov 2003
|23 Dic 2004
|Sahni Sartaj Kumar
|Prefix partitioning methods for dynamic router tables
|21 Jul 2003
|27 Ene 2005
|Zhao Yigiang Q.
|IP address storage technique for longest prefix match
|10 Sep 2003
|10 Mar 2005
|Samsung Electronics Co., Ltd.
|Apparatus and method for performing high-speed lookups in a routing table
|28 Ago 2003
|11 Ago 2005
|Bass Brian M.
|Full match (FM) search algorithm implementation for a network processor
|21 Abr 2005
|17 Nov 2005
|Network element and method of mapping address information
|25 Ene 2007
|16 Ago 2007
|Oticon A/S
|Loop antenna for in the ear audio device
|15 Abr 2008
|11 Sep 2008
|International Business Machines Corporation
|Longest prefix match (lpm) algorithm implementation for a network processor
|21 Jun 2001
|7 Abr 2011
|Brown David A
|Method and apparatus for logically expanding the length of a search key
|2 Dic 2010
|21 Jul 2011
|Electronics And Telecommunications Research Institute
|Method and apparatus for indexing suffix tree in social network
|16 Mar 2012
|10 Ene 2013
|International Business Machines Corporation
|Database system
|3 May 2012
|10 Ene 2013
|International Business Machines Corporation
|Database system
|10 May 2012
|12 Sep 2013
|Geoff Hendry
|Systems and methods for performing search and retrieval of electronic documents using a big index
|13 Oct 2014
|14 Abr 2016
|Freescale Semiconductor, Inc.
|Data management system comprising a trie data structure, integrated circuits and methods therefor
|2 Jul 2004
|14 Mar 2007
|Path controller and path control method
|Clasificación de EE.UU.
|Clasificación internacional
|Clasificación cooperativa
|Clasificación europea
|22 Oct 1998
Owner name: AVICI SYSTEMS, MASSACHUSETTS
Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNORS:WATERS, GREGORY M.;DENNISON, LARRY R.;CARVEY, PHILIP P.;AND OTHERS;REEL/FRAME:009536/0881;SIGNING DATES FROM 19980911 TO 19981019
|15 Jul 2003
|Certificate of correction
|31 Jul 2006
|Fee payment
Year of fee payment: 4
|24 Abr 2008
Owner name: SOAPSTONE NETWORKS INC., MASSACHUSETTS
Free format text: CHANGE OF NAME;ASSIGNOR:AVICI SYSTEMS INC.;REEL/FRAME:020859/0789
Effective date: 20080314
Owner name: SOAPSTONE NETWORKS INC.,MASSACHUSETTS
Free format text: CHANGE OF NAME;ASSIGNOR:AVICI SYSTEMS INC.;REEL/FRAME:020859/0789
Effective date: 20080314
|29 Sep 2009
Owner name: FUTUREWEI TECHNOLOGIES, INC., DBA HUAWEI TECHNOLOG
Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:SOAPSTONE NETWORKS, INC.;REEL/FRAME:023292/0480
Effective date: 20090811
|18 Feb 2010
|Fee payment
Year of fee payment: 8
|23 Jul 2014
|Fee payment
Year of fee payment: 12


text:
It's been almost a week since the FCC voted to approve Chairman Tom Wheeler's proposed Open Internet rules and open the rule making process. Despite the strong backlash following the first previews of the proposal, not a lot changed. Wheeler still proposes allowing what has come to be called an "internet fast lane," permitting some companies to buy faster service to consumers, which is the aspect that has come in for the greatest amount of criticism.
Although there has been plenty of good coverage and criticism of the proposal in the last six days, I wanted to read through the proposal myself. That's not because I don't believe the net neutrality advocates who see danger in a "fast lane" and the potential for "commercially reasonable" discrimination of internet traffic. Rather, it's because I wanted to dig in and try to understand Wheeler's justifications.
Once again, however, I am disappointed. I've read the proposal and taken some time to digest it. One of my strongest conclusions is that Wheeler's Open Internet proposal is simply premature; even half-baked, if you will.
Now, this is not an original conclusion. Democratic Commissioner Jessica Rosenworcel and Republican Ajit Pai both publicly called for Wheeler to delay the vote on his proposal. In the end Wheeler got the three votes he needed (including his), but only along party lines, and only with last-minute negotiations.
Wheeler is really between a rock and a hard place with this proposal. The hard place is the DC Circuit Court finding in Verizon v FCC that the Commission's 2010 Open Internet rules weren't sufficiently defensible as long as the FCC classifies the internet as an "information service." The rock is the political resistance he faces if he asks the Commission to reclassify the internet as a "common carrier" or telecommunications service, which would subject it to greater protections, but also anger Congressional Republicans and the nation's ISPs, amongst many other stakeholders.
Writing at the Atlantic, Robinson Meyer does a particularly good job clearly explaining both the history and legal justifications between an "information service" and "common carrier." Ironically enough, he points out that conservative Supreme Court Justice Antonin Scalia made a very powerful argument in favor of classifying the internet as a "telecommunications service" (common carrier) in his dissent to NTCA v FCC, wherein the Court ruled the FCC had statutory authority to consider broadband an "information service," even if that classification was "curious."
Nevertheless, that cat is long out of the bag, and any FCC Chairman who wants to put it back risks getting scratched up pretty badly. Yet, I do think that cat can be enticed back in, slowly and carefully. Instead, Wheeler is chasing that cat around the room, struggling to put a leash on it.
Sprinkled throughout this proposal are questions asking for public input to justify stronger net neutrality protections. For instance, the Commission asks for comment on "the impact of the openness of the Internet on free expression and civic engagement," especially regarding political speech and "the Internet's role as a 'marketplace of ideas'"
This is a very good question that strikes at the heart of the American civic life and the First Amendment. But why is this question only coming up after the proposal has been drafted and voted on? More importantly, why hasn't the Commission endeavored to research this question first? This looks like the FCC shifting that burden of research and proof onto the public.
Proposed rule makings are always full of questions for public comment. That is a critical aspect of the rule making process. However, the Commission often supplies a wealth of research to support its tentative conclusions and recommendations. While it is true that this proposal relies heavily on the first Open Internet rule making, it seems like most of Wheeler's justifications in this one are defensive, drafted in response to the Appeals Court. Of course, it would be foolish not to take that guidance. But it also seems clear that new, fresh or reworked avenues and justifications might also be merited.
Certainly, "free expression and civic engagement" is just one possible justification that seems potentially fruitful. But it would be all the more potent if the FCC took the time to commission one or more studies to frame the relevant issues, harvest existing research and make informed recommendations. That would also give commenters something more substantive to respond to.
It really seems like we're being railroaded with this proposal. And by "we," I mean everybody: public interest advocates, tech companies, Congresspeople, and even ISPs. Many critics accuse Wheeler of selling out the public interest in favor of his old buddies in the cable industry, where he once served as chief lobbyist. That explanation seems too simple, obvious and pat to me. It would also be a supremely stupid thing for Wheeler to do, especially in this fashion.
Yet it's vexing trying to suss out Wheeler's strategy and objective. As The New York Time's Farhad Majoo put it: "Did Regulators Break the Internet or Did They Save It? Yes." He concludes, "the F.C.C. will absolutely positively try to protect the Internet. Unless you have a problem with it. In which case, never mind!"
Indeed, it appears that Wheeler is trying to make everyone happy, and in the process he makes nobody happy. It's quite plausible that his attachments to the cable and broadband industries are contributing to his reluctance to reclassify internet as a telecommunications service. But given the drubbing he took on both sides of the issue in front of the House Energy and Commerce Committee Tuesday, I seriously doubt that affinity for old friends is strong enough on its own to motivate him.
In many cases compromise might seem a reasonable solution. The only problem with Wheeler's misconceived middle path is that it's not a trivial issue, it's the future of the Internet.
While I tend to shy away from the dramatic proclamations that the FCC has voted to destroy the internet, I do agree that the Commissions's proposed rules are likely to create a very real two-tier internet that threatens small providers and future innovations. The tiny rays of sunlight in this darkness come from the fact that the Commission could possibly be swayed by submitted comments, and Wheeler has explicitly put reclassifying the internet as a common carrier telecommunications service back on the table. It's not a preferred option, by any means, but all indications are that it wasn't there even a few weeks ago.
I do recognize that the dramatic cries about the internet's imminent destruction are probably necessary in order to motivate public outcry, especially around a relatively arcane issue. Furthermore, these warnings aren't misplaced. And, it will certainly require overwhelming public comment to move the Commission in the right direction. It may not alone be sufficient, but history indicates that failure to bring public pressure would harm the net neutrality effort.
Just one dollar a month makes you a patron of Radio Survivor. Help us through our Patreon Campaign!