2016-07-10 10 views
1

Ich schrieb ein Programm zum Testen der IO-Leistung in Java mit FileChannel. Schreiben Sie Daten und rufen Sie force (false) sofort auf. Mein Linux-Server hat 12 SSD-Festplatten, sda ~ sdl, und ich schreibe Daten auf verschiedene Festplatten, die Leistung variiert stark, und ich weiß nicht warum?über Linux IO-Performance

Code:

public static void main(String[] args) throws IOException, InterruptedException { 
    RandomAccessFile aFile = new RandomAccessFile(args[0], "rw"); 
    int count = Integer.parseInt(args[1]); 
    int idx = count; 
    FileChannel channel = aFile.getChannel(); 
    long time = 0; 
    long bytes = 0; 
    while (--idx > 0) { 
     String newData = "New String to write to file..." + System.currentTimeMillis(); 
     String buff = ""; 
     for (int i = 0 ; i<100; i++) { 
      buff += newData; 
     } 
     bytes += buff.length(); 
     ByteBuffer buf = ByteBuffer.allocate(buff.length()); 
     buf.clear(); 
     buf.put(buff.getBytes()); 
     buf.flip(); 
     while(buf.hasRemaining()) { 
      channel.write(buf); 
     } 
     long st = System.nanoTime(); 
     channel.force(false); 
     long et = System.nanoTime(); 
     System.out.println("force time : " + (et - st)); 
     time += (et -st); 
    } 
    System.out.println("wirte " + count + " record, " + bytes + " bytes, force avg time : " + time/count); 
} 

Ergebnis wie folgt aus:
sda: wirte 1000000 Rekord, 4299995700 Bytes, avg Zeit erzwingen: 273.480 ns
sdb: wirte 100000 Rekord, 429.995.700 Bytes, avg Zeit erzwingen: 5.868.387 ns

Die durchschnittliche Zeit variieren erheblich.

Hier sind einige IO-Monitor-Daten.
sda: iostat data image
sdb: iostat data image

+0

Können Sie erklären, was Sie als Problem sehen? Es scheint nicht genug Informationen zu geben, um irgendwelche Schlüsse ziehen zu können. 0,005 Sekunden Variation bedeutet nicht viel für Disk IO, es sei denn, es ist hochgradig reproduzierbar. Ich nehme an, die Laufwerke sind alle gleich außer 'sda' haben auch das Betriebssystem drauf? –

+0

Hinweis: Wenn Sie für einen Benchmark in eine Datei schreiben, müssen Sie keine Dummy-Daten erstellen (es sei denn, die Daten werden komprimiert). Eine Datei mit Null-Bytes ist die gleiche wie eine mit Zufallsdaten. –

+0

Sind alle diese Festplatten das gleiche Laufwerksmodell auf demselben Controller mit demselben Dateisystemtyp? BTW sogar 72 MB/s klingt für eine SSD nicht sehr hoch. Ich würde nach 400 - 500 MB/s suchen –

Antwort

1

Sie müssen nach dem Maß SSD Festplatten Leistung mit einigen Standard-Tool wie fio starten.

Dann können Sie Ihr Dienstprogramm erneut mit Zahlen aus fio-Ausgabe testen.

Sieht aus wie Sie in den Linux-Write-Cache schreiben, so dass Ihre Ergebnisse erklären kann :)

Verwandte Themen