admin write
blogblogblogbloglocation loglocation logtag listtag listguest bookguest book
rss feed

와이프의 박사논문용 R 코드를 봐주다보니 INF 때문에 코드가 돌지 않아 애를 먹고 있었다.


INF는 무한대를 뜻하는데 이값을 특정 코드의 가중치로 주려다가 문제가 된 것 같았다.



문제 해결방법은


1. 무한대가 나오지 않도록 가중치 계산 조건을 바꾸거나


2. 무한대의 값을 큰 값으로 대차시키는 것


이었는데, 1번으로는 문제를 해결할 수 없어 2번 방법으로 문제를 해결했다.



와이프는 lapply(조건값, function(x), 1/x^2) 함수를 사용하였는데


여기서 1/x^2의 일부값이 INF로 리턴되어 문제가 있었다.


그래서 아래와 같이


lapply(조건값, function(x), {replace(1/x^2, is.infinite(x), 1000000)})과 같이 코드를 수정하여 문제를 해결하였다.


비슷한 문제로 infinite, na, nan값이 리턴되어 함수가 돌지 않는다면


아래와 같이,


replace(x, is.infinite(x),NA)


{ replace(x, is.infinite(x) | is.na(x), 0) }


{ replace(x, is.infinite(x) | is.na(x)|is.nan(x), 0) }를 활용하면 해결할 수 있지 않을까 생각한다.

20160826

2016. 8. 26. 00:46

- 욕구

 

동생이 물어왔다. 갖고 싶은게 없냐고.

생각해보면 최근에 갖고 싶은게 없는 것은 아니다. 손으로 움켜쥘수 있는 것을 찾고 있는게 아니었다. 더 큰 것을 찾고 있다.

집이라던지, 훌쩍 떠날 수 있는 장기간의 해외 여행이라던지.

현재는 그냥 생각만 할 수 있고 실제로 가지기에는 힘든 것들이다.

이러한 것들에 대한 집착을 하지 않으려고 노력하다보니 다른 것들에 대한 욕망도 사그러 드는 것 같다. 그저 시온이가 올바르게 커나가길 바랄 뿐.

 

 

- 자리

 

회사를 다니다보면 여러가지 씁쓸한 이야기를 듣는다.

나에 대한 이야기를 듣는다면 그 것이 가장 씁쓸하겠지만 다행히도 그런일들은 별로 없었고 최근에 들은 것은 역시 윗 사람 이야기다.

직접적으로 이야기하기 그래서 비유해보면 이렇다.

 

누울 자리를 보고 발을 펴라는 이야기가 있다.

윗사람이 지금 누우려 한다.

아랫사람들은 윗사람이 누우려는 방향이 우리를 위하려는 방향인줄 안다.

하지만 윗사람도 결국 본인을 위해 누울자리를 보고 발을 피고 있다.

온자리가 원래 본인이 원하는 자리가 아니니까...

 

 

- 블로그

 

블로그를 다시 시작했다.

마음의 여유가 생긴 것은 아닌데, 글을 쓰고 싶어졌다.

보고서만 쓰고 생각하는 삶은 너무 팍팍하다.

나 자신을 위한 글을 쓰고 싶었다.

또 하나의 싸이라고 봐야하나.

요새는 인스타 하면서 글도 아니고 단어형태의 해쉬로 더 짧막하게 표현하던데.

나도 이제 노땅이라서 사진으로 표현하는 인스타와 센스있는 해쉬태그로 내마음을 표현하기 보다는

길게는 안써도 뒤져보면 그때의 그 마음이 기억나는 글들을 남겨보고 싶다.

와이프는 시온이 일기 쓰라고, 100일 일기 쓰면 출판도 해준다고 쓰라고 종용하지만

까짓거 이거 써보고 이거 많이 써놓으면 개인출판도 해보지 뭐.

근데 이자리에 담겨 있는 10년 전의 덴마크 생활, 9년 전의 구직 생활 이야기 너무 재미있다.

더 길게 남기지 못했던게 아쉽네...

레드 로얄비어 마시면서 폴더플러스에서 무도나 영화나 다운받을 시간에 이거나 더 쓸껄...

지금이라도 시작해 보자.

 

 

 

Network Availability (Reliability)
- 네트워크가 서비스 가능한 시간의 확률을 말하는 품질 지표 기준

Availability = MTBF / (MTBF + MTTR)

\MTBF (Mean Time Between Failure)
- 네트워크가 서비스 중인 시간 (서비스 중단 시간 제외)
MTTF (Mean Time to Failure)
- 네트워크가 서비스 중단인 시간
MTTR (Mean Time to Repair)
- 네트워크가 서비스 중단되고 복구될 때 까지의 시간


EitherChannel

2009. 3. 26. 15:01

이더채널이란 port trunking 기술로 주로 시스코 스위치에서 사용된다. 몇개의 물리적 이더넷 링크를 그루핑해서 하나의 논리적 이더넷 링크를 만드는데 이렇게 하는 목적은 fault-tolerance와 스위치간, 라우터간, 서버간의 빠른 링크 속도를 보장하기 위함이다. 이더채널은 두개에서 8개의 fast ethernet 사이에서 만들어질수 있다. 그 이상의 port는 다른 port가 죽었을 경우 active 될 수 있다. 이더채널은 주로 백본 네트워크에 사용된다. 그러나 종단 기기를 연결할 때도 사용되곤 한다. 이더채널의 제한은 aggregation되는 group내의 모든 물리적 포트는 같은 스위치위에 있어야 한다는 것이다. 하지만 SMLT 프로토콜은 이 제한되는 부분을 극복했다.
이더채널의 장점
이더채널의 가장 큰 장점은 대역폭에 있다. 8개의 활성화된 포트는 총 800메가, 8기가 혹은 80기가의 대역폭을 만들 수 있다.
Fault-tolerance의 경우, 만약에 link 하나가 fail 되도, 이더채널 기술은 자동으로 다른 남아 있는 링크에 트래픽을 재분산 시킨다. 이 자동재분산은 1초 이하의 시간이 걸리며 이것은 네트웤 응용프로그램이나 엔드유저에게 별 영향이 없다.

cygwin...

2008. 9. 25. 23:48

x-window를 쓰고 싶을 때,
startx를 쓰도록 한다. 괜히 startxwin.bat썼다가 삽질만 주구장창 -_-;;;;
아놔...;;;

이제 시뮬레이션의 첫걸음인가..;;

1.한 종단이 data segment를 다른 종단으로 전송할때, 다음에 받을 것으로 예상하는 다음 seq num을 주는 ack을 같이 보낸다. 이렇게 하면 필요한 segment의 갯수를 줄일 수 있고, traffic을 감소시킨다.
2.리시버가 보낼 데이터가 없고 segment를 순서대로 받았을때, 그리고 전의 segment가 이미 ack되었을 때, 리시버는 다른 segment를 받을때까지나 일정시간(500ms)가 지날때 까지, ack를 보내는것을 늦춘다. 다시말하면, in-order한 데이터를 받았다면 리시버는 ack보내는 것을 지연시킬 필요가 있다. 이렇게 하면 ack가 추가 트래픽을 유발하는 것을 막을 수 있다.
3.receiver가 기대했던 seq num을 가진 segment가 도달하고 previous in-order segment가 ack되지 않았을대, receiver는 바로 ack을 보낸다. 2개 이상의 in-order unack segment가 존재하지 않게 하는 것이다. 이것은 불필요한 retransmission을 막는다.
4.seg가 예상보다 높은 out-of-order seqnum까지 도착했을 때, receiver는 바로 다음 expected segment num을 알려주는 ack을 보낸다. 이것은 missing segment에 대한 fast retransmission을 lead 한다.
5.missing seg가 도착했을때, receiver는 expected next seq num을 알려주는 ack을 보낸다. 이 것은 receiver가 missing했던 seg를 받았다는 것을 알려준다.
6. duplicate seg가 도착했을때, receiver는 즉시 ack을 보낸다. 이것은 ACK 자체가 LOST되었을때, 몇몇 문제를 해결한다.

SCTP의 congestion control의 경우, multi-homing을 지원하기 때문에 양 쪽의 endpoint에 다른 data path가 생길 수 있다. (primary addr에서 secondary addr로 바뀔 때) 그러므로, 이상적으로 이것을 구현하려면, 서로 다른 path에 다른 congestion control parameter 가 필요하다.

현재의 SCTP congestion control 알고리즘은 :
sender는 같은 dest addr을 upper layer에서 알려짐 받은 대로 전송하지만, SCTP는 dest addr가 inactive할 경우, alternative dest로 전송하는데 이럴 경우 다른 addr로 전송하게 된다.
sender는 분리된 congestion control parameter set를 서로 다른 dest addr별로 가지고 있다. (각각의 dest에 대해, not source-dest)
이 parameter 들은, 오랫동안 쓰이지 않을 경우 파괴된다.
각각의 dest addr에 대해, endpoint는 첫번째 transmission때 slow-start로 전송하기 시작한다.
SCTP에서는 4개의 Duplicated SACK을 전송 받을 때, fast retransmission을 수행한다.

TCP의 경우, 한 TCP session에서 upper-layer protocol로 data를 올릴 때, 순서대로 (in-sequence) data를 전송한다. TCP에서 gap이 발생한다면, gap이 채워질 때 까지 기다렸다가 data를 전송한다.(즉, missing data보다 seq num이 위일 때 까지)
SCTP의 경우, TSN 상, gap이 발생해도 그냥 upper layer로 전송한다. 단, 같은 stream임을 나타내는 SSN이 particular stream에 대해 순서대로 있을 때 전송한다. 혹은 unordered delivery가 indicated 되도 올린다. 이것은 cwnd에는 영향을 미치지 않지만, rwnd에는 영향을 미칠 수 있다.
(이말은 즉, 전체 window size에는 영향을 미칠 수 있다는 이야기)

SCTP의 congestion control은 association 별로 이루어 진다.( not  to an individual stream)
TCP처럼, SCTP도 다음 세가지의 variable로 transmission rate을 정한다.

Receiver advertised window size, RWND
(incoming packet에 대한 buffer 크기에 따라 receiver가 결정, association별로 가지고 있음)
Congestion control window, CWND
(network condition을 기반으로 sender에 의해 결정 됨, destination addr별로 가지고 있음)
Slow-start threshold, SSTHRESH
(sender에 의해 이용 되는 것으로 slow start와 congestion avoidance 단계 결정할 때 쓰임, dest addr 별로 가지고 있음)
partial_byte_acked (congestion avoidance 단계에서 cwnd 조정을 쉽게하기 위해 쓰인다.)

SCTP에서는 각각의 Dest addr에 대해 ssthresh와 partial_byte_acked를 가지고 있다.

Slow-start in SCTP
Network의 available capacity를 측정하기 위해서는 slow start는 transfer 시작에 쓰인다. 혹은,  retransmission timer에 의해 발견된 loss를 repair하기 위해 쓰이기도 한다.

Congestion avoidance in SCTP
partial_bytes_acked를 0으로 세팅
cwnd가 ssthresh보다 크고, SACK이 cumultative ack point를 증가시킬 때, partial_bytes_acked 를 증가시킨다.
SACK이 도착하기 전이고 partial_bytes_acked가 cwnd보다 크거나 같아 지면 SENDER가 cwnd를 증가시키고, partial_bytes_acked를 partial_bytes_acked -cwnd 로 reset 시킨다
slow start와 같이 sender가 주어진 transport addr에  data를 전송하지 않을때, transport의 cwnd이 RTO당 max로 조정된다.(cwnd/2, 2*MTU)

*RTO (Retransmission TimeOut)
lost segment를 다시 전송하기 위해 TCP는 RTO를 조절하는 retransmission timer(segment의 ack을 위한 기다리는 시간)를 사용한다. TCP가 segment를 전송할때, retransmission timer를 몇몇의 특별한 segment에 대해 만든다.
특별한 segment의 case
1.timer가 시작하기 전에, 만약에 어떤 segment 의 ack을 받았다면, timer는 파괴된다.
2.ack이 도착하기전에 timer가 시작하면, segment는 retransmit되고 timer는 reset된다.
RTO의 경우, Smoothed RTT와 RTT Deviation을 이용하여 구한다.
RTO = Smoothed RTT + 4 . RTT Deviation

*RTT (Round Trip Time)
RTO를 계산하려면, RTT를 계산해야한다. 그러나 TCP에서의 RTT계산은 복잡한 process임
- Measured RTT
우리는 send a segment와 receive an ack이 얼마나 걸리는지 알아야 한다. 이것이 Measured RTT인데, 그러나 그들의 one-to-one relationship을 맺고 있지는 않다. 몇몇 segment는 같이 ack되기도 한다. mearsured rtt는 비록 ack이 다른 segments도 같이 ack되더라도 이 ack에 걸리는 time과 segment가 dest에 도착하는 시간을 포함한다. 이 RTT 측정에는 다른 measurement가 시작되지 않는다.
-Smoothed RTT
현재의 인터넷은 그 변동이 많이 심하기 때문에 Measured RTT의 경우 RTO목적에 적합하지 않다. Smoothed RTT가 조금더 적합한데, 이 것은 Measured RTT의 평균에 Smoothed RTT를 첨가해 계산한다.
-RTT Deviation
Smoothed RTT와 Measured RTT를 이용하는데, 대부분의 implementation은 이것을 이용한다.