Práticas recomendadas para manter o perfil do Firefox no ramdisk

0

Com bastante memória RAM, gostaria de usá-la para acelerar o navegador.

Objetivos:

  1. Tenha perfil e cache completamente na memória, portanto, o HDD não é muito usado durante a navegação e fsync s não alcança o HDD ou os sistemas de arquivos reais.
  2. Em segundo plano, continue atualizando a cópia do HDD do perfil, para que, em caso de interrupção súbita, não sejam perdidos mais de X minutos de navegação;
  3. Mantenha os backups consistentes (sem bancos de dados sqlite quebrados, etc.)

Ou seja. Troque alguma memória livre e alguma novidade da sessão de navegação em caso de falha por velocidade.

Como organizar esse esquema?

Minha ideia atual é assim:

  1. Use o zram para criar um ramdisk; modprobe zram ;
  2. Criar volume LVM em losetup /dev/zram0 /dev/loop1; pvcreate /dev/loop1; ...; mke2fs -t ext4 -O ^has_journal /dev/mapper/ffvg-ffvol ;
  3. Coloque o perfil do Firefox neste volume;
  4. Periodicamente (cada N minutos) crie um instantâneo do LVM e faça um backup dele no HDD e, em seguida, remova o instantâneo.

Isso (especialmente parte do LVM) parece um pouco pesado para a tarefa. Existem formas melhores / mais estabelecidas / mais simples para isso?

    
por Vi. 31.12.2013 / 03:46

1 resposta

0

Configurou um volume para o Firefox de acordo com a ideia em questão.

  • Na inicialização, dois dispositivos zram são criados. O conteúdo de um volume de HDD é copiado para o primeiro. O segundo é usado como dispositivo copy-on-write para instantâneos;
  • O diretório do perfil do Firefox é vinculado por links simbólicos ao volume mantido em zram0.
  • Periodicamente, um script (abaixo) cria um instantâneo do dispositivo na memória (usando zram1 como copy-on-write), captura instantânea do volume do HDD e copia o instantâneo da memória para o volume do HDD.

Cada atualização leva cerca de 10 segundos (no caso de um pequeno número de alterações); a atualização completa é de 40 segundos.

Atualizar script:

#!/bin/bash

set -e

SOURCE_DEVICE=/dev/zram0
COW_DEVICE=/dev/zram1
SOURCE_SNAPSHOT_NAME=ffsnap

DESTINATION_VG=cryptie3
DESTINATION_VOL=ff

HASH_FILE=/tmp/ff.md5


MS=$(blockdev --getsize "$SOURCE_DEVICE")
WS=$(blockdev --getsize "$COW_DEVICE")
MN=$(printf '%d:%d' 'stat -c '0x%t 0x%T' "$SOURCE_DEVICE"')
WN=$(printf '%d:%d' 'stat -c '0x%t 0x%T' "$COW_DEVICE"')

dmsetup create $SOURCE_SNAPSHOT_NAME --table "0 $MS snapshot $MN $WN N 8"
trap "dmsetup remove --force --retry $SOURCE_SNAPSHOT_NAME" EXIT

T=$(date "+%s")

lvcreate $DESTINATION_VG/$DESTINATION_VOL --snapshot --name ${DESTINATION_VOL}_$T -L 100M

# You can just use "cat /dev/mapper/$SOURCE_SNAPSHOT_NAME > /dev/mapper/$DESTINATION_VG-$DESTINATION_VOL" here if you don't want to use hashed_update

if [ -e "$HASH_FILE" ]; then
    /usr/local/bin/hashed_update /dev/mapper/$SOURCE_SNAPSHOT_NAME            "$HASH_FILE"  \
                                 /dev/mapper/$DESTINATION_VG-$DESTINATION_VOL "${HASH_FILE}".new 65536
    mv "${HASH_FILE}".new "$HASH_FILE"
else
    /usr/local/bin/hashed_update /dev/mapper/$SOURCE_SNAPSHOT_NAME NULL   \
                                 /dev/mapper/$DESTINATION_VG-$DESTINATION_VOL "$HASH_FILE" 65536
fi

lvremove --force ${DESTINATION_VG}/${DESTINATION_VOL}_$T

hashed_update está aqui: link

Alguma atualização: 1. Não se esqueça de montar SOURCE_DEVICE embora snapshot-origin , não diretamente; 2. Agora eu uso o gerenciamento manual de snapshots de destino com a zona CoW persistente usando dmsetup em vez de lvcreate / lvremove repetidos.

Ainda estou procurando ideias sobre como melhorá-lo ou para soluções estabelecidas que não consegui encontrar.

    
por 02.01.2014 / 13:28