Flashcache Commands

Aus Thomas-Krenn-Wiki
Zur Navigation springen Zur Suche springen
Hinweis: Bitte beachten Sie, dass dieser Artikel / diese Kategorie sich entweder auf ältere Software/Hardware Komponenten bezieht oder aus sonstigen Gründen nicht mehr gewartet wird.
Diese Seite wird nicht mehr aktualisiert und ist rein zu Referenzzwecken noch hier im Archiv abrufbar.
Über die Flashcache-Befehle können Caching-Devices erzeugt, zerstört, geladen und entfernt werden.

Der folgende Artikel erklärt die Flashcache-Befehle für die Verwaltung von Caching-Devices unter Ubuntu 12.04. Mit den folgenden Commands können SSDs als Caching-Device zu einer Festplatte hinzugefügt um Zugriffe zu Beschleunigen. Weitere Informationen über die Cache-Arten von Flashcache finden sich im Artikel Flashcache.

flashcache_create

Erstellt ein neues Flashcache Volume. Als Device kann jede Art von Block-Devices verwendet werden, ein Cache-Device ist nicht auf eine SSD beschränkt. Für die Erzeugung eines redundanten Caches muss zuerst über zwei SSDs ein RAID#RAID_1 erstellt werden. Dieses RAID-Device kann anschließend als Cache-Device genutzt werden.

Der create-Befehl nimmt folgende Parameter entgegen:

flashcache_create -p back|around|thru [-s cache size] [-b block size] [-v] cachedevname cache_devname disk_devname

Optionen:

  • -p (required): Cache Modus (writeback/writethrough/writearound) (s.a. Flashcache)
  • -s (optional): Cache Größe. Sollte diese nicht angegeben werden, wird das gesamte Device als Cache benutzt. Ohne Angabe einer Größeneinheit werden Sektoren angenommen, es können aber auch die Suffixe k/m/g als Einheiten angegeben werden.
  • -b (optional): Cache Block Größe. 4KB ist die Standardgröße, ohne Angabe werden wiederum Sektoren verwendet (k (Kilobyte) als Einheit kann verwendet werden).
  • -f (optional): Force ("Erzwinge") das Erstellen des Volumes. Umgeht alle Überprüfungen und sollte daher mit Vorsicht verwendet werden.

Hierzu zwei Beispiele (aus der man-Page von Flashcache, beim Erstellen dürfen weder /dev/sdc noch /dev/sdb1 gemountet sein):

  • Beispiel 1:
    flashcache_create -p back -s 1g -b 4k cachedev /dev/sdc /dev/sdb1
    Dieser Befehl erstellt ein 1 Gigabyte großes Write-Back Cache Volume auf "/dev/sdc" (SSD) für "/dev/sdb1", mit 4 Kilobyte Cache Blockgröße. Der Name des Flashcache Volumes lautet "cachedev".
  • Beispiel 2:
    flashcache_create -p thru -s 2097152 -b 8 cachedev /dev/sdc /dev/sdb1
    Erstellt von den Größen-Verhältnissen her dasselbe Volume wie im obigen Beispiel - die Angaben der Größen erfolgt in Sektoren. In Puncto Cache-Art wird in diesem Beispiel ein Write-Through Cache erstellt.

"cachedev" ist in beiden Fällen der Name des FC-Devices, das unter "/dev/mapper" aufscheint. Nach dem Erstellen kann auf diesem ein Filesystem erstellt werden:

mkfs.ext4 /dev/mapper/cachedev

Abschließend kann "/dev/mapper/cachedev" mit dem mount-Befehl eingehängt und als gecachter Datenspeicher verwendet werden:

mount /dev/mapper/cachedev /mnt

flashcache_load

Ein bereits erstelltes Volume erneut laden:

flashcache_load /dev/sdc

Der Name des Volumes gleicht wieder dem, der beim Erstellen des Volumes angegeben wurde. Soll der Name des Cache Volumes geändert werden, kann er als optionaler, zweiter Parameter angegeben werden. Der Befehl "flashcache_load" kann nur für Write-back Volumes verwendet werden, da die anderen beiden Cache-Varianten nicht persistent sind und der Cache bei einem "remove" verloren geht. Für write-through und write-around kommt im Falle des neu Ladens jedes Mal "flashcache_create" zum Einsatz.

flashcache_destroy

Zerstört ein vorhandenes Cache Volume, alle Daten des Caches gehen dabei verloren:

flashcache_destroy /dev/sdc

Flashcache Device entfernen

Für das Entfernen des Flashcache Volumes kommt der Befehl "dmsetup remove" zum Einsatz.[1] Für ein Write-back Volume werden dabei alle Dirty-Blocks (jene, die noch nicht auf die Festplatte geschrieben wurden) von der SSD auf die Platte synchronisiert. Der remove-Befehl retourniert erst, wenn alle Blöcke geschrieben wurden. Bei einem Reboot des Hosts werden ebenfalls alle dirty Blocks auf die Platte geschrieben, mit "dmsetup" kann der Cache jedoch im laufenden Betrieb gecleant werden:

umount ./mnt/
dmsetup remove fc-root

Nun kann z.B. das Flashcache Kernel-Modul neu kompiliert und geladen werden. Danach kann das Flashcache Volume wieder eingehängt werden:

flashcache_load /dev/sdc
mount /dev/mapper/cachedev /mnt

Flashcache Statistiken

Cache-Statistiken können an mehreren Orten gesammelt werden:[2]

dmsetup

tktest@ssd-server:~$ sudo dmsetup status fc-root
[sudo] password for tktest: 
0 1898437501 flashcache stats: 
	reads(49330777), writes(108867076)
	read hits(12732648), read hit percent(25)
	write hits(7369467) write hit percent(6)
	dirty write hits(33142) dirty write hit percent(0)
	replacement(5929826), write replacement(17304359)
	write invalidates(0), read invalidates(5)
	pending enqueues(1536), pending inval(1536)
	metadata dirties(24641709), metadata cleans(17477774)
	metadata batch(41831385) metadata ssd writes(288098)
	cleanings(17477774) fallow cleanings(48440)
	no room(114857153) front merge(17002712) back merge(406768)
	disk reads(36598129), disk writes(101669998) ssd reads(30210420) ssd writes(30893289)
	uncached reads(30667787), uncached writes(84192225), uncached IO requeue(0)
	uncached sequential reads(0), uncached sequential writes(0)
	pid_adds(0), pid_dels(0), pid_drops(0) pid_expiry(0)
tktest@ssd-server:~$ sudo dmsetup table fc-root
0 1898437501 flashcache conf:
	ssd dev (/dev/sdb1), disk dev (/dev/sda3) cache mode(WRITE_BACK)
	capacity(32638M), associativity(512), data block size(4K) metadata block size(4096b)
	skip sequential thresh(0K)
	total blocks(8355328), cached blocks(8355328), cache percent(100)
	dirty blocks(6642847), dirty percent(79)
	nr_queued(0)
Size Hist: 512:287347 1024:3 4096:207955752

proc-Verzeichnis

tktest@ssd-server:~$ cat /proc/flashcache/sdb1+sda3/flashcache_stats 
reads=14576882 writes=24576256 
read_hits=14560896 read_hit_percent=99 write_hits=16898066 write_hit_percent=68 dirty_write_hits=15723302
dirty_write_hit_percent=63 replacement=535 write_replacement=689701 write_invalidates=0 read_invalidates=35
pending_enqueues=32008 pending_inval=32008 metadata_dirties=8820766 metadata_cleans=7116147
metadata_batch=15652294 metadata_ssd_writes=284619 cleanings=7116147 fallow_cleanings=143014
no_room=242 front_merge=6899514 back_merge=45277 disk_reads=15986 disk_writes=7148331
ssd_reads=21677027 ssd_writes=24843283 uncached_reads=1385 uncached_writes=32188 uncached_IO_requeue=0
uncached_sequential_reads=0 uncached_sequential_writes=0 pid_adds=0 pid_dels=0 pid_drops=0 pid_expiry=0
tktest@ssd-server:~$ cat /proc/flashcache/sdb1+sda3/flashcache_iosize_hist 
512:2644 1024:2 1536:0 2048:0 2560:0 3072:0 3584:0 4096:39152444 4608:0 5120:0
5632:0 6144:0 6656:0 7168:0 7680:0 8192:0 8704:0 9216:0 9728:0 10240:0 10752:0
11264:0 11776:0 12288:0 12800:0 13312:0 13824:0 14336:0 14848:0 15360:0 15872:0 16384:0

Im proc-Verzeichnis sehr hilfreich sind auch die von Flashcache gemeldeten Fehler:

tktest@ssd-server:~$ cat /proc/flashcache/sdb1+sda3/flashcache_errors 
disk_read_errors=0 disk_write_errors=0 ssd_read_errors=0 ssd_write_errors=0 memory_alloc_errors=0

Einzelnachweise

Das könnte Sie auch interessieren

Flashcache
LVM Caching mit SSDs einrichten
MegaRAID CacheCade SSD Cache