[Python] Python, redis e bottleneck
Pietro Battiston
me a pietrobattiston.it
Gio 19 Dic 2013 12:52:37 CET
Il giorno gio, 19/12/2013 alle 11.14 +0000, enrico franchi ha scritto:
>
>
>
> 2013/12/19 Pietro Battiston <me a pietrobattiston.it>
> [...]
>
> Io credo che ci possa essere relazione a come e' scritto il codice.
OK, ragionevole dubbio. Prendi _questo_ codice:
import redis
import random
r = redis.Redis(db=0)
try:
while True:
r[random.random()] = random.random()
except KeyboardInterrupt:
r.flushdb()
che gira su un vecchio Intel Core2 Duo CPU T7300, a 2 GHz, con 4 GB di
RAM DDR2 a 667 MHz.
- Cosa mi aspetto: che almeno una delle due CPU sia fissa al 100%.
- Cosa vedo se avvio "top": redis-server non è mai sopra al 45%, Python
non è mai sopra al 75%.
- Cosa succede se invece che TCP-IP utilizzo un socket unix: l'utilizzo
di CPU da parte di Python sale (e la performance pure, e parecchio), ma
rimanendo comunque sotto l'80%.
- Cosa posso immaginare che stia succedendo: che ci sia una latenza tra
CPU e cache, o tra una CPU e l'altra CPU, o tra le CPU e la RAM, che
"top" non sia affidabile al 100%.
- Cosa non riesco nemmeno a immaginare che stia succedendo:
probabilmente varie cose, motivo per cui ho scritto in lista.
- Cosa me ne frega: pura curiosità, e magari pure un indizio di quanto
parallelizzare codice che utilizza in modo intensivo redis possa o meno
migliorare le prestazioni in modo lineare, o se viceversa qualunque cosa
mi stia facendo da bottleneck adesso si riproporrebbe anche
parallelizzando, magari su più di 2 CPU.
ciao
Pietro
Maggiori informazioni sulla lista
Python