KR102026128B1 - 데이터 집합을 카운팅하는 방법 및 시스템 - Google Patents

데이터 집합을 카운팅하는 방법 및 시스템 Download PDF

Info

Publication number
KR102026128B1
KR102026128B1 KR1020170161709A KR20170161709A KR102026128B1 KR 102026128 B1 KR102026128 B1 KR 102026128B1 KR 1020170161709 A KR1020170161709 A KR 1020170161709A KR 20170161709 A KR20170161709 A KR 20170161709A KR 102026128 B1 KR102026128 B1 KR 102026128B1
Authority
KR
South Korea
Prior art keywords
memory block
packets
layer
counting
memory
Prior art date
Application number
KR1020170161709A
Other languages
English (en)
Other versions
KR20190062987A (ko
Inventor
장룡호
신동오
양대헌
Original Assignee
주식회사 더볼터
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 주식회사 더볼터 filed Critical 주식회사 더볼터
Priority to KR1020170161709A priority Critical patent/KR102026128B1/ko
Priority to PCT/KR2017/013903 priority patent/WO2019107608A1/ko
Publication of KR20190062987A publication Critical patent/KR20190062987A/ko
Application granted granted Critical
Publication of KR102026128B1 publication Critical patent/KR102026128B1/ko

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L43/00Arrangements for monitoring or testing data switching networks
    • H04L43/08Monitoring or testing based on specific metrics, e.g. QoS, energy consumption or environmental parameters
    • H04L43/0876Network utilisation, e.g. volume of load or congestion level
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/90Buffering arrangements
    • H04L49/9084Reactions to storage capacity overflow
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/90Buffering arrangements
    • H04L49/9036Common buffer combined with individual queues
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/90Buffering arrangements
    • H04L49/9063Intermediate storage in different physical parts of a node or terminal
    • H04L49/9078Intermediate storage in different physical parts of a node or terminal using an external memory or storage device

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Environmental & Geological Engineering (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

데이터 집합을 카운팅하는 방법 및 시스템이 개시된다. 네트워크 트래픽을 데이터 플로우(data flow) 별로 카운팅(counting)하기 위해 컴퓨터로 구현되는 카운팅 방법에 있어서, 서로 다른 데이터 플로우 별로 미리 지정된 일정한 크기의 메모리 공간을 할당하는 단계, 할당된 메모리 공간 중 다른 데이터 플로우와 공유되는 일부 공간에 해당하는 메모리 블록을 이용하여 데이터 플로우에 속하는 패킷의 개수를 누적시키는 단계, 및 상기 메모리 블록이 포화(saturation) 상태이면 누적된 상기 패킷의 개수를 누적 테이블에 누적시키는 단계를 포함하고, 상기 메모리 블록은, 상기 할당된 메모리 공간 중 CPU가 한 번에 읽을(reading) 수 있는 워드(word)에 해당하는 메모리 공간을 나타내는 한 워드(word) 이내로 제한(confinement)될 수 있다.

Description

데이터 집합을 카운팅하는 방법 및 시스템{METHOD AND SYSTEM FOR COUNTING DATA SET}
본 발명의 실시예들은 스트림(stream) 형태의 대규모 데이터 플로우(data flow) 별로, 수신되는 패킷의 개수를 카운팅하는 기술에 관한 것이다.
네트워크에서 하나의 출발지 IP 주소에서 몇 개의 패킷을 보냈는지를 확인하기 위해 근사 카운팅(approximate counting) 기술이 이용된다.
일반적으로, 스트림 형태의 데이터 집합(즉, 객체 집단)을 서로 다른 플로우 별로 근사 카운팅(approximate counting)하기 위해서는 테이블(table)이 이용된다. 예를 들어, 라우터(router) 등의 전자 장치에 패킷이 수신될 때마다 카운터와 함께 테이블에 저장해 놓는 것이다. 새로운 패킷이 수신된 것이면, 테이블에 새로운 엔트리(entry)를 추가하고 카운터는 1로 설정한다. 만약, 이미 수신된 패킷이면 해당 카운터를 하나 증가시키면 되고, 테이블을 검색하여 패킷이 몇 개 수신되었는지를 카운팅한다.
그러나, 최근에는 LIVE 방송 등 인터넷을 통해 송수신되는 데이터의 양이 너무 많아졌으며(big data 처리), 라우터의 SRAM은 메모리 공간이 작아 LIVE 방송 등과 같이 스트림 형태로 연속하여 수신되는 데이터들을 어디로 보내야할지(즉, 다음 라우터로 라우팅해야 할지)를 신속하게 처리하는데 어려움이 존재한다.
따라서, 스트림 형태의 대규모 데이터가 수신되는 경우에, SRAM 등과 같이 작은 메모리 공간을 이용하는 전자 장치에서 수신되는 데이터를 신속하게 라우팅 가능하도록, 데이터 플로우 별로 패킷의 개수 및 크기를 카운팅(counting)하는 기술이 요구된다.
한국공개특허 제10-2007-0121219호는 IP 망에서의 패킷 어카운팅 검증 시스템 및 그 검증 방법에 관한 것으로, 패킷 수집부에서 수집된 패킷들에서 비교대상 IP 어드레스를 갖는 패킷들을 추출하고, 추출된 패킷들을 플로우로 재구성하고, 플로우들의 데이터량을 비교하여 어카운킹 정확성을 검증하는 기술을 개시하고 있다.
[1]A Linear-Time Probabilistic Counting Algorithm for Database Applications, KYU-YOUNG WHANG, ACM Transactions on Database Systems, Vol. 15, No. 2, June 1990.
본 발명은 고속 라우터와 같이 메모리 공간이 제한적인 전자 장치에서, 네트워크 트래픽을 데이터 플로우(data flow) 별로 측정하는 기술에 관한 것이다. 즉, 데이터 플로우 별 패킷의 개수 및 패킷의 크기(용량, bytes)을 카운팅하는 기술에 관한 것이다.
네트워크 트래픽을 데이터 플로우(data flow) 별로 카운팅(counting)하기 위해 컴퓨터로 구현되는 카운팅 방법에 있어서, 서로 다른 데이터 플로우 별로 미리 지정된 일정한 크기의 메모리 공간을 할당하는 단계, 할당된 메모리 공간 중 다른 데이터 플로우와 공유되는 일부 공간에 해당하는 메모리 블록을 이용하여 데이터 플로우에 속하는 패킷의 개수를 누적시키는 단계, 및 상기 메모리 블록이 포화(saturation) 상태이면 누적된 상기 패킷의 개수를 누적 테이블에 누적시키는 단계를 포함하고, 상기 메모리 블록은, 상기 할당된 메모리 공간 중 CPU가 한 번에 읽을(reading) 수 있는 워드(word)에 해당하는 메모리 공간을 나타내는 한 워드(word) 이내로 제한(confinement)될 수 있다.
일측면에 따르면, 상기 할당된 메모리 공간은 멀티 레이어(multi-layer) 구조를 가질 수 있다.
다른 측면에 따르면, 상기 메모리 블록을 이용하여 데이터 플로우에 속하는 패킷의 개수를 누적시키는 단계는, 데이터 플로우에 속하는 적어도 하나의 패킷이 도착할 때마다 상기 메모리 블록에 속하는 어느 하나의 비트를 미리 지정된 특정값으로 변경하는 단계, 및 상기 메모리 블록에 속하는 복수의 비트들의 개수 및 상기 특정값으로 변경된 비트의 개수에 기초하여 상기 메모리 블록이 포화 상태인지 여부를 확인하는 단계를 포함할 수 있다.
또 다른 측면에 따르면, 상기 패킷의 개수를 누적 테이블에 누적시키는 단계는, 상기 메모리 블록이 포화 상태로 확인되면, 상기 메모리 블록에 누적된 패킷의 개수를 카운팅하는 단계, 및 상기 메모리 블록에 누적된 패킷의 개수를 상기 누적 테이블에 누적시키는 단계, 및 상기 메모리 블록을 초기화하여 재사용하는 단계를 포함할 수 있다.
또 다른 측면에 따르면, 상기 메모리 블록에 누적된 패킷의 개수를 카운팅하는 단계는, 상기 메모리 블록에 속하는 복수의 비트들을 대상으로, 상기 특정값으로 변경되지 않은 비트의 개수를 카운팅하는 단계, 및 카운팅된 상기 비트의 개수를 기반으로 출발지 IP 주소에서 몇 개의 패킷을 전송했는지를 카운팅하는 단계를 포함할 수 있다.
또 다른 측면에 따르면, 상기 패킷의 개수를 누적 테이블에 누적시키는 단계는, 상기 메모리 블록이 포화(saturation) 상태이면, 상기 메모리 블록에 속하는 비트들 중 노이즈(noise)에 해당하는 비트를 제외한 나머지 비트에 누적된 패킷의 개수를 상기 누적 테이블에 누적시키고, 상기 노이즈는, 해당 비트가 다른 데이터 플로우에 속하는 패킷과 공유됨에 따라 미리 지정된 특정값으로 변경된 것을 나타낼 수 있다.
또 다른 측면에 따르면, 상기 패킷의 개수를 누적 테이블에 누적시키는 단계는, 상기 메모리 블록이 포화(saturation) 상태이면, 상기 메모리 블록이 속하는 상기 할당된 메모리 공간 중 상기 메모리 블록을 제외한 나머지 공간을 대상으로, 미리 지정된 특정값으로 변경된 비트의 비율을 상기 메모리 블록의 평균 노이즈 비율로 계산하는 단계, 계산된 상기 평균 노이즈 비율에 기초하여 상기 메모리 블록에 포함된 노이즈의 개수를 카운팅하는 단계, 상기 메모리 블록에 누적된 패킷의 개수 중 상기 노이즈의 개수를 제외시킴으로써, 상기 메모리 블록에 실제 누적된 패킷의 개수를 계산하는 단계, 및 계산된 상기 실제 누적된 패킷의 개수 및 해당 데이터 플로우의 ID를 연관하여 상기 누적 테이블에 누적시키는 단계를 포함할 수 있다.
또 다른 측면에 따르면, 상기 패킷의 개수를 누적 테이블에 누적시키는 단계는, 상기 메모리 블록에 속하는 비트들 중 미리 지정된 특정값으로 변경된 비트의 비율이 상기 평균 노이즈 비율이 될 때까지, 상기 특정값으로 변경된 상기 메모리 블록에 속하는 비트들 중에서 선택된 비트를 초기화하는 단계를 더 포함할 수 있다.
또 다른 측면에 따르면, 상기 패킷의 개수를 누적 테이블에 누적시키는 단계는, 상기 메모리 블록이 포화(saturation) 상태이면, 포화를 발생시킨 패킷의 크기(size) 및 상기 메모리 블록에 누적된 패킷의 개수에 기초하여 해당 데이터 플로우의 크기를 계산하는 단계, 및 계산된 상기 크기를 데이터 플로우의 ID 및 해당 데이터 플로우와 관련하여 누적된 패킷의 개수와 함께 연관하여 상기 누적 테이블에 누적시키는 단계를 포함할 수 있다.
네트워크 트래픽을 데이터 플로우(data flow) 별로 카운팅(counting)하는 카운팅 시스템에 있어서, 적어도 하나의 스토리지 유닛, 적어도 하나의 프로세서를 포함하고, 상기 적어도 하나의 프로세서는, 서로 다른 데이터 플로우 별로 미리 지정된 일정한 크기의 메모리 공간을 할당하는 과정, 할당된 메모리 공간 중 다른 데이터 플로우와 공유되는 일부 공간에 해당하는 메모리 블록을 이용하여 데이터 플로우에 속하는 패킷의 개수를 누적시키는 과정, 및 상기 메모리 블록이 포화(saturation) 상태이면 누적된 상기 패킷의 개수를 누적 테이블에 누적시키는 과정을 처리하고, 상기 메모리 블록은, 상기 할당된 메모리 공간 중 CPU가 한 번에 읽을(reading) 수 있는 워드(word)에 해당하는 메모리 공간을 나타내는 한 워드(word) 이내로 제한(confinement)될 수 있다.
본 발명은, 네트워크 트래픽을 측정하기 위해 데이터 플로우 별로 할당된 메모리 공간을 제한(confinement)하고, 전체 메모리 공간이 아닌 제한(confinement)된 메모리 공간 안에서 리셋(reset) 등의 업데이트를 통해 패킷 카운팅을 수행함으로써, 작은 메모리 공간을 갖는 고속 라우터 등의 전자 장치에서 스트림 형태로 수신되는 패킷의 개수와 크기(bytes)를 보다 정확하게 카운팅할 수 있다.
도 1은 본 발명의 일실시예에 있어서, 카운팅 시스템의 내부 구성을 설명하기 위한 블록도이다.
도 2는 본 발명의 일실시예에 있어서, 카운팅 방법을 도시한 흐름도이다.
도 3은 본 발명의 일실시예에 있어서, 패킷 카운팅에 이용되는 단일 레이어(one layer)의 자료 구조를 도시한 도면이다.
도 4는 본 발명의 일실시예에 있어서, 노이즈(noise)가 없는 경우에 단일 레이어 구조의 메모리 공간을 도시한 도면이다.
도 5는 본 발명의 일실시예에 있어서, 노이즈가 없는 경우의 카운팅 방법을 도시한 흐름도이다.
도 6은 본 발명의 일실시예에 있어서, 노이즈가 존재하는 경우의 카운팅 방법을 설명하기 위해 제공되는 도면이다.
도 7은 본 발명의 일실시예에 있어서, 멀티 레이어 구조의 메모리 공간을 도시한 도면이다.
도 8은 본 발명의 일실시예에 있어서, 누적 테이블의 구조를 도시한 도면이다.
이하, 본 발명의 실시예를 첨부된 도면을 참조하여 상세하게 설명한다.
본 실시예들은 스트림 형태의 대규모 데이터 집합을 카운팅(counting)하는 기술에 관한 것으로서, 특히, 고속 라우터 등과 같이 메모리 공간이 제한적인 전자 장치(즉, 메모리 공간이 작은 장치)에서 멀티 레이어(multi layer) 구조를 기반으로 네트워크 트래픽을 미리 정의된 데이터 플로우(data flow) 별로 카운팅하는 근사 카운팅(approximate counting) 기술에 관한 것이다.
본 실시예들에서, '데이터 플로우'는 소스 IP로 미리 정의될 수도 있고, 소스 IP와 목적지 IP가 한 쌍(pair)으로 미리 정의될 수도 있다. 예컨대, 소스 IP가 데이터 플로우로 정의된 경우, 상기 소스 IP 주소에 해당하는 소스에서 몇 개의 패킷이 전송되었는지가 카운팅될 수 있고, 소스 IP와 목적지 IP가 한 쌍으로 데이터 플로우로 정의된 경우, 상기 소스 IP 주소에 해당하는 소스에서 상기 목적지 IP 주소에 해당하는 목적지까지 몇 개의 데이터가 전송되었는지가 카운팅될 수 있다.
본 실시예들에서, 스트림(stream) 형태의 데이터 집합을 데이터 플로우 별로 근사 카운팅(approximate counting)하기 위해, 서로 다른 데이터 플로우 별로(즉, 객체 마다) 일정한 크기의 메모리 공간이 할당될 수 있으며, '할당된 메모리 공간'은 매트릭스(Matrix) 또는 벡터(vector)로 표현될 수 있다.
본 실시예들에서, 제한적인(confinement) 메모리 공간 내에서 많은 데이터 패킷을 카운팅 하기 위해서는, 데이터 플로우들(즉, 객체들) 각각은 자신에게 할당된 메모리 공간 중 적어도 일부를 다른 데이터 플로우와 공유할 수 있으며, 메모리 공간을 랜덤하게 공유하는 메모리 블록은 가상 매트릭스(Virtual Matrix) 또는 가상 벡터(Virtual Vector)로 표현될 수 있다.
본 실시예들에서, 근사 카운팅에 이용되는 메모리 공간은 '한 워드(Word)' 이내로 제한(confinement)되고, '한 워드(Word)'는 CPU가 한 번에 읽을(reading) 수 있는 워드(word)에 해당하는 메모리 공간을 나타낼 수 있다. 예를 들어, 메모리 블록(즉, 가상 벡터)가 포화 상태가 되면, 가상 벡터에 누적된 개수를 카운팅하여 해시 테이블(hash table)에 해당 데이터 플로우의 ID와 함께 누적될 수 있다. 즉, 한 워드 단위로 업데이트가 진행될 수 있다.
본 실시예들에서, 근사 카운팅은 'RCC(Recyclable Counter with Confinement)' 또는 'RCC+(Recyclable Counter with Confinement plus)'로 표현될 수 있으며, 아래와 같이 대표적인 두 가지 특징을 가질 수 있다. 첫 번째 특징은 가상 벡터(즉, 메모리 블록)를 한 워드(word) 이내로 제한(confinement)하는 것이고, 두 번째 특징은 가상 벡터가 포화(saturation)면, 포화된 가상 벡터에 누적된 패킷의 개수를 카운팅한 후 누적 테이블(즉, 해시 테이블)에 누적시키고 가상 벡터를 재사용(recycle)하는 것이다. 여기서, 가상 벡터를 한 워드 이내로 제한하고, 재사용하는 특징은 아래의 도 2에서 보다 상세히 설명하기로 한다.
본 실시예들에서, '노이즈(noise)'는 메모리 블록(즉, 가상 벡터)에 해당하는 비트들 중 적어도 하나의 비트가 다른 데이터 플로우와 공유되는 것을 나타낼 수 있다. 다시 말해, 노이즈가 존재하는 것은 공유되는 비트가 존재함을 나타내고, 노이즈가 없는 것은 가상 벡터에 속하는 비트들이 다른 데이터 플로우와 공유되고 있지 않음을 나타낼 수 있다.
본 실시예들에서, '객체(object)'는 소스(source)에서 전송된 대규모의 데이터 집합에 속하는 각각의 데이터 플로우(즉, 패킷)를 나타낼 수 있다
도 1은 본 발명의 일실시예에 있어서, 카운팅 시스템의 내부 구성을 설명하기 위한 블록도이고, 도 2는 본 발명의 일실시예에 있어서, 카운팅 방법을 도시한 흐름도이다.
본 실시예에 따른 카운팅 시스템(100)은 프로세서(110), 버스(120), 네트워크 인터페이스(130) 및 메모리(140)를 포함할 수 있다. 메모리(140)는 운영체제(141) 및 카운팅 루틴(142)을 포함할 수 있다. 프로세서(110)는 할당부(111), 메모리 누적 제어부(112), 테이블 누적 제어부(113), 및 초기화부(114)를 포함할 수 있다. 다른 실시예들에서 카운팅 시스템(100)은 도 1의 구성요소들보다 더 많은 구성요소들을 포함할 수도 있다. 그러나, 대부분의 종래기술적 구성요소들을 명확하게 도시할 필요성은 없다. 예를 들어, 카운팅 시스템(100)은 디스플레이나 트랜시버(transceiver)와 같은 다른 구성요소들을 포함할 수도 있다.
메모리(140)는 컴퓨터에서 판독 가능한 기록 매체로서, RAM(random access memory), ROM(read only memory) 및 디스크 드라이브와 같은 비소멸성 대용량 기록장치(permanent mass storage device)를 포함할 수 있다. 또한, 메모리(140)에는 운영체제(141)와 카운팅 루틴(142)을 위한 프로그램 코드가 저장될 수 있다. 이러한 소프트웨어 구성요소들은 드라이브 메커니즘(drive mechanism, 미도시)을 이용하여 메모리(140)와는 별도의 컴퓨터에서 판독 가능한 기록 매체로부터 로딩될 수 있다. 이러한 별도의 컴퓨터에서 판독 가능한 기록 매체는 플로피 드라이브, 디스크, 테이프, DVD/CD-ROM 드라이브, 메모리 카드 등의 컴퓨터에서 판독 가능한 기록 매체(미도시)를 포함할 수 있다. 다른 실시예에서 소프트웨어 구성요소들은 컴퓨터에서 판독 가능한 기록 매체가 아닌 네트워크 인터페이스(130)를 통해 메모리(140)에 로딩될 수도 있다.
버스(120)는 카운팅 시스템(100)의 구성요소들간의 통신 및 데이터 전송을 가능하게 할 수 있다. 버스(120)는 고속 시리얼 버스(high-speed serial bus), 병렬 버스(parallel bus), SAN(Storage Area Network) 및/또는 다른 적절한 통신 기술을 이용하여 구성될 수 있다.
네트워크 인터페이스(130)는 카운팅 시스템(100)를 컴퓨터 네트워크에 연결하기 위한 컴퓨터 하드웨어 구성요소일 수 있다. 네트워크 인터페이스(130)는 카운팅 시스템(100)를 무선 또는 유선 커넥션을 통해 컴퓨터 네트워크에 연결시킬 수 있다.
프로세서(110)는 기본적인 산술, 로직 및 카운팅 시스템(100)의 입출력 연산을 수행함으로써, 컴퓨터 프로그램의 명령을 처리하도록 구성될 수 있다. 명령은 메모리(140) 또는 네트워크 인터페이스(130)에 의해, 그리고 버스(120)를 통해 프로세서(110)로 제공될 수 있다. 프로세서(110)는 할당부(111), 메모리 누적 제어부(112), 테이블 누적 제어부(113), 및 초기화부(114)를 위한 프로그램 코드를 실행하도록 구성될 수 있다. 이러한 프로그램 코드는 메모리(140)와 같은 기록 장치에 저장될 수 있다.
할당부(111), 메모리 누적 제어부(112), 테이블 누적 제어부(113), 및 초기화부(114)는 도 2의 각 단계들을 수행하기 위해 구성될 수 있다.
단계 210에서, 할당부(111)는 서로 다른 데이터 플로우 별로 미리 지정된 일정한 크기의 메모리 공간을 할당할 수 있다. 이때, 할당된 메모리 공간 중 적어도 일부 공간은 다른 데이터 플로우와 공유될 수 있으며, 할당부(111)는 공유되는 메모리 블록(즉, 가상 벡터)을 CPU가 한번에 읽을 수 있는 word를 나타내는 한 워드(word) 내로 제한(confinement)할 수 있다.
220 단계에서, 메모리 누적 제어부(112)는 할당된 메모리 공간 중 다른 데이터 플로우와 공유되는 일부 공간에 해당하는 메모리 블록을 이용하여 데이터 플로우에 속하는 패킷의 개수를 누적시킬 수 있다.
예컨대, 데이터 플로우 별로 메모리 블록(즉, 가상 벡터)이 할당되면, 위의 비특허 문헌 [1] A Linear-Time Probabilistic Counting Algorithm for Database Applications, KYU -YOUNG WHANG , ACM Transactions on Database Systems, Vol. 15, No. 2, June 1990.에 제시된 선형 카운팅(Linear Counting)을 이용하여 근사 카운팅이 수행될 수 있다. 이때, 각 메모리 블록(즉, 가상 벡터)가 한 워드(word) 내에 제한(confinement)되면서 데이터 플로우 별로 패킷을 카운팅하는 과정(encoding)과 결과를 측정하는 과정(decoding)이 한번의 메모리 읽기와 쓰기로 완성될 수 있다.
230 단계에서, 테이블 누적 제어부(113)는 메모리 블록(즉, 가상 벡터)가 포화(saturation) 상태 이면, 누적된 패킷의 개수를 카운팅하여 누적 테이블에 누적시킬 수 있다.
240 단계에서, 초기화부(114)는 메모리 블록에 속하는 비트들 중 미리 지정된 특정값으로 변경된 비트의 비율이 평균 노이즈(noise) 비율이 될 때까지, 특정값으로 변경된 메모리 블록에 속하는 비트들 중에서 선택된 비트를 초기화함으로써, 메모리 블록(즉, 가상 벡터)의 적어도 일부 공간을 초기화할 수 있다.
일례로, 테이블 누적 제어부(113)는 메모리 블록(즉, 가상 벡터)가 포화(saturation) 상태가 되면, 가상 벡터에 누적된 패킷의 개수를 카운팅(counting)하여 해당 플로우의 ID와 함께 누적 테이블(예컨대, 해시 테이블)에 누적할 수 있다. 이처럼, 메모리 블록에 누적된 패킷이 누적 테이블에 누적됨에 따라, 메모리 블록(즉, 가상 벡터)는 비워지게 되어, 포화된 메모리 블록(즉, 가상 벡터)은 재활용(recycle)될 수 있다. 예컨대, 선형 카운팅이 이용되는 경우, 메모리 블록(즉, 가상 벡터)의 일부(예컨대, 70%)까지 만을 사용했을 때 해당 메모리 블록이 정상적으로 동작할 수 있다. 이에 따라, 메모리 누적 제어부(112)는 메모리 블록(즉, 가상 벡터) 중 사용된 공간의 크기가 미리 정의된 사용 기준 크기 이하인지 여부를 체크함으로써, 메모리 블록(즉, 가상 벡터)이 포화(saturation) 상태인지 여부를 확인할 수 있다. 이때, 메모리 블록 중 사용된 공간의 크기가 상기 사용 기준 크기가 되거나(즉, 가상 벡터의 사용량이 미리 정의된 사용 기준 크기, 예컨대, 70%에 도달하거나), 사용 기준 크기보다 커지면 포화 상태로 판단될 수 있다. 그러면, 테이블 누적 제어부(113)는, 포화 상태인 메모리 블록(즉, 가상 벡터)를 재사용(recycle)하기 위해 메모리 블록(즉, 가상 벡터)의 적어도 일부 공간을 초기화할 수 있다.
이처럼, 전체 메모리 공간의 사용률이 아닌, 가상 벡터의 사용률을 가상 벡터의 메모리 공유로 인해 발생하는 평균 노이즈(noise)의 비율로 계산할 수도 있고, RCC와 같이 가상 벡터가 아닌 전체 메모리 공간의 사용률을 가상 벡터의 메모리 공유로 인해 발생하는 평균 노이즈(noise)의 비율로 계산할 수도 있다. 그리고, 계산된 가상 벡터의 사용률이 전체 메모리 공간의 사용률과 같아질 때까지 벡터 공간의 일부를 랜덤하게 초기화될 수 있다. 그리고, 가상 벡터에 누적된 데이터 패킷의 개수를 계산하고, 계산된 패킷의 개수에서 누적된 노이즈(noise)의 개수를 제외한 실제 누적된 데이터 패킷의 개수를 계산할 수 있다. 계산된 실제 패킷의 개수를 데이터 플로우의 ID(즉, 객체의 ID)와 함께 해시 테이블(예컨대, Quadratic probing hash table)에 누적할 수 있다.
도 3은 본 발명의 일실시예에 있어서, 패킷 카운팅에 이용되는 단일 레이어(one layer)의 자료 구조를 도시한 도면이다.
도 3에서는 메모리 공간이 단일 레이어(one layer) 구조를 가진 경우의 자료 구조를 도시하고 있다.
일례로, 패킷 카운팅을 위해 데이터 플로우 별로 32 비트(bit) 또는 64 비트(bit)의 메모리 공간이 할당될 수 있다. 즉, 도 3에서, 단일 레이어의 자료 구조는 32 비트 또는 64 비트의 CPU 워드 배열을 포함할 수 있다. 서로 다른 데이터 플로우 별로 일정한 크기의 가상 벡터(즉, 메모리 블록)가 할당될 수 있으며, 할당된 가상 벡터는 한 워드(one word) 이내로 제한(confinement)될 수 있다. 예를 들어, 특정 데이터 플로우에 속하는 패킷이 도착했을 때 해당 패킷의 정보(예컨대, 소스 IP, 목적지 IP, 패킷 ID 등)의 해시값(hash)을 이용하여 워드가 선택될 수 있다. 그러면, 선택된 워드 내에서 가상 벡터의 비트의 위치들(도 3의 해칭 블록들, 301 내지 308)이 해시값에 의해 지정될 수 있다.
도 3을 참고하면, 데이터 플로우 1과 관련하여 할당된 가상 벡터 f1는 워드 w0(310) 이내로 제한되고, 데이터 플로우 2와 관련하여 할당된 가상 벡터 f2는 워드 wm-1(320) 이내로 제한되고, 데이터 플로우 3과 관련하여 할당된 가상 벡터 f3은 w6(330) 이내로 제한될 수 있다. 도 3에서 w6(330)을 참고하면, 데이터 플로우 3이 도착하면, m개의 워드들 중 해시값에 기초하여 선택된 워드(w6, 330) 내에서 가상 벡터의 비트의 위치들(301 내지 308)이 상기 해시값에 의해 지정될 수 있다. 즉, 가상 벡터에 속하는 비트들 중 8개의 비트들(301 내지 308)이 데이터 플로우 3에 속하는 데이터 패킷을 누적시키기 위해 지정될 수 있다. 이때, 같은 데이터 플로우(즉, 같은 객체)와 관련하여 항상 같은 해시값을 얻을 수 있으므로, 할당된 가상 벡터(즉, 메모리 블록)에 속하는 비트의 위치들(301 내지 308)은 같을 수 있다. 그리고, 가상 벡터는 한 워드 이내로 제한되므로, 가상 벡터의 크기는 워드의 크기보다 클 수 없다.
도 4는 본 발명의 일실시예에 있어서, 노이즈(noise)가 없는 경우에 단일 레이어 구조의 메모리 공간을 도시한 도면이고, 도 5는 본 발명의 일실시예에 있어서, 노이즈가 없는 경우의 카운팅 방법을 도시한 흐름도이다.
도 4에서 메모리 공간은 단일 레이어 구조를 가지는 경우를 가정하여 설명하기로 한다. 노이즈가 없는 경우에 단일 레이어 이외에 멀티 레이어(multi layer) 구조가 이용될 수도 있다.
도 4에서는, 32 비트 워드 배열에서 8비트 가상 벡터를 사용하는 경우를 나타낼 수 있다. 그리고, 도 5에서 각 단계들(510 내지 530)은 도 1의 구성 요소인 할당부(111), 메모리 누적 제어부(112), 테이블 누적 제어부(113) 및 초기화부(114)에 의해 수행될 수 있다.
단계 510에서, 데이터 플로우에 할당된 메모리 공간에 속하는 모든 비트들이 0으로 초기화될 수 있다. 도 4에서, 상기 메모리 공간 중 일부에 해당하는 메모리 블록(즉, 가상 벡터, 401 내지 408)도 0으로 초기화될 수 있다.
단계 520 에서, 카운팅이 시작되고, 데이터 플로우에 속하는 적어도 하나의 패킷이 도착할 때마다, 메모리 누적 제어부(112)는 메모리 블록(401 내지 408)에 속하는 어느 하나의 비트를 미리 지정된 특정값(예컨대, 1)으로 변경할 수 있다.
예를 들어, 비트 401, 비트 402, 비트 405, 비트 406, 비트 408의 값이 0에서 1로 변경될 수 있다. 이때, 이미 1인 비트는 변경되지 않을 수 있다. 즉, 비트값이 1이 아닌 비트들을 대상으로, 패킷이 도착할 때마다 비트값이 0에서 1로 변경될 수 있다.
단계 530에서, 메모리 누적 제어부(112)는 메모리 블록에 속하는 복수의 비트들의 개수 및 특정값으로 변경된 비트의 개수에 기초하여 메모리 블록이 포화상태인지 여부를 확인할 수 있다. 이때, 메모리 누적 제어부(112)는 패킷이 도착할 때 마다 메모리 블록이 포화(saturation) 상태인지 여부를 확인할 수 있다. 예를 들어, 메모리 블록(즉, 가상 벡터)의 공간의 70% 이상이 1로 채워졌는지 여부를 확인할 수 있다. 이때, 70% 이상이 1로 채워진 경우 포화상태로 판단하고, 70% 이상이 1로 채워지지 않은 경우 포화상태가 아닌 것으로 판단할 수 있다.
이처럼, 메모리 블록(즉, 가상 벡터)의 사용량이 70%을 넘어 포화 상태로 확인되면, 테이블 누적 제어부(113)는 선형 카운팅(linear counting)을 이용하여 누적된 패킷의 개수를 카운팅할 수 있다. 그리고, 테이블 누적 제어부(113)는 메모리 블록에 누적된 패킷의 개수를 누적 테이블(예컨대, 해시 테이블)에 누적시킬 수 있다. 이처럼, 누적 테이블에 누적한 이후, 테이블 누적 제어부(113)는 메모리 블록(즉, 가상 벡터)의 값을 모두 0으로 초기화하여 재사용(recycle) 가능하도록 할 수 있다.
도 4를 참고하면, 8비트 가상 벡터의 사용량은 62.6%(5/8)에 해당할 수 있다. 이때, 새롭게 도착한 패킷과 관련하여 값이 0인 비트가 선택되면, 가상 벡터의 사용량은 75%(6/8)가 될 수 있다. 그러면, 테이블 누적 제어부(113)는 누적된 패킷의 개수(est)를 누적 테이블에 저장하고, 가상 벡터를 초기화하는 이벤트(event)를 발생시킬 수 있다. 상기 이벤트는 상기 가상 벡터의 사용량이 62.6%에서 75%로 미리 정의된 70%를 오버(over)시키는 한 개의 패킷에 의해 발생하므로, 상기 누적된 패킷의 개수(est)는 포화되기 직전의 1의 개수를 기준으로 계산될 수 있다(즉, 5/8). 그리고, 가상 벡터(즉, 메모리 블록)을 포화시킨 패킷은 한 개로 보고 상기 est에 1이 더해질 수 있다. 가상 벡터에 누적된 est는 포화를 발생시킨 패킷의 누적 개수로 보고, 해당 패킷 정보와 함께 누적된 패킷의 개수가 누적 테이블(예컨대, 해시 테이블)에 누적하는 형태로 저장될 수 있다.
예를 들어, 포화 상태로 확인된 경우, 테이블 누적 제어부(113)는 메모리 블록(즉, 가상 블록)에 속하는 복수의 비트들을 대상으로, 특정값(예컨대, 1)으로 변경되지 않은 비트의 개수를 카운팅할 수 있다. 즉, 가상 블록에 속하는 비트의 값이 0인 비트들의 개수를 카운팅할 수 있다. 그리고, 테이블 누적 제어부(113)는 카운팅된 비트의 개수를 기반으로 출발지 IP 주소에서 몇 개의 패킷을 전송했는지를 카운팅할 수 있다. 이때, 비트 408이 1로 변경되는 경우, 비트 408에 해당하는 패킷이 포화를 발생시킨 패킷에 해당하는 경우, 해당 패킷의 패킷 정보(예컨대, 패킷 ID 등)가 누적된 패킷의 개수와 함께 누적 테이블(즉, 해시 테이블)에 저장될 수 있다.
도 6은 본 발명의 일실시예에 있어서, 노이즈가 존재하는 경우의 카운팅 방법을 설명하기 위해 제공되는 도면이다.
도 6은 노이즈가 존재하는 경우의 메모리 공간의 구조를 나타낼 수 있다.
가상 벡터들이 서로 메모리 공간을 공유함에 따라 노이즈(noise)가 존재할 수 있다. 즉, 할당된 메모리 블록(가상 벡터)에 속하는 비트들 중 값이 1로 변경된 비트의 개수가 전부 해당 데이터 플로우와 관련하여 변경된 것이 아닐 수 있다. 다시 말해, 비트를 공유하는 다른 플로우에 의해 1로 변경된 값에 해당할 수 있으며, 이는 노이즈(noise)에 해당할 수 있다. 이에 따라, 메모리 블록(즉, 가상 벡터)가 포화 상태로 확인되면, 테이블 누적 제어부(113)는 카운팅 시 노이즈를 제외한 나머지 부분을 테이블에 누적할 수 있으며, 초기화부(114)는 노이즈를 제외하고 메모리 블록(즉, 가상 벡터)의 초기화를 진행할 수 있다.
예를 들어, 포화상태인 경우, 테이블 누적 제어부(113)는 메모리 블록(즉, 가상 벡터)에 속하는 비트들 중 노이즈(noise)에 해당하는 비트를 제외한 나머지 비트에 누적된 패킷의 개수를 누적 테이블에 누적시킬 수 있다. 이때, 테이블 누적 제어부(113)는 할당된 메모리 공간 중 메모리 블록(즉, 가상 벡터)를 제외한 나머지 공간을 대상으로, 미리 지정된 특정값(예컨대, 1)로 변경된 비트의 비율을 메모리 블록(즉, 가상 벡터)의 평균 노이즈 비율로 계산할 수 있다. 그리고, 테이블 누적 제어부(113)는 계산된 평균 노이즈 비율에 기초하여 메모리 블록에 포함된 노이즈의 개수를 카운팅할 수 있다. 이어, 테이블 누적 제어부(113)는 메모리 블록에 누적된 패킷의 개수 중 상기 카운팅된 노이즈의 개수를 제외시킴으로써, 메모리 블록에 실제 누적된 패킷의 개수를 계산할 수 있다. 테이블 누적 제어부(113)는 계산된 실제 누적된 패킷의 개수와 해당 데이터 플로우의 ID를 연관하여 누적 테이블(즉, 해시 테이블)에 누적시킬 수 있다. 이때, 가상 벡터는 1의 비율이 상기 평균 노이즈 비율과 같아질 때까지 랜덤하게 한 비트씩 선택되어 0으로 초기화될 수 있다. 즉, 8 비트의 가상 벡터 중 값이 1인 비트들(610 내지 605) 중 랜덤하게 한 비트씩 선택되어 0으로 초기화될 수 있다.
예를 들어, 도 6을 참고하면, 가상 벡터의 1의 비율은 5/8에 해당할 수 있다. 그러면, 테이블 누적 제어부(113)는 한 워드(word) 내에서 포화된 가상 벡터를 제외한 나머지 공간의 1의 비율(즉, 9/24=3/8)을 평균 노이즈 비율로 계산할 수 있다. 그리고, 초기화부(114)는 상기 1의 비율 5/8이 상기 평균 노이즈 비율 3/8이 될 때까지 비트 601 내지 605 중 어느 하나를 랜덤하게 선택하여 0으로 초기화할 수 있다.
도 6은 특정 가상 벡터가 포화 상태(예컨대, 70% 이상 사용, 즉, 6개의 비트를 1로 변경)가 되기 전의 상태의 메모리 공간의 구조를 나타낼 수 있다. 이 경우, 가상 벡터는 다른 데이터 플로우들과 비트를 공유하므로, 다른 데이터 플로우와 관련하여 가상 벡터의 비트가 1로 변경될 수 있다. 즉, 6개 이상의 비트가 1의 값을 가질 수 있다.
이때, 가상 벡터를 사용하는 데이터 플로우가 도찰할 때마다 메모리 공간의 사용률 확인이 진행되므로, 6개 비트 이상이 1의 값을 가질 수 없다. 다만, 확인 당시에는 70% 이하로 포화상태가 아니었으나, 새로운 데이터 플로우가 도착하여 확인이 다시 진행되는 사이에 다른 데이터 플로우에 의해 비트값이 1로 변경되는 경우가 발생할 수 있다. 이에 따라, 새로 도착한 데이터 플로우와 관련하여, 자신의 가상 벡터가 7개의 비트 혹은 8개의 비트가 1로 채워진 경우, 즉, 포화상태인 경우, 자신이 변경할 수 있는 비트 개수의 한계인 6개로 누적된 총 개수(est)가 계산될 수 있으며, 결국 누적된 패킷의 개수(est)는 가상 벡터의 크기에 따라 일정할 수 있다.
이외에, 평균 노이즈의 비율이 가상 벡터의 1의 비율과 같거나 큰 경우, 해당 가상 벡터와 관련하여 노이즈가 없는 것으로 결정할 수 있다. 즉, 제한된 워드 내에서의 상기 평균 노이즈 비율이 카운팅하여 계산된 상기 가상 벡터의 1의 비율보다 같거나 큰 경우, 다른 데이터 플로우가 아닌 자신이 노이즈를 만든 것으로 결정할 수 있다. 즉, 비트값이 1로 변경된 것은 모두 자신이 보낸 데이터에 의해 1로 변경된 것으로 결정하고, 노이즈가 없다고 결정할 수 있다. 이처럼, 노이즈가 없는 경우, 테이블 누적 제어부(113)는 포화상태이더라도 노이즈를 별도로 계산하지 않으며, 결국, 최종적으로 누적된 패킷의 개수를 계산 시 노이즈를 제외시키지 않을 수 있다.
도 7은 본 발명의 일실시예에 있어서, 멀티 레이어 구조의 메모리 공간을 도시한 도면이다.
도 7에서는 2개의 레이어를 사용하는 경우를 예로 들어 설명하나, 이는 실시예에 해당될 뿐, 3개 이상의 레이어가 사용될 수도 있다.
도 7을 참고하면, 레이어 1(710)은 CPU 워드 배열을 사용하고 있고, 레이어 2(720)는 레이어 1에서 사용하고 있는 자료 구조의 집합을 나타낼 수 있다. 이때, 레이어 1(710)과 레이어 2(720)는 동일한 해시를 사용하고, 크기도 동일할 수 있다. 이에 따라, 해시 계산을 한번만 수행하면, 레이어 1(710)과 레이어 2(720)가 모두 업데이트될 수 있다.
예를 들어, 레이어 2(720)에서의 배열의 개수는 가상 벡터(즉, 메모리 블록)이 포화되기 직전의 1의 개수와 동일할 수 있다. 그러면, 가상 벡터가 포화되기 직전의 1의 개수는 노이즈의 비율에 따라 초기화할 수 있는 경우의 수에 해당할 수 있다. 예컨대, 8비트 중 5개의 비트가 1의 값을 갖는 경우, 노이즈(즉, 한 워드 내 가상 벡터를 제외한 나머지 공간의 1의 비율)에 따라 1비트부터 5 비트까지 1로 초기화할 수 있는 5가지 경우가 존재할 수 있다. 즉, 포화 직전 5가지 경우의 수가 존재할 수 있다. 즉, 평균 노이즈의 개수(estnoise)는 5가지 값을 가질 수 있다. 이때, 누적된 패킷의 개수(est)는 가상 벡터의 크기에 따라 값이 일정하기 때문에 est- estnoise도 총 5가지 결과(즉, 노이즈를 제외한 누적 개수)가 존재할 수 있다. 예컨대, 8비트 가상 벡터를 사용하는 경우, 레이어 2(720)에서는 5개의 배열들이 존재하며, 5가지 결과는 각 배열의 단위(unit)가 될 수 있다. 즉, 패킷이 도착하면, 레이어 1에서 5가지로 분기되고, 레이어 1이 다 차면, 레이어 2로 누적된 패킷이 올려 보내져 누적될 수 있다.
정리하면, 멀티 레이어(예컨대 2개의 레이어)를 사용하는 경우, 특정 가상 벡터가 레이어 1(710)에서 포화 상태가 되면, 해당 가상 벡터가 속해 있는 워드의 노이즈에 따라 레이어 1(710)에서 포화된 개수 est- estnoise가 계산될 수 있다. 그리고, 상기 특정 가상 벡터는 초기화될 수 있다. 이때, 포화된 개수 est- estnoise(즉, 레이어 1의 가상 벡터가 포화 상태일 때의 누적된 패킷의 개수)는 바로 누적 테이블에 저장되지 않고, 레이어 2(720)의 워드 배열을 선택하기 위해 이용될 수 있다. 레이어 2(720)에서 단위(unit)가 est- estnoise인 배열이 선택되면, 레이어 1(710)에서 포화된 개수(est- estnoise)가 해당 배열에 들어 갈 수 있는 한 개의 데이터 플로우(즉, 객체)로 보고, 레이어 1과 동일하게 레이어 2를 대상으로 근사 카운팅 및 초기화가 수행될 수 있다. 그리고, 레이어 2가 포화상태가 되면, 누적된 패킷의 개수와 패킷 ID 등이 누적 테이블에 누적 저장될 수 있다. 예를 들어, 레이어 2(720)에서 계산된 누적된 패킷의 개수(estL2)는 단위(unit)와 곱셈하여 포화를 발생시킨 패킷의 정보(예컨대, 패킷 ID)와 함께 누적 테이블에 저장될 수 있다.
다시 말해, 누적된 패킷의 개수와 ID 뿐만 아니라, 패킷의 크기가 누적 테이블에 함께 저장될 수 있다. 이때, 패킷의 크기는 패킷마다 다르므로, 패킷의 개수 카운팅 이외에 몇 바이트(byte)의 패킷이 소스로부터 전송되었는지 여부(즉, 바이트 카운팅)이 수행될 수 있다. 그러면, 포화로 인해 레이어 1에서 레이어 2/누적 테이블 또는 레이어 2에서 누적 테이블로 올리는 패킷의 크기(즉, 레이어 1 또는 레이어 2의 가상 벡터를 포화 상태로 만든 패킷의 크기)와 데이터 플로우에 속하는 패킷의 개수(즉, 누적된 패킷의 개수, 예컨대, 34)를 곱함으로써 바이트 카운팅이 수행될 수 있다. 이처럼, 포화를 발생시킨 패킷의 크기와 누적된 패킷의 개수를 곱함에 따라 카운팅된 바이트(즉, 패킷의 크기)는 누적된 패킷의 개수 및 포화를 발생시킨 패킷의 ID(또는 데이터 플로우의 ID)와 함께 누적 테이블에 저장될 수 있다.
도 7에서 설명한 바와 같이, 누적된 패킷의 개수(즉, 누적된 빈도수)뿐만 아니라, 누적 크기도 근사 카운팅(즉, 바이트 카운팅)될 수 있다. 스트림 형태의 데이터 플로우에서, 동일한 데이터 패킷일지라도 다른 크기를 가질 수 있다. 다시 말해, 패킷 ID 뿐만 아니라, 패킷의 페이로드(payload)에 포함되는 정보의 크기가 일정하지 않을 수 있다. 예를 들어, 동일한 소스 IP와 목적지 IP를 가지고 있는 두 개의 패킷이 존재하는 경우, 두 패킷의 페이로드(payload) 필드 각각에 포함된 정보의 크기가 상이할 수 있다. 이에 따라, 두 패킷이 동일 객체로 볼 수 있는데도 불구하고, 패킷의 크기는 서로 상이할 수 있다.
도 8은 본 발명의 일실시예에 있어서, 누적 테이블의 구조를 도시한 도면이다.
도 8을 참고하면, 레이어 2(810)의 메모리 블록(즉, 가상 벡터)이 포화(saturation)된 경우, 누적된 패킷의 개수(est)와, 바이트 카운팅을 통해 계산된 누적 크기(size)는 누적 테이블(820)에 누적 저장될 수 있다. 이때, 레이어 2(810)의 가상 벡터가 포화 상태가 됨에 따라, 샘플링(sampling) 기법을 이용하여 누적 크기(size)가 계산될 수 있다. 예컨대, 패킷 x에게 할당된 가상 벡터가 포화된 경우, 즉, 패킷 x가 포화를 발생시킨 패킷에 해당하는 경우, 레이어 2(810)의 가상 벡터에 누적된 개수(est)가 계산될 수 있다. 그리고, 누적 테이블(820)에 저장하기 위한 이벤트가 발생할 수 있다. 그러면, 상기 가상 벡터의 포화를 일으킨 패킷x 의 크기(size)를 est의 크기로 보고, 테이블 누적 제어부(113)는 상기 패킷 x의 크기(size)와 누적된 패킷의 개수(est)의 곱을 누적 크기(est*size)로 계산할 수 있다. 그리고, 테이블 누적 제어부(113)는 누적 크기(est*size), 누적된 패킷의 개수(est) 및 패킷 ID(obj1, 즉, 데이터 플로우의 ID)를 서로 연관시켜 누적 테이블(820)에 저장할 수 있다.
이처럼, 스트림 형태의 데이터 집합을 데이터 플로우 별로 카운팅 하기 위해서는 누적 테이블(예컨대, 해시 테이블)이 필요할 수 있다. 누적 테이블(820)은 패킷 ID의 해시값을 이용하여 선형 프로빙(linear probing) 또는 쿼드라틱 프로빙(quadratic probing) 방식으로 패킷의 위치를 찾아 삽입 또는 갱신하므로, 해시 테이블로 표현될 수 있다. 해시 테이블은 사용량이 높을수록 패킷(즉, 객체)의 삽입 또는 갱신 효율이 저하되므로, 메모리 공간이 제한적인 상황에서 실시간으로 대규모의 데이터 집합을 데이터 플로우 별로 전부 누적하기 어렵다. 이때, 카운팅 시스템(100)에서 모든 데이터 플로우들(즉, 모든 패킷들)을 전부 효율이 낮은 해시 테이블에 누적하지 않고, 레이어 1, 레이어 2에서 데이터 플로우 별로 할당된 메모리 블록(즉, 가상 벡터)에 먼저 누적하고, 가상 벡터가 포화된 경우에만 선택적으로 해시 테이블에 누적함으로써, 해시 테이블(820)의 삽입 및 갱신(update) 횟수를 현저히 감소시킬 수 있다.
또한, 빈도수가 작은 패킷들의 경우, 할당된 가상 벡터를 포화시키지 못하므로 누적 테이블(820)에 저장되지 않을 수 있다.
또한, 단일 레이어(one-layer) 이외에 멀티 레이어(multi layer) 자료 구조를 지원함에 따라, 단일 레이어 구조에서는 작은 크기의 가상 벡터를 사용하여 높은 정확도를 보장할 수 있다. 이때, 가상 벡터에 누적 가능한 패킷의 개수가 작아 가상 벡터의 포화가 빈번하게 발생할 수 있어, 해시 테이블9820)에 대한 누적 횟수도 많이 발생할 수 있다. 그러면, 할당부(111)는 가상 벡터의 크기를 이전보다 상대적으로 크게 증가시킬 수 있으며, 가상 벡터의 크기 증가로 인해, 가상 벡터의 누적 능력이 향상되어 해시 테이블(820)에 패킷을 누적하는 횟수가 감소할 수 있다.
이외에, 멀티 레이어 구조의 메모리 공간이 이용될 수 있다. 멀티 레이어 구조를 이용하는 경우, 가상 벡터 크기의 증가에 따른 누적 능력 증가율이 단일 레이어일 때보다 증폭될 수 있다. 예를 들어, 16 비트 가상 벡터의 누적 능력보다 2개의 레이어에서 8비트의 가상 벡터(총 16비트)의 누적 능력이 더 좋을 수 있다. 즉, 하나의 데이터 플로우에 속하는 패킷을 대상으로 동일 크기의 메모리 블록(즉, 가상 벡터)이 할당된 경우, 멀티 레이어 구조를 이용할 때에 단일 레이어일 때 보다 더 많은 패킷이 누적될 수 있으며, 해시 테이블에 누적되는 빈도 역시 상대적으로 감소할 수 있다. 그리고, 빈도수(즉, 누적된 패킷의 크기)와 누적 크기가 동시에 측정되어 해시 테이블에 함께 저장됨에 따라, 소스 IP에서 전송한 패킷의 개수와 크기를 같이 제공 가능할 수 있다. 즉, 네트워크 트래픽을 보다 정확하게 측정할 수 있다.
본 발명의 실시예에 따른 방법들은 다양한 컴퓨터 시스템을 통하여 수행될 수 있는 프로그램 명령(instruction) 형태로 구현되어 컴퓨터 판독 가능 매체에 기록될 수 있다.
이상에서 설명된 장치는 하드웨어 구성요소, 소프트웨어 구성요소, 및/또는 하드웨어 구성요소 및 소프트웨어 구성요소의 조합으로 구현될 수 있다. 예를 들어, 실시예들에서 설명된 장치 및 구성요소는, 예를 들어, 프로세서, 콘트롤러, ALU(arithmetic logic unit), 디지털 신호 프로세서(digital signal processor), 마이크로컴퓨터, FPGA(field programmable gate array), PLU(programmable logic unit), 마이크로프로세서, 또는 명령(instruction)을 실행하고 응답할 수 있는 다른 어떠한 장치와 같이, 하나 이상의 범용 컴퓨터 또는 특수 목적 컴퓨터를 이용하여 구현될 수 있다. 처리 장치는 운영 체제(OS) 및 상기 운영 체제 상에서 수행되는 하나 이상의 소프트웨어 애플리케이션을 수행할 수 있다. 또한, 처리 장치는 소프트웨어의 실행에 응답하여, 데이터를 접근, 저장, 조작, 처리 및 생성할 수도 있다. 이해의 편의를 위하여, 처리 장치는 하나가 사용되는 것으로 설명된 경우도 있지만, 해당 기술분야에서 통상의 지식을 가진 자는, 처리 장치가 복수 개의 처리 요소(processing element) 및/또는 복수 유형의 처리 요소를 포함할 수 있음을 알 수 있다. 예를 들어, 처리 장치는 복수 개의 프로세서 또는 하나의 프로세서 및 하나의 콘트롤러를 포함할 수 있다. 또한, 병렬 프로세서(parallel processor)와 같은, 다른 처리 구성(processing configuration)도 가능하다.
소프트웨어는 컴퓨터 프로그램(computer program), 코드(code), 명령(instruction), 또는 이들 중 하나 이상의 조합을 포함할 수 있으며, 원하는 대로 동작하도록 처리 장치를 구성하거나 독립적으로 또는 결합적으로(collectively) 처리 장치를 명령할 수 있다. 소프트웨어는 네트워크로 연결된 컴퓨터 시스템 상에 분산되어서, 분산된 방법으로 저장되거나 실행될 수도 있다. 소프트웨어 및 데이터는 하나 이상의 컴퓨터 판독 가능 기록 매체에 저장될 수 있다.
실시예에 따른 방법은 다양한 컴퓨터 수단을 통하여 수행될 수 있는 프로그램 명령 형태로 구현되어 컴퓨터 판독 가능 매체에 기록될 수 있다. 상기 컴퓨터 판독 가능 매체는 프로그램 명령, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있다. 상기 매체에 기록되는 프로그램 명령은 실시예를 위하여 특별히 설계되고 구성된 것들이거나 컴퓨터 소프트웨어 당업자에게 공지되어 사용 가능한 것일 수도 있다. 컴퓨터 판독 가능 기록 매체의 예에는 하드 디스크, 플로피 디스크 및 자기 테이프와 같은 자기 매체(magnetic media), CD-ROM, DVD와 같은 광기록 매체(optical media), 플롭티컬 디스크(floptical disk)와 같은 자기-광 매체(magneto-optical media), 및 롬(ROM), 램(RAM), 플래시 메모리 등과 같은 프로그램 명령을 저장하고 수행하도록 특별히 구성된 하드웨어 장치가 포함된다. 프로그램 명령의 예에는 컴파일러에 의해 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터 등을 사용해서 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드를 포함한다.
이상과 같이 실시예들이 비록 한정된 실시예와 도면에 의해 설명되었으나, 해당 기술분야에서 통상의 지식을 가진 자라면 상기의 기재로부터 다양한 수정 및 변형이 가능하다. 예를 들어, 설명된 기술들이 설명된 방법과 다른 순서로 수행되거나, 및/또는 설명된 시스템, 구조, 장치, 회로 등의 구성요소들이 설명된 방법과 다른 형태로 결합 또는 조합되거나, 다른 구성요소 또는 균등물에 의하여 대치되거나 치환되더라도 적절한 결과가 달성될 수 있다.
그러므로, 다른 구현들, 다른 실시예들 및 특허청구범위와 균등한 것들도 후술하는 특허청구범위의 범위에 속한다.

Claims (10)

  1. 네트워크 트래픽을 데이터 플로우(data flow) 별로 카운팅(counting)하기 위해 컴퓨터로 구현되는 카운팅 방법에 있어서,
    제 1 레이어와 제 2 레이어를 포함하는 멀티 레이어(multi-layer) 구조를 갖는 메모리 공간 중 상기 제 1 레이어에서 서로 다른 데이터 플로우 별로 미리 지정된 일정한 크기의 메모리 공간을 할당하는 단계;
    상기 제 1 레이어에서 상기 할당된 메모리 공간 중 다른 데이터 플로우와 공유되는 일부 공간에 해당하는 메모리 블록을 이용하여 데이터 플로우에 속하는 패킷의 개수를 누적시키는 단계;
    상기 메모리 블록이 포화(saturation) 상태이면, 상기 제 2 레이어에서 상기 메모리 블록에 대한 배열을 선택하는 단계; 및
    상기 제 2 레이어가 포화 상태이면, 상기 제 2 레이어로부터 계산되는 누적된 패킷의 개수를 누적 테이블에 누적시키는 단계
    를 포함하고,
    상기 메모리 블록은, 상기 할당된 메모리 공간 중 CPU가 한 번에 읽을(reading) 수 있는 워드(word)에 해당하는 메모리 공간을 나타내는 한 워드(word) 이내로 제한(confinement)되는 카운팅 방법.
  2. 삭제
  3. 제1항에 있어서,
    상기 메모리 블록을 이용하여 데이터 플로우에 속하는 패킷의 개수를 누적시키는 단계는,
    데이터 플로우에 속하는 적어도 하나의 패킷이 도착할 때마다 상기 메모리 블록에 속하는 어느 하나의 비트를 미리 지정된 특정값으로 변경하는 단계; 및
    상기 메모리 블록에 속하는 복수의 비트들의 개수 및 상기 특정값으로 변경된 비트의 개수에 기초하여 상기 메모리 블록이 포화 상태인지 여부를 확인하는 단계
    를 포함하는 카운팅 방법.
  4. 제3항에 있어서,
    상기 제 2 레이어에서 상기 메모리 블록에 대한 배열을 선택하는 단계는,
    상기 메모리 블록이 포화 상태로 확인되면, 상기 메모리 블록에 누적된 패킷의 개수를 카운팅하는 단계;
    상기 메모리 블록에 누적된 패킷의 개수를 이용하여 상기 제 2 레이어에서 상기 메모리 블록에 대한 배열을 선택하는 단계; 및
    상기 메모리 블록을 초기화하여 재사용하는 단계
    를 포함하는 카운팅 방법.
  5. 제4항에 있어서,
    상기 메모리 블록에 누적된 패킷의 개수를 카운팅하는 단계는,
    상기 메모리 블록에 속하는 복수의 비트들을 대상으로, 상기 특정값으로 변경되지 않은 비트의 개수를 카운팅하는 단계; 및
    카운팅된 상기 비트의 개수를 기반으로 출발지 IP 주소에서 몇 개의 패킷을 전송했는지를 카운팅하는 단계
    를 포함하는 카운팅 방법.
  6. 제1항에 있어서,
    상기 제 2 레이어에서 상기 메모리 블록에 대한 배열을 선택하는 단계는,
    상기 메모리 블록이 포화(saturation) 상태이면, 상기 메모리 블록에 속하는 비트들 중 노이즈(noise)에 해당하는 비트를 제외한 나머지 비트에 누적된 패킷의 개수를 이용하여 상기 제 2 레이어에서 상기 메모리 블록에 대한 배열을 선택하고,
    상기 노이즈는, 해당 비트가 다른 데이터 플로우에 속하는 패킷과 공유됨에 따라 미리 지정된 특정값으로 변경된 것을 나타내는 카운팅 방법.
  7. 제1항에 있어서,
    상기 누적된 패킷의 개수를 누적 테이블에 누적시키는 단계는,
    상기 제 2 레이어가 포화 상태이면, 상기 제 2 레이어를 이용하여 상기 할당된 메모리 공간 중 상기 메모리 블록을 제외한 나머지 공간을 대상으로, 미리 지정된 특정값으로 변경된 비트의 비율을 상기 메모리 블록의 평균 노이즈 비율로 계산하는 단계;
    상기 평균 노이즈 비율에 기초하여 상기 메모리 블록에 포함된 노이즈의 개수를 카운팅하는 단계;
    상기 메모리 블록에 누적된 패킷의 개수 중 상기 노이즈의 개수를 제외시킴으로써, 상기 메모리 블록에 실제 누적된 패킷의 개수를 계산하는 단계; 및
    상기 실제 누적된 패킷의 개수 및 해당 데이터 플로우의 ID를 연관하여 상기 누적 테이블에 누적시키는 단계
    를 포함하는 카운팅 방법.
  8. 제1항에 있어서,
    상기 누적된 패킷의 개수를 누적 테이블에 누적시키는 단계는,
    상기 제 2 레이어가 포화 상태이면, 상기 제 2 레이어로부터 계산되는 누적된 패킷의 개수를 누적 테이블에 누적시키는 단계; 및
    상기 제 2 레이어를 초기화하여 재사용하는 단계를 포함하는 카운팅 방법.
  9. 제1항에 있어서,
    상기 누적된 패킷의 개수를 누적 테이블에 누적시키는 단계는,
    포화를 발생시킨 패킷의 크기(size) 및 상기 누적된 패킷의 개수에 기초하여 해당 데이터 플로우의 크기를 계산하는 단계; 및
    상기 크기를 데이터 플로우의 ID 및 해당 데이터 플로우와 관련하여 상기 누적된 패킷의 개수와 함께 연관하여 상기 누적 테이블에 누적시키는 단계
    를 포함하는 카운팅 방법.
  10. 네트워크 트래픽을 데이터 플로우(data flow) 별로 카운팅(counting)하는 카운팅 시스템에 있어서,
    적어도 하나의 스토리지 유닛;
    적어도 하나의 프로세서
    를 포함하고,
    상기 적어도 하나의 프로세서는,
    제 1 레이어와 제 2 레이어를 포함하는 멀티 레이어(multi-layer) 구조를 갖는 메모리 공간 중 상기 제 1 레이어에서 서로 다른 데이터 플로우 별로 미리 지정된 일정한 크기의 메모리 공간을 할당하는 과정;
    상기 제 1 레이어에서 상기 할당된 메모리 공간 중 다른 데이터 플로우와 공유되는 일부 공간에 해당하는 메모리 블록을 이용하여 데이터 플로우에 속하는 패킷의 개수를 누적시키는 과정;
    상기 메모리 블록이 포화(saturation) 상태이면, 상기 제 2 레이어에서 상기 메모리 블록에 대한 배열을 선택하는 과정; 및
    상기 제 2 레이어가 포화 상태이면, 상기 제 2 레이어로부터 계산되는 누적된 패킷의 개수를 누적 테이블에 누적시키는 과정
    을 처리하고,
    상기 메모리 블록은, 상기 할당된 메모리 공간 중 CPU가 한 번에 읽을(reading) 수 있는 워드(word)에 해당하는 메모리 공간을 나타내는 한 워드(word) 이내로 제한(confinement)되는 카운팅 시스템.
KR1020170161709A 2017-11-29 2017-11-29 데이터 집합을 카운팅하는 방법 및 시스템 KR102026128B1 (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR1020170161709A KR102026128B1 (ko) 2017-11-29 2017-11-29 데이터 집합을 카운팅하는 방법 및 시스템
PCT/KR2017/013903 WO2019107608A1 (ko) 2017-11-29 2017-11-30 데이터 집합을 카운팅하는 방법 및 시스템

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020170161709A KR102026128B1 (ko) 2017-11-29 2017-11-29 데이터 집합을 카운팅하는 방법 및 시스템

Publications (2)

Publication Number Publication Date
KR20190062987A KR20190062987A (ko) 2019-06-07
KR102026128B1 true KR102026128B1 (ko) 2019-09-27

Family

ID=66665066

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020170161709A KR102026128B1 (ko) 2017-11-29 2017-11-29 데이터 집합을 카운팅하는 방법 및 시스템

Country Status (2)

Country Link
KR (1) KR102026128B1 (ko)
WO (1) WO2019107608A1 (ko)

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101231943B1 (ko) * 2006-06-21 2013-02-08 주식회사 케이티 Ip망에서의 패킷 어카운팅 검증 시스템 및 그 검증 방법
JP4734223B2 (ja) * 2006-11-29 2011-07-27 アラクサラネットワークス株式会社 トラヒック分析装置および分析方法
KR20090120205A (ko) * 2008-05-19 2009-11-24 삼성전자주식회사 플래시 메모리 장치 및 그것의 동작 방법
KR101543855B1 (ko) * 2013-10-21 2015-08-25 인하대학교 산학협력단 중복된 자료 개수의 근사치를 추정하는 방법 및 시스템

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
장룡호 외. 'Cuckoo Hashing 을 이용한 RCC에 대한 성능향상', 한국통신학회, 2016.6., Vol.41, No.06, pp.663-671.*

Also Published As

Publication number Publication date
WO2019107608A1 (ko) 2019-06-06
KR20190062987A (ko) 2019-06-07

Similar Documents

Publication Publication Date Title
US11106397B2 (en) Thin provisioning of raid storage
US8949529B2 (en) Customizing function behavior based on cache and scheduling parameters of a memory argument
KR102290540B1 (ko) 네임스페이스/스트림 관리
US8898422B2 (en) Workload-aware distributed data processing apparatus and method for processing large data based on hardware acceleration
CN109191287B (zh) 一种区块链智能合约的分片方法、装置及电子设备
JP5121936B2 (ja) リソース割り当て装置及びリソース割り当てプログラム及び記録媒体及びリソース割り当て方法
US20170031814A1 (en) Scheme for determining data object usage in a memory region
US8661221B2 (en) Leasing fragmented storage between processes
JP6446125B2 (ja) リソースリーク検出の方法、装置及びシステム
US9658774B2 (en) Storage system and storage control method
US10761761B2 (en) Method and device for managing storage system
CN112748867B (zh) 用于存储管理的方法、电子设备以及计算机程序产品
US10049035B1 (en) Stream memory management unit (SMMU)
CN112948279A (zh) 管理存储系统中的访问请求的方法、设备和程序产品
US20190213146A1 (en) Minimizing usage of hardware counters in triggered operations for collective communication
CN114556309A (zh) 内存空间的分配方法、装置及存储介质
KR102026128B1 (ko) 데이터 집합을 카운팅하는 방법 및 시스템
TW202215248A (zh) 操作儲存系統的方法、以及對儲存資源的層級進行分區的方法
KR102185384B1 (ko) Mpeg 데이터의 랜덤 억세스를 지원하는 방법 및 시스템
CN114327245A (zh) 内存管理的方法及其装置
KR101543841B1 (ko) 멀티셋의 개별 원소의 개수를 카운팅하는 방법 및 시스템
US20200174885A1 (en) Write-balanced parity assignment within a cluster
JP2008310610A (ja) システム構成管理方法
KR102023274B1 (ko) 슬롯별 n-비트 카운터를 이용한 변형 쿠쿠 해시 알고리즘
KR101543855B1 (ko) 중복된 자료 개수의 근사치를 추정하는 방법 및 시스템

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant