<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Il non-blog di Mario Pascucci &#187; block size</title>
	<atom:link href="http://www.ismprofessional.net/pascucci/index.php/tag/block-size/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ismprofessional.net/pascucci</link>
	<description>Sto lavorando sodo per preparare il mio prossimo errore (B. Brecht)</description>
	<lastBuildDate>Wed, 04 Jan 2012 11:50:08 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Tape drive LTO-3, controller HP Smart Array, Linux e problemi di velocità</title>
		<link>http://www.ismprofessional.net/pascucci/index.php/2009/11/tape-drive-lto-3-controller-hp-smart-array-linux-e-problemi-di-velocita/</link>
		<comments>http://www.ismprofessional.net/pascucci/index.php/2009/11/tape-drive-lto-3-controller-hp-smart-array-linux-e-problemi-di-velocita/#comments</comments>
		<pubDate>Wed, 11 Nov 2009 03:00:32 +0000</pubDate>
		<dc:creator>Mario Pascucci</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Sotto il cofano]]></category>
		<category><![CDATA[block size]]></category>
		<category><![CDATA[Controller Smart Array]]></category>
		<category><![CDATA[I/O speed]]></category>
		<category><![CDATA[LTO-3]]></category>
		<category><![CDATA[Tape drive]]></category>

		<guid isPermaLink="false">http://www.ismprofessional.net/pascucci/?p=783</guid>
		<description><![CDATA[Ho per le mani un server nuovo di zecca, con una discreta dotazione hardware. In particolare il pezzo degno di nota è un drive per nastri di tipo LTO-3. Il server è un HP DL380 di sesta generazione, e monta un controller dedicato per il drive a nastro, uno SmartArray P212 con interfaccia di tipo [...]]]></description>
			<content:encoded><![CDATA[<p>Ho per le mani un server nuovo di zecca, con una discreta dotazione hardware. In particolare il pezzo degno di nota è un drive per nastri di tipo LTO-3.</p>
<p>Il server è un HP DL380 di sesta generazione, e monta un controller dedicato per il drive a nastro, uno SmartArray P212 con interfaccia di tipo SAS.</p>
<p>Il primo problema è stato che il drive non è rilevato all&#8217;avvio del sistema operativo, ma questo è facile da risolvere: i controller di tipo Smart Array sono in grado di accettare e controllare dispositivi a nastro, naturalmente a patto che l&#8217;interfaccia sia corretta, ossia SAS o SCSI. Il supporto per i dispositivi SCSI che non siano dischi è normalmente disabilitato nel modulo kernel corrispondente, che per la cronaca si chiama <strong>cciss</strong>, e può essere abilitato senza problemi e senza riavviare niente. Basta usare l&#8217;interfaccia /proc di accesso ai parametri del kernel.<br />
Occorre prima individuare a quale controller sia connesso il drive a nastro, se ce ne sono più di uno. Basta andare a guardare nella directory   <strong>/proc/driver/cciss</strong>: in questa directory vi sono tanti file quanti sono i controller, con il nome <strong>ccissX</strong> dove <strong>X</strong> è il numero &#8220;logico&#8221; del controller. Guardando dentro i singoli file con un cat si individua il controller giusto, nel mio caso è cciss1, il cui contenuto è:</p>
<pre><code>cciss1: HP Smart Array P212 Controller
Board ID: 0x3241103c
Firmware Version: 1.66
IRQ: 178
Logical drives: 0
Sector size: 2048
Current Q depth: 0
Current # commands on controller: 0
Max Q depth since init: 0
Max # commands on controller since init: 1
Max SG entries since init: 0
Sequential access devices: 1
</code></pre>
<p>Per individuarlo, nel mio caso, ho cercato il modello di controller, ma si può usare ad esempio la presenza o meno di dischi, se il controller è condiviso fra dischi e nastro, cosa sconsigliata a priori.<br />
Trovato il controller giusto, basta dare questo comando, da utente root:</p>
<pre><code># echo "engage scsi" > /proc/driver/cciss/cciss1</code></pre>
<p>sostituendo a <strong>cciss1</strong> il file giusto, e magicamente appare il drive a nastro, come si può verificare dai messaggi del kernel, visibili col comando <strong>dmesg</strong>:</p>
<pre><code>scsi0 : cciss
  Vendor: HP        Model: Ultrium 3-SCSI    Rev: Q24D
  Type:   Sequential-Access                  ANSI SCSI revision: 05
scsi 0:0:0:0: Attached scsi generic sg0 type 1
</code></pre>
<p>Per trovare il device, occorre prima caricare a mano il modulo kernel <strong>st</strong>, oppure riavviare, ed a quel punto avremo disponibile il device <strong>/dev/st0</strong> ed il device <strong>/dev/nst0</strong> per accedere al nastro: il primo riavvolge il nastro automaticamente all&#8217;inizio quando si termina una operazione di scrittura (alla chiusura del device, ossia quando ad esempio il comando <strong>tar</strong> termina), mentre il secondo lascia il nastro dov&#8217;è.<br />
Per rendere permanenti le modifiche ed avere il drive disponibile fin dall&#8217;avvio, ho inserito il comando nel file <strong>/etc/rc.local</strong>, che nelle distribuzioni RedHat e derivate (Fedora, CentOS), come pure in Debian, è destinato appunto questo scopo. Come effetto collaterale avremo che il modulo kernel <strong>st</strong> sarà caricato automaticamente all&#8217;avvio. </p>
<h4>La velocità</h4>
<p>Il primo test è a dir poco deludente: meno di 3 megabyte al secondo. Ma l&#8217;effetto peggiore è un altro, a lungo termine: il drive, non avendo dati alla velocità giusta, è costretto a fermarsi, aspettare dati a sufficienza, tornare indietro e ripartire. Questo ciclo di start-stop-rewind è in grado di distruggere un drive in pochi mesi. Se invece i dati arrivano costantemente e in quantità adeguata, il drive scrive a velocità costante per tutto il tempo senza fermarsi mai, se non alla fine del lavoro.<br />
Ebbene, il problema è a vari livelli. La facciamo breve:</p>
<ul>
<li>disattivare la compressione del drive, ed usare quella del software</li>
<li>impostare la dimensione del blocco sul nastro a 64k (65536 bytes)</li>
<li>assegnare al modulo kernel <strong>st</strong> almeno 2 megabyte di buffer</li>
</ul>
<p>dopo questi interventi la velocità in scrittura è passata a 30 megabyte/sec, ben dieci volte, e soprattutto niente più start-stop.</p>
<p>Ecco i comandi da impartire, partiamo dalla compressione:</p>
<pre><code># mt -f /dev/st0 compression off</code></pre>
<p>dove <strong>mt</strong> è una utility per la gestione dei drive a nastro, disponibile nel pacchetto <strong>mt-st</strong>.</p>
<p>Per la dimensione del blocco, si può utilizzare sia il comando:</p>
<pre><code># mt -f /dev/st0 setblk 65536</code></pre>
<p>che con le opzioni proprie del programma usato per scrivere su nastro. Ad esempio <strong>tar</strong> ha l&#8217;opzione <strong>-b</strong> a cui devono essere indicati quanti blocchi da 512 byte per impostare la lunghezza del segmento dati da leggere o scrivere. Per 64k l&#8217;opzione è <strong>-b 128</strong>.</p>
<p>Per il buffer del modulo kernel <strong>st</strong> invece occorre aggiungere questa riga al file <strong>/etc/modprobe.conf</strong> (o l&#8217;equivalente della distribuzione in uso):</p>
<pre><code>options st buffer_kbs=4096</code></pre>
<p>e per attivare le modifiche basta scaricare il modulo, eseguire un <strong>depmod&nbsp;-a</strong> e ricaricare il modulo <strong>st</strong>. Se la configurazione è corretta, nel log del kernel deve apparire qualcosa del genere:</p>
<pre><code>st: Version 20070203, fixed bufsize 4194304, s/g segs 256
st 0:0:0:0: Attached scsi tape st0
st0: try direct i/o: yes (alignment 512 B)
st0: Block limits 1 - 16777215 bytes.
</code></pre>
<p>Notare il messaggio: &#8220;fixed bufsize 4194304&#8243;.</p>
<p>La cura è piuttosto efficace, questo è il risultato di un test eseguito dopo le impostazioni mostrate:</p>
<pre><code># time dd if=/dev/zero of=/dev/st0 bs=64k count=100000
100000+0 records in
100000+0 records out
6553600000 bytes (6,6 GB) copied, 212,13 seconds, 30,9 MB/s

real	3m32.133s
user	0m0.040s
sys	0m1.049s
</code></pre>
<h4>Riferimenti</h4>
<ul>
<li>Il manuale del modulo <strong>st</strong>, contenuto nel pacchetto <strong>kernel-doc</strong>, o nei sorgenti del kernel, in <strong>Documentation/scsi/st.txt</strong>.</li>
<li>Il manuale del modulo <strong>cciss</strong>, sempre nel pacchetto della documentazione del kernel, in <strong>Documentation/cciss.txt</strong>.</li>
<li>Un vecchio articolo della <a href="http://kbase.redhat.com/faq/docs/DOC-7084">knowledge base di RedHat sui controller Smart Array</a>.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.ismprofessional.net/pascucci/index.php/2009/11/tape-drive-lto-3-controller-hp-smart-array-linux-e-problemi-di-velocita/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

