[Python] Python, redis e bottleneck

Pietro Battiston me a pietrobattiston.it
Gio 19 Dic 2013 01:05:05 CET


Il giorno mer, 18/12/2013 alle 16.53 +0000, enrico franchi ha scritto:
> 
> 
> 
> 2013/12/18 Pietro Battiston <me a pietrobattiston.it>
>         
>         
>         OK, allora preciso: sono (ragionevolmente) certo che il
>         bottleneck non
>         sia il disco, neanche per motivi di latenza, non solo perché
>         il LED del
>         disco si illumina sporadicamente, ma soprattutto perché
>         l'operazione di
>         decodifica dello stesso identico json _senza_ popolarne il
>         database
>         redis - e quindi _più_ disk intensive - utilizza la CPU al
>         100%, come mi
>         aspetterei. Quindi mi verrebbe da dire che l'eventuale
>         problema di
>         latenza è legato unicamente all'utilizzo di Redis.
> 
> 
> Si, ma non guardare le lucine… usa dtrace/kprobes/systemtap, quello
> che va di moda ora sul tuo os.


Mi dirai tu se posso considerarmi abbastanza à la page, ma prima di
chiedere un consiglio in lista ho ovviamente fatto vari controlli con
iotop - ad esempio verificando che, nel parsing di 150 MB di json,

- durante la prima iterazione, fatta partire dopo un "/sbin/sysctl
vm.drop_caches=3", l'utilizzo del disco è sempre sotto il 15%
(d'accordo, questo non mi dice nulla sulla latenza),

- durante le successive iterazioni, come prevedibile, il disco non viene
_affatto_ utilizzato, dato che il json è nella cache di sistema - eppure
il fenomeno che mi ha spinto a chiedere aiuto in lista rimane tale e
quale,

- la prima iterazione _è_ effettivamente più lenta, ma la differenza è
inferiore al 5%, mentre quello che sto cercando di identificare è una
perdita di efficienza del 30%.

Ciò detto, non avevo neanche menzionato questi test perché - ribadisco -
se il bottleneck fosse il disco - per latenza o per banda - si vedrebbe
_a maggior ragione_ nell'operazione di puro parsing del json _senza_
caricamento in redis. Invece in quel caso la CPU sta fissa sopra il 99%.

Comunque pazienza eh, era solo una curiosità, capisco che non hai il
sistema sotto mano, né la sfera di cristallo.

ciao

Pietro




Maggiori informazioni sulla lista Python