On Sun, 2005-02-13 at 17:35 +0800, Andrew Hadinyoto wrote:
> Hi,
> 
> durung_lulus wrote:
> 
> > memang sepertinya ada hubungan dengan time slice dari OS-nya, dan 
> > sayangnya saya ngga tahu cara setting timeslice ini.  Kebetulan saya 
> > make freebsd 5.1.
> > 
> > Sebenarnya permasalahan saya seperti ini, saya membuat 2 buah program.
> > program pertama adalah sniffer, yang selalu menyimpan packet yang datang 
> > dari eth kedatabase/file/memory. Dan process ini harus meminimalisasi 
> > packet loss, karena akan sangat berpengaruh pada program yang kedua.
> > 
> > Program yang kedua akan berjalan, jika sebuah koneksi telah berakhir dan 
> > melakukan analisa koneksi yang berakhir tersebut. Berhubung pada tahap 
> > ini processnya cukup banyak perhitungan matematis, maka jika menggunakan 
> > loop program bagian pertama akan ketinggalan dalam menangkap paket, dan 
> > dapat membuat program kedua salah dalam analisa.
> > 
> > Mungkin ada masukan gimana enaknya metode untuk invoke/signalling 
> > program ke-2?
> 
> Anda perlu metode sinkronisasi "Producer/Consumer" atau dikenal juga
> sebagai "Bounded Buffer".
> 
> Intinya, anda pake semacam buffer, lalu buffer tersebut di sinkronisasi.
> Program pertama sniff lalu datanya disimpan di buffer. Program kedua
> ngebaca dari buffer tersebut.
> Kalo buffer lagi kosong - program no. 2 di-block (berhenti)
> Kalo buffer ada isisnya - program no. 2 disignal utk memprosess
> Kalo buffer-nya penuh - program no. 1 di-block (mungkin dalam kasus
> anda, sniffernya berhenti sniff dulu).
> 
> Utk thread, anda bisa lihat di: man pthread_cond_wait (dan kawan2)
> Kalo pake interprocess communication: man sem_wait (dan kawan2)
> 
> Salam,
> Andrew...

hmm... saya agak kurang mengerti tentang bentuk aplikasi yang dibuat,
sepertinya program sniffer itu mencegat per koneksi ya??... usulan dari
sdr. Andrew memang bagus, tapi saya punya alternatif lain...

Dari pembicaraan, nampaknya ada 2 proses yang terlibat, yaitu sniffer
dan analyser... dari jalannya proses, nampaknya proses analisa hanya
akan dijalankan sesaat setelah proses sniff - yang dalam hal ini
dilakukan per koneksi - selesai dilakukan... benar begitu?

nah... menurut saya, antar proses sniff dan analisa tidak perlu dibuat 2
thread terpisah, karena hal itu tidak akan efisien, karena kedua proses
itu tidak saling independent, sehingga sebaiknya keduanya dijadikan
dalam 1 thread yang sama... sehingga secara kasar gambar dari proses
tersebut adalah sbb:

          1 thread
    _________^_________
   /                   \
   _________ __________          _____________
  |         |          |        |             |
  | Sniffer | Analyser |------->| Result File |
  |_________|__________|        |_____________|
       |         ^
       |         |
       v         |
     _______________
    |               |
    |   LOG File    |
    |_______________|


proses analisa akan dijalankan sesaat setelah proses sniff selesai,
dengan membaca LOG yang dibuat oleh sniffer, maka analisa dilakukan dan
hasil analisa akan disimpan ke dalam Result File...

setiap hasil sniff akan disimpan ke dalam sebuah LOG File, dimana untuk
masing2 thread akan memiliki LOG File-nya sendiri2... Sedangkan hasil
analisa akan dituliskan ke dalam 1 Result File yang bersifat GLOBAL, dan
seluruh thread akan memposting hasilnya ke dalam Result File tersebut...
LOG File bersifat sementara, sehingga apabila thread tersebut selesai
melakukan tugasnya, maka LOG File akan dihapus, sehingga akan menghemat
space di harddisk...

bagaimana dengan koneksi yang lain? menurut saya terdapat 1 main thread
yang bertanggung-jawab untuk melakukan monitoring apabila terdapat
koneksi baru, semacam daemon lah... nah apabila ada koneksi baru, maka
akan dibuatkan thread baru yang bertugas untuk sniff dan analisa
terhadap koneksi baru tersebut... sedangkan main thread akan kembali
melakukan monitoring untuk koneksi2 yang akan dibuka...

Secara diagram kira2 seperti ini:

                              _____________
                             |             |
(Waiting incoming connection)| Main Thread |
                             |_____________|
                                    |
             _______________________|______________________
            |                       |                      |
            v                       v                      v
   ____________________    ____________________
  |                    |  |                    |
  | Sniffer & Analyser |  | Sniffer & Analyser |     ... (n connection)
  |   (Connection 1)   |  |   (Connection 2)   |
  |____________________|  |____________________|
            |                       |                      |
            |_______________________|______________________|
                                    |
                                    v
                              _____________
                             |             |
                             | Result File |
                             |_____________|

dengan begitu, paket tidak mungkin loss, sedangkan pembuatan thread juga
tidak terlalu ribet di penggunaan state2 yang terlalu banyak...

cuma kekurangan dari metode ini adalah banyaknya memory yang digunakan
apabila koneksi yang terjadi banyak sekali dan long term connection
misal: database connection, tapi untuk web connection, karena web
connection cuman sebentar, maka cara ini cukup layak untuk dipakai...

Semoga membantu...

-- 
Danny Kurniawan
-----BEGIN GEEK CODE BLOCK-----
Version: 3.12
GCS/CM/E/IT d+() s+:+ a- C++>+++$ UL+++(++)>++++ P!(+++) L+++>++++>$ E-- W++>$ N
o-- K- w--(+++) O++@ M@ V? PS PE-@ Y+ PGP@ t++ 5+@ X+++(++) R tv+ b
+++(++) DI? D++@ G+>++ e++ h- r++ y z- 
------END GEEK CODE BLOCK------


-- 
Berhenti langganan: [EMAIL PROTECTED]
Arsip dan info: http://linux.or.id/milis.php

Kirim email ke