2014-07-07 13 views
6

Ho un disco di archiviazione molto grande (16T). Voglio eseguire 'du' su di esso per capire quanto prende ciascuna sottodirectory. Tuttavia, ciò richiede molto tempo. Fortunatamente, ho a mia disposizione un gruppo di computer. Posso quindi eseguire "du" in parallelo, ogni lavoro viene eseguito su una sottodirectory separata e scrivere un semplice script che lo faccia. Esiste già una cosa del genere o devo scriverla io stesso?Run du on parallel

+0

Basta notare che IO non può sempre essere multitasking. – konsolebox

risposta

3

E 'semplice da fare utilizzando GNU parallelo:

parallel du ::: */* 
3

Non è chiaro dalla domanda in che modo viene progettata la memoria (array RAID, NAS, NFS o altro).

Ma, quasi a prescindere dalla tecnologia attuale, eseguire du in parallelo potrebbe non essere una buona idea dopotutto - è molto probabile che in realtà rallenti le cose.

L'array di dischi ha una capacità IOPS limitata e più thread du verranno prelevati da tale pool. Ancora peggio, spesso il singolo du rallenta molte altre operazioni di I/O molte volte, anche se il processo non consuma molto throughput del disco.

In confronto, se si dispone di una sola CPU, l'esecuzione di parallelo (make -j N) rallenta il processo di compilazione poiché il cambio di processo ha un notevole sovraccarico.

Lo stesso principio è applicabile ai dischi, in particolare ai dischi rotanti. L'unica situazione in cui aumenterai considerevolmente la velocità è quando hai N unità montate in directory indipendenti (qualcosa come /mnt/disk1, , /mnt/diskN). In tal caso, è necessario eseguire du in N thread, 1 per disco.

Un miglioramento comune per aumentare la velocità è quello di montare i dischi con il flag noatime. Senza questo flag, la massiccia scansione del disco crea molte attività di scrittura per aggiornare i tempi di accesso. Se si utilizza il flag noatime, l'attività di scrittura viene evitata e il funzionamento è molto più rapido.

+0

Questa è la memoria della mia università, quindi non ho familiarità con i dettagli. Tuttavia, poiché si tratta di un grande disco/i il cui scopo è quello di servire da disco per un cluster (condor in questo caso), presumo che sia progettato per supportare più operazioni di I/O multiple contemporaneamente. –

+0

In che modo i computer client utilizzano questa memoria? Montaggio NFS? Se sì, allora la scansione parallela potrebbe funzionare, perché NFS ha un notevole overhead di rete round-trip – mvp

+0

C'è un modo per me di controllare da solo (alcuni comandi come eseguire)? –

0

Esiste già una cosa del genere o devo scrivere io stesso?

Ho scritto sn per me stesso, ma potresti apprezzarlo anche tu.

sn p . 

ti darà le dimensioni di tutto nella directory corrente. Funziona in parallelo ed è più veloce di du su directory di grandi dimensioni.