Piszę małą aplikację, która zapisuje obrazy JPEG w stałej cenie na karcie SD. Wybieram system plików EXT3, ale to samo zachowanie zaobserwowano w systemie plików EXT2.Wydajność zapisu na karcie SD
Moje pisanie pętli wygląda następująco:
get_image()
fwrite()
fsync()
Albo tak:
get_image()
fopen()
fwrite()
fsync()
fclose()
ja również wyświetlić niektóre statystyki czasowe, i widzę, mój program jest jakiś zablokowany przez kilka sekund. Średnia stawka jest nadal dobra, ponieważ jeśli zatrzymam przychodzące obrazy do kwadratu, to napiszę wiele obrazów w krótkim czasie po takim przeciągnięciu. Czy wiesz, czy jest to problem z systemem operacyjnym, czy jest związany z samą kartą SD? Jak mogę zbliżyć się do czasu rzeczywistego? Nie potrzebuję silnego czasu rzeczywistego, ale utknięcie w miejscu na kilka sekund jest nie do przyjęcia.
Pewna precyzja: Tak, konieczne jest fsync po każdym pliku, ponieważ chcę, aby obraz był na dysku, a nie w jakimś buforze użytkownika lub jądra. Bez fsyncing, mam znacznie lepszą wydajność, , ale nadal niedopuszczalne przeciągnięcie. Nie sądzę, że jest to problem z buforowaniem, ponieważ pierwszy błąd ma miejsce po zapisaniu 50 MB. I zgodnie ze stroną man, fsync jest właśnie tutaj, aby upewnić się, że nie ma buforowanych danych.
Precyzja dotycząca średniej szybkości zapisu: Piszę w tempie, które jest zrównoważone przez kartę, z której korzystam. Jeśli ułożę obraz przychodzący oczekując na ukończenie fsync, to po tej przerwie szybkość transferu zapisu wzrośnie, a ja szybko powrócę do średniej stawki. Średnia szybkość transferu wynosi około 1,4 MB/s.
systeme to nowoczesny laptop z systemem Ubuntu 8.04 z Kee stanie (2.6.24.19)
pleaes pamiętać jffs i tym podobne nie są dobrym pomysłem dla niektórych urządzeń flash, takich jak CompactFlash, co robić swoje wypoziomowanie zużycie. – Hasturkun
Czy to zły pomysł, czy też niwelowanie zużycia CompactFlash po prostu neguje zalety JFFS? To szczere pytanie, nie mam pojęcia. Zgadzam się, że jest to zdecydowanie lepszy wybór dla "surowych" urządzeń flash. –