To jest polecenie makepp_sandboxes, które można uruchomić u dostawcy bezpłatnego hostingu OnWorks przy użyciu jednej z naszych wielu darmowych stacji roboczych online, takich jak Ubuntu Online, Fedora Online, emulator online Windows lub emulator online MAC OS
PROGRAM:
IMIĘ
makepp_sandboxes -- Jak podzielić na partycje kompilację makepp
OPIS
D: --do-buduj,
--nie buduj,
--nie czytaj,
--czy-czytaj, I: --w piaskownicy,
--wewnątrz-piaskownicy, O: --poza piaskownicą, S: --piaskownica,
--sandbox-ostrzegaj,
---ostrzeżenie w piaskownicy, V: --wirtualna-piaskownica
Istnieje kilka powodów, dla których warto podzielić drzewo plików na partycje dla makepp
budować:
1. Jeśli wiesz, że na większość drzewa nie mają wpływu żadne zmiany wprowadzone do
plików źródłowych od poprzedniej kompilacji, możesz powiedzieć makeppowi, aby założył, że pliki
w tych częściach drzewa są już aktualne, co oznacza, że nawet w domyśle
ładowanie ich plików makefile, nie mówiąc już o obliczaniu i sprawdzaniu ich zależności. (Notatka
jednak jawnie załadowane pliki makefile są nadal ładowane.)
2. Jeśli masz wiele procesów makepp uzyskujących dostęp do tego samego drzewa, chcesz podnieść
błąd, jeśli wykryjesz, że dwa współbieżne procesy zapisują tę samą część
drzewo, lub że jeden proces odczytuje część drzewa, którą jest proces współbieżny
pismo. Tak czy inaczej, masz sytuację wyścigową, w której względna kolejność wydarzeń
w dwóch równoległych procesach (co nie może być zagwarantowane) może wpłynąć na wynik.
Makepp ma zaplecze do piaskownicy, które rozwiązuje oba problemy.
Piaskownica Opcje
Poniższe opcje makepp mogą być użyte do ustawienia właściwości sandboxingu poddrzewa:
podany przez ścieżka oraz wszystkie jego pliki i potencjalne pliki:
--nie buduj ścieżka
--do-buduj ścieżka
Ustaw lub zresetuj właściwość „dont-build”. Zakłada się, że każdy plik z tym zestawem właściwości jest
być aktualne i nie będą wykonywane żadne testy kompilacji. Wartość domyślna to zresetowana
(tj. "do-build"), chyba że masz "RootMakeppfile", w którym to przypadku wszystko
poza jego identyfikatorem poddrzewa „dont-build”.
--piaskownica ścieżka
--w piaskownicy ścieżka
--wewnątrz-piaskownicy ścieżka
--poza piaskownicą ścieżka
Ustaw lub zresetuj właściwość „w piaskownicy”. W przeciwnym razie zgłaszany jest błąd
napisz plik z tą właściwością zresetowaną. Kontrole kompilacji są nadal wykonywane, chyba że
Ustawiona jest również właściwość „dont-build”. Domyślnie jest to ustawione (tj. "w piaskownicy"), chyba że
są jakieś --piaskownica opcje, w takim przypadku wartością domyślną dla wszystkich innych plików jest
reset (tj. "poza piaskownicą").
--sandbox-ostrzegaj
---ostrzeżenie-piaskownicy
Zdegraduj naruszenia „w piaskownicy” i „nie czytaj” do ostrzeżeń zamiast błędów.
Jest to przydatne, gdy istnieją setki naruszeń, dzięki czemu możesz zebrać wszystkie
je w jednym przebiegu i podejmij odpowiednie działania naprawcze. W przeciwnym razie widzisz tylko
jedno naruszenie na wywołanie makepp, a nie wiesz, ile zostało do
wszystkie są naprawione.
--nie-czytaj ścieżka
--do-czytaj ścieżka
Ustaw lub zresetuj właściwość „dont-read”. W przeciwnym razie zgłaszany jest błąd
odczytać plik z tym zestawem właściwości. Wartość domyślna to zerowanie (tj. „do-odczytuj”).
--wirtualna-piaskownica
Nie przepisuj ponownie informacji o kompilacji plików, które nie zostały utworzone przez ten proces makepp. Ten
jest przydatne, gdy uruchamiasz współbieżne procesy makepp z nakładającymi się piaskownicami, a ty
są pewni, że żadne dwa procesy nie będą próbowały zbudować tego samego celu. Makepp będzie
wtedy powstrzymaj się od buforowania dodatkowych informacji o plikach, które czyta, ponieważ
mogą być inni współbieżni czytelnicy.
Każda z tych 3 właściwości dotyczy całego poddrzewa, w tym plików, które nie
jeszcze istnieją. Bardziej szczegółowe ścieżki zastępują mniej szczegółowe ścieżki. Podana ścieżka może być
indywidualny plik, nawet jeśli plik jeszcze nie istnieje.
Jeśli właściwość jest zarówno ustawiona, jak i zresetowana na dokładnie tej samej ścieżce, pojawi się opcja
najdalej na prawo w wierszu poleceń ma pierwszeństwo.
Piaskownica dla Przyśpieszenie
Jeśli chcesz, aby makepp nie tracił czasu na przetwarzanie plików, o których wiesz, że już są
aktualne (w szczególności pliki generowane przez inne niż makepp narzędzie do budowania),
następnie --nie buduj to opcja dla Ciebie.
Zdecydowanie najczęstszym przypadkiem takiej optymalizacji jest to, że wiesz, że wszystko nie
w lub poniżej katalog startowy jest już aktualny. Można to przekazać do
makepp używający „--nie buduj /. --do-buduj .".
Piaskownica dla Równoległy Procesy
Jedną z technik, która może zmniejszyć opóźnienia w kompilacji, jest uruchomienie wielu procesów makepp
na tym samym drzewie. Jest to nieco trudniejsze do zarządzania niż przy użyciu -j opcja,
ale może być również znacznie bardziej skuteczny, ponieważ:
· W przypadku piaskownicy procesy mogą działać na wielu hostach, na przykład za pośrednictwem zadania
system kolejkowy. Zwiększenie -j limit ostatecznie wyczerpuje zasoby procesora
pojedynczy host, a nawet może spowolnić kompilację z powodu nadmiernego rozwidlenia procesów.
· -j obecnie nie zrównolegla niektórych czasochłonnych zadań makepp, takich jak ładowanie
pliki makefile, skanowanie, budowanie niejawnych zależności podczas skanowania i sprawdzania
zależności.
Największym ryzykiem związanym z tym podejściem jest to, że kompilacja może stać się niedeterministyczna, jeśli:
procesy, które mogą współbieżnie współdziałać ze sobą. Prowadzi to do budowania systemów
które sporadycznie dają nieprawidłowe wyniki i nie mają prostego mechanizmu pozwalającego określić, dlaczego
zdarza się.
Aby zaradzić temu ryzyku, zaleca się podzielenie drzewa na współbieżne procesy
tak, że jeśli jakikolwiek proces uzyskuje dostęp do systemu plików nieprawidłowo, to błąd jest:
deterministycznie podniesiony natychmiast. Zwykle osiąga się to poprzez przypisanie do każdego
współbieżny proces „piaskownica”, w której można pisać, gdzie piaskownice nie
dwa współbieżne procesy mogą się nakładać.
Ponadto każdy proces oznacza piaskownice wszelkich innych, potencjalnie współbieżnych procesów
jako „nie czytaj”. Jeśli proces odczytuje plik, za który odpowiedzialny jest inny współbieżny proces
do pisania (i które w związku z tym mogą jeszcze nie zostać napisane), pojawia się błąd
natychmiast.
Piaskownica dla Sekwencyjna Procesy
Gdy kompilacja jest podzielona na partycje dla współbieżnych procesów makepp, zwykle występuje również a
sekwencyjny związek między różnymi parami procesów. Na przykład może istnieć
kilkanaście jednoczesnych procesów kompilacji, po których następuje pojedynczy proces łączenia, który nie może się rozpocząć
do czasu zakończenia wszystkich procesów kompilacji. Takie sekwencyjne relacje muszą być:
wymuszone przez dowolny mechanizm organizujący różne procesy makepp (na przykład
system kolejkowania zadań).
Gdy procesy mają znaną zależność sekwencyjną, zwykle nie ma potrzeby podnoszenia
błąd, gdy uzyskują dostęp do tej samej części drzewa, ponieważ wynik jest mimo to
deterministyczny.
Jednak generalnie korzystne jest określenie: --nie buduj opcje dla osób pozostających na utrzymaniu
proces (proces linkowania w naszym przykładzie), który powiadamia go o obszarach, które już zostały
zostały zaktualizowane przez procesy wymagań wstępnych (w naszym przykładzie zadania kompilacji). W tym
sposób, unikamy większości niepotrzebnej pracy celów budowania wartości zerowych, które były po prostu
zaktualizowany.
Korzystaj z makepp_sandboxes online za pomocą usług onworks.net