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
risposta
E 'semplice da fare utilizzando GNU parallelo:
parallel du ::: */*
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.
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. –
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
C'è un modo per me di controllare da solo (alcuni comandi come eseguire)? –
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.
Basta notare che IO non può sempre essere multitasking. – konsolebox