2008-09-17 16 views
6

Rozpaczliwie szukam tanich sposobów na obniżenie czasu budowy na moim domowym komputerze. Właśnie przeczytałem plik z Windows XP, aby proste odczyty nie zapisywały niczego z powrotem na dysk.Pliki na XP: Czy wyłączenie "ostatniego czasu dostępu" jest bezpieczne?

To naprawdę proste, zbyt. W DOS-szybkiego zapisu:

fsutil behavior set disablelastaccess 1

Czy ktoś kiedykolwiek próbował go w kontekście budynku C++ wystaje? Jakiekolwiek wady?

[Edytuj] Więcej na ten temat here.

Odpowiedz

4

Nie próbowałem tego na Windowsie (będę dziś w nocy, dziękuję), ale podobna rzecz na Linuksie (opcja noatime podczas montowania napędu) przyspieszyła sprawę o znacząco.

Nie mogę myśleć o jakichkolwiek zastosowaniach, gdzie czas ostatniego dostępu byłyby użyteczne inne niż do celów kontrolnych, a nawet wtedy, czy sklepowych użytkownikowi, który go inwalidztwa? Wiem, że Linux nie.

4

Proponuję spróbować i zobacz, czy to ma znaczenie.

Jestem jednak pesymistą co do tego, że robi różnicę, ponieważ w większych/czystych kompilacjach i tak będziesz pisał duże ilości danych, więc dostosowanie czasu dostępu do plików nie zajmie tyle czasu (plus prawdopodobnie i tak zostanie zbuforowany).

Chciałbym jednak, aby się udowodnić źle.


Wyniki:

Ran kilka opiera się na bazie kodu w pracy w obu debugowania i zwolnij konfiguracje z czasu ostatniego dostępu jest włączona, oraz osób niepełnosprawnych.

Nasz kod źródłowy jest około 39 MB (48 MB Rozmiar na dysku), a budujemy o połowę, że dla konfiguracji że zbudowany dla tych testów. Kompilacja debugowania wygenerowała 1.76 GB plików tymczasowych i wyjściowych, podczas gdy wydanie wygenerowało około 600 MB takich danych. Budujemy na linii poleceń za pomocą kombinacji narzędzi wbudowanych Ant i Visual Studio.

Moja maszyna jest Core 2 Duo 3 GHz, 4 GB pamięci RAM, dysk twardy 7200 obr./min, z systemem Windows XP 32 bit.

Budynek z czasu ostatniego dostępu wyłączone:

razy debug = 6:17, godziny 5:41

Release = 6:07, 6:06

budynek z ostatnim czas dostępu włączona:

razy debug = 6:00, czas 5:47

Release = 6:19, 5:48

Ogólnie, nie zauważyłem żadnej różnicy między tymi dwoma trybami, ponieważ w obu przypadkach najprawdopodobniej pliki są już w pamięci podręcznej systemu, więc powinien po prostu czytać z pamięci.

Wierzę, że uzyskasz największy zwrot z inwestycji dzięki wprowadzeniu właściwych prekompilowanych nagłówków (nie generowanych automatycznie, które Visual Studio tworzy w projekcie). Wdrożyliśmy to kilka lat temu w pracy (gdy baza kodu była znacznie mniejsza) i skróciło czas budowy do jednej trzeciej tego, co było.

+0

Interesujące! Oczekuję jednak, że prawdziwy zysk nastąpi po dotknięciu pojedynczego pliku zawierającego wiele załączników, a następnie przebudowaniu: sprawdzanie zależności powinno zacząć szukać całej masy pliku, co może spowodować zapis ostatniego czasu dostępu. Może ... –

0

poprawi to nieco wydajność. Poza tym nie zrobi to dużo więcej (nie będziesz w stanie zobaczyć, kiedy plik był ostatnio dostępny oczywiście). Mam go domyślnie włączony, gdy instaluję system Windows XP przy użyciu nLite, aby wyciąć nadmiar, którego nie potrzebuję.

1

To dobra alternatywa, ale wpłynie na niektóre narzędzia. Podobnie jak Remote Storage Service i innych utilies które zależą od statystyk dostępu do plików do optymalizacji systemu plików (tj Norton Defrag)

7

Od SetFileTime's documentation:

„NTFS opóźnia aktualizacje do czasu ostatniego dostępu do pliku przez maksymalnie do godziny po ostatnim dostępie. "

Nie ma sensu wyłączać tego - oryginalny artykuł jest błędny, dane nie są zapisywane przy każdym dostępie.

EDIT:

, dlaczego autor tego artykułu twierdził przyspieszyć 10x, myślę, że przypisuje mu przyspieszyć do złej rzeczy: on również wyłączone generacja 8,3 filename. Aby wygenerować plik 8.3 dla pliku, NTFS musi generować każdą możliwość po kolei, a następnie sprawdzić, czy jest już w użyciu (brak odniesienia, jestem pewien, że Raymond o tym mówił, ale nie może znaleźć linku). Jeśli twoje pliki dzielą te same pierwsze sześć znaków, zostaniesz ukąszony przez ten problem, a w korycie powinieneś umieścić znaki, które rozróżniają pliki w pierwszych sześciu postaciach, aby się nie kolidowały. Wyłączenie generowania krótkich nazw uniemożliwi to.

+0

Dobre informacje. Jednak autor oryginalnego artykułu wspomina o 10-krotnym przyspieszeniu - z ostatnim mechanizmem czasu dostępu musi być coś, co jest wolne. –

0

Nie chcę odciągać uwagi od pytania "ostatni czas dostępu", ale mogą istnieć inne sposoby na przyspieszenie kompilacji. Nie znając kontekstu i konfiguracji projektu, trudno powiedzieć, co może być powolne, ale mogą istnieć pewne rzeczy, które mogą pomóc:

Twórz kompilacje "uber". Oznacza to, że utworzenie pojedynczego pliku uber.cpp kompilacji, który zawiera kilka wierszy jak

#include "file1.cpp" 
#include "file2.cpp" 

Możesz mieć kłopoty ze sprzecznymi statycznych nazw zmiennych, ale te są na ogół łatwe do uporządkowania.Wstępna konfiguracja to rodzaj bólu, ale czasy budowy mogą znacznie wzrosnąć. Dla nas największą wadą jest to, że w studio programistycznym nie można kliknąć prawym przyciskiem myszy pliku i powiedzieć "kompiluj", jeśli ten plik jest częścią kompilacji uber. To nie jest wielka sprawa. Mamy osobne konfiguracje kompilacji dla kompilacji "uber", które kompilują pliki uber, ale wykluczają pojedyncze pliki cpp z procesu budowania. Jeśli potrzebujesz więcej informacji, zostaw komentarz i dam ci to. Ponadto, optymalizator ma tendencję do wykonywania nieco lepszej pracy z kompilacjami uber.

Co więcej, czy masz dużą liczbę plików włączających lub wiele depenementów między plikami dołączanymi? Jeśli tak, to drastycznie spowolni czas budowy.

Czy używasz prekompilowanych nagłówków? Jeśli nie, możesz przyjrzeć się temu jako rozwiązaniu, które również pomoże.

Powolne czasy kompilacji to zwykle śledzone do wielu plików we/wy. Jest to zdecydowanie największa oszczędność czasu w budowaniu - po prostu otwieranie, czytanie i analizowanie wszystkich plików. Jeśli zmniejszysz operacje wejścia/wyjścia pliku, poprawisz czas kompilacji.

W każdym razie, przykro mi lekko lekceważyć temat, ale sugestia pod ręką, aby zmienić sposób ustawiania ostatniego czasu dostępu do pliku, wydaje się być rozwiązaniem "młotowiernika".

+0

Witaj Mark, dzięki za sugestie. Wiem o sztuczce Überbuild, która nie rezygnuje z cięcia w moim przypadku. Właściwie, jest wiele rzeczy, które mogę zrobić, aby przyspieszyć, ale chcę zacząć od tych, które dadzą mi najwięcej do zarzucenia. –

0

W przypadku serwerów obciążonych, wyłączenie ostatniego czasu dostępu jest zazwyczaj dobrym pomysłem. Jedynym potencjalnym minusem jest to, że istnieją skrypty, które wykorzystują ostatni czas dostępu, na przykład informując, że plik nie jest już zapisywany.

To powiedziawszy, jeśli chcesz poprawić czas budowy w projekcie C++, bardzo polecam lekturę Recursive Make Considered Harmful. Artykuł ma około dekady, ale wskazuje na to, jak rekurencyjne definicje w naszych skryptach budujących powodują długie czasy kompilacji.

0

Wyłączenie czasu dostępu jest przydatne w przypadku używania ssd (dyski SSD - karty, napędy USB itp.), Ponieważ zmniejsza to liczbę zapisów na dysku. Wszystkie półprzewodnikowe urządzenia pamięciowe mają żywotność mierzoną liczbą zapisów, które można wykonać na każdy indywidualny adres. Niektóre media określają minimum 100 tysięcy, a niektóre nawet 1 milion. Systemy operacyjne i inne pliki wykonywalne mogą uzyskać dostęp do wielu plików w ramach jednej operacji, jak również dostępu do dokumentów użytkownika. Dotyczy to eee pc, systemów wbudowanych i innych.

-1

Mike Dimmick:

Spróbuj podłączyć dysk USB z wielu plików i skopiować je do wewnętrznego dysku. Tak jest również w przypadku kompilacji programu (opisanej w oryginalnym poście).