Van egy merevlemezem, amelyen X offszetnél van egy Y méretű fájlrendszer. (ext4, de most a hangsúly nem ezen lesz)
a.) Csinálok egy partíciót X offszetnél, Y mérettel. Nevezzük csak /dev/sda1-nek.
b.) Csinálok egy loop device-t ugyanezen X offszetnél, Y mérettel. (losetup --offset X --size-limit Y ...) Nevezzük csak /dev/loop0-nak.
Ha a /dev/sda1-et csatolom fel, akkor ~110 MByte/sec sebességgel tudok nagy fájlokat írni a fájlrendszerre. Ha ugyanezt a fájlrendszert /dev/loop0-ként csatolom fel, akkor ~35 MByte/sec sebességgel tudom írni.
Értem én, hogy nagy a loop device overhead-je, na de ennyire? ... és, lehet-e valamit javítani a helyzeten?
Ha a /dev/sda1-et csatolom fel, akkor írás esetén folyamatosan ég a HDD LED, ha a /dev/loop0-t csatolom fel, akkor szakaszosan ég a HDD LED. Nyilván először teleír valami buffer cache-t, aztán meg flush-ol, na, de le lehet-e erről beszélni?
Ez most egy homokozó környezet, az éles rendszeren rá vagyok kényszerítve a loop device használatára, nem tudok partíciót létrehozni.
UPDATE: a megoldás loop device helyett a device mapper használata "linear" módban. Kösz, Árpi!
- 4431 megtekintés
Hozzászólások
Szerintem ez normális.
http://www.silug.org/lists/silug-discuss/200502/msg00061.html
"Remember that the system is processing the data twice in the loopback." Ez ugye alapból felezi a sebességet, a többi veszteség meg az extra processzorhasználatból keletkezhet.
Nézd meg, hogy mi lehet a szűk keresztmetszet, pl. figyeld a load-ot, memóriahasználatot és az iostat kimenetét másolás közben.
- A hozzászóláshoz be kell jelentkezni
> "Remember that the system is processing the data twice in the loopback."
> Ez ugye alapból felezi a sebességet, a többi veszteség meg az extra processzorhasználatból keletkezhet.
Felezi, de mit? A rendszerem képes GByte/sec sebességgel adatot mozgatni. A szűk keresztmetszet a merevlemez, ami kb. 110 MByte/sec-et tud. A loop device nem merevlemez-szinten működik, tehát attól, hogy loop device-on keresztül mozgatom az adatot, attól még a merevlemeznek nem kell kétszer annyi adatot mozgatnia. A rendszernek kell, na de annak röhögve ki kellene bírnia.
Másrészt, látom is a HDD LED-en, hogy kb. 50%-ban a diszk "unatkozik", tehát szakaszosan jut csak el hozzá a kiírandó adat.
A processzorhasználat gyakorlatilag nulla. Amikor az idő kb. felében ténylegesen ír a diszk, akkor van iowait, de az teljesen normális is.
- A hozzászóláshoz be kell jelentkezni
Az egyik lehetséges problémaforrás, ha az I/O kéréseket nem olyan méretben küldi a rendszer az egyik vagy a másik esetben (pl. az adott réteg kötelezően lebontja a kéréseket egy adott méret alá, vagy nem engedi összeszedni a kéréseket, mert egyedileg kezeli őket, esetleg nincs megfelelő read-ahead támogatás).
A másik probléma lehet, ha valamiért jelentősen megnöveli a latency-t egy rosszul megtervezett architektúrával, mivel az egy szálon dolgozó programok (a legtöbb program bizony ilyen) sávszélességének felső korlátja a max. kérésméret * a latency.
- A hozzászóláshoz be kell jelentkezni
Igen, kb erről van szó, a loop leszűkíti a párhuzamos kérések számát egy konstans maximumra, amitől a mögötte lévő IO scheduler nem tud rendesen optimalizálni.
Ha egy app a szekvenciális olvasást maximum PAGE_SIZE request mérettel bonyolítja, ez igen fájdalmas lesz (a request merge csak a loop device után jön). Ez nem ritka.
AFAIK
- A hozzászóláshoz be kell jelentkezni
felejtsd el a loop-ot! mi is szoptunk vele, tobb parhuzamos iras/olvasasnal ultragaz de amugy se kapkodos.
anno utanaolvasgattam es azt irtak, hogy az a baj, hogy az osszes cache, szinkron iras, stb elveszik.
az ajanlott, tamogatott megoldas erre a device mapper, azzal is lehet offsetelni szepen, es az korrektul mukodik.
OFFSET=16384
X=$(blockdev --getsize $1)
let X=X-$OFFSET
echo 0 $X linear $1 $OFFSET | dmsetup create "$3"
- A hozzászóláshoz be kell jelentkezni
Kösz! Ez júzful, kipróbálom!
- A hozzászóláshoz be kell jelentkezni
Kösz Árpi, ez nyert!
- A hozzászóláshoz be kell jelentkezni
Ha a /dev/sda1-et csatolom fel, akkor ~110 MByte/sec sebességgel tudok nagy fájlokat írni a fájlrendszerre. Ha ugyanezt a fájlrendszert /dev/loop0-ként csatolom fel, akkor ~35 MByte/sec sebességgel tudom írni.
110/pi = 35 !!!
- A hozzászóláshoz be kell jelentkezni
Tehat akkor oda lehet irni a loop-device manualjaba, hogy kozelitoleg Pi-szeres lassulast okoz. Szerintem kuldj be rola buugreportot a doksi karbantartojanak
- A hozzászóláshoz be kell jelentkezni
Kíváncsi vagyok, miért nem lehet partíciót létrehoznod.
- A hozzászóláshoz be kell jelentkezni
mount-nak emlékeim szerint lehet közvetlenül offset paramétert adni. Ez is loop interfészen csinálja? Ez is annyit lassít?
mount -t ext4 /dev/sda /mnt -o offset=65536
- A hozzászóláshoz be kell jelentkezni
Ugyanazt a loop device-t használja.
- A hozzászóláshoz be kell jelentkezni