MMC Modul: SD Karte mit Swap

Sklaventreiber
Innuendo
Einsteiger
Einsteiger
Beiträge: 281
Registriert: Mittwoch 8. Dezember 2004, 21:45

MMC Modul: SD Karte mit Swap

Beitrag von Innuendo »

Tach Ihrs,

ich versuche nun seit einiger Zeit erfolglos einen Swap Bereich auf einer SD Karte einzurichten. Mir ist bewußt, dass die SD Karte sehr langsam ist und die Karte nach x-tausend Schreibzugriffen kaputt geht.

ich verwende den mmc.o Treiber und richte meine SD Karte (1GB) folgendermaßen ein:

Code: Alles auswählen

sfdisk -f /dev/mmc/disc0/disc << EOF
,1024,S
,,L
EOF
das ergibt
/ # fdisk

Disk /dev/mmc/disc0/disc: 998 MB, 998768640 bytes
4 heads, 16 sectors/track, 30480 cylinders
Units = cylinders of 64 * 512 = 32768 bytes

Device Boot Start End Blocks Id System
/dev/mmc/disc0/part1 1 1024 32767+ 82 Linux swap
/dev/mmc/disc0/part2 1025 30480 942592 83 Linux
nun noch mkswap

Code: Alles auswählen

mkswap /dev/mmc/disc0/part1 32767
swapon /dev/mmc/disc0/part1 32767
damit sollte doch eigentlich der swap Bereich fertig initialisiert sein. Aber egal wieviel EPG Daten ich sammel, der Swap Bereich bleibt immer bei used auf 0
/ # free
total used free shared buffers
Mem: 30716 19104 11612 0 2088
Swap: 32756 0 32756
Total: 63472 19104 44368
in einem zweiten versuch habe ich mit dd ein swapfile auf der linuxpartition (83) erstellt und anschließend mit mkswap/swapon initialisiert. aber auch hier bleibt der wert immer auf 0.

Hat da jemand einen Tip für mich?

Innu
Mac23
Einsteiger
Einsteiger
Beiträge: 127
Registriert: Donnerstag 23. Oktober 2003, 20:50

Beitrag von Mac23 »

Ich hab das ganze auch kürzlich probiert und dasselbe festgestellt (z.B. mit top): Der SWAP-Bereich wird überhaupt nicht benutzt :-/.

Mich würde also auch interessieren, woran das liegt...
Carjay
Developer
Beiträge: 122
Registriert: Sonntag 23. April 2006, 12:37

Beitrag von Carjay »

Hab's auch mal probiert.

Ich habe gerade keinen 2.4er mehr am Start, beim 2.6er muß man Swap erst im Kernel aktivieren (und natürlich in der Busybox alles einschalten).
# free
total used free shared buffers
Mem: 29784 28824 960 0 0
Swap: 122984 5760 117224
Total: 152768 34584 118184
Dann funktioniert es zwar, aber beim Versuch, ein speicherintensives Programm zu starten bekomme ich Meldungen wie: "swap_dup: Bad swap file entry 80000020" und das Programm wird gekilled.

Also scheint es da evtl. noch weitere Probleme zu geben. Mal schauen ob's beim IDE-Interface besser klappt. 8)
JtG-Riker
Image-Team
Beiträge: 1015
Registriert: Freitag 7. Februar 2003, 18:37

Beitrag von JtG-Riker »

Carjay hat geschrieben:Hab's auch mal probiert.

Ich habe gerade keinen 2.4er mehr am Start, beim 2.6er muß man Swap erst im Kernel aktivieren (und natürlich in der Busybox alles einschalten).
# free
total used free shared buffers
Mem: 29784 28824 960 0 0
Swap: 122984 5760 117224
Total: 152768 34584 118184
Dann funktioniert es zwar, aber beim Versuch, ein speicherintensives Programm zu starten bekomme ich Meldungen wie: "swap_dup: Bad swap file entry 80000020" und das Programm wird gekilled.

Also scheint es da evtl. noch weitere Probleme zu geben. Mal schauen ob's beim IDE-Interface besser klappt. 8)
Bei IDE ist genau das gleiche Problem mit dem swap_dup ...

@Carjay, das ist wohl dein Gebiet, hoffen wir mal das man das gefixt bekommt :)

Riker
Mac23
Einsteiger
Einsteiger
Beiträge: 127
Registriert: Donnerstag 23. Oktober 2003, 20:50

Beitrag von Mac23 »

Carjay hat geschrieben:beim 2.6er muß man Swap erst im Kernel aktivieren
Mhh, wie heisst denn die Option? Beim 2.4er konnte ich nichts in der .config finden (habe nach SWAP gesucht - vielleicht heisst es ja aber auch ganz anders?!).
Carjay
Developer
Beiträge: 122
Registriert: Sonntag 23. April 2006, 12:37

Beitrag von Carjay »

CONFIG_SWAP, die gibt es aber soweit ich weiß erst seit dem 2.6er.

Warum swap_duplicate() allerdings fehlschlägt... ist wohl ein wenig Kernel debuggen angesagt.
Houdini
Developer
Beiträge: 2183
Registriert: Mittwoch 10. Dezember 2003, 07:59

Beitrag von Houdini »

Innuendo
Einsteiger
Einsteiger
Beiträge: 281
Registriert: Mittwoch 8. Dezember 2004, 21:45

Beitrag von Innuendo »

@Houdini

danke für die links - ich hoffe ein kernel freak nimmt sich dem an.
ich habe mal testweise die kleine änderung in der pgtable.h eingebaut
/ # fdisk

Disk /dev/mmc/disc0/disc: 998 MB, 998768640 bytes
4 heads, 16 sectors/track, 30480 cylinders
Units = cylinders of 64 * 512 = 32768 bytes

Device Boot Start End Blocks Id System
/dev/mmc/disc0/part1 1 8192 262143+ 82 Linux swap
/dev/mmc/disc0/part2 8193 30480 713216 83 Linux
swapon /dev/mmc/disc0/part1
Adding Swap: 262132k swap-space (priority -2)

vor dem kopieren ins tmp:
/ # free
total used free shared buffers
Mem: 30572 27712 2860 0 3160
Swap: 262132 0 262132
Total: 292704 27712 264992
nach dem kopieren von knapp 14MB ins tmp:
/ # free
total used free shared buffers
Mem: 30572 29904 668 0 120
Swap: 262132 1028 261104
Total: 292704 30932 261772
also es swappt schonmal, aber nach einer gewissen zeit kam im log
swap_dup: Bad swap file entry 00003ae0
VM: killing process neutrino
swap_dup: Bad swap file entry 00003d60
VM: killing process neutrino
Innu
Houdini
Developer
Beiträge: 2183
Registriert: Mittwoch 10. Dezember 2003, 07:59

Beitrag von Houdini »

Folgendes stammt aus Denx Kernels pgtable.h, selbe Stelle:
Vieleicht auch mal einen Versuch wert

Code: Alles auswählen

/*
 * Encode and decode a swap entry.
 * Note that the bits we use in a PTE for representing a swap entry
 * must not include the _PAGE_PRESENT bit, or the _PAGE_HASHPTE bit
 * (if used).  -- paulus
 */
/* XXX may be need for  all platforms, but bug report only for e500 */
#ifdef CONFIG_E500
#define SWP_TYPE(entry)                 ((entry).val & 0x3f)
#define SWP_OFFSET(entry)               ((entry).val >> 6)
#define SWP_ENTRY(type, offset)         ((swp_entry_t) { (type) | ((offset) << 6) })
#define pte_to_swp_entry(pte)           ((swp_entry_t) { pte_val(pte) >> 2 })
#define swp_entry_to_pte(x)             ((pte_t) { (x).val << 2 })
#else
#define SWP_TYPE(entry)			(((entry).val >> 1) & 0x3f)
#define SWP_OFFSET(entry)		((entry).val >> 8)
#define SWP_ENTRY(type, offset)		((swp_entry_t) { ((type) << 1) | ((offset) << 8) })
#define pte_to_swp_entry(pte)		((swp_entry_t) { pte_val(pte) & ~0x81 })
#define swp_entry_to_pte(x)		((pte_t) { (x).val })
#endif
/* CONFIG_APUS */
Innuendo
Einsteiger
Einsteiger
Beiträge: 281
Registriert: Mittwoch 8. Dezember 2004, 21:45

Beitrag von Innuendo »

habe nach try'n'error nun verschiedene versionen ausporbiert, bin damit aber nicht weiter gekommen.
swap_dup: Bad swap file entry 00002ac0
swap_free: Bad swap file entry 00002b40
es schreibt zwar jetzt in den swap bereich, kann aber weitere files scheinbar nicht korrekt hinzufügen bzw löschen.

Das Ausprobieren hilft leider doch nciht - hier müßte dann doch mal jemand nicht "Verstand" dran.
Vlt hat carjay ja dazu mal Zeit & Nerv

Innu