lkml.org 
[lkml]   [2013]   [Sep]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
Subject+157.8% netperf throughput by "ipv4: raise IP_MAX_MTU to theoretical limit"
Hi Eric,

We are glad to find that your below commit brings large increase in
lo netperf throughput:

35596b2796713c6a9dc0 734d2725db879f3f6fcd
------------------------ ------------------------
761.80 +534.6% 4834.60 lkp-ib03/micro/netperf/120s-200%-UDP_STREAM
168.10 +1317.4% 2382.70 lkp-nex04/micro/netperf/120s-200%-UDP_STREAM
169.60 +979.4% 1830.70 lkp-nex05/micro/netperf/120s-200%-UDP_STREAM
2154.20 +135.7% 5077.50 lkp-sb03/micro/netperf/120s-200%-UDP_STREAM
3559.00 -3.5% 3435.20 lkp-t410/micro/netperf/120s-200%-TCP_STREAM
6812.70 +157.8% 17560.70 TOTAL netperf.Throughput_Mbps

The side effects are some increased/decreased lock contentions:

35596b2796713c6a9dc0 734d2725db879f3f6fcd
------------------------ ------------------------
7695.93 +16534.7% 1280196.60 lkp-ib03/micro/netperf/120s-200%-UDP_STREAM
1917.74 +159631.5% 3063227.91 lkp-nex04/micro/netperf/120s-200%-UDP_STREAM
2293.73 +118436.8% 2718918.57 lkp-nex05/micro/netperf/120s-200%-UDP_STREAM
50823.71 +1881.3% 1006978.18 lkp-sb03/micro/netperf/120s-200%-UDP_STREAM
62731.11 +12763.3% 8069321.26 TOTAL lock_stat.slock-AF_INET.waittime-total

35596b2796713c6a9dc0 734d2725db879f3f6fcd
------------------------ ------------------------
7007.20 +17377.5% 1224681.80 lkp-ib03/micro/netperf/120s-200%-UDP_STREAM
960.80 +74382.1% 715623.90 lkp-nex04/micro/netperf/120s-200%-UDP_STREAM
951.40 +55033.2% 524536.90 lkp-nex05/micro/netperf/120s-200%-UDP_STREAM
49582.00 +2141.1% 1111185.60 lkp-sb03/micro/netperf/120s-200%-UDP_STREAM
58501.40 +6012.7% 3576028.20 TOTAL lock_stat.slock-AF_INET.contentions

35596b2796713c6a9dc0 734d2725db879f3f6fcd
------------------------ ------------------------
7289.40 +16702.1% 1224771.60 lkp-ib03/micro/netperf/120s-200%-UDP_STREAM
922.40 +77764.1% 718218.60 lkp-nex04/micro/netperf/120s-200%-UDP_STREAM
910.10 +58394.1% 532355.20 lkp-nex05/micro/netperf/120s-200%-UDP_STREAM
51325.70 +2062.2% 1109739.10 lkp-sb03/micro/netperf/120s-200%-UDP_STREAM
60447.60 +5830.9% 3585084.50 TOTAL lock_stat.slock-AF_INET.contentions.udp_queue_rcv_skb

35596b2796713c6a9dc0 734d2725db879f3f6fcd
------------------------ ------------------------
4266.20 +13915.1% 597912.60 lkp-ib03/micro/netperf/120s-200%-UDP_STREAM
560.50 +57667.0% 323783.90 lkp-nex04/micro/netperf/120s-200%-UDP_STREAM
518.80 +46369.9% 241086.00 lkp-nex05/micro/netperf/120s-200%-UDP_STREAM
23391.50 +1891.7% 465887.80 lkp-sb03/micro/netperf/120s-200%-UDP_STREAM
28737.00 +5567.5% 1628670.30 TOTAL lock_stat.&(&list->lock)->rlock#2.contentions.__skb_recv_datagram

35596b2796713c6a9dc0 734d2725db879f3f6fcd
------------------------ ------------------------
4245.80 +13836.7% 591726.20 lkp-ib03/micro/netperf/120s-200%-UDP_STREAM
563.30 +57100.8% 322211.90 lkp-nex04/micro/netperf/120s-200%-UDP_STREAM
520.40 +45650.2% 238084.00 lkp-nex05/micro/netperf/120s-200%-UDP_STREAM
23157.10 +1898.6% 462812.40 lkp-sb03/micro/netperf/120s-200%-UDP_STREAM
28486.60 +5568.8% 1614834.50 TOTAL lock_stat.&(&list->lock)->rlock#2.contentions.sock_queue_rcv_skb

35596b2796713c6a9dc0 734d2725db879f3f6fcd
------------------------ ------------------------
466.24 +20666.8% 96823.64 lkp-ib03/micro/netperf/120s-200%-UDP_STREAM
227.96 +39775.4% 90899.22 lkp-nex04/micro/netperf/120s-200%-UDP_STREAM
165.76 +63787.9% 105903.10 lkp-nex05/micro/netperf/120s-200%-UDP_STREAM
3031.79 +2325.1% 73523.25 lkp-sb03/micro/netperf/120s-200%-UDP_STREAM
3891.75 +9334.0% 367149.20 TOTAL lock_stat.&wq->wait.waittime-total

35596b2796713c6a9dc0 734d2725db879f3f6fcd
------------------------ ------------------------
891.80 +21266.3% 190545.00 lkp-ib03/micro/netperf/120s-200%-UDP_STREAM
213.30 +50036.7% 106941.50 lkp-nex04/micro/netperf/120s-200%-UDP_STREAM
152.60 +58410.9% 89287.60 lkp-nex05/micro/netperf/120s-200%-UDP_STREAM
6143.00 +2623.3% 167291.40 lkp-sb03/micro/netperf/120s-200%-UDP_STREAM
7400.70 +7386.7% 554065.50 TOTAL lock_stat.&wq->wait.contentions.__wake_up_sync_key

35596b2796713c6a9dc0 734d2725db879f3f6fcd
------------------------ ------------------------
4174266.80 +3137.3% 135134002.00 lkp-ib03/micro/netperf/120s-200%-UDP_STREAM
1541864.80 +3808.9% 60270231.50 lkp-nex04/micro/netperf/120s-200%-UDP_STREAM
1754844.30 +3034.9% 55013405.80 lkp-nex05/micro/netperf/120s-200%-UDP_STREAM
22053438.30 +263.9% 80244072.30 lkp-sb03/micro/netperf/120s-200%-UDP_STREAM
29524414.20 +1020.0% 330661711.60 TOTAL lock_stat.&(&zone->lock)->rlock.contentions.__free_pages_ok

35596b2796713c6a9dc0 734d2725db879f3f6fcd
------------------------ ------------------------
4303082.60 +2809.1% 125179298.60 lkp-ib03/micro/netperf/120s-200%-UDP_STREAM
1638845.10 +3613.5% 60859041.30 lkp-nex04/micro/netperf/120s-200%-UDP_STREAM
1883848.20 +3012.7% 58638288.40 lkp-nex05/micro/netperf/120s-200%-UDP_STREAM
22293114.60 +216.3% 70505512.80 lkp-sb03/micro/netperf/120s-200%-UDP_STREAM
30118890.50 +946.5% 315182141.10 TOTAL lock_stat.&(&zone->lock)->rlock.contentions.get_page_from_freelist

35596b2796713c6a9dc0 734d2725db879f3f6fcd
------------------------ ------------------------
291821.83 -96.6% 9957.12 lkp-nex04/micro/netperf/120s-200%-UDP_STREAM
400941.64 -94.0% 24083.56 lkp-nex05/micro/netperf/120s-200%-UDP_STREAM
692763.47 -95.1% 34040.68 TOTAL lock_stat.&mm->mmap_sem/1.holdtime-max

35596b2796713c6a9dc0 734d2725db879f3f6fcd
------------------------ ------------------------
38718739.60 -95.8% 1637024.20 lkp-ib03/micro/netperf/120s-200%-UDP_STREAM
13064940.40 -84.5% 2031181.40 lkp-nex05/micro/netperf/120s-200%-UDP_STREAM
64201496.70 -98.2% 1166711.50 lkp-sb03/micro/netperf/120s-200%-UDP_STREAM
2302513.00 -97.9% 48685.00 lkp-t410/micro/netperf/120s-200%-UDP_STREAM
118287689.70 -95.9% 4883602.10 TOTAL lock_stat.&(&base->lock)->rlock.acquisitions
......

commit 734d2725db879f3f6fcdc2b1d2a5deae105f5e95
Author: Eric Dumazet <edumazet@google.com>
Date: Sun Aug 18 19:08:07 2013 -0700

ipv4: raise IP_MAX_MTU to theoretical limit

As discussed last year [1], there is no compelling reason
to limit IPv4 MTU to 0xFFF0, while real limit is 0xFFFF

[1] : http://marc.info/?l=linux-netdev&m=135607247609434&w=2


:040000 040000 f2085347b7781a6a42020dc1bc5ca090f7077361 fcb2c411b5073c8ac5009a41f7a1908a352c23d5 M net
bisect run success

# bad: [272b98c6455f00884f0350f775c5342358ebb73f] Linux 3.12-rc1
# good: [6e4664525b1db28f8c4e1130957f70a94c19213e] Linux 3.11
git bisect start '272b98c6455f00884f0350f775c5342358ebb73f' '6e4664525b1db28f8c4e1130957f70a94c19213e' '--'
# good: [57d730924d5cc2c3e280af16a9306587c3a511db] Merge branch 'timers-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
git bisect good 57d730924d5cc2c3e280af16a9306587c3a511db
# bad: [27c7651a6a5f143eccd66db38c7a3035e1f8bcfb] Merge tag 'gpio-v3.12-1' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio
git bisect bad 27c7651a6a5f143eccd66db38c7a3035e1f8bcfb
# bad: [06c54055bebf919249aa1eb68312887c3cfe77b4] Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
git bisect bad 06c54055bebf919249aa1eb68312887c3cfe77b4
# bad: [d75ea942b360690a380da8012a51eaf6a6ebb1b1] can: flexcan: use platform_set_drvdata()
git bisect bad d75ea942b360690a380da8012a51eaf6a6ebb1b1
# good: [926489be1d2b030c17d38fa10b5921bf3409d91d] drivers: net: cpsw: Add support for new CPSW IP version present in AM43xx SoC
git bisect good 926489be1d2b030c17d38fa10b5921bf3409d91d
# good: [a5354ccaaf54ac61c6d1b350e8d3e4234dd28849] ath9k: Enable WLAN/BT Ant Diversity for WB225/WB195
git bisect good a5354ccaaf54ac61c6d1b350e8d3e4234dd28849
# good: [84ce1ddfefc3d5a8af5ede6fe16546c143117616] 6lowpan: init ipv6hdr buffer to zero
git bisect good 84ce1ddfefc3d5a8af5ede6fe16546c143117616
# bad: [a0e186003be7892fd75613a23aaafaf09f3611e6] net: fsl_pq_mdio: use platform_{get,set}_drvdata()
git bisect bad a0e186003be7892fd75613a23aaafaf09f3611e6
# good: [89d5e23210f53ab53b7ff64843bce62a106d454f] Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/pablo/nf-next
git bisect good 89d5e23210f53ab53b7ff64843bce62a106d454f
# good: [0aa857f83fe2674f973ad89ec7c0202f5c5d9554] moxa: fix missing unlock on error in moxart_mac_start_xmit()
git bisect good 0aa857f83fe2674f973ad89ec7c0202f5c5d9554
# bad: [0dde80268ee0a5a1511935bdb9c547191d616aa9] myri10ge: Add support for ndo_busy_poll
git bisect bad 0dde80268ee0a5a1511935bdb9c547191d616aa9
# good: [397b41746333ad386d91d23ea0f79481320dcdcc] tcp: trivial: Remove nocache argument from tcp_v4_send_synack
git bisect good 397b41746333ad386d91d23ea0f79481320dcdcc
# bad: [734d2725db879f3f6fcdc2b1d2a5deae105f5e95] ipv4: raise IP_MAX_MTU to theoretical limit
git bisect bad 734d2725db879f3f6fcdc2b1d2a5deae105f5e95
# good: [35596b2796713c6a9dc05759837fa9f0e156a200] vhost: Include linux/uio.h instead of linux/socket.h
git bisect good 35596b2796713c6a9dc05759837fa9f0e156a200
# first bad commit: [734d2725db879f3f6fcdc2b1d2a5deae105f5e95] ipv4: raise IP_MAX_MTU to theoretical limit


Compare of all good/bad commits during the bisect.

iostat.cpu.user

2.2 ++-------------------------------------------------------------------+
2 ++ O O O |
| O O O O OO O O O O OO O O OO OO O O O |
1.8 ++ O |
1.6 ++ |
| |
1.4 O+OO O O OO O O O |
1.2 ++ |
1 ++ |
| |
0.8 ++ |
0.6 ++ |
| |
0.4 ++ *.*. .*.**. .*. .*
0.2 *+**-*-*-**-*-*-*----**-*-*-**-*------*-**---*-**-*-**-*-*-**-*-*-**-+


netperf.Throughput_Mbps

2000 ++------------------------------------------------------------------+
1800 ++ O OO O O OO O OO O OO O O OO O OO O OO O O |
| |
1600 ++ |
1400 ++ |
O OO O O OO O OO |
1200 ++ |
1000 ++ |
800 ++ |
| |
600 ++ |
400 ++ |
| |
200 *+**.*.*.**.*.**.*.**.*.*.**.*.**.*.**.*.*.**.*.**.*.**.*.*.**.*.**.*
0 ++------------------------------------------------------------------+


vmstat.system.in

34000 ++---------------------O-----------O-------------------------------+
| O O OO O O O O O O O OO O OO O |
32000 ++ OO O |
30000 ++ |
| |
28000 ++ |
26000 O+ O OO O O O |
| OO O |
24000 ++ |
22000 ++ |
| |
20000 ++ O |
18000 ++ .* |
*.**.*.**.*.**.*. .*.**.*.**.*.*.**.* *.*.**.*.**.*.**.*.**.*.**.*
16000 ++---------------**------------------------------------------------+


vmstat.system.cs

900000 ++---------------O------------------------------------------------+
| O |
800000 ++ O O O O OO O OO O OO O OO OO OO O |
700000 ++ O O O |
| |
600000 ++ |
500000 O+OO O OO O OO O |
| |
400000 ++ |
300000 ++ |
| |
200000 ++ |
100000 ++ |
*.**.*.**.*.**.*.**.**.*.**.*.**.*.**.*.**.*.**.*.**.**.*.**.*.**.*
0 ++----------------------------------------------------------------+


lock_stat.&(&zone->lock)->rlock.contentions

7e+07 ++---------------O-------------------------------------------------+
| O O |
6e+07 ++ OO O O O O OO O OO O OO O OO O |
| OO O O |
5e+07 O+OO O OO O OO O |
| |
4e+07 ++ |
| |
3e+07 ++ |
| |
2e+07 ++ |
| |
1e+07 ++ |
| .**.*. |
0 *+**-*-**-*-**-*------**-*-**-*-*-**-*-**-*-**-*-**-*-**-*-**-*-**-*


lock_stat.&(&zone->lock)->rlock.contentions.__free_pages_ok

7e+07 ++-----------------------------------------------------------------+
| O O |
6e+07 ++ O OO O O OO O O O O O O O |
| OO O O OO O O |
5e+07 O+OO O OO O OO O |
| |
4e+07 ++ |
| |
3e+07 ++ O |
| |
2e+07 ++ |
| |
1e+07 ++ |
| |
0 *+**-*-**-*-**-*-**-*-**-*-**-*-*-**-*-**-*-**-*-**-*-**-*-**-*-**-*


lock_stat.&(&zone->lock)->rlock.contentions.get_page_from_freelist

7e+07 ++---------------O-------------------------------------------------+
| O O |
6e+07 ++ OO O OO O O OO O OO O OO O OO O OO O |
| |
5e+07 O+OO O OO O OO O |
| |
4e+07 ++ |
| |
3e+07 ++ |
| |
2e+07 ++ |
| |
1e+07 ++ |
| .**.*. |
0 *+**-*-**-*-**-*------**-*-**-*-*-**-*-**-*-**-*-**-*-**-*-**-*-**-*


lock_stat.&rq->lock.contentions

300000 ++---------------------O------OO-O-O---------------O--------------+
| O OO O O O OO O OO O O OO O |
250000 ++ |
| |
| O |
200000 O+OO O OO O O O |
| |
150000 ++ |
| |
100000 ++ |
*. *. .*.* .*.* .*.* .* .*. *. .**. .*
| * *.**.*.**.* *.*.** * * *.* * **.* * *.** |
50000 ++ : : |
| : O O |
0 ++---------------**-*---------------------------------------------+


lock_stat.clockevents_lock.contentions.clockevents_notify

120000 ++----------------------------------------------------------------+
| * |
100000 ++ : |
| : |
| : : |
80000 ++ : : |
| * : : |
60000 ++ :: : : |
| *. : : .* : : |
40000 ++ : * *. .* * :: : .* *
*. *. : *.**.** + *.*. + : :*. *. .**.* .* *. .* +|
| * *.* * ** * * *.* * * * * |
20000 ++ O OO OO O O OO O O O OO O O O |
O OO O OO O O O O O OO OO O O O |
0 ++----------------------------------------------------------------+


lock_stat.&(&base->lock)->rlock.contentions.lock_timer_base

12000 ++-----------------------------------------------------------------+
| * |
10000 *+* .*.**. + : * .*. *. .*. .*. *. |
| * *.** : : * * + ** **.*.**.*. * * *.**.*
| : : *.*.*.** * |
8000 ++ **.* |
| |
6000 ++ |
| |
4000 ++ |
| |
| |
2000 ++ |
| |
0 O+OO-O-OO-O-OO-O-OO-O-OO-O-OO-O-O-OO-O-OO-O-OO-O-OO-O-OO-O---------+


lock_stat.&(&base->lock)->rlock.contentions.run_timer_softirq

7000 ++------------------------------------------------------------------+
| .* |
6000 ++* * *.* : *. .* .*. *. |
* :.*.*.* .*. : : : : *.* *.*.**. .* * *.**.*
5000 ++ * * * : : : : *.** |
| : : *.*.* : |
4000 ++ : : *.*.* |
| *.** |
3000 ++ |
| |
2000 ++ |
| |
1000 ++ |
| |
0 O+OO-O-O-OO-O-OO-O-OO-O-O-OO-O-OO-O-OO-O-O-OO-O-OO-O-OO-O-O---------+


lock_stat.rcu_node_1.contentions

120000 ++----------------------------------------------------------------+
| |
100000 ++ O OO O OO OO O |
| O OO O O O O O OO O O |
| OO O O O O O O O |
80000 O+ O O OO |
| |
60000 ++ |
| |
40000 ++ |
| |
| |
20000 ++ |
| |
0 *+**-*-**-*-**-*-**-**-*-**-*-**-*-**-*-**-*-**-*-**-**-*-**-*-**-*


lock_stat.rcu_node_1.contentions.rcu_process_callbacks

200000 ++------------------O---------------------------------------------+
180000 ++ O O O OO O O O O O OO O |
| O OO O O O OO |
160000 ++OO O O O O O O |
140000 O+ O O OO |
| |
120000 ++ |
100000 ++ |
80000 ++ |
| |
60000 ++ |
40000 ++ |
| |
20000 ++ |
0 *+**-*-**-*-**-*-**-**-*-**-*-**-*-**-*-**-*-**-*-**-**-*-**-*-**-*


lock_stat.rcu_node_1.contentions.force_qs_rnp

20000 ++-----------------------------------------------------------------+
18000 ++ O O |
| O |
16000 ++ |
14000 ++ |
| O |
12000 ++ OO O O O OO OO OO O OO O OO O |
10000 O+OO O OO O O O O O |
8000 ++ OO |
| |
6000 ++ |
4000 ++ |
| |
2000 ++ |
0 *+**-*-**-*-**-*-**-*-**-*-**-*-*-**-*-**-*-**-*-**-*-**-*-**-*-**-*


lock_stat.slock-AF_INET.contentions

600000 ++----------------------------------------------------------------+
| O O O O O OO O O |
500000 ++ O O O O OO O O OO O |
| O O |
| |
400000 ++ O |
| |
300000 O+OO O OO O OO O |
| |
200000 ++ |
| |
| |
100000 ++ |
| O |
0 *+**-*-**-*-**-*-**-**-*-**-*-**-*-**-*-**-*-**-*-**-**-*-**-*-**-*


lock_stat.slock-AF_INET.contentions.lock_sock_fast

600000 ++----------------------------------------------------------------+
| O O O |
500000 ++ OO O OO O OO OO OO OO OO O |
| O O |
| |
400000 ++ |
| |
300000 O+OO O OO O OO O O |
| |
200000 ++ |
| |
| |
100000 ++ |
| O |
0 *+**-*-**-*-**-*-**-**-*-**-*-**-*-**-*-**-*-**-*-**-**-*-**-*-**-*


lock_stat.slock-AF_INET.contentions.udp_queue_rcv_skb

600000 ++----------------------------------------------O-----------------+
| O O O O O O OO O |
500000 ++ O O O O O O O OO O |
| O O O |
| |
400000 ++ |
| |
300000 O+OO O OO O OO O |
| |
200000 ++ |
| |
| |
100000 ++ |
| O |
0 *+**-*-**-*-**-*-**-**-*-**-*-**-*-**-*-**-*-**-*-**-**-*-**-*-**-*


lock_stat.&(&list->lock)->rlock#2.contentions

300000 ++----------------------------------------------------------------+
| O O |
250000 ++ O O O OO O OO |
| O O O O O O OO OO O |
| O |
200000 ++ |
| |
150000 ++ |
O OO O OO O OO O |
100000 ++ |
| |
| O |
50000 ++ |
| O |
0 *+**-*-**-*-**-*-**-**-*-**-*-**-*-**-*-**-*-**-*-**-**-*-**-*-**-*


lock_stat.&(&list->lock)->rlock#2.contentions.__skb_recv_datagram

300000 ++----------------------------------------------------------------+
| O O |
250000 ++ O O O OO O OO |
| O O O O O O OO OO O |
| O |
200000 ++ |
| |
150000 ++ |
O OO O OO O OO O |
100000 ++ |
| |
| O |
50000 ++ |
| O |
0 *+**-*-**-*-**-*-**-**-*-**-*-**-*-**-*-**-*-**-*-**-**-*-**-*-**-*


lock_stat.&(&list->lock)->rlock#2.contentions.sock_queue_rcv_skb

300000 ++----------------------------------------------------------------+
| O O |
250000 ++ O O O OO O OO |
| O O O O O O OO OO O |
| O |
200000 ++ |
| |
150000 ++ |
O OO O OO O OO O |
100000 ++ |
| |
| O |
50000 ++ |
| O |
0 *+**-*-**-*-**-*-**-**-*-**-*-**-*-**-*-**-*-**-*-**-**-*-**-*-**-*


lock_stat.&wq->wait.contentions

100000 ++-------------------O--------------------------------------------+
90000 ++ O O O O O O OO O OO O O |
| O O O O OO O O |
80000 ++ |
70000 ++ |
| |
60000 ++ O |
50000 O+OO O O O OO O |
40000 ++ |
| |
30000 ++ |
20000 ++ |
| O |
10000 ++ O |
0 *+**-*-**-*-**-*-**-**-*-**-*-**-*-**-*-**-*-**-*-**-**-*-**-*-**-*


lock_stat.&wq->wait.contentions.finish_wait

100000 ++----------------------------------------------------------------+
90000 ++ O O O O O O OO O O |
| O OO O O O O O O O O |
80000 ++ O |
70000 ++ |
| |
60000 ++ |
50000 O+OO O OO O OO O |
40000 ++ |
| |
30000 ++ |
20000 ++ |
| |
10000 ++ O |
0 *+**-*-**-*-**-*-**-**-*-**-*-**-*-**-*-**-*-**-*-**-**-*-**-*-**-*


lock_stat.&wq->wait.contentions.__wake_up_sync_key

100000 ++----------------------------------------------------------------+
90000 ++ O O O O O OO OO O O |
| O OO O O O O OO O O |
80000 ++ |
70000 ++ |
| |
60000 ++ O |
50000 O+OO O O O OO O |
40000 ++ |
| |
30000 ++ |
20000 ++ |
| O |
10000 ++ O |
0 *+**-*-**-*-**-*-**-**-*-**-*-**-*-**-*-**-*-**-*-**-**-*-**-*-**-*



\
 
 \ /
  Last update: 2013-09-26 03:41    [W:0.589 / U:0.016 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site