2017-11-09 4 views
0

Ich tauche in den ext4 und JBD2 Quellcode und ich habe nicht klar verstanden, wie eine Leseoperation ausgeführt wird, direkt nachdem eine Transaktion ausgeführt wurde.Wie wird der Checkpoint in JBD2 verwaltet, wenn der Kernel dringend Speicherplatz freigeben muss?

Dies ist, was ich verstanden, den Quellcode zu lesen:

  1. Transaktionen verwenden buffer_head die Metadaten zu speichern;
  2. Sobald eine Transaktion festgeschrieben wird, wird puffer_head ptr zur Checkpoint-Liste hinzugefügt;
  3. Checkpoint kann nicht direkt nach der Festschreibungsoperation beginnen;
  4. Kontrollpunkt durchgeführt und die buffer_head aus dem Speicher

Ich frage mich befreit werden, wenn zwischen Schritt 3 und 4 die Kernel-Speicher aus irgendeinem Grunde befreien muss und, in meinem Verständnis ist es sicher zu befreien diese buffer_head, weil wir die Transaktion aus dem Journalbereich auf der Festplatte zurück in den Speicher später lesen können.

Q1) Ich frage mich, ob diese Situation den buffer_head zu befreien, bevor Kontrollpunkt möglich ist oder nicht oder ob die buffer_head bis zum Checkpoint im Speicher gesperrt wird, um sie vertreiben.

Q2) Auch ich bin mir nicht sicher über Schritt 3, ich konnte nicht finden, ob der Checkpoint einige Zeit dauert, bevor ausgeführt oder nicht.

Antwort

0

Q1) Die buffer_head wird erst am Kontrollpunkt befreit wird durchgeführt, weil es viel teurer Befreiung der Puffer ist, dann ist es wieder von der Festplatte auf dem Speicher zu laden, anstatt die buffer_head im Speicher zu halten in einer kurzen einen Checkpoint Delta Zeit.

Q2) Checkpoint verzögert werden kann oder durchgeführt werden, bevor ein, da keine freien Blöcke in journal Bereich auf der Festplatte begehen, so wird Checkpoint gestartet Blöcke freizugeben begehen durch die bevorstehende verwendet werden.

Verwandte Themen