Wie geht Linux mit gleichzeitiger Platten-E / A um?

12

Wenn ein Linux-Server viele gleichzeitige Anforderungen zum Lesen vieler verschiedener Dateien bedient, geschieht Folgendes:

  1. Suchen Sie nach Datei_1, lesen Sie die gesamte Datei, suchen Sie nach Datei_2, lesen Sie die gesamte Datei, suchen Sie nach Datei_3 usw. usw

  2. Suchen Sie nach Datei_1, lesen Sie einen Teil davon (bis zum Readahead-Wert?), Suchen Sie nach Datei_2, lesen Sie einen Teil davon, kehren Sie zu Datei_1 zurück, wo es aufgehört hat, lesen Sie mehr davon, suchen Sie nach Datei_3 usw. etc

Wenn es sich um den zweiten Fall handelt, führt der Server viel mehr Suchvorgänge durch, als erforderlich sind, was zu einer erheblichen Verlangsamung führen würde. Kann ich in diesem Fall etwas tun?

Fortsetzung
quelle

Antworten:

14

In Disk I / O gibt es eine Sache namens Elevator. Das Platten-Subsystem versucht zu vermeiden, dass der Plattenkopf über die Platten geschleudert wird. E / A-Anforderungen werden neu angeordnet (wenn dies nicht durch eine Barriere verhindert wird), sodass sich der Kopf von der Innenseite der Festplatte nach außen und zurück bewegt und angeforderte E / A-Vorgänge auf dem Weg ausführt.

Das zweite ist das Zusammenführen von E / A-Anforderungen. Wenn innerhalb eines kurzen Zeitfensters viele Anforderungen vorliegen, die auf verschiedene Teile der Datei zugreifen, versucht das E / A-Subsystem, alle Daten auf einmal abzurufen, anstatt mehrere nicht zusammenhängende Anforderungen zu senden.

So weit das Tuning reicht. Wenn Sie der Autor von Anwendungen sind, können Sie eine Menge tun. Sie können große, sequenzielle E / A ausgeben, wann immer Sie können, und fsync () et.al. wenn Sie sicher sein müssen, dass sich die Daten auf den Platten befinden.

Wenn Sie ein Systemadministrator sind und absolut sicher sind, dass die Datenanforderungen von 2 Apps ansteigen und sie versuchen, Dateien nacheinander zu lesen (z. B. wenn 2 DVDs parallel transkodiert werden), sollte es hilfreich sein, den Readahead zu erhöhen. Andernfalls müssen Sie Ihre E / A-Muster und -größen überprüfen, ggf. Ihren RAID-Level und andere Faktoren berücksichtigen, bevor Sie eine Optimierung vornehmen. Sehen Sie sich Ihre tatsächlichen Engpässe an, bevor Sie mit der Optimierung beginnen. Es ist möglicherweise schwierig zu erraten, was Ihr System wirklich einschränkt.

Paweł Brodacki
quelle
5

Unter Linux können Sie Ihren eigenen Planungsalgorithmus definieren, Sie haben verschiedene Möglichkeiten, ich musste in der Schule einen Teil dazu schreiben, und dieser Artikel von Red Hat hat mir sehr geholfen. Obwohl es speziell für Red Hat ist, können Sie diese Scheduler in praktisch jeder Linux-Distribution finden.

Lucas Kauffman
quelle