Angielskifrancuskihiszpański

Ad


Ulubiona usługa OnWorks

Guestfs-Wydajność - Online w chmurze

Uruchom Guestfs-Performance w darmowym dostawcy hostingu OnWorks w systemie Ubuntu Online, Fedora Online, emulatorze online systemu Windows lub emulatorze online systemu MAC OS

Jest to polecenie Guestfs- Performance, które można uruchomić u dostawcy bezpłatnego hostingu OnWorks przy użyciu jednej z naszych wielu bezpłatnych stacji roboczych online, takich jak Ubuntu Online, Fedora Online, emulator online systemu Windows lub emulator online systemu MAC OS

PROGRAM:

IMIĘ


Guestfs- Performance — inżynieria libguestfs w celu uzyskania najwyższej wydajności

OPIS


Ta strona dokumentuje, jak uzyskać najlepszą wydajność z libguestfs, zwłaszcza gdy
spodziewasz się używać libguestfs do manipulowania tysiącami maszyn wirtualnych lub obrazami dysków.

Objęte są trzy główne obszary. Libguestfs uruchamia urządzenie (mała dystrybucja Linuksa)
wewnątrz qemu/KVM. Pierwsze dwa obszary to: minimalizacja czasu potrzebnego na rozpoczęcie tego
urządzenia oraz liczbę uruchomień urządzenia. Trzeci obszar to
skrócenie czasu potrzebnego na inspekcję maszyn wirtualnych.

LINIA BAZOWA POMIARY


Przed wprowadzeniem zmian w sposobie korzystania z libguestfs wykonaj pomiary bazowe.

Linia bazowa: Startowy dotychczasowy urządzenie
Czas potrzebny na uruchomienie urządzenia na nieobciążonej maszynie:

time Guestfish -a /dev/null run

Uruchom to polecenie kilka razy z rzędu i odrzuć kilka pierwszych uruchomień, aby tak było
pomiar typowego przypadku „gorącej pamięci podręcznej”.

Wyjaśnienie

To polecenie uruchamia urządzenie libguestfs na dysku zerowym, a następnie natychmiast się zamyka
to w dół. Przy pierwszym uruchomieniu polecenia utworzy ono urządzenie i zapisze je w pamięci podręcznej
(zwykle pod /var/tmp/.guestfs-*). Kolejne uruchomienia powinny ponownie wykorzystywać urządzenie buforowane.

Spodziewany wyniki

Należy spodziewać się czasów poniżej 6 sekund. Jeśli czasy, które widzisz na
nieobciążona maszyna znajduje się powyżej tej wartości, zapoznaj się z sekcją „ROZWIĄZYWANIE PROBLEMÓW ZŁA WYDAJNOŚĆ”
poniżej.

Linia bazowa: Wykonywanie inspekcja of a gość
Do tego testu będziesz potrzebować niezaładowanego komputera i co najmniej jednego prawdziwego gościa lub obrazu dysku.
Jeśli planujesz używać libguestfs tylko przeciwko X gościom (np. X = Windows), to użyj
Gość X byłby tutaj najbardziej odpowiedni. Jeśli planujesz uruchomić libguestfs przeciwko
mieszankę gości, a następnie użyj mieszanki gości do testowania tutaj.

Czas, ile czasu zajmuje wykonanie kontroli i zamontowanie dysków gościa. Użyj
pierwsze polecenie, jeśli będziesz używać obrazów dysków, i drugie polecenie, jeśli będziesz
za pomocą libvirta.

czas gośćfish --ro -a disc.img -i wychodzę

czas gośćfish --ro -d Nazwa Gościa -i wychodzę

Uruchom polecenie kilka razy z rzędu i odrzuć kilka pierwszych uruchomień, aby tak było
pomiar typowego przypadku „gorącej pamięci podręcznej”.

Wyjaśnienie

To polecenie uruchamia urządzenie libguestfs na nazwanym obrazie dysku lub gościu libvirt,
przeprowadza na nim inspekcję libguestfs (patrz „INSPEKCJA” w goście(3)), montuje gościa
dyskach, następnie odrzuca wszystkie wyniki i wyłącza się.

Przy pierwszym uruchomieniu polecenia utworzy ono urządzenie i zapisze je w pamięci podręcznej (zwykle
dla /var/tmp/.guestfs-*). Kolejne uruchomienia powinny ponownie wykorzystywać urządzenie buforowane.

Spodziewany wyniki

Należy spodziewać się czasów o ≤ 5 sekund dłuższych niż zmierzone w pierwszej linii bazowej
test powyżej. (Na przykład, jeśli pierwszy test bazowy trwał 5 sekund, to ten test
powinien działać w ≤ 10 sekund).

ZROZUMIENIE THE URZĄDZENIE ROLNICZE KIEDY IT IS ZBUDOWANY/ZAPISANY W PAMIĘCI PODRĘCZNEJ


Gdy po raz pierwszy użyjesz biblioteki libguestfs, zbuduje ona urządzenie i zapisze je w pamięci podręcznej. Zwykle tak jest
in /var/tmp/.guestfs-*, chyba że ustawiłeś $TMPDIR lub $LIBGUESTFS_CACHEDIR i w takim przypadku
będzie znajdować się w tym katalogu tymczasowym.

Więcej informacji na temat konstrukcji urządzenia można znaleźć w części „URZĄDZENIA SUPERMIN” w
supermin(1).

Przy każdym uruchomieniu libguestfs sprawdza, czy nie ma plików hostów używanych przez urządzenie
zmieniony. Jeśli tak, urządzenie zostanie zregenerowane. Zwykle dzieje się tak, gdy pakiet
jest instalowany lub aktualizowany na hoście (np. przy użyciu programów takich jak „yum” lub „apt-get”). The
powodem rekonstrukcji urządzenia jest bezpieczeństwo: nowy program, który był
zainstalowany może zawierać poprawkę bezpieczeństwa, dlatego chcemy dołączyć naprawiony program do pliku
urządzenie automatycznie.

Oto konsekwencje wydajności:

· Proces budowania (lub przebudowy) urządzenia buforowanego jest powolny i jest to możliwe
można tego uniknąć, stosując aparat stały (patrz poniżej).

· Jeśli nie korzystasz ze stałego urządzenia, pamiętaj, że może to spowodować aktualizację oprogramowania na hoście
jednorazową przebudowę urządzenia.

· / Var / tmp (lub $TMPDIR, $LIBGUESTFS_CACHEDIR) powinien znajdować się na szybkim dysku i mieć dużo
miejsca na urządzenie.

ZA POMOCĄ A STAŁA URZĄDZENIE


Aby w pełni kontrolować budowę urządzenia, można zbudować urządzenie stałe. Ten
urządzenie powinno być przechowywane na szybkim dysku lokalnym.

Aby zbudować urządzenie, uruchom polecenie:

libguestfs-make-fixed-appliance

zastąpienie „ " z nazwą katalogu, w którym będzie przechowywane urządzenie
(zwykle nazwałbyś podkatalog, na przykład: /usr/local/lib/guestfs/appliance or
/dev/shm/urządzenie).

Następnie ustaw $LIBGUESTFS_PATH (i upewnij się, że ta zmienna środowiskowa jest ustawiona w pliku libguestfs
program) lub zmodyfikuj swój program tak, aby wywoływał „guestfs_set_path”. Na przykład:

eksportuj LIBGUESTFS_PATH=/usr/local/lib/guestfs/urządzenie

Teraz możesz normalnie uruchamiać programy libguestfs, narzędzia virt, Guestfish itp. Programy
będzie korzystać z Twojego stałego urządzenia i nigdy nie będzie budować, przebudowywać ani buforować własnych
urządzenie.

(Szczegółowe informacje na ten temat można znaleźć w: libguestfs-make-fixed-appliance(1)).

Wydajność of dotychczasowy ustalony urządzenie
W naszych testach nie stwierdziliśmy, aby używanie aparatu stałego dało jakikolwiek wymierny efekt
większą wydajność, nawet jeśli urządzenie znajdowało się w pamięci (tj /dev/shm).
Jednakże należy wziąć pod uwagę dwie kwestie:

1. Używanie stałego urządzenia powstrzymuje libguestfs od jakiejkolwiek przebudowy urządzenia, co oznacza
że libguestfs będzie miało bardziej przewidywalne czasy uruchamiania.

2. Urządzenie jest ładowane na żądanie. Prosty test, taki jak:

time Guestfish -a /dev/null run

nie obciąża zbytnio urządzenia. Prawdziwy program libguestfs wykorzystujący skomplikowane
Wywołania API wymagałyby załadowania znacznie większej ilości urządzenia. Możliwość przechowywania
urządzenie w określonym miejscu sprawia, że ​​działanie jest bardziej przewidywalne.

REDUKCJA THE LICZBA OF TIMES THE URZĄDZENIE IS RUSZA


Zdecydowanie najskuteczniejszym, choć nie zawsze najprostszym sposobem na uzyskanie dobrej wydajności, jest
aby mieć pewność, że urządzenie zostanie uruchomione minimalną liczbę razy. To prawdopodobnie będzie
wymagać zmiany aplikacji libguestfs.

Spróbuj wywołać „guestfs_launch” najwyżej raz na docelową maszynę wirtualną lub obraz dysku.

Zamiast używać osobnej instancji gość(1) wprowadzenie szeregu zmian w
tego samego gościa, użyj pojedynczej instancji gościa i/lub użyj gościa --słuchać opcja.

Rozważ napisanie swojego programu jako demona, który wstrzymuje gościa podczas tworzenia serii
zmian. Lub zorganizuj wszystkie operacje, które chcesz wykonać przed otwarciem gościa.

Możesz także spróbować dodać dyski od wielu gości do jednego urządzenia. Przed próbą
w tym przypadku należy zwrócić uwagę na następujące punkty:

1. Dodanie wielu gości do jednego urządzenia stanowi problem bezpieczeństwa, ponieważ może na to pozwolić
gościa, aby ingerował w dyski innego gościa. Zrób to tylko wtedy, gdy ufasz wszystkim
gości lub jeśli możesz grupować gości według zaufania.

2. Istnieje sztywny limit liczby dysków, które można dodać do jednego urządzenia. Dzwonić
„guestfs_max_disks” w goście(3), aby uzyskać ten limit. Aby uzyskać więcej informacji, zobacz
„GRANICY” w goście(3).

3. Używanie libguestfs w ten sposób jest skomplikowane. Dyski mogą mieć nieoczekiwane interakcje: na przykład
na przykład, jeśli dwóch gości używa tego samego UUID dla systemu plików (ponieważ zostali sklonowani),
lub mieć grupy woluminów o tej samej nazwie (ale zobacz „guestfs_lvm_set_filter”).

virt-df(1) domyślnie dodaje wiele dysków, więc kod źródłowy tego programu będzie wyglądał następująco:
dobre miejsce na początek.

SKRACANIE THE CZAS ZAJĘTY DLA KONTROLA OF VM


Główna rada jest oczywista: nie przeprowadzaj kontroli (która jest kosztowna), jeśli nie jest to konieczne
wyniki.

Jeśli wcześniej przeprowadziłeś inspekcję gościa, buforowanie i
ponownie wykorzystaj wyniki z ostatniego razu.

Niektórych dysków w ogóle nie trzeba sprawdzać: na przykład podczas tworzenia dysku
obraz dysku lub jeśli obraz dysku nie jest maszyną wirtualną lub jeśli obraz dysku ma znany układ.

Nawet jeśli wymagana jest inspekcja podstawowa („guestfs_inspect_os”), inspekcja pomocnicza
operacji można uniknąć:

· Montowanie dysków jest konieczne jedynie w celu uzyskania dalszych informacji o systemie plików.

· Listowanie aplikacji („guestfs_inspect_list_applications”) jest kosztowną operacją
na Linuksie, ale prawie za darmo na Windowsie.

· Generowanie ikony gościa („guestfs_inspect_get_icon”) jest tanie w systemie Linux, ale drogie
w systemie Windows.

RÓWNOLEGLE URZĄDZENIA


Urządzenia Libguestfs są w większości powiązane z wejściami/wyjściami i można w nich uruchamiać wiele urządzeń
równoległy. Pod warunkiem, że jest wystarczająca ilość wolnej pamięci, różnica powinna być niewielka
uruchomienie 1 urządzenia zamiast N urządzeń równolegle.

Na 2-rdzeniowym (4-wątkowym) laptopie z 16 GB RAM, przy użyciu (niezbyt realistycznego) testu
Poniżej skrypt Perla, poniższy wykres pokazuje doskonałą skalowalność podczas pracy pomiędzy 1
i 20 urządzeń równolegle:

12 ++---+----+----+----+-----+----+----+----+----+-- -++
+ + + + + + + + + + *
| |
| * |
11++++
| |
| |
| * * |
10++++
| * |
| |
s | |
9++++
mi | |
| * |
c | |
8 ++ * ++
o | * |
| |
n 7 ++ ++
| * |
re | * |
| |
s 6++++
| * * |
| * |
| |
5++++
| |
| * |
| * * |
4++++
| |
| |
+ * * * + + + + + + + +
3 ++-*-+----+----+----+-----+----+----+----+----+-- -++
0 2 4 6 8 10 12 14 16 18 20
liczba urządzeń równoległych

Możliwe jest równoległe uruchomienie ponad 20 urządzeń, ale jeśli używasz
backendu libvirt, powinieneś mieć świadomość, że domyślnie libvirt ogranicza liczbę
połączenia klientów z 20.

Poniższy prosty skrypt Perla został użyty do zebrania danych dla powyższego wykresu, ale tak jest
znacznie więcej informacji na ten temat, w tym bardziej zaawansowane skrypty testowe i wykresy,
dostępne w następujących wpisach na blogu:

http://rwmj.wordpress.com/2013/02/25/multiple-libguestfs-appliances-in-parallel-part-1/
http://rwmj.wordpress.com/2013/02/25/multiple-libguestfs-appliances-in-parallel-part-2/
http://rwmj.wordpress.com/2013/02/25/multiple-libguestfs-appliances-in-parallel-part-3/
http://rwmj.wordpress.com/2013/02/25/multiple-libguestfs-appliances-in-parallel-part-4/

#!/usr/bin/env Perl

używaj ścisłego;
użyj wątków;
używać ostrzeżeń;
użyj Sys::Guestfs;
użyj Time::HiRes qw(time);

podtest {
mój $g = Sys::Guestfs->new;
$g->add_drive_ro („/dev/null”);
$g->uruchom ();

# Możesz tutaj dodać trochę pracy dla libguestfs.

$g->zamknij ();
}

# Umieść wszystko w pamięci podręcznej.
testować (); testować (); testować ();

dla moich $nr_threads (1..20) {
mój $start_t = czas ();
moje @wątki;
foreach (1..$nr_threads) {
push @threads, threads->create (\&test)
}
foreach (@wątki) {
$_->dołącz ();
if (mój $err = $_->błąd ()) {
die „Uruchomienie nie powiodło się z wątkami $nr_threads: $err”
}
}
mój $end_t = czas ();
printf („%d %.2f\n”, $nr_threads, $end_t - $start_t);
}

ZA POMOCĄ TRYB UŻYTKOWNIKA LINUX


Od wersji libguestfs 1.24 możliwe jest korzystanie z backendu User-Mode Linux (uml)
zamiast KVM (patrz „BACKEND LINUX TRYBU UŻYTKOWNIKA” w goście(3)). Ta sekcja sprawia, że ​​niektóre
ogólne uwagi na temat tego backendu, ale tak jest wysoko wskazany zmierzyć swój własny
obciążenie pracą w UML, zamiast ufać komentarzom i intuicji.

· UML zwykle działa tak samo lub nieco wolniej niż KVM na baremetalu.

· Jednak UML często zachowuje się tak samo w przypadku wirtualizacji, jak na baremetalu,
podczas gdy KVM może działać znacznie wolniej w wirtualizacji (ponieważ przyspieszenie sprzętowe
jest niedostępne).

· Wysyłanie i pobieranie jest aż 10 razy wolniejsze w UML niż w KVM. Libguestfs wysyła
te dane przez emulowany port szeregowy UML, który jest znacznie mniej wydajny niż KVM
wirtio-serial.

· UML nie ma pewnych funkcji (np. obsługa qcow2), więc może w ogóle nie mieć zastosowania.

Aby zapoznać się z rzeczywistymi liczbami, zobacz:
http://rwmj.wordpress.com/2013/08/14/performance-of-user-mode-linux-as-a-libguestfs-backend/#content

ROZWIĄZYWANIE PROBLEMÓW UBOGI DZIAŁANIE


Zapewniać sprzęt komputerowy wirtualizacja is dostępny
Zastosowanie / proc / cpuinfo i ta strona:

http://virt-tools.org/learning/check-hardware-virt/

aby zapewnić dostępność wirtualizacji sprzętu. Pamiętaj, że może być konieczne włączenie tej funkcji
w BIOSie.

Sprzętowy virt zwykle nie jest dostępny w maszynach wirtualnych, a libguestfs będzie w nich działać powoli
inną maszynę wirtualną, cokolwiek zrobisz. Wirtualizacja zagnieżdżona nie działa dobrze w naszym
doświadczenie i z pewnością nie zastępuje uruchamiania libguestfs na baremetalu.

Zapewniać KVM is dostępny
Upewnij się, że KVM jest włączony i dostępny dla użytkownika, który uruchomi bibliotekę libguestfs. Powinno
bezpiecznie ustaw uprawnienia 0666 /dev/kvm i większość dystrybucji teraz to robi.

Procesory do uniknąć
Unikaj procesorów, które nie mają wirtualizacji sprzętowej, a także niektórych procesorów, które ją posiadają
po prostu bardzo powolny (świetnym przykładem jest AMD Geode).

Xen dom0
W Xen dom0 jest maszyną wirtualną, dlatego wirtualizacja sprzętu nie jest dostępna.

SZCZEGÓŁOWE CZASY ZA POMOCĄ TS


Użyj ts(1) polecenie (z moreutils), aby pokazać szczegółowe czasy:

$ Guestfish -a /dev/null run -v |& ts -i '%.s'
0.000022 libguestfs: uruchomienie: program=guestfish
0.000134 libguestfs: uruchomienie: wersja=1.29.31fedora=23, wydanie=2.fc23,libvirt
0.000044 libguestfs: uruchomienie: zarejestrowany backend: unix
0.000035 libguestfs: uruchomienie: zarejestrowany backend: uml
0.000035 libguestfs: uruchomienie: zarejestrowany backend: libvirt
0.000032 libguestfs: uruchomienie: zarejestrowany backend: bezpośrednio
0.000030 libguestfs: uruchom: backend=libvirt
0.000031 libguestfs: uruchom: tmpdir=/tmp/libguestfsw18rBQ
0.000029 libguestfs: uruchomienie: umask=0002
0.000031 libguestfs: uruchomienie: euid=1000
0.000030 libguestfs: wersja libvirt = 1002012 (1.2.12)
[itp]

Sygnatury czasowe wyrażone są w sekundach (narastająco od poprzedniej linii).

SZCZEGÓŁOWE CZASY ZA POMOCĄ SYSTEMTAP


Możesz użyć SystemTap (zszywać(1)), aby uzyskać szczegółowe informacje o czasie z programów libguestfs.

Zapisz następujący skrypt jako czas.stap:

globalny ostatni;

funkcja display_time () {
teraz = gettimeofday_us ();
delta = 0;
jeśli (ostatnie > 0)
delta = teraz - ostatni;
ostatni = teraz;

printf („%d (+%d):”, teraz, delta);
}

początek sondy {
ostatni = 0;
printf („gotowe\n”);
}

/* Wyświetla wszystkie wywołania znaczników statycznych. */
proces sondy("/ Usr / lib*/libguestfs.so.0")
.provider("guestfs").mark("*") ? {
czas wyświetlania();
printf („\t%s %s\n”, $$nazwa, $$parms);
}

/* Wyświetl wszystkie wywołania funkcji Guestfs_*. */
proces sondy("/ Usr / lib*/libguestfs.so.0")
.function("guestfs_[az]*") ? {
czas wyświetlania();
printf („\t%s %s\n”,probefunc(), $$parms);
}

Uruchom go jako root w jednym oknie:

# stap czas.stap
gotowy

Wypisuje komunikat „gotowy”, gdy SystemTap załaduje program. Uruchom program libguestfs,
Guestfish lub narzędzie virt w innym oknie. Na przykład:

$ guestfish -a /dev/null uruchom

W oknie Stap zobaczysz dużą ilość danych wyjściowych wraz z czasem potrzebnym na wykonanie każdego z nich
pokazany krok (mikrosekundy w nawiasie). Na przykład:

xxxx (+0): Guestfs_create
xxxx (+29): Guestfs_set_pgroup g=0x17a9de0 pgroup=0x1
xxxx (+9): gośćfs_add_drive_opts_argv g=0x17a9de0 [...]
xxxx (+8): guestfs_int_safe_strdup g=0x17a9de0 str=0x7f8a153bed5d
xxxx (+19): gośćfs_int_safe_malloc g=0x17a9de0 nbytes=0x38
xxxx (+5): guestfs_int_safe_strdup g=0x17a9de0 str=0x17a9f60
xxxx (+10): Guestfs_launch g=0x17a9de0
xxxx (+4): uruchomienie_start
[itp]

Będziesz musiał sprawdzić, a nawet zmodyfikować źródło libguestfs, aby w pełni zrozumieć
wyjście.

SZCZEGÓŁOWE DEBUGOWANIE ZA POMOCĄ GDB


Możesz podłączyć się do BIOS-u/jądra urządzenia za pomocą gdb. Jeśli wiesz co robisz,
może to być przydatny sposób diagnozowania regresji rozruchu.

Po pierwsze, musisz zmienić qemu, aby działało z opcjami „-S” i „-s”. Te opcje
powodują zatrzymanie qemu podczas uruchamiania i umożliwiają podłączenie debugera. Czytać qemu(1) na dalsze
Informacja. Libguestfs wywołuje qemu kilka razy (aby przeskanować dane wyjściowe pomocy itd.)
i chcesz, aby tylko ostatnie wywołanie qemu korzystało z tych opcji, więc użyj opakowania qemu
taki skrypt:

#!/ bin / bash -

# Ustaw to tak, aby wskazywało prawdziwy plik binarny qemu.
qemu=/usr/bin/qemu-kvm

if [ "$1" != "-global"]; Następnie
# Pomoc dotycząca skanowania itp.
wykonaj $qemu "$@"
więcej
# Naprawdę działające qemu.
wykonaj $qemu -S -s "$@"
fi

Teraz uruchom Guestfish lub inne narzędzie libguestfs z opakowaniem qemu (zobacz „QEMU WRAPPERS” w
goście(3) aby zrozumieć, co to robi):

LIBGUESTFS_HV=/ścieżka/do/qemu-wrapper-gość -a /dev/null -v uruchom

Powinno to zostać wstrzymane zaraz po uruchomieniu qemu. W innym oknie podłącz do qemu za pomocą gdb:

$ gdb
(gdb) ustaw architekturę i8086
Zakłada się, że docelową architekturą jest i8086
(gdb) docelowy pilot: 1234
Zdalne debugowanie przy użyciu :1234
0x0000fff0 w ?? ()
(gdb) cd

W tym momencie możesz użyć standardowych technik gdb, np. naciśnięcie „^C”, aby przerwać rozruch
i „bt” pobierają ślad stosu, ustawiają punkty przerwania itp. Pamiętaj, że kiedy miniesz
BIOS i jądro Linuksa, będziesz chciał zmienić architekturę z powrotem na 32 lub 64
trochę.

Korzystaj z usługi Guestfs-Performance online, korzystając z usług onworks.net


Darmowe serwery i stacje robocze

Pobierz aplikacje Windows i Linux

  • 1
    facetracknoir
    facetracknoir
    Modułowy program do śledzenia ruchów głowy
    obsługuje wiele trackerów twarzy, filtrów
    i protokoły gier. Wśród tropicieli
    to SM FaceAPI, głowica inercyjna AIC
    Śledzenie ...
    Ściągnij facetracknoir
  • 2
    Kod QR dla PHP
    Kod QR dla PHP
    PHP QR Code jest open source (LGPL)
    biblioteka do generowania QR Code,
    2-wymiarowy kod kreskowy. Oparte na
    Biblioteka libqrencode C, zapewnia API dla
    tworzenie kodu kreskowego QR Code...
    Pobierz kod QR PHP
  • 3
    freeciv
    freeciv
    Freeciv to darmowa gra turowa
    wieloosobowa gra strategiczna, w której każdy
    gracz staje się liderem a
    cywilizacji, walcząc o uzyskanie
    ostateczny cel: być...
    Pobierz FreeCiv
  • 4
    Piaskownica z kukułką
    Piaskownica z kukułką
    Cuckoo Sandbox wykorzystuje komponenty do
    monitorować zachowanie złośliwego oprogramowania w
    Środowisko piaskownicy; odizolowany od
    reszta systemu. Oferuje zautomatyzowane
    analiza...
    Pobierz Cuckoo Sandbox
  • 5
    LMS-YouTube
    LMS-YouTube
    Odtwarzaj filmy z YouTube na LMS (przenoszenie plików
    Triode do YouTbe API v3) To jest
    aplikacja, którą można również pobrać
    od
    https://sourceforge.net/projects/lms-y...
    Pobierz LMS-YouTube
  • 6
    Podstawa prezentacji systemu Windows
    Podstawa prezentacji systemu Windows
    Fundacja prezentacji systemu Windows (WPF)
    to framework interfejsu użytkownika do budowania systemu Windows
    aplikacje desktopowe. WPF obsługuje m.in
    szeroki zestaw rozwoju aplikacji
    cechy...
    Pobierz Fundację prezentacji systemu Windows
  • więcej »

Komendy systemu Linux

Ad