Tuesday, April 21, 2015

Related Work and idea

Research -->  fault prediction/avoidance จะสนใจใน fault
                -->  runtime verification สนใจในพฤติกรรมที่นำไปสู่ failure
                       เพราะ failure สามารถหลีกเลี่ยงได้  แม้จะเกิด fault ขึ้น

1.งานพวก Runtime verification มีจุดประสงค์เดียวกัน แต่ต่างกระบวนการสร้างกฏที่เกิดขึ้น
   เช่น สร้าง specification จากไดอะแกรมต่าง ๆ   สร้างจากการเรียนรู้  สร้างจาก code เป็นต้น
   ซึ่งจำเป็นต้องรู้ event ที่ทำให้ state ปกติ  และ event ที่ทำให้ state ไม่ปกติ

2. งาน fault prediction ที่ใช้ ฺBN
    -  ใช้จำนวน method call, จำนวนบรรทัดของโค้ดใน method และอื่นๆ เป็นพารามิเตอร์ สำหรับ BN ในการเรียนรู้
    -  ใช้ attribute ของระบบ เช่น
             redundancy  -->  รอขยายความ
            constrained-ness --> รอขยายความ
            personnel turnover  -->  รอขยายความ

   -  วิเคราะห์ algorithm แล้วนำมา combine เพื่อทำนาย error  แต่ใช้ระดับที่สูงกว่าข้อมูลจากโปรแกรม
   -  นำเสนอการเรียนรู้และวิเคราะห์หาสาเหตุของการเกิด failure แต่ใช้กับ CPU usage
   - ใช้ model และ algorithm เพื่อวิเคราะห์หา trace log และทำนาย  root cause (งานนี้ใช้เครื่องมือต่าง จุดประสงค์ต่าง)


การจะกำหนด event หรือ behavior ต้องรู้ relationship

relationship เก็บได้จาก  sources(document, specification, expert) or การเรียนรู้


   sources(document, specification, expert) or การเรียนรู้
                                        |
                                        |
                                       V
                              relationship
                                        |
                                        |
                                       V
                         event หรือ behavior

***
งานของกวาง  ใช้ Bayesian Network เพื่อสร้าง rule จาก behavior ของโปรแกรม เพื่อจับ failure และหลีกเลี่ยงก่อนที่เหตุการณ์จะเกิดขึ้น

โดย BN เรียนรู้ความสัมพันธ์ และความน่าจะเป็น (ใช้ WEKA)จาก log ของตัวแปร  แล้วจึงสร้างกฏขึ้นมา

1. Data collection  ใช้การ instrument code และเพิ่มตัวแปร "colliding" เพื่อเก็บ track ของ state ที่นิยามเอาไว้ว่าจะเกิด failure  (ข้อสังเกตส่วนของการเพิ่มตัวแปรมีผลต่อการทำงานของโปรแกรมหรือไม่) 
เก็บเพื่อเอาไปเป็นพารามิเตอร์ในการเรียนรู้


2. ใช้ BN เรียนรู้ว่า event ไหนที่จะนำไปสู่การเกิด failure

3.evaluation ทดสอบประสิทธิภาพของความสัมพันธ์ที่ได้

4. สร้าง rule  (ใช้ IF-THEN)







ความต่างของ fault กับ failure

failure  คือ ส่วนประกอบของพฤติกรรมของระบบ ที่ต่างไปจากพฤติกรรมที่ต้องการ

fault   คือ  เงื่อนไขที่ถ้าเกิดขึ้นแล้ว จะทำให้ระบบหรือส่วนของระบบทำงานล้มเหลว
 (ส่วนที่นิยามเพิ่มเติม ก็คือ เป็น root cause ของ failure)


- ถ้ามีพฤติกรรมที่เกิดขึ้นต่างจากที่ต้องการ  =  failure
- state ที่ไม่ปกติ                          =  failure

Begin again

"You got no second chances in life"

cr:Kazaam

Wednesday, October 31, 2012

ตัวอย่างโค้ดที่ใช้ ExecutorService


Example using ExecutorService:
public class TaskThreader {
    class DoStuff implements Callable {
       Object in;
       public Object call(){
         in = doStep1(in);
         in = doStep2(in);
         in = doStep3(in); 
         return in;
       }
       public DoStuff(Object input){
          in = input;
       }
    }

    public abstract Object doStep1(Object input);    
    public abstract Object doStep2(Object input);    
    public abstract Object doStep3(Object input);    

    public static void main(String[] args) throws Exception {
        ExecutorService exec = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
        ArrayList<Callable> tasks = new ArrayList<Callable>();
        for(Object input : inputs){
           tasks.add(new DoStuff(input));
        }
        List<Future> results = exec.invokeAll(tasks);
        exec.shutdown();
        for(Future f : results) {
           write(f.get());
        }
    }
}
โค้ดของคุณคนนี้ >> http://stackoverflow.com/users/95122/bobmcgee
- ExecutorService อยู่ใน package ของ java.util.concurrent 
-  Runtime.getRuntime().availableProcessors()  << อันนี้น่าสนใจ ทำให้เรียกหมายเลขจาก pool (รึป่าว อิอิ)
ดูอีกทีจ้ะ http://stackoverflow.com/questions/1223072/how-do-i-optimize-for-multi-core-and-multi-cpu-computers-in-java

Hyper Threading คืออะไร

Hyper Threading จะทำให้ซอฟท์แวร์สามารถใช้ ซีพียูเสมือนมี 2 ซีพียูใน 1 ซีพียูจริง โดยจากมุมมองของซอฟท์แวร์ จะหมายถึงระบบปฏิบัติการและโปรแกรมจะสามารถกำหนดให้โปรเซสหรือเทรดหลายเทรดไปที่โปรเซสเซอร์หลายๆ ตัวเสมือนเครื่องคอมพิวเตอร์เครื่องนั้นมีซีพียูหลายๆตัว เลยทีเดียว  และถ้ามองจากมุมของสถาปัตยกรรมคอมพิวเตอร์มันจะหมายถึงการสามารถทำ instructions จาก logical processors ทั้งสองตัวโดยใช้ทรัพยากรในการทำงานร่วมกันได้ 

(อันนี้ ลอกมาจาก http://httwww.vcharkarn.com/vblog/115394/1)

แล้ว core 2 duo ไม่เห็นเป็นซีพียู 2 ตัวหรอ .. เฮ้องง




ความแตกต่าง ของ cpu (intel)

ความแตกต่าง ของ cpu (intel)

*Dual Core มี 2core cpu ตัวเดียว รองรับ multitask (พูดง่าย ๆ ก็มี 2 แกน)
*Core Duo นั้นจะเป็นการ เอา หน่วยประมวลผล 2 ตัวมารวมเข้าด้วยกัน บนชิพ 1 ตัว มี L2 เป็นของตัวใครตัวมัน
*Core 2 Duo นั้น มีหลักการคล้าย ๆ กับ Core Duo แต่รวมเอา L2 ไว้ด้วยกัน 
 *Core i3 ก็มี 2 แกน เหมือน Core 2 Duo
Core 2 Duo และ Core i3 เป็น CPU แบบ Dual-Core เหมือนกัน
แต่ Core i3 มี 2 core 4 threads
 , Core i5 มี 4 core 4 threads,
Core i7 มี 4 core 8 threads
จะย้าย ตัว Memory Controller รวมเข้าไปในตัว CPU
มีผลทำให้ CPU ติดต่อกับ RAM และ VGA ได้รวดเร็วมากขึ้น

core i3 มี Hyper Threading 
core 2 duo ไม่มี Hyper Threading 

เออแน่ะ แล้วทีนี้ ไอ้เจ้า core i3 กับ core 2 duo มี 2 คอ เหมือนกันแล้วมันต่างกันยังไงล่ะเนี่ย :D