Rakkoc.Com Recep Akkoç / Rakkocun Yazıtları

7Eyl/160

Sanal Çekirdekli İşlemciler Ve Sanallaştırma

Merhabalar Saygı değer botlar, Google bot, Bing ve yandex. Nasılsınız ? Afiyettesiniz inşallah. Allah Thread'lerinize, Socket'lerinize zeval vermesin. Gerçi siz indexliyeceksinizdir ama sabah sabah gördüğüm ve beğendiğim bir forum yazısını sizin ile paylaşmak istedim.
Soru:

işlemciler Hakkı'nda merak ettiğim bir husus var

4 çekirdek 8 iş parçacıkları yani 4 reel + 4 sanal çekirdekli işlemciler

xeon e5620 üzerinden gidecek olursak 2.4 ghz hızında 8 iş parçacığı olan bu model için 8 adet 2.4 ghz mi olmuş oluyor elimizde yoksa 4 adet 2.4 ghz mi

Çift xeon e5620 64 gb ram 4x256 SSD li bir cihazı hepsi Windows olacak şekilde 16 sanal makineye ayırsak Nasıl bir performans bekleyebiliriz bu sanallardan

ve ana makineye ne kadar bırakmak gerekir

ve bence efsanevi şekilde verilmiş bir cevap Tugberk nickli tahribat müridinden gelmiş.

=================Burasi biraz tatava=======================

Hocam bu islemcilerin icinde register denilen dalgalar var, yuksek seviyeli dillerdeki degiskenler gibi dusunebilirsin bunlari ancak sinirli sayida ve chip in icinde gomulu bellek alanlari. Mesela eax register i 4 byte lik bir bellek alanidir ve tek bir islemcide tektir.. 

Islemci de program calistirirken datalari bu register lari kullanarak manipule eder, mesela bellekteki sayilari toplamadan once bu register lara alir, toplama yapip sonucu tekrar bellege yazar vs.

Bu durumda tek cekirdekli bir islemci thread leri calistirirken mesela 20 ms de bir thread ler arasinda gecis yapar, bu islem hizli oldugu icin akistaki kesintileri farketmeyiz. Bir islemci deki bu register setine context, bir thread den digerine gecerken bu context in bir yere kaydedilip (TSS), sonraki thread in context inin yuklenmesi islemine de context switch denir.

Thread = konuda bahsedilen is parcacigi. Hyperthreading de olay soyle isliyor.

Aslinda 4 gercek cekirdek var, yani bu islemciler ayni anda 4 islem yapabilirler. Ancak her bir cekirdek, bir degil 2 adet register setine yani context e sahip. Eger isletim sistemi islemcinin bu ozelliginin farkinda ise, ayni thread i tekrar ayni sanal cekirdekte calistirarak ya da kafasina gore bu ozellikten istifade edecek bir algoritma kullanarak context switch islemini oldukca hizlandirabilir.

Yani 4 gercek 8 cekirdekli bir islemci, ayni anda 8 thread calsitiriyorsa aslinda hic context switch olmaz bile. Cunku 8 tane context var zaten. Eger sadece 4 gercek cekirdek olsaydi, diger 4 thread calisirken bir onceki threadlerin context leri kaydedilmek zorunda kalinacakti bellege.

Bu context switch islemi cok kritik bir islem oldugu icin genellikle assembly ile cok optimize yazilir, cunku en siklikla calisan kod blogu orasi ve oradaki minik bir optimizasyon bile sistemin genelinde onemli etkiye sebep oluyor.

Bu hyperthread ler belki islemciyi 2 kat hizlandirmaz ancak yapilan isleme gore 1.2, 1.5 kat hizlandirir, ve neredeyse ek bir maliyet getirmeden.

==============Burasi senin soruna cevap======================

Simdi cok mesgul yani surekli cpu kullanan bir server bile yazilirken kullanilan yontem sudur, mevcut cpu sayisinin 2 kati kadar worker thread kullan.
Cunku en mesgul server bile her an mesgul olamaz cpu da, cogu zaman input bekliyor ya da baska islemlerden dolayi zaman kaybediyor, bu esnada bosta kalan cpu suresi diger threadler tarafindan kullaniliyor.

Eger surekli mesgul olunmayacaksa, ki cogumuzun bilgisayari 24 saatin minimum 20 saatini cpu idle modda iken geciriyor, islemci degil ram ve disk io asil dikkat edilmesi gereken. 

Yani sen 4 gercek cekirdekli bir sanal makina actigin zaman, eger yogun bir is yaptirmiyorsan bunlara cpu kullanimi ana makinada bile %0-10 arasinda olacak. Ancak ram kullanimi sanal makina sayisi arttikca artacak. Daha kotusu, hatta tum testlerimize gore en kotusu disk io.

Sunu hep aklinda tut, pentium 4 den beri CPU neredeyse asla bottleneck olmadi, her zaman ram ya da disk IO bottleneck oldu.

Ram ve disk in de soyle bir iliskisi var, ram in az ise, tum isletim sistemleri disk i ram in uzantisi gibi kullaniyor, unix de swap windows da pagefile.sys dosyasi.

Yani sen ram i doldurursan en az kullanilan ram bolgeleri diske yazilir (pageout), haliyle bir daha oralara erismek istediginde disk erisimi olur, o da inanilmaz yavas bir islem eski disklerde. 

SSD ler ciktiktan sonra, ram az bile olsa SSD hizli oldugu icin bilgisayar yine akar, ram kadar degil ama cildirtmaz. 

Ozetle eger ortada bir bottleneck yani zayif halka varsa o her zaman DISK tir, CPU uzerinden bosuna optimizasyon yapmaya calisma. Ne yapman gerektigini soyleyim.

Tek bir 2TB lik SSD alma, paralel is yapmak istiyorsan 256 GB lik 8 tane SSD al ve her sanal makina kendi SSD sinde calissin, boylece storage ayni kalmisken throughput yani IO 8 katina cikmis olur. Ram in de varsa CPU dan asla korkma.

Konunun Linki : http://www.tahribat.com/forum/sanal-cekirdekli-islemciler-ve-sanallastirma--vmw-221831

iyi çalışmalar.

1Eyl/160

Unable to create mutex Hatası çözümü

Merhabalar farkına vardım ki çok uzun zamandır blog da bir şeyler paylaşmamışım. Hatta paylaşıcam dediğim bir konuyu da atlamışım. Neyse konumuzu uzatmayalım da sorunun çözümüne gelelim.

Müşterilerimden bir tanesi Raporu excele alırken hata veriyor diyerek beni aradı. bir baktığımda daha önce karşılaşmadığım bir hata ile başbaşayım.

[IsolatedStorageException: Unable to create mutex. (Exception from HRESULT: 0x80131464)]


çok saçma bir şekilde debug yaparken de çalışmakta idi. Fakat sorunun ne oldugunu basit bir google araması ile ulaştım. OpenXml ve Unable Create mutex başlığında tam sorunumdan bahsedilmiş.

IIS (inetmgr) > application pools> WebSite >advanced setting>
Identity (in process mode)>choose an account with higher access [Ben LocalSystem olarak memnun kaldım]
Load User Profile > True [2008'de gerek olmaya biliyor.]

ilerde kendime lazım olur diye buraya not düşeyim dedim 🙂

iyi çalışmalar.

Kategori: Genel Yorum yok
10Mar/160

MIFARE DESFire EV2

Merhaba sevgili okurlarim, Sabah güne NXPnin yeni ürünü olan MIFARE DESFIRE EV2 versiyonun haberi ile uyandım. Sevgili ortağım Murat Mayda bu konuda bir webinar'ın haberi ile beni bilgilendirmiş saolsun. Hemen kayıt oldum. Merakla başlamasını bekliyorum.

22Şub/160

Google drive “One moment please…”

Merhabalar, iş amaçlı kullandığım bir sunucuların yedeklerini almak amaçlı yandex disk kullanıyordum. Fakat uçak krizinden sonra Rus ya ile aramız gerildi ve yandexin yamuk yapma ihtimalini göz ününde bulundurarak sunuculardan yandexin her şeyini sildim.

Fakat bir sunucum var ki google drive kurdum aktifleşmiyor. Sabahın bu saatinde bir çözüm buldum. Paylaşayım istedim.

  • Open the control panel (Denetim masasını aç)
  • Go to network and control (Ağ bağlantıları ve Ayarlar gibi bir şey olması lazım ona girin)
  • Go to Internet Options (Internet Ayarlarına girin)
  • Open Security Tab (Güvenlik sekmesine girin)
  • Click Trusted sites (Güvenilir siteler)
  • Click the "site" button (Siteler olması gereken bir buton olacak.)
  • copy & paste https://accounts.google.com to "Add this website to the zone" and click Add button (https://accounts.google.com adresini buraya ekleyin.)

2008 olan sunucumda bu ayarlar sorunu çözdü. Elimden gelen ile türkçeye çevirmeyi denedim. Fakat türkçe windows elimde olmadığı için biraz tahmınlere dayalı oldu. iyi çalışmalar dilerim.

Kaynağın orjinalı : http://shitohichiumaya.blogspot.com.tr/2013/04/my-solution-of-google-drive-hang-up-at.html

31Oca/160

Windows Form Uygulamasında Konsol açma

Merhaba Arkadaşlar,

Windows uygulaması içinde konsol açmak için bir örneği paylaşmak istedim. Tabi birazda dökümante olsunda gerektiğinde buradan bakarım mantığında paylaşıyorum.

using System;  
using System.Windows.Forms;  
using System.Text;  
using System.IO;  
using System.Runtime.InteropServices;  
using Microsoft.Win32.SafeHandles;  
 
namespace WindowsApplication  
{  
    static class Program  
    {  
        [DllImport("kernel32.dll",  
            EntryPoint = "GetStdHandle",  
            SetLastError = true,  
            CharSet = CharSet.Auto,  
            CallingConvention = CallingConvention.StdCall)]  
        private static extern IntPtr GetStdHandle(int nStdHandle);  
        [DllImport("kernel32.dll",  
            EntryPoint = "AllocConsole",  
            SetLastError = true,  
            CharSet = CharSet.Auto,  
            CallingConvention = CallingConvention.StdCall)]  
        private static extern int AllocConsole();  
        private const int STD_OUTPUT_HANDLE = -11;  
        private const int MY_CODE_PAGE = 437;  
 
        static void Main(string[] args)  
        {  
            Console.WriteLine("This text you can see in debug output window.");  
              
            AllocConsole();  
            IntPtr stdHandle=GetStdHandle(STD_OUTPUT_HANDLE);  
            SafeFileHandle safeFileHandle = new SafeFileHandle(stdHandle, true);  
            FileStream fileStream = new FileStream(safeFileHandle, FileAccess.Write);  
            Encoding encoding = System.Text.Encoding.GetEncoding(MY_CODE_PAGE);  
            StreamWriter standardOutput = new StreamWriter(fileStream, encoding);  
            standardOutput.AutoFlush = true;  
            Console.SetOut(standardOutput);  
 
            Console.WriteLine("This text you can see in console window.");  
 
            MessageBox.Show("Now I'm happy!");  
        }  
    }  
} 

AllocConsole fonksionu tekbaşınada konsolu açıyor, Fakat daha önceden Console.Write gibi bir konsol işlemi yaptırdı iseniz yeni acılacak konsol ekranı sadece siyah ekrandan ibaret bir pencere olacaktır. Aktif uygulamayı handle (tutamaç) edip. bu handle'den bir stream (akış) oluşturup bu stream den bir stream writer (yazıcı akışkan) oluşturup mevcut thread'e basarsak yeni ekelenecek console metinleri direk siyah ekranımıza düşecektir.

iyi çalışmalar dilerim.

 

Windows form da bir örnek de yapayım; Aşağıdaki örnette Timer1 1 saniyede bir ekrana saat tarih basmakta. Button3'e basıldığında Console ekranı gelecek ve saat tarih ekrana yazılmaya başlayacaktır. Bütün işlem button3'un onclick fonksiyonun icindeki adımlar.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.IO;
using Microsoft.Win32.SafeHandles;

namespace MifareHidEmilator
{
    public partial class frmMainForm : Form
    {

        [DllImport("kernel32.dll",
    EntryPoint = "GetStdHandle",
    SetLastError = true,
    CharSet = CharSet.Auto,
    CallingConvention = CallingConvention.StdCall)]
        private static extern IntPtr GetStdHandle(int nStdHandle);
        [DllImport("kernel32.dll",
            EntryPoint = "AllocConsole",
            SetLastError = true,
            CharSet = CharSet.Auto,
            CallingConvention = CallingConvention.StdCall)]
        private static extern int AllocConsole();
        private const int STD_OUTPUT_HANDLE = -11;
        private const int MY_CODE_PAGE = 437;  

        
        public frmMainForm()
        {
            InitializeComponent();
            //this.Hide();
        }

        private void button3_Click(object sender, EventArgs e)
        {
            AllocConsole();

            IntPtr stdHandle = GetStdHandle(STD_OUTPUT_HANDLE);
            SafeFileHandle safeFileHandle = new SafeFileHandle(stdHandle, true);
            FileStream fileStream = new FileStream(safeFileHandle, FileAccess.Write);
            Encoding encoding = System.Text.Encoding.GetEncoding(MY_CODE_PAGE);
            StreamWriter standardOutput = new StreamWriter(fileStream, encoding);
            standardOutput.AutoFlush = true;
            Console.SetOut(standardOutput);  
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            Console.WriteLine(DateTime.Now);
        }

        private void frmMainForm_Load(object sender, EventArgs e)
        {

        }
    }
}
Toplam 26 sayfa mevcuttur; 3. sayfayi okuyorsunuz...12345678...20...Son »