Logo di OpenPEC

Posta Elettronica Certificata        

- Open Source Project -

Logo di Ksolutions S.p.A. Logo di EXEntrica S.r.l. Get OpenPEC at SourceForge.net. Fast, secure and Free Open Source software downloads                                                            English version    
 Home > Documentazione > Test
Normativa
:: La normativa
:: Il sito del cnipa
 
Documentazione tecnica
:: Overview di OpenPEC
:: Installazione
:: Frequently Asked Questions (FAQ)
:: Test

Convegni e seminari
:: Perl WorkShop 2004 - Flavio Fanton (pdf - html)
:: SALPA 2004 - Luca De Santis (pdf)
:: SALPA 2004 Call for paper - Luca De Santis (pdf)
:: Bologna 2004 - Giovanni Faglioni (pdf)
:: Formia 2005 - Flavio Fanton (pdf)
:: Governance e open source (Pisa 2006) - Umberto Ferrara (pdf)
:: ICT & Security (Pisa 2007) - Umberto Ferrara (pdf)
:: Convegno OS e riuso (Univ. Pisa 2008) - Umberto Ferrara (pdf)
:: Convegno TOSSlab (Navacchio 2008) - Umberto Ferrara (pdf)
:: Seminario TOSSlab (Univ. Pisa 2009) - Umberto Ferrara (pdf1 pdf2)
 
 

Le macchine

opec1 opec2
  • model name : 1 CPU Pentium III (Katmai)
  • cpu MHz : 501.148
  • cache size : 512 KB
  • RAM Memory : 192 MB
  • Hard Disk EIDE FUJITSU MPC3102AT E - 256K Cache 5400rpm UATA
  • model name : 1 CPU Pentium III (Katmai)
  • cpu MHz : 547.626
  • cache size : 512 KB
  • RAM Memory : 256 MB
  • Hard Disk EIDE 10GB WDC WD100BA - 2MB Cache 7200rpm UDMA/66
prestazioni (fonte: hdparm)
  • Timing buffer-cache reads: 568 MB in 2.00 seconds = 284.00 MB/sec
  • Timing buffered disk reads: 38 MB in 3.10 seconds = 12.26 MB/sec
  • Timing buffer-cache reads: 580 MB in 2.01 seconds = 288.56 MB/sec
  • Timing buffered disk reads: 72 MB in 3.05 seconds = 23.61 MB/sec
 

Test di carico - sessione 1

Lo scopo è stimare il carico massimo sopportabile da OpenPec (non del sistema nel suo complesso) in termini di numero di mail elaborate per unità di tempo in funzione del numero dei processi.

In questa prima sessione di test abbiamo preferito separare i casi di firma (mail in arrivo dal client e da deliverare esternamente) da quelli di verifica (mail in formato "documento di trapsorto" da deliverare localmente verso i server LMTP) così da capire quanto incidono singolarmente.

Modalità di esecuzione
Abbiamo installato il sistema completo (Postfix - OpenPec - Cyrus) su due macchine, opec1 e opec2, e utilizzato altre due per spedire posta. Per facilitare le operazioni di spedizione abbiamo configurato i Postfix in modo da fare relay anche sul SMTP non sicuro.
Ad ogni mailer (noi abbiamo utilizzato mailer.pl incluso nella distribuzione) sono stati messi a disposizione 18 messaggi vari da, complessivamente 22525 Kbytes con l'header (From e To) opportunamente modificato in modo da essere conforme all'envelop.
Per ogni prova abbiamo modificato il numero di processi di OpenPec e di Postfix (transport).

Architettura di rete:

Architettura software per server:

Sistema di PEC ad un solo dominio certificato

Descrizione

  1. Entrambe le macchine devono avere Postfix up con code vuote e OpenPec down.
  2. Spedire le mail a opec2.
  3. Tirare su OpenPec su opec2, quindi eseguire il "flush" dei messaggi in coda a Postfix (postfix -f).
  4. Monitorare i vari parametri (cpu, tempo di esecuzione, etc.).
  5. Eseguire quanto al punto 3 per opec1.
  6. Monitorare i parametri su opec1.

Risultati

opec2 - firma + ricevute
Processi Tempi
1 Test completato in 46'' -  Media: 2,6 sec/mail
2 Test completato in 46'' -  Media: 2,6 sec/mail
4 Test completato in 46'' -  Media: 2,6 sec/mail
8 Test completato in 46'' -  Media: 2,6 sec/mail
16 Test completato in 46'' -  Media: 2,6 sec/mail
opec1 - verifica + ricevute
Processi Tempi
1 Test completato in 3'55'' -  Media: 14 sec/mail
2 Test completato in 4'46'' secondi -  Media: 15 sec/mail
4 Test completato in 4'46'' secondi -  Media: 15 sec/mail
8 Test completato in 4'50'' -  Media: 15 sec/mail
16 -

Conclusioni
Opec1 ha tempi di elaborazione molto maggiori di Opec2, questo ci conferma, che l'operazione di verifica è più onerosa della firma di quasi un'ordine di grandezza (anche se dobbiamo dire che il disco di opec1 è inferiore a quello di opec2).
Ma la cosa maggiormente importante è che la configurazione più efficente è con un solo processo per server nel caso di macchine ad un solo processore.

Osservazioni

  • Quanto incide la firma e la verifica sul tempo di elaborazione medio della mail?
  • Abbiamo rifatto i test modificando il codice in modo che non venisse eseguita solo la chiamata ad openssl ed abbiamo ottenuto:
    per la sola firma il test si è concluso in 39'' (al post dei 46''); per la verifica il test si è concluso in 1' e 42'' (al post dei 4' e 46'').
  • Quanto incide il disco rigido?
    Abbiamo rifatto i test scambiando le macchine (dato che il dico di opec2 è più performante) ed il risultato è un divario di crica un quarto del tempo:
    per la firma il test è stato completato in 32'' (al posto di 46'').
    Questo significa che la scelta del disco è fondamentale al fine di aumentare le prestazioni.

 

Test di carico - sessione 2

Lo scopo è stimare il carico massimo sopportabile da un sistema completo di PEC di esempio che utilizza OpenPec in termini di numero di mail elaborate per unità di tempo.

Modalità di esecuzione
Abbiamo installato il sistema completo (Postfix - OpenPec - Cyrus) su due macchine, opec1 e opec2, e utilizzato una terza per spedire posta. Per facilitare le operazioni di spedizione abbiamo configurato i Postfix in modo da fare relay anche sul SMTP non sicuro.
La spedizione di massa delle mail è stata effettuata da due istanze del semplice mailer allegato alla distribuzione (mailer.pl), una per ogni server. Ad ogni istanza sono state affidate una serie di mail di vario tipo con i campi From, To e Cc modificati coerentemente con l'envelop. In particolare:

  • opec1
    dominio: domaincert1.openpec.org
    utenti locali:
    user1@domaincert1.openpec.org
    user2@domaincert1.openpec.org

  • opec2
    dominio: domaincert2.openpec.org
    utenti locali:
    user1@domaincert2.openpec.org
    user2@domaincert2.openpec.org

  • terza macchina
    • mailer 1:
      794 messaggi - 44.216KB totale
      cmd: mailer.pl user1@domaincert1.openpec.org user2@domaincert2.openpec.org path_mail_1 1 opec1
    • mailer 2:
      1226 messaggi - 96.968KB totale
      cmd: mailer.pl user1@domaincert2.openpec.org user2@domaincert1.openpec.org path_mail_2 1 opec2

Risultati

Messaggi elaborati raggruppati per tipo di elaborazione

  • opec1 - tempo totale - 161' 34"
    • 96.968KB di messaggi verificati (documenti di trasporto da Opec2)
    • 193.936KB di messaggi firmati (presa in carico e avvenuta consegna a Opec2)
    • 44.226KB di messaggi firmati (accettazione a Opec1)

  • opec2 - tempo totale - 151' 03"
    • 44.226KB di messaggi verificati (documenti di trasporto da Opec1)
    • 88.452KB di messaggi firmati (presa in carico e avvenuta consegna a Opec1)
    • 96.968KB di messaggi firmati (accettazione a Opec2)

Messaggi totali elaborati/generati

  • opec1
    • 794 - 44.226KB ric. acc.
    • 794 - 44.226KB doc. di trasp. generati
    • 1226 - 96.968KB doc. di trasp. ricevuti
    • 1226 - 96.968KB ric. presa in car.
    • 1226 - 96.968KB ric. di consegna
    • totale elaborato: 5266 - 379.336KB

  • opec2 - tempo totale - 151' 03"
    • 1226 - 96.968KB ric. acc.
    • 1226 - 96.968KB doc. di trasp. generati
    • 794 - 44.226KB doc. di trasp. ricevuti
    • 794 - 44.226KB ric. presa in car.
    • 794 - 44.226KB ric. di consegna
    • totale elaborato: 4834 - 326.604KB

 

Test di affidabilità

Lo scopo è sottoporre il sistema ad un carico consistente e analizzare le mailbox degli utenti di prova per verificare le relazioni fra le varie tipologie di mail.
1 mail da server PEC1 a server PEC2 si traduce in:
1 documento di trasporto
1 ricevuta di accettazione
1 ricevuta di presa in carico
1 ricevuta di avvenuta consegna

Modalità di esecuzione
Abbiamo installato il sistema completo (Postfix - OpenPec - Cyrus) su due macchine, opec1 e opec2, e utilizzato una terza per spedire posta e scaricare le caselle via pop3 da entrambi i server. Per facilitare le operazioni di spedizione abbiamo configurato i Postfix in modo da fare relay anche sul SMTP non sicuro.
La spedizione di massa delle mail è stata effettuata da due istanze del semplice mailer allegato alla distribuzione (mailer.pl) con un attesa fra una spedizione e l'altra di un tempo da 1 a 15 sec, una per ogni server. Ad ogni istanza sono state affidate una serie di mail di vario tipo con i campi From, To e Cc modificati coerentemente con l'envelop. In particolare:

  • opec1
    dominio: domaincert1.openpec.org
    utenti locali:
    user1@domaincert1.openpec.org
    user2@domaincert1.openpec.org

  • opec2
    dominio: domaincert2.openpec.org
    utenti locali:
    user1@domaincert2.openpec.org
    user2@domaincert2.openpec.org

  • terza macchina
    • mailer 1:
      794 messaggi - 44.216KB totale
      cmd: mailer.pl user1@domaincert1.openpec.org user2@domaincert2.openpec.org path_mail_1 1 opec1
    • mailer 2:
      1226 messaggi - 96.968KB totale
      cmd: mailer.pl user1@domaincert2.openpec.org user2@domaincert1.openpec.org path_mail_2 1 opec2

Risultati

Messaggi ricevuti dagli utenti di test raggruppati per tipo

  • opec1
    794 ricevute di accettazione
    794 ricevute di presa in carico
    794 ricevute di avvenuta consegna
    1225 documenti di trasporto

  • opec2
    1225 ricevute di accettazione
    1225 ricevute di presa in carico
    1225 ricevute di avvenuta consegna
    794 documenti di trasporto
    1 Undeliverable Mail

* Il messaggio "Undeliverable Mail" è stato causato da un header non coerente e quindi gestito conformemente alle specifiche.

** Il test è stato svolto con la versione 0.9.7d di openssl.

*** Da sottolineare che entrambi i server OpenPec erano al massimo livello di log su file ed hanno prodotto un file maggiore di 250MB ognuno.

Osservazioni
Il test si è svolto precedentemente con la versione 0.9.7a di openssl e ha evidenziato dei problemi (non particolarmente preoccupanti): su 1226 mail venivano generate un numero variabile (intorno a 20) di anomalie di trasporto. Ciò era dovuto al fallimento della verifica del documento di trasporto correttamente firmato. Abbiamo approfondito la cosa assicurandoci che la verifica falliva erroneamente: veniva ritornato il codice d'errore 11 senza nessun codice o messaggio su STDERR o STDOUT; numerose prove hanno dimostrato la casualità del problema.
Il problema non è perchè al mittente non veniva spedita nessuna ricevuta quindi, nel contesto PEC, sapeva che la mail non era stata consagnata.
Il problema è stato risolto con l'aggiornamento di openssl alla versione 0.9.7d.

 

Test di carico - sessione 3

Questo test è la copia del "test di carico - sessione 1" ma eseguito su una macchina multiprocessore per quantificare il guadagno di una soluzione più costosa e magari evidenziare possibili migliorie del codice.

Modalità di esecuzione
Abbiamo installato il sistema completo (Postfix - OpenPec - Cyrus) su due macchine, opec3 e opec2, e utilizzato altre due per spedire posta. Per facilitare le operazioni di spedizione abbiamo configurato i Postfix in modo da fare relay anche sul SMTP non sicuro.
Ad ogni mailer (noi abbiamo utilizzato mailer.pl incluso nella distribuzione) sono stati messi a disposizione 18 messaggi vari da, complessivamente 22525 Kbytes con l'header (From e To) opportunamente modificato in modo da essere conforme all'envelop.
Per ogni prova abbiamo modificato il numero di processi di OpenPec e di Postfix (transport).

Macchina utilizzata:
opec3
  • model name : 2 CPU Pentium III (Katmai)
  • cpu MHz : 499.192
  • cache size : 512 KB
  • RAM Memory : 384 MB
  • Hard Disk SCSI HP 9.10GB A 80-SA40
prestazioni (fonte: hdparm)
  • Timing buffer-cache reads: 512 MB in 2.00 seconds = 255.62 MB/sec
  • Timing buffered disk reads: 78 MB in 3.09 seconds = 25.24 MB/sec

Risultati
opec3 - firma + ricevute
Processi Tempi
1 Test completato in 46'' -  Media: 2,6 sec/mail
2 Test completato in 29'' -  Media: 1,6 sec/mail
4 Test completato in 29'' -  Media: 1,6 sec/mail
8 Test completato in 29'' -  Media: 1,6 sec/mail
16 Test completato in 29'' -  Media: 1,6 sec/mail
opec3 - verifica + ricevute
Processi Tempi
1 Test completato in 3'20'' -  Media: 11,11 sec/mail
2 Test completato in 2'11'' secondi -  Media: 7,28 sec/mail
4 Test completato in 2' secondi -  Media: 6,67 sec/mail
8 Test completato in 1'55'' -  Media: 6,39 sec/mail
16 Test completato in 1'55'' -  Media: 6,39 sec/mail

Conclusioni
Come ci aspettavamo le prestazioni sono aumentate in maniera tangibile (30% circa) passando da 1 a 2 processi (pari al numero di processori) per poi stabilizzarsi; si nota comunque una lieve deriva sulla prova riguardante la verifica.
Durante il test con 8 processi (ne segue quello con 16) l'osservazione con watch -n 1 "ps ax|grep opec" ha mostrato che non vengono utilizzati più di 6 processi contemporaneamente.
A questo punto, tenendo conto di eventuali ritardi di risposta con i componenti di rete esterni a OpenPec (server LDAP, MTA e LMTP server), la configurazione più efficiente sembra seguire la regola:

in /etc/opec.conf
$maxServers = <(num. processori * 2) + x>

x è un intero che deve tener conto delle caratteristiche della macchina in generale ma soprattutto dei dischi: più è performante maggiore è il suo valore (tipicamente da 1 a 3).