Wydajny procesor, czy pamięć to nie wszystko, co składa się na ogólną szybkość naszego smartfonu. Bardzo często wąskim gardłem staje się powolna pamięć masowa, która uniemożliwia wykorzystanie zasobów w sposób optymalny. Aby lepiej zrozumieć wspomniany temat, wyobraźmy sobie następującą sytuację. Uruchamiamy zaawansowaną grę. Wymaga ona wczytania dużej ilości modeli, tekstur oraz muzyki. Karta pamięci pracuje w pocie czoła, aby jak najszybciej zapewnić wymagane dane i umożliwić wczytanie następnego poziomu. Nasuwa się proste pytanie: czy można przyspieszyć ten proces? Należy wiedzieć, że ten problem pojawiał się od zawsze, a architekci komputerów dwoili się i troili, aby wyeliminować tą sytuację. W ten sposób powstała technologia DMA (Direct Memory Access), która umożliwia pominięcie udziału procesora w trakcie przesyłu danych. W praktyce stosuje się osobny układ działający równolegle z procesorem. Jego zadaniem jest kopiowanie danych z pamięci masowej (np. karty pamięci) do RAMu. W ten sposób w trakcie kopiowania, procesor może wykonywać inne czynności i przyspieszyć wykonanie całego zadania. Gwóźdź programu kryje się w sposobie działania tego małego układu. Może on bowiem skopiować znacznie więcej danych niż jest aktualnie potrzeba. W ten sposób stara się w inteligentny sposób przewidzieć, co będzie później potrzebne. Dzięki temu procesor nie będzie musiał oczekiwać na dane, gdyż zostaną one wcześniej wczytane. Sprawdza się to wyjątkowo dobrze w trakcie odczytywanie informacji ciągłych, np. muzyki, czy filmu. W tym artykule sprawdzimy, ile danych kontroler powinien odczytywać z wyprzedzeniem…
Postanowiłem sprawdzić, jaka będzie średnia szybkość odczytu danych z karty pamięci. W tym celu przeprowadziłem dla każdej z wartości dwa testy, wyniki zaś uśredniłem. Każda z prób dotyczyła najpierw zapisu danych o wielkości 4.5 GB, później było dokonywane sprawdzenie, czy informacje są zgodne z oryginałem, a następnie odczyt danych. Poniższy wykres prezentuje wyniki eksperymentu:
Widać wyraźnie, że szybkość odczytu rośnie w miarę powiększania buforu. Jednocześnie stabilizuje się dla wielkości 1024kB. Przyczyna jest bardzo prosta. Procesor co pewien czas odpytuje układ DMA i sprawdza, czy dane zostały już wczytane. Kontroler pomiędzy sprawdzeniami nie jest w stanie wczytać całego buforu i stąd szybkość odczytu się stabilizuje. Dalsze opcje po prostu nic nie zmieniają! Zapis natomiast utrzymuje się na stałym poziomie, co jest zgodne z naturą badanej technologii.
Podsumowując: optymalna wartość „SD read ahead” nie jest uniwersalna dla każdego telefonu i zależy od szybkość pamięci wbudowanej. Jeśli posiadamy starszy smartfon, to nie ma sensu ustawiać zbyt wielkiego buforu (widać to dobrze na wykresie), natomiast im nowszy i wydajniejszy sprzęt, tym większą wartość powinniśmy ustawić. Polecam własnoręczne ściągnięcie programu do badania szybkość pamięci i ustawienie odpowiedniej opcji za pomocą metody prób i błędów. Zaznaczam jednak, że w czasie testów warto wybrać większe porcje danych (minimum 1GB), aby nie brać niepotrzebnie pod uwagę różnych anomalii. Mnie udało się przyspieszyć odczyt o około 47%, gdyż wartość domyślna była ustawiona na 512kb (zmieniłem na 1024kb). Jak widać, warto było się trudzić. Zapraszam do testów i podzielenia się wynikami ;)
Marcin Ziąbek