Kirjoittaja Aihe: USB-portin/muistitikun nopeus  (Luettu 4367 kertaa)

petteriIII

  • Käyttäjä
  • Viestejä: 693
    • Profiili
USB-portin/muistitikun nopeus
« : 27.08.15 - klo:07.52 »
USB-portin/muistitikun nopeus on epämääräinen asia vaikka sille on helppo antaa tarkka arvo joka saattaa olla suurinpiirtein oikeakin mutta kertoo vain mittauskoneen senhetkisen tilanteen. Lisäksi pitää ottaa huomioon että vaikka portti/muistitikku on teoriassa USB2 tai USB3 niin esimerkiksi USB2.1:stä puhutaan USB2:tena vaikka esimerkiksi tiedonsiirtonopeus voi olla yli kaksinkertainen.

Tämä skripti mittaa sen USB-muistin/muistitikun  nopeuden mikä on viimeiseksi laitettu mihintahansa USB-porttiin; siis voi verrata mikä tikun nopeus on eri porteissa olivatpa ne tyypiltään USB1.1, USB2 tai USB3. Tai mikä on eri tikkujen nopeus samassa portissa. Tai mikä on tiedostojärjestelmän vaikutus nopeuteen. Tulokset saavat tosiaan miettimään.

Skripti suorittaa mittauksensa mitattavan suurimmalta osoiolta, joten EFI- ja swap-osioita ei mitata vaikka mitattavalta sellaiset löytyisivätkin. Mitattavan tiedostojärjestelmän tyypin voi määrätä alustamalla tikun siihen muotoon.

Kirjoitusnopeus mitataan tulostamalla muistitikulle tiedosto. Usein kirjoitusnopeus mitataan kopioimalla, mutta silloin saadaan kopiointinopeus mikä on noin 5-10% pienempi kuin kirjoitusnopeus. Kuinkahan moni kaupallinen ohjelma mittaa kopiointinopeuden?
Lukunopeus mitataan tulostamalla tiedosto maton alle elikä tyhjyyteen.

Luotettavimman tuntuiset arvot saadaan kun tiedosto on iso, esimerkiksi 1.1GB. Perättäisissä mittauksissa saadaan hieman erilaisia tuloksia - mutta normaalistikin tiedonsiirto vaihtelee yhtäpaljon.

Linux:issa kaikki levytoiminta kulkee varsinkin kirjoitettaessa cache:jen ja buffereiden kautta ja niistä tulee huolehtia etteivät ne pääsisi sotkemaan mittaustuloksia:  sillä kirjoitus suuntautuu normaalistikin aina buffereihin ja käyttöjärjestelmä tyhjentää buffereitansa levylle omaan tahtiinsa - joskus parin minuutinkin kuluttua buffereissa on vielä jotakin mikäli niitä ei erikseen käsketä tyhjentymään.

- kun mitataan siirtonopeuksia kopioimalla käsin niin on helpointa käyttää nautilusta joka osaa hoitaa nuo cachet ja bufferit mutta ei osaa tulostaa itse vaan surittaa mittauksensa kopioimalla. Ja cp tai jonkin sellaisen käskyn kanssa on sama vaje sen lisäksi että joutuu itse huolehtimaan cacheista, buffereista, luku- ja kirjoitusoikeuksista, kopioitavan olemassaolosta ...

- mittaus sopii myös sata-levyille kunhan muuttaa lauseessa 2: usb:n ata:ksi . Mutta sata-levyjen hot-swap ominaisuus riippuu BIOS:sista jossa saattaa joutua laittamaan AHCI:n päälle tai määräämään sata hot-swap:pableksi tai ...

- vaikka päivitänkin uuden koodin vanhalle paikalle niin ketjun jokainen viesti on tarkkaan luettu ja otettu opiksi.
Koodia: [Valitse]
#!/bin/bash
ViimeiseksiLiitettyLevy=$(sudo ls -l /dev/disk/by-id | sort -r --key=8 | grep usb | grep -om 1 sd.$)
SenSuurinOsio=$(lsblk -m | grep -v ^sd | grep $ViimeiseksiLiitettyLevy | sort -r --key=2 | head -1 | awk '{print $1}' | grep -o sd.*) # nimenomaan välttää EFI-osiota
echo 'viimeiseksi järjestelmään liitetyn USB-muistin laitenimi: '$ViimeiseksiLiitettyLevy'  ja sen suurin osio: '$SenSuurinOsio'     tiedostotyyppi: '$(sudo blkid -o value -s TYPE /dev/$SenSuurinOsio)
echo 'sen todellinen nimi:'$(ls -l /dev/disk/by-id | grep $ViimeiseksiLiitettyLevy$ | awk '{print $9}')
echo 'sen laiteportti on tyyppiä: '$(sudo lsusb -v | grep -A 5 $(dmesg | grep Manufacturer: | awk 'END{print $5}') | awk '/bcdUSB/{print $2}')
sudo mount -t auto /dev/$SenSuurinOsio /mnt
sudo chown $USER:$USER /mnt # eipä lupia kannata kysellä kun useimmat eivät välitä koko käyttö-oikeus asiasta 
echo ' ' > /mnt/koetiedosto ; chmod u+rw /mnt/koetiedosto
echo;echo 'mennään mittaamaan nopeuksia ja se saattaa kestää minuutinkin';echo

sync # jos buffereissa on vielä jotakin muiden tehtävien hommia pakotetaan ne ensin pois mittausta sotkemasta
Alkuhetki=$(date +%s.%N)
seq -s vapaavalintainenteksti 1 5000000 > /mnt/koetiedosto
sync # tämä kirjoittaa levylle cachesta kaiken joka on uudempaa kuin levyllä jo oleva.
sudo sh -c "$(which echo) 3 > /proc/sys/vm/drop_caches" # tämä tyhjentää bufferit. tuloksen voi tarkistaa käskyllä: free -m .
# drop-caches:ille ei voi palauttaa arvoa 0, mutta silti niitä buffereita täytetään heti uudestaan kuten voit tarkistaa lukemalla levyltä jotakin ja tulostamalla: free -m.
Loppuhetki=$(date +%s.%N)
tiedostonkoko=$(echo $(stat -c%s /mnt/koetiedosto)*8/1000000 | bc -l); echo 'tiedostonkoko megabittiä: '$tiedostonkoko
aikasekunteina=$(echo $Loppuhetki-$Alkuhetki | bc -l); echo 'Aika sekunteina: '$aikasekunteina
tiedonsiirronnopeus=$(echo $tiedostonkoko'/'$aikasekunteina | bc -l)
echo 'kirjoitusnopeus megabittiä sekunnissa (tuolle muistitikulle siinä portissa kun se on) = '$tiedonsiirronnopeus

echo
sync
sudo sh -c "$(which echo) 3 > /proc/sys/vm/drop_caches"
Alkuhetki=$(date +%s.%N)
cat /mnt/koetiedosto > /dev/null
sync
Loppuhetki=$(date +%s.%N)
tiedostonkoko=$(echo $(stat -c%s /mnt/koetiedosto)*8/1000000 | bc -l); echo 'tiedostonkoko megabittiä: '$tiedostonkoko
aikasekunteina=$(echo $Loppuhetki-$Alkuhetki | bc -l); echo 'Aika sekunteina: '$aikasekunteina
tiedonsiirronnopeus=$(echo $tiedostonkoko'/'$aikasekunteina | bc -l)
echo 'lukunopeus megabittiä sekunnissa (tuolta muistitikulta siinä portissa kun se on) = '$tiedonsiirronnopeus

rm /mnt/koetiedosto
sudo umount /mnt
« Viimeksi muokattu: 05.09.15 - klo:18.04 kirjoittanut petteriIII »

Tomin

  • Palvelimen ylläpitäjä
  • Käyttäjä / moderaattori+
  • Viestejä: 11486
    • Profiili
    • Tomin kotisivut
Vs: USB-portin/muistitikun nopeus
« Vastaus #1 : 27.08.15 - klo:11.55 »
USB2.1:stä puhutaan USB2:tena
Toi onkin jännä juttu:
http://online.osr.com/showthread.cfm?link=249588
Lainaus
There is no specification called USB 2.1, however there is such a thing as a USB 2.1 device. The USB 2.0 ECN for LPM introduced a new descriptor request to the enumeration process for USB 2 devices (the BOS descriptor set). The problem is that software can't request a new descriptor type to old devices that don't understand it without introducing compatibility issues with some devices (more than you would probably expect). So, software needed a way to identify whether a device could support the host requesting a BOS descriptor set. The solution in this ECN was to require devices supporting the ECN to set their bcdUSB to 0x0201 (2.01). Now, when we created the USB 3.0 spec, we again wanted to leverage the BOS descriptor, not only because we wanted to mandate USB 2 LPM in 3.0 devices when operating at high-speed, but also so the device can indicate to a host that it can operate at SuperSpeed (to support everyone's favorite "your device can perform faster" popup). Knowing that when operating at high-speed these devices needed to report the BOS descriptor set, we knew that it couldn't set the bcdUSB to 0x0200. We mistakenly wrote it down as 0x0210 instead of 0x0201 in the 3.0 spec (perhaps we just said "two point one" which might have been ambiguous) when we were trying to just be consistent with the requirement from the LPM ECN. So, rather than changing it back to 0x0201 in the USB 3.0 spec, we just ran with it.

Eli toi 2.1 oli oikeastaan vahinko ja 2.01 on tapa erottaa ohjelmallisesti laite, joka osaa antaa tuon BOS deskriptorin (olisko kellään hyvää suomennosta sanalle descriptor tässä yhteydessä?).

Lainaus
So, there are USB 2.0 devices, USB 2.01 devices and USB 2.1 devices, even though the latest revision of the USB 2 spec is USB 2.0. I have recommended that the USB-IF actually create a USB 2.1 specification that captures all of the various errata, ECNs, etc from over the years, but it hasn't happened yet.

Muokkaus: Korjattu rikkinäinen quote-tagi.
« Viimeksi muokattu: 28.08.15 - klo:09.39 kirjoittanut Tomin »
Automaattinen allekirjoitus:
Lisäisitkö [RATKAISTU] ketjun ensimmäisen viestin aiheeseen ongelman ratkettua, kiitos.

krautis

  • Käyttäjä
  • Viestejä: 185
  • Mikä lentäen tulee...
    • Profiili
Vs: USB-portin/muistitikun nopeus
« Vastaus #2 : 27.08.15 - klo:13.14 »
Lainaus
(olisko kellään hyvää suomennosta sanalle descriptor tässä yhteydessä?)
Deskriptori.
(computing) The name of a category of data in an information storage and retrieval system.

juyli

  • Vieras
Vs: USB-portin/muistitikun nopeus
« Vastaus #3 : 27.08.15 - klo:22.56 »
Lainaus
(olisko kellään hyvää suomennosta sanalle descriptor tässä yhteydessä?)
Deskriptori.
Ei kai tuota voi pitää minään käännöksenä >:-I . Ehkä väännökseksi tuota voisi kutsua.
 descriptor = kuvaus
http://kaannos.com/sanastot/haku/englanti-suomi/descriptor