erlug
[Top] [All Lists]

Re: [Erlug] udp socket, packet loss

To: erlug@xxxxxxxxxxxxxx
Subject: Re: [Erlug] udp socket, packet loss
From: Davide Alberani <da@xxxxxxxxxxxxxx>
Date: Sat, 7 Jul 2007 19:15:59 +0200
On Jul 07, Roberto Bettazzoni <ml@xxxxxxxxxxxxx> wrote:

> lo so che sono malato, ma quando vedo del codice è + forte di me

Gh. :-)

> Ho preso il codice di zen ed ho fatto 2 o 3 modifiche per fare
> delle prove (in allegato trovate il codice).
> 
> Dallo smoke test, a me funziona sempre, 0 pacchetti persi.

Su localhost, macchina lentuccia ed indaffarata, col tuo codice ho
comportamenti buffi aumentando il numero di thread, ricevendo
una eccezione (python 2.4):

Traceback (most recent call last):
  File "./c", line 27, in ? # l'ho modificato, il nr di riga non fa testo.
      for c in clienti: c.start()
    File "/usr/lib/python2.4/threading.py", line 416, in start
      _start_new_thread(self.__bootstrap, ())
  thread.error: can't start new thread

Al salire del numero, le possibilita` di beccarsi l'eccezione
crescono (diventando molto probabile sopra i 600 o 700 thread).

Non saprei a chi dare la colpa; aggiungendo un time.sleep(0.0001)
(per dire) dopo c.start() tutto va sempre (?) bene, ma e` chiaro che
da qualche parte qualcosa di orrendo sta accadendo, e non ci si
puo` fare affidamento. :-)

Non ho limit particolari e /proc/sys/kernel/threads-max e` a 8191;
non mi sembra ci siano altri limiti a livello di sistema, ed il
fatto che lo faccia solo ad intemittenza mi puzza di Roba Che Si
Imputtanisce(tm) sotto carico.

Mumble, mumble...


Per il Buon Sgala:
- non e` che eccedi di bonta` e trappi tutte le eccezioni che ti
  capitano a mano, nascondendo dunque errori nel lancio di alcuni
  dei thread?
- sei mica sotto Windows?  Dovrebbe - a dio piacendo - farlo solo
  con messaggi molto lunghi, ma mi risulta che socket.send() possa
  decidere di mandare solo una parte del messaggio (socket.send
  ritorna il numero di bytes inviati).


HTH,
-- 
Davide Alberani <da@xxxxxxxxxxxxxx> [PGP KeyID: 0x465BFD47]
http://erlug.linux.it/~da/

<Prev in Thread] Current Thread [Next in Thread>