Probelem mit lseek

Alles rund um die Systemverwaltung, die Administration und Konfiguration Eures Linuxsystems

Moderator: Moderatoren

Antworten
sarpedon
Newbie
Newbie
Beiträge: 17
Registriert: 14. Apr 2004, 13:14
Wohnort: Österreich / Ried im Innkreis
Kontaktdaten:

Probelem mit lseek

Beitrag von sarpedon » 13. Mai 2005, 20:30

Hallo NG

Ich schreibe gerade an ein eigenem Filesystem und habe dabei ein geschwindigkeitsproblem.

Ich öffne mit fopen das Partition device und schreibe mit write bzw. lese mit read sektorenweise ein.
Um den lesekopf zu positionieren verwende ich llseek.
Wenn ich die Festplatte nicht gemauntet habe erreiche ich bei sequentielen lesen nur 60 MB/s. Sobald ich aber die Festplatte mount erreich ich den realen Wert von 130 MB /s.

Nun meine Frage. Liegt das am lseek?
Wenn ja warum und wie kann man das umgehen?

lg
Mario Jungwirth

Werbung:
jengelh
Guru
Guru
Beiträge: 4039
Registriert: 20. Nov 2004, 17:42
Kontaktdaten:

Re: Probelem mit lseek

Beitrag von jengelh » 24. Mai 2005, 10:55

Das hier ist doch keine Newsgroup (NG) ;-)
sarpedon hat geschrieben: Ich öffne mit fopen das Partition device und schreibe mit write bzw. lese mit read sektorenweise ein.
Entweder { fopen, fread, fwrite, fseek } ODER { open, read, write, lseek }. llseek ist der kernel-interne Name.
Um den lesekopf zu positionieren verwende ich llseek.
Wenn du sequentiell was liest, brauchst du doch nicht immer lseek aufzurufen.

Wenn du ein Filesystem schreibst, solltest du im FS-Code ohnehin bread nehmen, und nicht irgendwelchen murks mit sys_open, file_open oder ähnlichem.

sarpedon
Newbie
Newbie
Beiträge: 17
Registriert: 14. Apr 2004, 13:14
Wohnort: Österreich / Ried im Innkreis
Kontaktdaten:

Lösung

Beitrag von sarpedon » 24. Mai 2005, 13:33

Falles es jemanden interessiert ich habe die Lösung für mein Problem

Also man sollte (wenn man direkt auf die Platte zugreift) mit einem RAW-Device arbeiten da hierbei dann kein caching erfolgt!

Wie jengelh richtig schreibst sollte man read, write, lseek64 verwenden. Jedoch (laut Oracel und Sybase) sollte man schon ein RAW-Device verwenden (wenn man sein eigenen caching macht).

Ich habe nun ein elevater seeking gemacht (5MB lesen dann xx MB überspringen 5MB lesen usw). Hierbei erhalte ich nun einen Tollen wert von 124 MB/s wenn Seq. von Sector 1 - last sector gelesen wird (ca. 280GB).

Auch noch zu sagen ist das ich hierbei ein RAID 0 mit 2x 146 GB 10000 SCSI Festplatten verwendet habe.

Sollte jemand einen Sourcecode bzw hilfe brauche, denn kann ich nun helfen :)

Danke nochmal an jengelh!!

lg
Mario Jungwirth

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste