114 | | |
115 | | |
116 | | === Increasing Performance Examples === |
117 | | |
118 | | |
119 | | Here are some examples showing various tunings of a Laguna GW2388 (dual core 600MHz ARM with dual GigE ports) with iperf network bandwidth test between Laguna GW2388 and a PC through a Netgear GigE switch: |
120 | | * pre-built firmware (12-10 release), unmodified (186/491mbps tx/rx) |
121 | | {{{ |
122 | | root@OpenWrt:/# iperf -c 192.168.1.146 |
123 | | ------------------------------------------------------------ |
124 | | Client connecting to 192.168.1.146, TCP port 5001 |
125 | | TCP window size: 16.0 KByte (default) |
126 | | ------------------------------------------------------------ |
127 | | [ 3] local 192.168.1.83 port 56088 connected with 192.168.1.146 port 5001 |
128 | | [ ID] Interval Transfer Bandwidth |
129 | | [ 3] 0.0-10.0 sec 223 MBytes 186 Mbits/sec |
130 | | root@OpenWrt:/# iperf -s |
131 | | ------------------------------------------------------------ |
132 | | Server listening on TCP port 5001 |
133 | | TCP window size: 85.3 KByte (default) |
134 | | ------------------------------------------------------------ |
135 | | [ 4] local 192.168.1.83 port 5001 connected with 192.168.1.146 port 55929 |
136 | | [ ID] Interval Transfer Bandwidth |
137 | | [ 4] 0.0-10.0 sec 500 MBytes 419 Mbits/sec |
138 | | }}} |
139 | | * disabling all kernel modules (306/732mbps tx/rx) (iptables/ebtables is a big performance hit) |
140 | | {{{ |
141 | | root@OpenWrt:/# mv /etc/modules.d /etc/modules.old |
142 | | root@OpenWrt:/# reboot |
143 | | root@OpenWrt:/# iperf -c 192.168.1.146 |
144 | | ------------------------------------------------------------ |
145 | | Client connecting to 192.168.1.146, TCP port 5001 |
146 | | TCP window size: 16.0 KByte (default) |
147 | | ------------------------------------------------------------ |
148 | | [ 3] local 192.168.1.83 port 58570 connected with 192.168.1.146 port 5001 |
149 | | [ ID] Interval Transfer Bandwidth |
150 | | [ 3] 0.0-10.0 sec 365 MBytes 306 Mbits/sec |
151 | | root@gw2388-test:/# iperf -s |
152 | | ------------------------------------------------------------ |
153 | | Server listening on TCP port 5001 |
154 | | TCP window size: 85.3 KByte (default) |
155 | | ------------------------------------------------------------ |
156 | | [ 4] local 192.168.1.83 port 5001 connected with 192.168.1.146 port 56554 |
157 | | [ ID] Interval Transfer Bandwidth |
158 | | [ 4] 0.0-10.0 sec 873 MBytes 732 Mbits/sec |
159 | | }}} |
160 | | * disabling all init scripts as well (378/754mbps tx/rx) |
161 | | {{{ |
162 | | root@OpenWrt:/# for i in $(ls /etc/init.d); do /etc/init.d/$i disable; done |
163 | | root@OpenWrt:/# /etc/init.d/boot enable |
164 | | root@OpenWrt:/# reboot |
165 | | root@OpenWrt:/# iperf -c 192.168.1.146 |
166 | | ------------------------------------------------------------ |
167 | | Client connecting to 192.168.1.146, TCP port 5001 |
168 | | TCP window size: 16.0 KByte (default) |
169 | | ------------------------------------------------------------ |
170 | | [ 3] local 192.168.1.93 port 52295 connected with 192.168.1.146 port 5001 |
171 | | [ ID] Interval Transfer Bandwidth |
172 | | [ 3] 0.0-10.0 sec 451 MBytes 378 Mbits/sec |
173 | | root@OpenWrt:/# iperf -s |
174 | | ------------------------------------------------------------ |
175 | | Server listening on TCP port 5001 |
176 | | TCP window size: 85.3 KByte (default) |
177 | | ------------------------------------------------------------ |
178 | | [ 4] local 192.168.1.93 port 5001 connected with 192.168.1.146 port 37005 |
179 | | [ ID] Interval Transfer Bandwidth |
180 | | [ 4] 0.0-10.0 sec 900 MBytes 754 Mbits/sec |
181 | | }}} |
182 | | |
183 | | Here are some examples using a GW2380 (single core 300MHz ARM with single GigE port) looking at transmit performance: |
184 | | * pre-built firmware (12-10 release), unmodified (153/138mbps tx/rx) |
185 | | {{{ |
186 | | root@OpenWrt:/# iperf -c 192.168.1.146 |
187 | | ------------------------------------------------------------ |
188 | | Client connecting to 192.168.1.146, TCP port 5001 |
189 | | TCP window size: 16.0 KByte (default) |
190 | | ------------------------------------------------------------ |
191 | | [ 3] local 192.168.1.87 port 33327 connected with 192.168.1.146 port 5001 |
192 | | [ ID] Interval Transfer Bandwidth |
193 | | [ 3] 0.0-10.0 sec 183 MBytes 153 Mbits/sec |
194 | | root@OpenWrt:/# iperf -s |
195 | | ------------------------------------------------------------ |
196 | | Server listening on TCP port 5001 |
197 | | TCP window size: 85.3 KByte (default) |
198 | | ------------------------------------------------------------ |
199 | | [ 4] local 192.168.1.87 port 5001 connected with 192.168.1.146 port 53363 |
200 | | [ ID] Interval Transfer Bandwidth |
201 | | [ 4] 0.0-10.1 sec 166 MBytes 138 Mbits/sec |
202 | | }}} |
203 | | * disabling all kernel modules (207/214mbps tx/rx) (iptables/ebtables is a big performance hit) |
204 | | {{{ |
205 | | root@OpenWrt:/# mv /etc/modules.d /etc/modules.old |
206 | | root@OpenWrt:/# reboot |
207 | | root@OpenWrt:/# iperf -c 192.168.1.146 |
208 | | ------------------------------------------------------------ |
209 | | Client connecting to 192.168.1.146, TCP port 5001 |
210 | | TCP window size: 16.0 KByte (default) |
211 | | ------------------------------------------------------------ |
212 | | [ 3] local 192.168.1.97 port 60819 connected with 192.168.1.146 port 5001 |
213 | | [ ID] Interval Transfer Bandwidth |
214 | | [ 3] 0.0-10.0 sec 248 MBytes 207 Mbits/sec |
215 | | root@OpenWrt:/# iperf -s |
216 | | ------------------------------------------------------------ |
217 | | Server listening on TCP port 5001 |
218 | | TCP window size: 85.3 KByte (default) |
219 | | ------------------------------------------------------------ |
220 | | [ 4] local 192.168.1.87 port 5001 connected with 192.168.1.146 port 53387 |
221 | | [ ID] Interval Transfer Bandwidth |
222 | | [ 4] 0.0-10.0 sec 255 MBytes 214 Mbits/sec |
223 | | }}} |
224 | | * disabling all init scripts as well (222/214mbps tx/rx) |
225 | | {{{ |
226 | | root@OpenWrt:/# for i in $(ls /etc/init.d); do /etc/init.d/$i disable; done |
227 | | root@OpenWrt:/# /etc/init.d/boot enable |
228 | | root@OpenWrt:/# /etc/init.d/done enable |
229 | | root@OpenWrt:/# reboot |
230 | | root@OpenWrt:/# iperf -c 192.168.1.146 |
231 | | ------------------------------------------------------------ |
232 | | Client connecting to 192.168.1.146, TCP port 5001 |
233 | | TCP window size: 16.0 KByte (default) |
234 | | ------------------------------------------------------------ |
235 | | [ 3] local 192.168.1.97 port 34382 connected with 192.168.1.146 port 5001 |
236 | | [ ID] Interval Transfer Bandwidth |
237 | | [ 3] 0.0-10.0 sec 265 MBytes 222 Mbits/sec |
238 | | root@OpenWrt:/# iperf -s |
239 | | ------------------------------------------------------------ |
240 | | Server listening on TCP port 5001 |
241 | | TCP window size: 85.3 KByte (default) |
242 | | ------------------------------------------------------------ |
243 | | [ 4] local 192.168.1.87 port 5001 connected with 192.168.1.146 port 53387 |
244 | | [ ID] Interval Transfer Bandwidth |
245 | | [ 4] 0.0-10.0 sec 255 MBytes 214 Mbits/sec |
246 | | }}} |
247 | | |
248 | | |
249 | | Notes: |
250 | | * the above tests are using 'iperf -s' on an Unbuntu Linux GigE PC Host through a GigE Netgear switch. This uses a 16KB TCP window size - you can acheive higher tx throughput by using larger TCP windows. |