Sei que os números exatos de referência variam entre os fabricantes, mas, em geral, se você considerar apenas unidades flash de ponta, cartões SD e HDDs USB e o seu Raspberry Pi estiver conectado a uma rede por meio de um comutador Ethernet, qual é a configuração mais rápida de uma rede ponto de vista de transferência de dados? Só estou procurando respostas nas quais as pessoas realmente tentaram as configurações listadas abaixo e têm resultados reais, não teoria.
Obviamente, um cartão SD deve ser usado porque é necessário para pelo menos parte do ciclo de inicialização, mas vamos supor que você tenha uma partição de dados adicional em cada um dos dispositivos listados abaixo, com as maiores velocidades de transferência de rede no Raspberry Pi?
- O cartão SD
- Uma unidade flash USB
- Um disco rígido USB
Essa pergunta não é trivial porque, em algum momento, a sobrecarga de processamento associada a um dos dispositivos de armazenamento acoplados à comunicação Ethernet pode afetar a taxa de transferência, também a porta Ethernet no Raspberry Pi é controlada pelo barramento USB, portanto, em geral, a taxa de transferência deve ser afetada por a coordenação da transferência de dados Ethernet e transferência de dados de mídia USB. Não sei se o cartão SD está no mesmo barramento USB compartilhado que as portas USB e a porta Ethernet, mas se não estiver, suponho que seria um benefício bastante grande em termos de desempenho.
Editado para incluir transferência de rede como requisito para benchmark
sudo hdparm -t /dev/sdx
como uma ferramenta útil para o benchmarking.Respostas:
No benchmarking, você deve sempre estabelecer quais são seus limites. Porque se você espera obter 100mbs dessa LAN, está enganando a si próprio!
Veja este design de bloco do RaspberryPI Model-B
Então, estabelecemos um fato muito importante aqui. A Ethernet é estrangulada pelo controlador USB, porque no digram de bloco que estabelecemos está conectada ao hub USB. (Nenhuma indicação clara é de que ele usa outro barramento ou simplesmente USB2?)
Ohh, olhe - outro diagrama de blocos,
Agora isso lança ainda mais luz sobre a situação. O controlador 10/100 está conectado ao hub USB - infelizmente, novamente, em nenhum lugar da especificação ele diz com que rapidez o hub se comunica com o controlador lan - espere pelo fato principal de que a velocidade e o lan USB são negociados para ambientes USB de velocidade mista.
Onde está o cartão SD?
Acontece que o cartão SD está diretamente conectado ao BCM2835 (página 65) e eles detalham como o desempenho é afetado por vários níveis de configuração. Uma coisa importante a ser observada é que, se o cartão SD tiver um Clock dedicado, ele poderá ser executado independentemente da CPU / GPU principal em velocidade máxima (de qualquer cartão e padrão usado - você poderá ver alguns padrões).
Então, o que isso significa?
Isso significa que, se você comparar o cartão SD mais rápido e o pen drive de baixa qualidade (4gb / 8gb), provavelmente obterá grandes diferenças de desempenho. Agora, isso levanta a questão: como a CPU / GPU lida com a comunicação com esse maravilhoso dispositivo embutido (chip usb / lan) e em que velocidade ele é capaz de se comunicar.
Você vê o quão longe a teoria pode realmente chegar antes de fazermos algum benchmarking? Outro ponto-chave aqui é - Como a CPU controla o fluxo de dados. Ele usa o canal do relógio separado, conforme recomendado?
Em um mundo ideal, você pensaria que essa LAN / USB lidaria com isso. Mas isso requer um MCU .. vemos um MCY em qualquer lugar desse diagrama de blocos? NÃO!
Portanto, a CPU precisa solicitar IO DATA para enviar a porta USB e depois a porta LAN (via Same HUB USB) Sim .. para que isso cause alguns problemas de velocidade em algum lugar.
Também é bom notar o que acontece quando você copia para um pen drive USB e do cartão SD, tudo via LAN .. isso causa algum tráfego.
Precisamos comparar vários aspectos
Ao estabelecer o que estamos tentando avaliar, podemos fazer uma pergunta do mundo real.
Agora que você sabe pelo que está lutando, eu desafio você a responder a si mesmo.
Você pode achar esse um excelente ponto de partida.
Referências
Mas principalmente,
meus próprios conhecimentos técnicos e avaliações que fiz com base em minha própria experiência incorporada. O OP fez uma pergunta muito boa, mas falta entender que, sem a compreensão teórica de um sistema, você está condenado a tentar avaliar / resolver os problemas práticos.
Resultados
(4) Esta resposta mostra alguns testes piráticos realistas. E prova que realizar transações de dados intensas influencia diretamente a CPU (apenas não tenho certeza se é o cartão SD ou o processo de transferência de dados dentro do chip BCM para o chip USB / LAN)
(6) Foi provado que o único gargalo da garrafa será a fonte (por exemplo, um cartão SD lento). O hub USB consegue bombear dados a 90% +, mas as respostas às perguntas 4 e 5 podem influenciar diretamente esse desempenho.
Ao fazer algumas pesquisas e contribuições de outros usuários , estamos começando a estabelecer e obter resultados preliminares.
Aqui está um bom gráfico para ajudar a visualizar com o que estamos lidando.
fonte
Obviamente, o desempenho mais alto seria com um ramdisk.
Isso não será muito útil para um dispositivo de armazenamento conectado à rede, mas o pi não é necessariamente a melhor opção para esse aplicativo fixo.
Para algumas coisas em que a flexibilidade do pi é adequada de maneira única, os requisitos reais de armazenamento podem ser pequenos o suficiente para serem executados explicitamente a partir de um ramdisk, ou talvez implicitamente a partir do ram através do mecanismo de cache de disco (os ramdisks linux são apenas caches de disco sem um disco de backup).
Você ainda precisaria de um cartão para inicializar, mas como um benefício adicional da execução do ram, você poderia manter o cartão somente leitura e minimizar o risco de corrompê-lo.
fonte
O HDD USB ou o SSD USB devem oferecer o desempenho mais rápido. Os cartões SD gravam cerca de 12 MB / s para dispositivos da classe 10 e o USB pode chegar a 30 MB / s.
Não concordo que o hub USB esteja estrangulando a Ethernet no RPi, porque o HUB pode sustentar 400 Mbit / se a Ethernet é 100. Portanto, teoricamente, ele pode suportar até 4 portas Fast Ethernet de 100Mb / s.
fonte
Recebo no máximo 4 Mb / s usando uma unidade flash USB e o mesmo para USD HDD. Isso enquanto simplesmente solta os arquivos através do 'grupo doméstico' da rede do Windows no dispositivo conectado ao Raspberry.
Eu esperava pelo menos dez vezes isso, mas não consegui acelerar a transferência. Tentei transferir FTP diretamente para um HDD USB (este dispositivo é transferido a + 60Mb / s quando conectado ao meu laptop), mas os resultados são muito baixos. 100KiB / s! Resultando em horas de tráfego para apenas alguns 100 MBs.
Agora passo o HDD entre o laptop e o Raspberry Pi para transferência de dados :-(
fonte
vsftpd
.