Network Neutrality and Protocol Agnostic Congestion Control

Two apparently not related terms, but wait. Network neutrality can be described as a principle that no restriction by internet service providers and governments on content is applied. Restrictions can be limited network resources: Google News experience a higher Quality of Service as my Blog or even worse: you cannot connect to YouTube with your standard ISP contract. In other words: ISP’s start to consider network traffic based on their content....

August 16, 2010 · 3 min · Hagen Paul Pfeifer

TCP Window Scaling Option partly unusable in Linux

TCP’s window scale factor is determined at the connection start-up. Among other things local memory constraints are checked and used as the basis to calculate the window scale shift factor. The exact procedure is complex and not of interest here. Currently the Linux network stack does not consider a reduced rcv buffer which can be reduced via setsockopt(). Today I sent a patch which fix this with some lines of code:...

August 16, 2010 · 1 min · Hagen Paul Pfeifer

Linux TCP Receive Buffer

just for the protocol: Linux memory management is terrible complex. Many hidden relations to and from other components in an optimized form that prevent anyone from beeing productive. {Free,Net,Open}BSD code is much more coherent and easier to understand. It is even difficult to write a proper commit message in a understandably way that more then 4 people understand why I modified the code in this way.

August 15, 2010 · 1 min · Hagen Paul Pfeifer

Recursion

Since several days I started to verify the Silly Window Syndrome (SWS) avoidance algorithms and mechanism. To trigger one peculiarity (receiver side SWS) it is more or less unavoidable to shift the network stack into a special state. One requirement is that the socket buffer should be as small as possible to reduce the initial analysis delay. Via setsockopt() it is possible to tune the receiver buffer. But during some analysis I spotted an error in the current network stack, the bug is hidden in the TCP window scale option and the dynamic memory management component....

August 12, 2010 · 2 min · Hagen Paul Pfeifer

Architectur specific TLB Optimizations

I thought about how I would design the Translation Lookaside Buffer of the Memory Management Unit (MMU) if I was the CTO of Intel, respective AMD. ;-) In one of my last postings I talked about an potential optimization for @x86/x64_64@ but at the end I decided that the effort of implementing and testing compared with the benefit is to high so I skipped this. But as said this I thought about how would I design the TLB regardless of any existing implementations …...

August 9, 2010 · 3 min · Hagen Paul Pfeifer

Linux Socket Minimum Receiver Buffer

Via setsockopt(socket, SOL_SOCKET, SO_RCVBUF, n, 4) it is possible to increase/decrease the socket receive buffer where n is the number of byte. Internally the specified number is doubled to cover bookkeeping overhead. The minimum value is defined as SOCK_MIN_RCVBUF (256 byte). It is not possible to specify any smaler value. Even if the user specified something smaller the actual buffer is silently increased to SOCK_MIN_RCVBUF (the man page is a little bit outdated and stated that setsockopt will return with a failure - this is not correct)....

August 8, 2010 · 1 min · Hagen Paul Pfeifer

Translation Lookaside Buffer Flush Optimization

The Translation Lookaside Buffer is a small associative memory that caches virtual to physical page table addresses. When page tables have been updated, such as after a page fault, the processor may need to update the TLB for that virtual address mapping. May, because some processor architectures implement this in hardware logic some other architectures need support by the operating system. Flushing TLB is a really expensive operation - depending on the architecture (e....

August 6, 2010 · 3 min · Hagen Paul Pfeifer

Netsend Artificial Read Delay

Today I invest my time in adding a new option for “netsend”:http://netsend.berlios.de to introduce an artificial @read()@ delay in the receiver path. The new option can be enabled via: netsend -v loudish -B 10,1 -b 250 -s SO\_RCVBUF 1 tcp receive The options states that the receiver should initial block for 10 seconds and then read 250 byte chunks with a delay of one second: @-B 10,1@. If you waive the initial delay you can also skip the coma separated list and hand over only one argument, e....

August 5, 2010 · 1 min · Hagen Paul Pfeifer

IPv6 Flow Label Usage Scenarios

The 20 bit wide Flow Label field in the IPv6 header is a integral part of the protocol specification, standardized in “RFC 2460”:http://tools.ietf.org/html/rfc2460 The field may be used to mark sequences of packets for which the sender request special handling at intermediate routers. The standard explicitly does not define the what, it exemplary provides two examples (real-time and non-default quality of service routing) and that’s all. At the specification time nobody was in the ability to specify how this field may be used in the future or may not used for....

August 1, 2010 · 2 min · Hagen Paul Pfeifer

Mencoder Video Editing

Today it was a lazy evening: no productive hacking, no deeper technical discussions, no email answer sessions, no peer reviews, nothing – just passive reading and … command-line video editing – vacation for the brain. Sometimes I am to cushy to use my camcorder or my “EOS 7D”:http://www.dpreview.com/previews/canoneos7d/ to make a film. Instead I use my handy “Canon IXUS”:http://www.canon.co.uk/for_home/product_finder/cameras/digital_camera/ixus/digital_ixus_100_is/index.asp and shoot some pictures, one after another. Later on at home I use “mencoder”:http://www....

July 29, 2010 · 2 min · Hagen Paul Pfeifer