Dlaczego generowanie miniatur powoduje wysokie obciążenie CPU i I/O na serwerze NAS do mediów?

Eva Wong jest Technicznym pisarzem i stałym majsterkowiczem w ZimaSpace. Całe życie geek z pasją do homelabów i oprogramowania open-source, specjalizuje się w tłumaczeniu skomplikowanych koncepcji technicznych na przystępne, praktyczne przewodniki. Eva wierzy, że samodzielne hostowanie powinno być zabawą, a nie czymś onieśmielającym. Poprzez swoje samouczki umożliwia społeczności rozwiewanie tajemnic konfiguracji sprzętu, od budowy pierwszego NAS po opanowanie kontenerów Docker.

Generowanie miniatur może powodować duże obciążenie CPU i operacje I/O na dysku w media NAS, ponieważ mały podgląd jest tylko ostatecznym wynikiem znacznie większego potoku. NAS może potrzebować odnaleźć plik źródłowy, odczytać i zdekodować go, wybrać lub przekształcić klatkę, zakodować nowy obraz, zapisać wynik i zaktualizować indeks multimediów.

Obciążenie staje się widoczne podczas pierwszego skanowania biblioteki, przebudowy lub dużego importu, ponieważ ten sam potok powtarza się na tysiącach zdjęć i filmów. Pojemność wyjściowa może pozostać mała, podczas gdy odczyty źródłowe, praca dekodera, dane tymczasowe, transakcje bazy danych i tworzenie plików utrzymują system w ruchu.

Co się dzieje przed zapisaniem miniatury?

Skaner multimediów najpierw wylicza pliki i odczytuje wystarczająco metadanych, aby zidentyfikować typ, wymiary, czas trwania, orientację lub kodek. Następnie wybiera strategię miniatur: zmiana rozmiaru obrazu, wyodrębnienie osadzonego podglądu, dekodowanie klatki wideo lub analizowanie kilku klatek, aby wybrać tę, która lepiej reprezentuje klip.

Sama transformacja to potok obliczeniowy. Piksele mogą być dekodowane z formatu skompresowanego, obracane, zarządzane kolorystycznie, zmieniane rozmiarowo i kodowane do mniejszego formatu JPEG, WebP lub innego formatu podglądu. potok miniatur libvips łączy ładowanie i zmianę rozmiaru oraz zauważa, że zmniejszanie podczas ładowania może przyspieszyć obsługiwane formaty obrazów.

Po kodowaniu aplikacja zapisuje plik podglądu lub przechowuje dane obrazu w innej pamięci podręcznej, a następnie rejestruje związek między źródłem a jego pochodną. Błąd lub zmiana na którymkolwiek etapie może spowodować ponowne generowanie, więc przebudowa biblioteki może powtarzać pracę nawet wtedy, gdy widoczne pliki multimedialne nie uległy zmianie. Aktualizacje wersji mogą również unieważnić pochodne, gdy aplikacja zmienia wymiary, kodeki lub klucze pamięci podręcznej.

Dlaczego mały podgląd może wymagać dużych odczytów źródłowych?

Skondensowane media nie zawsze można zmniejszyć, odczytując tylko liczbę bajtów reprezentowanych przez ostateczną miniaturę. Dekoder potrzebuje nagłówków i skompresowanych danych opisujących obraz lub docelową klatkę wideo. W zależności od formatu i struktury wyszukiwania, dotarcie do użytecznej klatki może wymagać odczytu i dekodowania materiału, który nigdy nie pojawia się w ostatecznym podglądzie.

Wybór wideo może być szczególnie kosztowny. Filtr klatek miniatur FFmpeg thumbnail frame filter analizuje partię kolejnych klatek i wybiera reprezentatywną; w dokumentacji zaznaczono również, że większa partia wymaga więcej pamięci. Przykład następnie skaluje wybraną klatkę i zapisuje osobny obraz.

Obrazy mogą być tańsze, gdy biblioteka używa osadzonego podglądu lub dekodera obsługującego shrink-on-load, ale to optymalizacja, a nie uniwersalne zachowanie. Zdjęcia RAW, bardzo duże obrazy, nietypowe kodeki, uszkodzone pliki lub brakujące osadzone podglądy mogą wymusić więcej dekodowania i sprawić, że objętość odczytu źródła będzie znacznie większa niż wynik podglądu.

Jak skanowanie biblioteki mnoży pracę?

Jedna miniatura jest zwykle trywialna. Skanowanie zamienia to w system wsadowy: każde źródło przechodzi przez odkrywanie, odczyt, transformację, wyjście i indeksowanie. Pracownicy równolegli mogą skrócić czas zegarowy, ale jednocześnie zwiększają jednoczesne zapotrzebowanie na CPU i liczbę oczekujących żądań magazynowych.

Etap potoku Wejście/wyjście źródła Praca CPU Wyjście magazynu Obserwowalny sygnał
Odkrywanie biblioteki Odczyty katalogów i metadanych Klasyfikacja plików Aktualizacje indeksów Wiele małych operacji
Miniatura obrazu Odczyt obrazu lub osadzonego podglądu Dekodowanie, orientacja, zmiana rozmiaru, kodowanie Mały plik podglądu Wzrosty CPU plus odczyty
Miniatura wideo Odczyty danych kontenera i klatki Dekodowanie klatki, wybór, skalowanie Mały plik podglądu Dłuższa aktywność CPU i odczytów
Zatwierdzenie katalogu Odczyty stron bazy danych Praca transakcji i indeksów Zapisy do bazy danych i dziennika Małe powtarzające się zapisy

Tabela pokazuje, dlaczego rozmiar podglądu jest słabym wskaźnikiem pracy systemu. Większość bajtów może być odczytana ze źródeł, większość czasu CPU może być poświęcona na dekodowanie, a wiele zapisów może dotyczyć katalogu, a nie samego pliku miniatury.

Dokładny miks zależy od aplikacji, formatów źródłowych, liczby pracowników, stanu pamięci podręcznej oraz tego, czy miniatury już istnieją. To model obciążenia, a nie obietnica benchmarku; dwie biblioteki o tej samej pojemności mogą zachowywać się inaczej, jeśli jedna zawiera krótkie filmy, a druga duże zdjęcia RAW.

Dlaczego małe zapisy i aktualizacje katalogu mają znaczenie?

Każdy wygenerowany podgląd może utworzyć nowy plik, przydzielić metadane systemu plików, zaktualizować znaczniki czasu i zmienić rekord katalogu. Tysiące małych wyników generuje więc wiele operacji, nawet jeśli ich łączna pojemność jest niewielka. Na macierzy HDD te zapisy mogą przerywać odczyty źródłowe i zmniejszać lokalność sekwencyjną.

Katalogi mediów często korzystają z bazy danych transakcyjnych, aby skany mogły być kontynuowane konsekwentnie, a klienci mogli zapytywać o wyniki. Model write-ahead logging SQLite dopisuje zmiany do pliku WAL, a następnie wykonuje ich checkpoint do głównej bazy danych, dodając checkpoint jako odrębną operację obok odczytu i zapisu.

To zachowanie bazy danych nie oznacza, że każda usługa multimedialna używa SQLite lub WAL. Ilustruje, dlaczego aktualizacja indeksu może wiązać się z większą aktywnością magazynu niż jedna widoczna zmiana wiersza. Aplikacja może grupować zatwierdzenia, utrzymywać wiele indeksów lub używać innego silnika bazy danych, więc rzeczywiste wzorce zapisu muszą być mierzone, a nie wywnioskowane wyłącznie na podstawie liczby miniatur.

Kiedy CPU i magazyn konkurują z inną pracą NAS?

Podczas dużego skanowania wątki dekodera mogą zużywać rdzenie CPU, które obsługują także udostępnianie plików, programowy RAID, sumy kontrolne, szyfrowanie lub strumieniowanie multimediów. Jednocześnie odczyty źródła i zapisy podglądu konkurują z kopiami zapasowymi, pobieraniem i żądaniami klientów. Widocznym objawem może być wolniejsze przeglądanie lub odtwarzanie, mimo że samo zadanie tworzenia miniatur nie zakończyło się niepowodzeniem.

Zwiększenie współbieżności pracowników może przyspieszyć zakończenie kolejki tylko wtedy, gdy CPU, pamięć i magazyn mają wolne zasoby. Po przekroczeniu tego punktu więcej pracowników powoduje konflikty, głębsze kolejki I/O i większe obciążenie pamięci. Aplikacja multimedialna, która agresywnie planuje pracę w tle, może więc maksymalizować przepustowość wsadową kosztem interaktywnej latencji. Ograniczenia termiczne mogą obniżyć utrzymywaną częstotliwość CPU podczas długiego skanowania i sprawić, że późniejsze zadania będą wykonywać się wolniej niż wcześniejsze.

Transkodowanie i tworzenie miniatur są powiązane, ale różne. Szersza decyzja dotycząca sprzętowego transkodowania może wspomagać planowanie sprzętu, ale nie powinna być używana jako dowód, że konkretny proces tworzenia miniatur korzysta z tej samej ścieżki przyspieszenia.

Co powinien mierzyć Media NAS podczas generowania?

Śledź kolejkę w jednostkach zrozumiałych dla aplikacji: znalezione elementy multimedialne, ukończone miniatury, błędy, ponowne próby i pozostałe zadania. Połącz to z wykorzystaniem CPU na proces, obciążeniem pamięci, przepustowością odczytu źródła, operacjami zapisu podglądu, aktywnością bazy danych i opóźnieniami magazynu. Postęp na minutę jest często bardziej użyteczny niż surowe wykorzystanie, ponieważ pokazuje, czy dodatkowe użycie zasobów przekłada się na więcej wykonanej pracy w bibliotece.

Nie polegaj wyłącznie na wysokim wykorzystaniu dysku lub wykresie pojemności. Liczniki I/O dysku w Linuxie ujawniają zakończone odczyty i zapisy, scalone operacje, czas spędzony oraz bieżące żądania. W połączeniu z monitorowaniem na poziomie procesów pomagają rozróżnić pracę ograniczoną przez dekoder od zaległości w magazynie.

Mierz zachowanie podczas pierwszego skanowania i stanu ustalonego osobno. Pełna odbudowa jest celowo kosztowna, podczas gdy normalna praca powinna zwykle przetwarzać tylko nowe lub zmienione media. Jeśli kolejka wielokrotnie odbudowuje, sprawdź logi aplikacji, trwałość pamięci podręcznej, uprawnienia i ścieżki biblioteki; kontrole wydajności aplikacji NAS mogą dostarczyć dodatkowych informacji operacyjnych.

FAQ

Dlaczego użycie CPU jest wysokie, gdy pliki miniatur są tak małe?

Rozmiar pliku opisuje zakodowany wynik, a nie pracę potrzebną do jego stworzenia. NAS może zdekodować znacznie większe źródło, obrócić lub zarządzać kolorami pikseli, zmienić ich rozmiar i zakodować wynik przed zapisaniem małego pliku.

Czy miniatury wideo są cięższe niż miniatury zdjęć?

Często tak, ponieważ aplikacja może potrzebować przeszukać, zdekodować jedną lub więcej klatek i wybrać reprezentatywny obraz. Jednak duże zdjęcia RAW lub nieobsługiwane szybkie ścieżki obrazów mogą być kosztowne, więc format źródłowy ma większe znaczenie niż sam nośnik.

Czy umieszczenie pamięci podręcznej miniatur na SSD rozwiąże problem obciążenia?

Może zmniejszyć opóźnienia przy wielu małych zapisach i późniejszych odczytach podglądu, ale nie eliminuje dekodowania źródła ani pracy bazy danych. Jeśli CPU jest ograniczeniem, przeniesienie tylko pamięci podręcznej może zmienić aktywność dysku bez proporcjonalnego skrócenia pełnego skanowania.

Czy sprzętowe dekodowanie wideo może przyspieszyć tworzenie miniatur?

Może się tak zdarzyć, gdy aplikacja, kodek, sterownik i pipeline miniatur obsługują tę samą ścieżkę sprzętową. Sama zdolność sprzętowa nie wystarcza; nieobsługiwane formaty lub filtry działające tylko w oprogramowaniu mogą nadal używać CPU.

Dlaczego generowanie miniatur zaczyna się ponownie po restarcie?

Aplikacja mogła utracić stan pamięci podręcznej, zmienić format podglądu, wykryć zmodyfikowane źródła, nie udało się zatwierdzić rekordów katalogu lub zamontować biblioteki pod inną ścieżką. Logi i trwałość stanu zadań są bardziej informatywne niż sama pojemność pamięci.

Ostateczne wnioski

Generowanie miniatur to proces przetwarzania mediów i indeksowania, a nie kopiowanie małych plików. Oceń je na podstawie odczytów źródła, kosztów dekodowania, małych zapisów i aktywności bazy danych oraz postępu kolejki; mały finalny podgląd nie odzwierciedla całkowitej pracy nałożonej na media NAS.

Centrum Technologii i Sztucznej Inteligencji

Więcej do przeczytania

Get More Builds Like This

Stay in the Loop

Get updates from Zima - new products, exclusive deals, and real builds from the community.

Stay in the Loop preferences

We respect your inbox. Unsubscribe anytime.