Article View: pl.comp.programming
Article #217351Re: Przenośny, uproszczony filesystem
From: M.M.
Date: Mon, 08 Feb 2021 17:35
Date: Mon, 08 Feb 2021 17:35
108 lines
6999 bytes
6999 bytes
On Monday, February 8, 2021 at 2:57:15 PM UTC+1, heby wrote: > On 08/02/2021 14:24, M.M. wrote: > >> To dopuszczalna sytuacja. fs ma być na nia gotowy. > > Trudno sie rozmawia, nie wiem co dla Ciebie znaczy że FS > > ma być gotowy. Skąd FS ma wiedzieć, czy to nie jest zaplanowane > > działanie programisty? > Ma nie wiedzieć. Jedyne co od niego oczekuje to to że nie rozwali sobie > wewnętrznych struktur kiedy dwa wątki będą starały się jednoczesnie > powiekszyć długość pliku albo skasować go w tym samym momencie. I chcesz żeby ktoś podpowiedział Ci rozwiązanie jak to wydajnie zrobić żebyś mógł konkurować z 50letnim doświadczeniem projektantów systemów plików ;-) To ja się nie odważę pomagać. Ale jakbyś chciał pierwsze lepsze rozwiązanie, to bym się odważył podpowiedzieć, że można zrobić koleję zadań. Zadania do kolejki będą dodawawane przez aplikacje klienckie. Natomiast system plików z kolejki w N wątkach będzie pobierał zadania. Jednakże, jeśli jeden wątek otrzyma zadanie file_1, dotyczące pliku 'file' i w kolejce pojawi się zadanie file_2, dotyczące tego samego pliku 'file', to algorytm XYZ będzie musiał zdecydować, czy zadanie jest krytyczne dla bezpieczeństwa struktury danych, czy też nie. Jeśli nie, to będzie musiał czekać aż wątek obsługujący zadanie file_1 zakończy działanie i dopiero potem przydzielić zadanie file_2. Algorytm XYZ wymaga zastanowienia... W najprostszej wersji zapis do jednego pliku można robić równolegle, bo aplikacja kliencka powinna zadbać o to, aby zapisy były bezpieczne. Podobnie odczty można robić w wielu wątkach. Natomiast odczyt musi czekać aż wszystkie zapisy się zakończą. Zapis też musi czekać aż wszystkie odczyty się zakończą. Potem wyjątek, jeśli zapis i odczyt pochodzi z różnych procesów/wątków, to może być zrównoleglany, bo o to aplikacja kliencka już powinna zadbać. A zmiana rozmiaru plików... nie wiem... chyba powinna być traktowana jako zapis. Dodam, nie polegaj szczególnie na tym, wymyśliłem to w chwili pisania tego posta, nigdy nic nie czytałem o systemach plików. Poza tym to jest bardzo ogólnikowe, w praktyce dojdzie pierdylion szczegółów. > > Pracują np. dwa wątki. Jeden pisze do > > pliku, drugi kasuje plik. Jeśli jeden najpierw zapisze, a drugi > > skasuje - to pliku nie będzie. Jeśli najpierw skasuje, a > > potem dojdzie do próby zapisania, to też nie będzie pliku - fs > > zwróci po prostu błąd zapisu. > Super. Tego właśnie oczekuje. Ma się nie rozsypać. To że w danych jest > sieczka, to problem aplikacji, nie fs. Jeśli chesz to implementować pod konkretne zastosowanie, to może się też rozwalić FS, bo będziesz wiedział że dana kombinacja operacji nigdy nie nastąpi i w praktyce jednak się nie rozwali. > > Można zrobić taki rozwiązanie, że jak jeden wątek chce plik do > > zapisu, to FS czeka aż wszystkie inne wątki zamkną plik. > O nie. Przydatność zależy od konkretnego zastosowania. > >> Nieprawda. Jeśli jeden watek zapisuje jakas częśc pliku, inny może > >> zapisuwać inną część tego samego pliku. DB często tak robią. > > Dlatego pisałem NA TYCH SAMYCH DANYCH, a INNE CZĘŚCI PLIKU to już > > nie są TE SAME DANE. > To żadna róznica. fs nie obchodzi co i gdzie zapisuje. Jeśli ktoś > zapisuje te same dane pikoseundę później to nie jest problem fs. > > Nie wiem... Dla mnie to brzmi trochę jak mieszanie rozwiązania szczegółowego z > > ogólnym. W szczegółowych zastosowaniach to programista wie które operacje > > powinny być atomowe i uzyskuje taki efekt poprzez synchronizację wątków. > Nie rozmawiamy tutaj o kliencie tego fs. W nim ta wiedza istnieje. Zaczęliśmy rozmowę od tego, że głupio gdy aplikacja zapisuje dane w katalogu a nie w pliku, więc zahaczaliśmy też mocno o klienta. > W fs nie ma żadnej wiedzy o atomowości operacji na plikach. Ale Ty chcesz pisać swój, bardzo specyficzny, zoptymalizowany pod konkretną aplikację - tak zrozumiałem. > Jedyne co > wymagam od niego to fakt że "open" zadziała atomowo, "close" zadziała > atomowo, "rm" itd. Ma pozwolić na 2x write jednocześnie w to samo > miejsce i się nie rozlecieć. To w pierwszym akapicie tego posta dałem zarys synchronizacji, a chyba w pierwszym poscie zaproponowałem strukturę danych (tam gdzie byłą lista list, nagłówek pliku, nagłówki miejsca pustego, zajętego, itd.) Nic bardziej szczegółowego w trakcie luźnej rozmowy nie podpowiem. > > A budowa wewnętrzna dzienników to jest po prostu spis operacji i > > kopia danych które w razie usterki będzie trzeba odtworzyć. > To zdecydownie nie wygląda tak prosto w kodzie ext4... Bo, jak się domyślam, są mocno zoptymalizowane i mają pierdylion opcji dobieranych w (auto)tuningu i mogą się dostosować do wielu urządzeń. Pozdrawiam
Technical Details
Message-ID:
<18fcac04-c92f-496f-b9e3-024eae5be8d1n@googlegroups.com>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!2.eu.feeder.erje.net!feeder.erje.net!newsfeed.xs4all.nl!newsfeed8.news.xs4all.nl!tr3.eu1.usenetexpress.com!feeder.usenetexpress.com!tr1.iad1.usenetexpress.com!border1.nntp.dca1.giganews.com!nntp.giganews.com!news-out.google.com!nntp.google.com!postnews.google.com!google-groups.googlegroups.com!not-for-mailReferences:
<rtpdik$cge$1@dont-email.me> <cff484ae-3bf8-4cec-bbb7-78e44cb70167n@googlegroups.com> <rvokfn$1ff$1@dont-email.me> <90a1ad63-9675-4233-b822-808a7c17cbc7n@googlegroups.com> <rvpa3d$uf5$1@dont-email.me> <3ed1a847-2f93-4108-8985-2afae9b3b897n@googlegroups.com> <rvpgno$hnr$1@dont-email.me> <e8d86917-8e4c-4624-b8ae-67b82f80591cn@googlegroups.com> <rvpkev$d2u$1@dont-email.me> <b01525e0-6d35-48d8-ad1c-c9938aca307bn@googlegroups.com> <rvqmb3$dlt$1@dont-email.me> <797def6b-9fcd-4536-ba25-eab0e23081b8n@googlegroups.com> <rvr6ar$sst$1@dont-email.me> <b9c5e357-d30a-4dbc-9438-f5d6161b7d5dn@googlegroups.com> <rvrfvp$4j2$1@dont-email.me>Show Full Headers
Complete Article Headers
X-Received: by 2002:ad4:5047:: with SMTP id m7mr17129022qvq.26.1612805703474; Mon, 08 Feb 2021 09:35:03 -0800 (PST) X-Received: by 2002:ad4:4566:: with SMTP id o6mr5026027qvu.41.1612805703134; Mon, 08 Feb 2021 09:35:03 -0800 (PST) Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!2.eu.feeder.erje.net!feeder.erje.net!newsfeed.xs4all.nl!newsfeed8.news.xs4all.nl!tr3.eu1.usenetexpress.com!feeder.usenetexpress.com!tr1.iad1.usenetexpress.com!border1.nntp.dca1.giganews.com!nntp.giganews.com!news-out.google.com!nntp.google.com!postnews.google.com!google-groups.googlegroups.com!not-for-mail Newsgroups: pl.comp.programming Date: Mon, 8 Feb 2021 09:35:02 -0800 (PST) In-Reply-To: <rvrfvp$4j2$1@dont-email.me> Complaints-To: groups-abuse@google.com Injection-Info: google-groups.googlegroups.com; posting-host=77.254.35.244; posting-account=xjvq9QoAAAATMPC2X3btlHd_LkaJo_rj NNTP-Posting-Host: 77.254.35.244 References: <rtpdik$cge$1@dont-email.me> <cff484ae-3bf8-4cec-bbb7-78e44cb70167n@googlegroups.com> <rvokfn$1ff$1@dont-email.me> <90a1ad63-9675-4233-b822-808a7c17cbc7n@googlegroups.com> <rvpa3d$uf5$1@dont-email.me> <3ed1a847-2f93-4108-8985-2afae9b3b897n@googlegroups.com> <rvpgno$hnr$1@dont-email.me> <e8d86917-8e4c-4624-b8ae-67b82f80591cn@googlegroups.com> <rvpkev$d2u$1@dont-email.me> <b01525e0-6d35-48d8-ad1c-c9938aca307bn@googlegroups.com> <rvqmb3$dlt$1@dont-email.me> <797def6b-9fcd-4536-ba25-eab0e23081b8n@googlegroups.com> <rvr6ar$sst$1@dont-email.me> <b9c5e357-d30a-4dbc-9438-f5d6161b7d5dn@googlegroups.com> <rvrfvp$4j2$1@dont-email.me> User-Agent: G2/1.0 MIME-Version: 1.0 Message-ID: <18fcac04-c92f-496f-b9e3-024eae5be8d1n@googlegroups.com> Subject: Re: Przenośny, uproszczony filesystem From: "M.M." <mmarszik@gmail.com> Injection-Date: Mon, 08 Feb 2021 17:35:03 +0000 Lines: 155 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit