EnglishFrenchSpanyol

Ad


Favicon OnWorks

guestfs-performance - Dalam talian di Awan

Jalankan prestasi guestfs dalam penyedia pengehosan percuma OnWorks melalui Ubuntu Online, Fedora Online, emulator dalam talian Windows atau emulator dalam talian MAC OS

Ini ialah arahan guestfs-performance yang boleh dijalankan dalam penyedia pengehosan percuma OnWorks menggunakan salah satu daripada berbilang stesen kerja dalam talian percuma kami seperti Ubuntu Online, Fedora Online, emulator dalam talian Windows atau emulator dalam talian MAC OS.

JADUAL:

NAMA


guestfs-performance - libguestfs kejuruteraan untuk prestasi terbaik

DESCRIPTION


Halaman ini mendokumenkan cara untuk mendapatkan prestasi terbaik daripada libguestfs, terutamanya apabila
anda mengharapkan untuk menggunakan libguestfs untuk memanipulasi beribu-ribu mesin maya atau imej cakera.

Tiga kawasan utama dilindungi. Libguestfs menjalankan perkakas (pengedaran Linux kecil)
dalam qemu/KVM. Dua bidang pertama ialah: meminimumkan masa yang diambil untuk memulakan ini
perkakas, dan bilangan kali perkakas perlu dimulakan. Kawasan ketiga ialah
memendekkan masa yang diambil untuk pemeriksaan VM.

BASELINE PENGUKURAN


Sebelum membuat perubahan pada cara anda menggunakan libguestfs, ambil ukuran garis dasar.

garis dasar: Bermula yang perkakas
Pada mesin yang tidak dimuatkan, masa berapa lama masa yang diperlukan untuk menghidupkan perkakas:

time guestfish -a /dev/null run

Jalankan arahan ini beberapa kali berturut-turut dan buang beberapa larian pertama, supaya anda melakukannya
mengukur kes "cache panas" biasa.

penjelasan

Perintah ini memulakan perkakas libguestfs pada cakera null, dan kemudian segera ditutup
ia turun. Kali pertama anda menjalankan arahan, ia akan mencipta perkakas dan cachenya
(biasanya di bawah /var/tmp/.guestfs-*). Larian berikutnya harus menggunakan semula perkakas cache.

Dijangka keputusan

Anda sepatutnya menjangkakan mendapat masa di bawah 6 saat. Jika masa yang anda lihat pada
mesin yang dipunggah berada di atas ini, kemudian lihat bahagian "MENYELESAIKAN MASALAH PRESTASI LEMAH"
di bawah.

garis dasar: Persembahan pemeriksaan of a tetamu
Untuk ujian ini, anda memerlukan mesin yang tidak dimuatkan dan sekurang-kurangnya satu tetamu sebenar atau imej cakera.
Jika anda merancang untuk menggunakan libguestfs terhadap tetamu X sahaja (cth. X = Windows), kemudian gunakan
tetamu X di sini adalah paling sesuai. Jika anda bercadang untuk menjalankan libguestfs terhadap
campuran tetamu, kemudian gunakan campuran tetamu untuk ujian di sini.

Masa berapa lama masa yang diambil untuk melakukan pemeriksaan dan memasang cakera tetamu. Menggunakan
arahan pertama jika anda akan menggunakan imej cakera, dan arahan kedua jika anda akan menggunakan
menggunakan libvirt.

time guestfish --ro -a disk.img -i keluar

time guestfish --ro -d GuestName -i keluar

Jalankan arahan beberapa kali berturut-turut dan buang beberapa larian pertama, supaya anda melakukannya
mengukur kes "cache panas" biasa.

penjelasan

Perintah ini memulakan perkakas libguestfs pada imej cakera bernama atau tetamu libvirt,
melakukan pemeriksaan libguestfs ke atasnya (lihat "PEMERIKSAAN" dalam guestfs(3)), memasang tetamu
cakera, kemudian buang semua keputusan ini dan dimatikan.

Kali pertama anda menjalankan arahan, ia akan mencipta perkakas dan menyimpannya (biasanya
di bawah /var/tmp/.guestfs-*). Larian berikutnya harus menggunakan semula perkakas cache.

Dijangka keputusan

Anda harus menjangkakan masa yang ≤ 5 saat lebih besar daripada yang diukur dalam garis dasar pertama
ujian di atas. (Sebagai contoh, jika ujian garis dasar pertama berjalan dalam 5 saat, maka ujian ini
harus berjalan dalam ≤ 10 saat).

MEMAHAMI THE PEMOHON DAN APABILA IT IS DIBINA/DICACHED


Kali pertama anda menggunakan libguestfs, ia akan membina dan cache perkakas. Ini biasanya
in /var/tmp/.guestfs-*, melainkan anda telah menetapkan $TMPDIR atau $LIBGUESTFS_CACHEDIR dalam kes ini
ia akan berada di bawah direktori sementara itu.

Untuk maklumat lanjut tentang cara perkakas dibina, lihat "PERKAKAS SUPERMIN" dalam
supermin(1).

Setiap kali libguestfs berjalan, ia akan menyemak sama ada tiada fail hos yang digunakan oleh perkakas mempunyai
berubah. Jika ada, maka perkakas itu dibina semula. Ini biasanya berlaku apabila pakej
dipasang atau dikemas kini pada hos (cth. menggunakan program seperti "yum" atau "apt-get"). The
sebab untuk membina semula perkakas adalah keselamatan: program baharu yang telah
dipasang mungkin mengandungi pembetulan keselamatan, jadi kami ingin memasukkan program tetap dalam
perkakas secara automatik.

Ini adalah implikasi prestasi:

· Proses membina (atau membina semula) perkakas cache adalah perlahan, dan anda boleh
elakkan perkara ini berlaku dengan menggunakan perkakas tetap (lihat di bawah).

· Jika tidak menggunakan perkakas tetap, ambil perhatian bahawa mengemas kini perisian pada hos akan menyebabkan
satu kali bina semula perkakas.

· / var / tmp (atau $TMPDIR, $LIBGUESTFS_CACHEDIR) hendaklah pada cakera pantas dan mempunyai banyak
ruang untuk perkakas.

MENGGUNAKAN A TETAP PEMOHON


Untuk mengawal sepenuhnya apabila perkakas dibina, anda boleh membina perkakas tetap. ini
perkakas hendaklah disimpan pada cakera tempatan yang pantas.

Untuk membina perkakas, jalankan arahan:

libguestfs-make-fixed-appliance

menggantikan" " dengan nama direktori tempat perkakas akan disimpan
(biasanya anda akan menamakan subdirektori, contohnya: /usr/local/lib/guestfs/appliance or
/dev/shm/appliance).

Kemudian tetapkan $LIBGUESTFS_PATH (dan pastikan pembolehubah persekitaran ini ditetapkan dalam libguestfs anda
program), atau ubah suai program anda supaya ia memanggil "guestfs_set_path". Sebagai contoh:

eksport LIBGUESTFS_PATH=/usr/local/lib/guestfs/appliance

Kini anda boleh menjalankan program libguestfs, alat virt, guestfish dll seperti biasa. Program-program tersebut
akan menggunakan perkakas tetap anda, dan tidak akan sekali-kali membina, membina semula, atau menyimpannya sendiri
perkakas.

(Untuk maklumat terperinci mengenai subjek ini, lihat: libguestfs-make-fixed-appliance(1)).

prestasi of yang ditetapkan perkakas
Dalam ujian kami, kami tidak mendapati bahawa menggunakan perkakas tetap memberikan apa-apa yang boleh diukur
faedah prestasi, walaupun apabila perkakas terletak dalam ingatan (mis. pada /dev/shm).
Walau bagaimanapun terdapat dua perkara yang perlu dipertimbangkan:

1. Menggunakan perkakas tetap menghalang libguestfs daripada membina semula perkakas, bermakna
bahawa libguestfs akan mempunyai masa permulaan yang lebih boleh diramalkan.

2. Perkakas dimuatkan atas permintaan. Ujian mudah seperti:

time guestfish -a /dev/null run

tidak memuatkan terlalu banyak perkakas. Program libguestfs sebenar menggunakan rumit
Panggilan API akan menuntut lebih banyak perkakas. Mampu menyimpan
perkakas di lokasi tertentu menjadikan prestasi lebih boleh diramal.

MENGURANGKAN THE NOMBOR OF MASA THE PEMOHON IS DILANCARKAN


Setakat ini yang paling berkesan, walaupun tidak selalu cara paling mudah untuk mendapatkan prestasi yang baik adalah
untuk memastikan bahawa perkakas dilancarkan bilangan kali minimum. Ini mungkin
melibatkan menukar aplikasi libguestfs anda.

Cuba panggil "guestfs_launch" paling banyak sekali bagi setiap mesin maya atau imej cakera sasaran.

Daripada menggunakan contoh berasingan daripada ikan tetamu(1) untuk membuat satu siri perubahan kepada
tetamu yang sama, gunakan satu contoh guestfish dan/atau gunakan guestfish --dengar pilihan.

Pertimbangkan untuk menulis program anda sebagai daemon yang membuka tetamu semasa membuat siri
daripada perubahan. Atau marshal semua operasi yang anda ingin lakukan sebelum membuka tetamu.

Anda juga boleh cuba menambah cakera daripada berbilang tetamu kepada satu perkakas. Sebelum mencuba
ini, perhatikan perkara berikut:

1. Menambah berbilang tetamu pada satu perkakas adalah masalah keselamatan kerana ia mungkin membenarkan satu
tetamu untuk mengganggu cakera tetamu lain. Hanya lakukan jika anda mempercayai semua
tetamu, atau jika anda boleh mengumpulkan tetamu dengan amanah.

2. Terdapat had keras kepada bilangan cakera yang boleh anda tambahkan pada satu perkakas. Panggil
"guestfs_max_disks" dalam guestfs(3) untuk mendapatkan had ini. Untuk maklumat lanjut lihat
"HAD" dalam guestfs(3).

3. Menggunakan libguestfs cara ini adalah rumit. Cakera boleh mempunyai interaksi yang tidak dijangka: untuk
contoh, jika dua tetamu menggunakan UUID yang sama untuk sistem fail (kerana mereka diklonkan),
atau mempunyai kumpulan volum dengan nama yang sama (tetapi lihat "guestfs_lvm_set_filter").

virt-df(1) menambah berbilang cakera secara lalai, jadi kod sumber untuk program ini ialah a
tempat yang baik untuk bermula.

MEMENDEK THE MASA DIAMBIL UNTUK PEMERIKSAAN OF VMs


Nasihat utama adalah jelas: Jangan lakukan pemeriksaan (yang mahal) melainkan anda perlu
keputusan.

Jika anda sebelum ini melakukan pemeriksaan ke atas tetamu, maka ia mungkin selamat untuk cache dan
gunakan semula keputusan dari kali terakhir.

Sesetengah cakera tidak perlu diperiksa sama sekali: contohnya, jika anda mencipta cakera
imej, atau jika imej cakera bukan VM, atau jika imej cakera mempunyai reka letak yang diketahui.

Walaupun pemeriksaan asas ("guestfs_inspect_os") diperlukan, pemeriksaan tambahan
operasi boleh dielakkan:

· Memasang cakera hanya perlu untuk mendapatkan maklumat sistem fail selanjutnya.

· Penyenaraian aplikasi ("guestfs_inspect_list_applications") ialah operasi yang mahal
pada Linux, tetapi hampir percuma pada Windows.

· Menjana ikon tetamu ("guestfs_inspect_get_icon") adalah murah di Linux tetapi mahal
pada Windows.

PARALEL PAKAIAN


Perkakas Libguestfs kebanyakannya terikat I/O dan anda boleh melancarkan berbilang peralatan masuk
selari. Dengan syarat terdapat memori percuma yang mencukupi, perlu ada sedikit perbezaan
melancarkan 1 perkakas vs N perkakas secara selari.

Pada komputer riba 2-teras (4-benang) dengan 16 GB RAM, menggunakan ujian (tidak terlalu realistik)
Skrip Perl di bawah, plot berikut menunjukkan kebolehskalaan yang sangat baik apabila berjalan antara 1
dan 20 perkakas secara selari:

12 ++---+----+----+----+-----+----+----+----+----+-- -++
+ + + + + + + + + + *
| |
| * |
11 ++ ++
| |
| |
| * * |
10 ++ ++
| * |
| |
s | |
9 ++ ++
e | |
| * |
c | |
8 ++ * ++
o | * |
| |
n 7 ++ ++
| * |
d | * |
| |
s 6 ++ ++
| * * |
| * |
| |
5 ++ ++
| |
| * |
| * * |
4 ++ ++
| |
| |
+ * * * + + + + + + + + +
3 ++-*-+----+----+----+-----+----+----+----+----+-- -++
0 2 4 6 8 10 12 14 16 18 20
bilangan peralatan selari

Adalah mungkin untuk menjalankan lebih daripada 20 peralatan secara selari, tetapi jika anda menggunakan
libvirt backend maka anda harus sedar bahawa di luar kotak libvirt mengehadkan bilangan
sambungan pelanggan ke 20.

Skrip Perl mudah di bawah digunakan untuk mengumpul data bagi plot di atas, tetapi ada
lebih banyak maklumat tentang subjek ini, termasuk skrip dan graf ujian yang lebih maju,
tersedia dalam catatan blog berikut:

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

gunakan ketat;
menggunakan benang;
gunakan amaran;
gunakan Sys::Guestfs;
gunakan Masa::HiRes qw(masa);

ujian kecil {
my $g = Sys::Guestfs->new;
$g->add_drive_ro ("/dev/null");
$g->pelancaran ();

# Anda boleh menambah beberapa kerja untuk libguestfs lakukan di sini.

$g->tutup ();
}

# Masukkan semuanya ke dalam cache.
ujian (); ujian (); ujian ();

untuk $nr_threads saya (1..20) {
$start_t saya = masa ();
@benang saya;
foreach (1..$nr_threads) {
tolak @benang, benang->buat (\&uji)
}
foreach (@benang) {
$_->sertai ();
jika ($err saya = $_->ralat ()) {
mati "pelancaran gagal dengan $nr_threads benang: $err"
}
}
$end_t saya = masa ();
printf ("%d %.2f\n", $nr_threads, $end_t - $start_t);
}

MENGGUNAKAN MOD PENGGUNA LINUX


Sejak libguestfs 1.24, adalah mungkin untuk menggunakan bahagian belakang Mod Pengguna Linux (uml)
bukannya KVM (lihat "USER-MODE LINUX BACKEND" dalam guestfs(3)). Bahagian ini membuat beberapa
kenyataan umum tentang bahagian belakang ini, tetapi ia adalah sangat dinasihatkan untuk mengukur sendiri
beban kerja di bawah UML dan bukannya mempercayai komen atau gerak hati.

· UML biasanya melakukan yang sama atau lebih perlahan daripada KVM, pada baremetal.

· Walau bagaimanapun UML sering melakukan perkara yang sama di bawah virtualisasi seperti yang dilakukan pada baremetal,
manakala KVM boleh berjalan lebih perlahan di bawah virtualisasi (sejak pecutan virt perkakasan
tidak boleh didapati).

· Muat naik dan muat turun adalah sebanyak 10 kali lebih perlahan pada UML daripada KVM. Libguestfs menghantar
data ini melalui port bersiri yang dicontohi UML, yang jauh kurang cekap daripada KVM
siri virtio.

· UML tidak mempunyai beberapa ciri (cth. sokongan qcow2), jadi ia mungkin tidak boleh digunakan sama sekali.

Untuk beberapa angka sebenar, lihat:
http://rwmj.wordpress.com/2013/08/14/performance-of-user-mode-linux-as-a-libguestfs-backend/#kandungan

PENYELESAIAN MASALAH MISKIN PRESTASI


Pastikan perkakasan virtualisasi is tersedia
Penggunaan / proc / cpuinfo dan halaman ini:

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

untuk memastikan bahawa virtualisasi perkakasan tersedia. Ambil perhatian bahawa anda mungkin perlu mendayakannya
dalam BIOS anda.

Virt perkakasan biasanya tidak tersedia di dalam VM, dan libguestfs akan berjalan perlahan di dalam
mesin maya lain apa sahaja yang anda lakukan. Maya bersarang tidak berfungsi dengan baik dalam kami
pengalaman, dan sudah tentu bukan pengganti untuk menjalankan libguestfs pada baremetal.

Pastikan KVM is tersedia
Pastikan KVM didayakan dan tersedia kepada pengguna yang akan menjalankan libguestfs. Sepatutnya
selamat untuk menetapkan kebenaran 0666 /dev/kvm dan kebanyakan pengedaran kini melakukan ini.

Pemproses kepada mengelakkan
Elakkan pemproses yang tidak mempunyai virtualisasi perkakasan dan beberapa pemproses yang
hanya sangat perlahan (AMD Geode menjadi contoh yang bagus).

Xen dom0
Dalam Xen, dom0 ialah mesin maya, jadi virtualisasi perkakasan tidak tersedia.

TERPERINCI MASA MENGGUNAKAN TS


Menggunakan ts(1) arahan (dari moreutils) untuk menunjukkan pemasaan terperinci:

$ guestfish -a /dev/null run -v |& ts -i '%.s'
0.000022 libguestfs: pelancaran: program=guestfish
0.000134 libguestfs: pelancaran: version=1.29.31fedora=23,release=2.fc23,libvirt
0.000044 libguestfs: pelancaran: bahagian belakang berdaftar: unix
0.000035 libguestfs: pelancaran: bahagian belakang berdaftar: uml
0.000035 libguestfs: pelancaran: bahagian belakang berdaftar: libvirt
0.000032 libguestfs: pelancaran: bahagian belakang didaftarkan: langsung
0.000030 libguestfs: pelancaran: backend=libvirt
0.000031 libguestfs: pelancaran: tmpdir=/tmp/libguestfsw18rBQ
0.000029 libguestfs: pelancaran: umask=0002
0.000031 libguestfs: pelancaran: euid=1000
0.000030 libguestfs: versi libvirt = 1002012 (1.2.12)
[dan lain-lain]

Cap masa ialah saat (bertambah-tambah sejak baris sebelumnya).

TERPERINCI MASA MENGGUNAKAN SYSTEMTAP


Anda boleh menggunakan SystemTap (langkah(1)) untuk mendapatkan masa terperinci daripada program libguestfs.

Simpan skrip berikut sebagai masa.stap:

global terakhir;

fungsi paparan_masa () {
sekarang = gettimeofday_us ();
delta = 0;
jika (terakhir > 0)
delta = sekarang - terakhir;
lepas = sekarang;

printf ("%d (+%d):", sekarang, delta);
}

kuar bermula {
terakhir = 0;
printf ("bersedia\n");
}

/* Paparkan semua panggilan ke penanda statik. */
proses siasatan("/ usr / lib*/libguestfs.so.0")
.provider("guestfs").mark("*") ? {
paparan_masa();
printf ("\t%s %s\n", $$nama, $$parms);
}

/* Paparkan semua panggilan ke fungsi guestfs_*. */
proses siasatan("/ usr / lib*/libguestfs.so.0")
.function("guestfs_[az]*") ? {
paparan_masa();
printf ("\t%s %s\n", probefunc(), $$parms);
}

Jalankan ia sebagai akar dalam satu tetingkap:

# masa stap.stap
bersedia

Ia mencetak "sedia" apabila SystemTap telah memuatkan atur cara. Jalankan program libguestfs anda,
guestfish atau alat virt dalam tetingkap lain. Sebagai contoh:

$ guestfish -a /dev/null run

Dalam tetingkap stap anda akan melihat sejumlah besar output, dengan masa yang diambil untuk setiap satu
langkah ditunjukkan (mikrosaat dalam kurungan). Sebagai contoh:

xxxx (+0): guestfs_create
xxxx (+29): guestfs_set_pgroup g=0x17a9de0 pgroup=0x1
xxxx (+9): guestfs_add_drive_opts_argv g=0x17a9de0 [...]
xxxx (+8): guestfs_int_safe_strdup g=0x17a9de0 str=0x7f8a153bed5d
xxxx (+19): guestfs_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): launch_start
[dan lain-lain]

Anda perlu merujuk, dan juga mengubah suai, sumber kepada libguestfs untuk memahami sepenuhnya
keluarannya.

TERPERINCI MENGHILANGKAN MENGGUNAKAN GDB


Anda boleh melampirkan pada BIOS/kernel perkakas menggunakan gdb. Jika anda tahu apa yang anda lakukan,
ini boleh menjadi cara yang berguna untuk mendiagnosis regresi but.

Pertama, anda perlu menukar qemu supaya ia berjalan dengan pilihan "-S" dan "-s". Pilihan ini
menyebabkan qemu berhenti seketika semasa but dan membolehkan anda melampirkan penyahpepijat. Baca qemu(1) untuk selanjutnya
maklumat. Libguestfs memanggil qemu beberapa kali (untuk mengimbas output bantuan dan sebagainya)
dan anda hanya mahu doa akhir qemu menggunakan pilihan ini, jadi gunakan pembalut qemu
skrip seperti ini:

#!/ bin / bash -

# Tetapkan ini untuk menunjuk kepada perduaan qemu sebenar.
qemu=/usr/bin/qemu-kvm

jika [ "$1" != "-global" ]; kemudian
# Mengimbas output bantuan dsb.
eksekutif $qemu "$@"
lagi
# Benar-benar berjalan qemu.
exec $qemu -S -s "$@"
fi

Sekarang jalankan guestfish atau alat libguestfs yang lain dengan pembalut qemu (lihat "PEMBUNGT QEMU" dalam
guestfs(3) untuk memahami apa yang dilakukan oleh ini):

LIBGUESTFS_HV=/path/to/qemu-wrapper guestfish -a /dev/null -v run

Ini sepatutnya berhenti seketika selepas qemu dilancarkan. Dalam tetingkap lain, lampirkan pada qemu menggunakan gdb:

$ gdb
(gdb) set seni bina i8086
Seni bina sasaran diandaikan sebagai i8086
(gdb) jarak jauh sasaran :1234
Penyahpepijatan jauh menggunakan :1234
0x0000fff0 dalam ?? ()
(gdb) samb

Pada ketika ini anda boleh menggunakan teknik gdb standard, cth. menekan "^C" untuk mengganggu but
dan "bt" dapatkan jejak tindanan, menetapkan titik putus, dsb. Ambil perhatian bahawa apabila anda melepasi
BIOS dan ke dalam kernel Linux, anda perlu menukar seni bina kembali kepada 32 atau 64
sedikit.

Gunakan guestfs-performance dalam talian menggunakan perkhidmatan onworks.net


Pelayan & Stesen Kerja Percuma

Muat turun apl Windows & Linux

  • 1
    facetracknoir
    facetracknoir
    Program pengesanan kepala modular yang
    menyokong berbilang penjejak muka, penapis
    dan protokol permainan. Antara penjejak
    ialah SM FaceAPI, Ketua Inersia AIC
    Penjejak ...
    Muat turun facetracknoir
  • 2
    Kod QR PHP
    Kod QR PHP
    Kod QR PHP ialah sumber terbuka (LGPL)
    perpustakaan untuk menjana Kod QR,
    Kod bar 2 dimensi. Berdasarkan
    perpustakaan libqrencode C, menyediakan API untuk
    mencipta bar Kod QR...
    Muat turun Kod QR PHP
  • 3
    freeciv
    freeciv
    Freeciv ialah berasaskan giliran percuma
    permainan strategi berbilang pemain, di mana setiap
    pemain menjadi ketua a
    tamadun, berjuang untuk mendapatkan
    matlamat akhir: menjadi...
    Muat turun Freeciv
  • 4
    Kotak Pasir Cuckoo
    Kotak Pasir Cuckoo
    Kotak Pasir Cuckoo menggunakan komponen untuk
    memantau tingkah laku perisian hasad dalam a
    Persekitaran kotak pasir; terpencil daripada
    selebihnya sistem. Ia menawarkan automatik
    analisis o...
    Muat turun Kotak Pasir Cuckoo
  • 5
    LMS-YouTube
    LMS-YouTube
    Mainkan video YouTube pada LMS (pengalihan daripada
    Triode's to YouTbe API v3) Ini adalah
    aplikasi yang juga boleh diambil
    dari
    https://sourceforge.net/projects/lms-y...
    Muat turun LMS-YouTube
  • 6
    Yayasan Persembahan Windows
    Yayasan Persembahan Windows
    Yayasan Persembahan Windows (WPF)
    ialah rangka kerja UI untuk membina Windows
    aplikasi desktop. WPF menyokong a
    set luas pembangunan aplikasi
    ciri-ciri...
    Muat turun Windows Presentation Foundation
  • Lebih »

Arahan Linux

Ad