Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
soc:2010:cooldavid:journal:week2 [2010/06/01 11:16] mdc |
soc:2010:cooldavid:journal:week2 [2010/06/04 05:47] (current) cooldavid |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | === Week 2 [ 31 May - 6 Jun 2010 ]: Discuss TCP and memory changes, update jme driver === | + | ==== Week 2 [ 31 May - 6 Jun 2010 ]: Discuss TCP and memory changes, update jme driver ==== |
| - | == jme driver == | + | ==== jme driver ==== |
| * From Joshua Oreman | * From Joshua Oreman | ||
| * jme_check_link(struct net_device *netdev, int testonly)\\ | * jme_check_link(struct net_device *netdev, int testonly)\\ | ||
| Line 38: | Line 38: | ||
| (unsigned long)iob->data, mapping, len); | (unsigned long)iob->data, mapping, len); | ||
| </code> | </code> | ||
| - | * This will behave poorly when memory runs out. Better is to have a refill routine that runs after the poll(), and always attempts to refill up to a specified level. <code C> | + | * This will behave poorly when memory runs out. Better is to have a refill routine that runs after the poll(), and always attempts to refill up to a specified level. <code C> |
| rxdesc += idx; | rxdesc += idx; | ||
| if (jme_make_new_rx_buf(rxring->bufinf + idx)) { | if (jme_make_new_rx_buf(rxring->bufinf + idx)) { | ||
| Line 46: | Line 46: | ||
| </code> | </code> | ||
| - | == TCP / memory topic == | + | * From me: |
| + | * The refill function did not work correctly. Because of the error packet was reused instead of making a hole. [[http://bbs.cooldavid.org/git/?p=gpxe.git;a=commitdiff;h=aa105ed1c6d99588dceeec3ead4e434b40b59644|This patch fixed it]] | ||
| + | |||
| + | ==== Trace memory related codes ==== | ||
| * Current heap size is fixed at 128K. | * Current heap size is fixed at 128K. | ||
| - | * Although it only uses 128K, all-drivers image already overlapped with heap address. | ||
| * Trying to figure out a way to obtain more memory, and report it to OS. | * Trying to figure out a way to obtain more memory, and report it to OS. | ||
| * See if it is possiable to know how much heap size we can use out of code and stack. | * See if it is possiable to know how much heap size we can use out of code and stack. | ||
| - | Before start the discussion, I'm going to trace how the gPXE boot/relocate/fill segment info. And try to understand how Michael Brown removes the even megabyte limit. | + | === Schedule for memory and TCP modifications === |
| + | - Trace how the gPXE boot, relocate, and fill segment informations. | ||
| + | - Try to understand how Michael Brown removes the even magabyte limit. | ||
| + | - Start a discussion on the list about how to reasonably extend gPXE's usable memory. | ||
| + | - Patch gPXE to support large(Several MB perhaps) heap memory. | ||
| + | - Design/discuss a TCP receive window advertisement algorithm. | ||
| + | - Patch gPXE with ''**TCP receive queue**'', ''**SACK Support**'', and ''**Window scale**''. | ||
| + | - Do some benchmark against different window size, and different network environment. | ||
| + | - Post the result and discuss it on the gpxe mailling-list. | ||
| + | |||
| + | === Some notes after trace === | ||
| + | * [[soc:2010:cooldavid:notes:gpxememlayout|gPXE memory layout]] | ||
| + | * Good articals for understanding Gate-A20 | ||
| + | - [[http://en.wikipedia.org/wiki/A20_line|WIKIPEDIA - A20 line]] | ||
| + | - [[http://www.win.tue.nl/~aeb/linux/kbd/A20.html|A20 - a pain from the past]] | ||
| + | === Expand heap === | ||
| + | * [[soc:2010:cooldavid:notes:expandheap|Expand gPXE heap]] | ||