Transferência de cartão SD muito lenta

5

Copiei algumas coisas do MySQL-DB para o meu cartão SD da Classe 6. Precisava de 45 min. para a transferência. Mesma máquina com o XP faz em poucos minutos, com o Win7 em outra transferência de máquina também está bem. Verificou todos os fóruns e fontes, mas não encontrou nada realmente relacionado.

    
por Axel Larator 03.07.2012 / 10:16

1 resposta

3

Às vezes, o agendador de IO padrão trata mal essas unidades flash. Uma solução que descobri ser útil é alternar o ioscheduler para deadline ou noop apenas para esse dispositivo. Então, por exemplo,

$ lsscsi 
[0:0:0:0]    disk    ATA      TOSHIBA THNS128G AGLA  /dev/sda
[1:0:0:0]    cd/dvd  HL-DT-ST DVDRAM GT30N     LT09  /dev/sr0
[7:0:0:0]    disk             Patriot Memory   PMAP  /dev/sdb
sudo tee /sys/block/sdb/queue/scheduler << EOF
deadline
EOF
$ cat /sys/block/sdb/queue/scheduler
noop [deadline] cfq 

e agora tente sua transferência de dados novamente, você deve fazer isso antes de carregar o dispositivo.

Se isso funcionar para você, uma regra do udev pode ser criada para definir isso automaticamente para todos os dispositivos usb hotplug. Aqui está um que eu escrevi há muito tempo, que é um pouco idiota, eu acredito que ele só procura dispositivos usb hotplug, não MMC, então você teria que examinar a saída do udev para determinar em qual classe sua mídia está e ajustar de acordo. >

PROSSIGA POR SUA PRÓPRIA CONTA E RISCO, SE ESTE NÃO TRABALHAR PARA VOCÊ, SUA ATUALIZAÇÃO

sudo tee /lib/udev/rules.d/100-usb-scheduler.rules << EOF
# custom udev rule: 28.10.11

# adjust io scheduler for usb block devices: queue/scheduler
# scheme based on "persistent storage rules"

# forward scsi device event to corresponding block device
ACTION=="change", SUBSYSTEM=="scsi", ENV{DEVTYPE}=="scsi_device", TEST=="block", ATTR{block/*/uevent}="change"

ACTION!="add|change", GOTO="persistent_storage_end"
SUBSYSTEM!="block", GOTO="persistent_storage_end"

# skip rules for inappropriate block devices
KERNEL=="fd*|mtd*|nbd*|gnbd*|btibm*|dm-*|md*", GOTO="persistent_storage_end"

# ignore partitions that span the entire disk
TEST=="whole_disk", GOTO="persistent_storage_end"

# for partitions import parent information
ENV{DEVTYPE}=="partition", IMPORT{parent}="ID_*"

# USB storage devices suffer from performance issues unless they use deadline io scehduler
KERNEL=="sd*[!0-9]|sr*", ENV{ID_SERIAL}!="?*", SUBSYSTEMS=="usb", \
        RUN="/bin/sh -c 'echo deadline > /sys/$env{DEVPATH}/queue/scheduler'"

LABEL="persistent_storage_end"
EOF
$ sudo chmod +x /lib/udev/rules.d/100-usb-scheduler.rules
    
por ppetraki 02.10.2012 / 15:51