KR101839392B1 - 스레드 풀의 사이즈를 동적으로 관리하는 방법 및 컴퓨팅 장치 - Google Patents

스레드 풀의 사이즈를 동적으로 관리하는 방법 및 컴퓨팅 장치 Download PDF

Info

Publication number
KR101839392B1
KR101839392B1 KR1020170090497A KR20170090497A KR101839392B1 KR 101839392 B1 KR101839392 B1 KR 101839392B1 KR 1020170090497 A KR1020170090497 A KR 1020170090497A KR 20170090497 A KR20170090497 A KR 20170090497A KR 101839392 B1 KR101839392 B1 KR 101839392B1
Authority
KR
South Korea
Prior art keywords
throughput
value
group
maximum thread
maximum
Prior art date
Application number
KR1020170090497A
Other languages
English (en)
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 KR1020170090497A priority Critical patent/KR101839392B1/ko
Priority to US15/657,648 priority patent/US9910711B1/en
Application granted granted Critical
Publication of KR101839392B1 publication Critical patent/KR101839392B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/5038Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/505Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the load
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/5011Pool
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/5018Thread allocation

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

본 발명에 따르면, 스레드 풀(thread pool)의 사이즈를 동적으로 관리하는 방법을 제공한다. 컴퓨팅 장치가, 현재 설정되어 있는 최대 스레드 값을 증가시키는 단계, 및 상기 컴퓨팅 장치는, 소정의 시간 동안 적어도 하나 이상의 throughput - 상기 throughput은 단위 시간당 작업 큐에서 출력되는 request수임 - 을 원소로 포함하는 그룹에 대응되는 구간당 작업 처리량을 산출하는 기능을 수행하되, 상기 최대 스레드 값이 증가하기 이전에 산출된 제1 그룹에 대응되는 구간당 작업 처리량과 상기 최대 스레드 값이 증가한 이후에 산출된 제2 그룹에 대응되는 구간당 작업 처리량을 비교하고, 상기 최대 스레드 값이 증가한 이후에 산출된 제2 그룹에 대응되는 구간당 작업 처리량이 상기 최대 스레드 값이 증가하기 이전에 산출된 제1 그룹에 대응되는 구간당 작업 처리량보다 기설정된 제1 임계치만큼 큰 경우, 상기 최대 스레드 값을 다시 증가시키는 단계를 포함하는 방법을 제공한다.

Description

스레드 풀의 사이즈를 동적으로 관리하는 방법 및 컴퓨팅 장치{METHOD AND COMPUTING DEVICE FOR MANAGING SIZE OF THREAD POOL DYNAMICALLY}
본 발명은 스레드 풀(thread pool)의 사이즈를 동적으로 관리하는 방법 및 컴퓨팅 장치에 관한 것으로, 보다 상세하게는, 현재 설정되어 있는 최대 스레드 값을 증가시킨 후, 소정의 시간 동안 적어도 하나 이상의 throughput - 상기 throughput은 단위 시간당 작업 큐에서 출력되는 request수임 - 을 원소로 포함하는 그룹에 대응되는 구간당 작업 처리량을 산출하는 기능을 수행하되, 상기 최대 스레드 값이 증가하기 이전에 산출된 제1 그룹에 대응되는 구간당 작업 처리량과 상기 최대 스레드 값이 증가한 이후에 산출된 제2 그룹에 대응되는 구간당 작업 처리량을 비교하고, 상기 최대 스레드 값이 증가한 이후에 산출된 제2 그룹에 대응되는 구간당 작업 처리량이 상기 최대 스레드 값이 증가하기 이전에 산출된 제1 그룹에 대응되는 구간당 작업 처리량보다 기설정된 제1 임계치만큼 큰 경우, 상기 최대 스레드 값을 다시 증가시키는 방법 및 컴퓨팅 장치에 관한 것이다.
스레드(Thread)란, 프로세스 내에서 실행되는 흐름의 단위로서, 특정한 서비스 요청을 처리하는데 필요한 정보이다. 스레드는 특정한 서비스 요청을 처리하기 위한 스레드 ID, 프로그램 카운터, 레지스터 집합, 스택 등을 가지며 코드, 데이터, 파일 등의 기타 자원을 다른 스레드와 공유한다.
종래의 서버는 클라이언트의 요청이 들어올 때마다 스레드를 생성하여 처리하는데 이는 대부분의 작업을 처리하기에는 충분히 효율적인 메커니즘이다. 그러나, 클라이언트로부터의 연결과 종료가 매우 바쁘게 일어나는 서버의 경우, 스레드를 생성하고 제거하는데 걸리는 시간이 요청을 처리하는데 드는 시간보다 많아지면서 시스템의 성능이 저하되는 문제가 발생한다. 또한, 클라이언트의 요청이 급격히 많아지는 경우 각 요청에 대해 모두 스레드를 생성하게 되면 스레드 개수가 과도하게 많아짐으로 인해 스레드 스케줄링이 필요하게 되고 이로 인해 시스템의 오버헤드가 증가하게 된다.
이러한 문제를 해결하기 위해 제한된 개수의 스레드를 미리 생성하고 사용된 스레드를 제거하지 않고 재활용할 수 있는 스레드 풀(thread pool)이 제안되었다.
스레드 풀(Thread Pool)은 적어도 하나의 스레드를 포함하는 스레드 집합으로, 사용된 스레드를 폐기하지 않고 다른 작업에 할당함으로써 스레드를 재활용한다. 구체적으로 스레드 풀은 프로세서가 특정 작업을 수행하는 경우 스레드를 제공하고 프로세서가 작업을 처리하고 스레드를 반환하면 대기하다가 다른 작업을 전달받는 방식으로 동작한다.
스레드 풀은 최소로 유지해야 하는 스레드 개수(minimum size, 이하 최소 스레드 값이라 함)와 최대로 생성할 수 있는 스레드 개수(maximum size, 이하 최대 스레드 값이라 함)를 가지고 있다. 그러나, 서버의 성능을 최적화할 수 있는 적정 수의 최소 스레드 값과 최대 스레드 값을 결정하는 것은 쉽지 않다.
종래의 방식은 서비스 요청의 수나 종류에 따른 최소 스레드 값과 최대 스레드 값을 미리 설정하여 성능을 측정하고 측정된 성능을 활용하여 최적의 스레드 개수를 결정하는 방식이 대부분이었다. 하지만, 이와 같이 성능 기록에 의존하는 방식은 성능 기록을 쌓기 위해 실험하는 동안 시간이 필요하고, 실시간으로 빠르게 변화하는 웹 환경에서는 기록의 정확성을 보장하기 어려워 적절한 최소 스레드 값이나 최대 스레드 값을 결정하는데 어려움이 있다.
또한, 종래 발명으로 스레드 수를 늘렸을 때, 작업 큐의 size가 줄어드는 지를 판단하고, 작업 큐의 size가 줄어든다면 현재의 최대 스레드 값이 적정한 것으로 판단하고 스레드 수를 더 이상 늘리지 않는 발명이 있으나, 상기 발명의 경우에도 CPU를 100% 사용하는 상황에서는 아무리 스레드를 늘려도 request처리 능력이 향상되지 않으므로 이런 상황에서 스레드와 작업 큐의 size는 계속해서 늘어나게만 된다.
이에 본 발명자는 작업 큐에서 출력되는 request수를 이용하여 스레드 풀의 사이즈를 동적으로 관리하는 방법 및 컴퓨팅 장치를 제안하고자 한다.
본 발명은 상술한 문제점을 모두 해결하는 것을 목적으로 한다.
또한, 본 발명은 실시간으로 빠르게 변화하는 웹 환경에서 최적의 스레드 풀의 사이즈를 동적으로 결정하여 시스템 효율성을 높일 수 있는 기술 방안을 제공하는 것을 다른 목적으로 한다.
또한, 본 발명은 CPU를 100% 사용하는 상황에서도 작업 큐에서 출력되는 request 수를 확인하여, 작업 큐의 size만을 판단하여 적정한 최대 스레드의 수를 측정할 때 발생하는 문제인 스레드 수와 작업 큐의 size가 계속해서 늘어나는 것을 해결하는 것을 또 다른 목적으로 한다.
상기한 바와 같은 본 발명의 목적을 달성하고, 후술하는 본 발명의 특징적인 효과를 실현하기 위한, 본 발명의 특징적인 구성은 하기와 같다.
본 발명의 일 태양에 따르면, 스레드 풀(thread pool)의 사이즈를 동적으로 관리하는 방법에 있어서, 컴퓨팅 장치가, 현재 설정되어 있는 최대 스레드 값을 증가시키는 단계, 및 상기 컴퓨팅 장치는, 소정의 시간 동안 적어도 하나 이상의 throughput - 상기 throughput은 단위 시간당 작업 큐에서 출력되는 request수임 - 을 원소로 포함하는 그룹에 대응되는 구간당 작업 처리량을 산출하는 기능을 수행하되, 상기 최대 스레드 값이 증가하기 이전에 산출된 제1 그룹에 대응되는 구간당 작업 처리량과 상기 최대 스레드 값이 증가한 이후에 산출된 제2 그룹에 대응되는 구간당 작업 처리량을 비교하고, 상기 최대 스레드 값이 증가한 이후에 산출된 제2 그룹에 대응되는 구간당 작업 처리량이 상기 최대 스레드 값이 증가하기 이전에 산출된 제1 그룹에 대응되는 구간당 작업 처리량보다 기설정된 제1 임계치만큼 큰 경우, 상기 최대 스레드 값을 다시 증가시키는 단계를 포함하는 방법을 제공한다.
본 발명의 다른 태양에 따르면, 스레드 풀(thread pool)의 사이즈를 동적으로 관리하는 컴퓨팅 장치에 있어서, 작업 요청을 획득하는 통신부; 및 (i) 현재 설정되어 있는 최대 스레드 값을 증가시키는 프로세스, (ii) 소정의 시간 동안 적어도 하나 이상의 throughput - 상기 throughput은 단위 시간당 작업 큐에서 출력되는 request수임 - 을 원소로 포함하는 그룹에 대응되는 구간당 작업 처리량을 산출하는 기능을 수행하되, 상기 최대 스레드 값이 증가하기 이전에 산출된 제1 그룹에 대응되는 구간당 작업 처리량과 상기 최대 스레드 값이 증가한 이후에 산출된 제2 그룹에 대응되는 구간당 작업 처리량을 비교하고, 상기 최대 스레드 값이 증가한 이후에 산출된 제2 그룹에 대응되는 구간당 작업 처리량이 상기 최대 스레드 값이 증가하기 이전에 산출된 제1 그룹에 대응되는 구간당 작업 처리량보다 기설정된 제1 임계치만큼 큰 경우, 상기 최대 스레드 값을 다시 증가시키는 프로세스를 수행하는 프로세서를 포함하는 장치를 제공한다.
본 발명에 의하면, 다음과 같은 효과가 있다.
본 발명은 본 발명은 실시간으로 빠르게 변화하는 웹 환경에서 최적의 스레드 풀의 사이즈를 동적으로 결정하여 시스템 효율성을 높일 수 있는 기술 방안을 제공하는 효과가 있다.
본 발명은 CPU를 100% 사용하는 상황에서도 작업 큐에서 출력되는 request 수를 확인하여, 작업 큐의 size만을 판단하여 적정한 최대 스레드의 수를 측정할 때 발생하는 문제인 스레드 수와 작업 큐의 size가 계속해서 늘어나는 것을 해결하는 또 다른 효과가 있다.
도 1은 본 발명의 일 실시예에 따른 컴퓨팅 장치가 스레드 풀의 사이즈를 동적으로 관리하는 방법을 개략적으로 설명하기 위한 개념도이다.
도 2는 본 발명의 일 실시예에 따른 컴퓨팅 장치의 블록도이다.
도 3은 본 발명의 일 실시예에 따라 작업 큐에서 출력되는 request를 나타내는 도면이다.
도 4는 본 발명의 일 실시예에 따라 소정의 시간마다 throughput을 그룹핑하여 나타낸 그래프이다.
도 5는 본 발명의 일 실시예에 따라 throughput 그룹의 안정성을 검증하기 위한 예시를 나타내는 도면이다.
도 6은 본 발명의 일 실시예에 따라 최대 스레드 값을 다시 증가시키기 까지의 과정을 나타내는 도면이다.
후술하는 본 발명에 대한 상세한 설명은, 본 발명이 실시될 수 있는 특정 실시예를 예시로서 도시하는 첨부 도면을 참조한다. 이들 실시예는 당업자가 본 발명을 실시할 수 있기에 충분하도록 상세히 설명된다. 본 발명의 다양한 실시예는 서로 다르지만 상호 배타적일 필요는 없음이 이해되어야 한다. 예를 들어, 여기에 기재되어 있는 특정 형상, 구조 및 특성은 일 실시예에 관련하여 본 발명의 정신 및 범위를 벗어나지 않으면서 다른 실시예로 구현될 수 있다. 또한, 각각의 개시된 실시예 내의 개별 구성요소의 위치 또는 배치는 본 발명의 정신 및 범위를 벗어나지 않으면서 변경될 수 있음이 이해되어야 한다. 따라서, 후술하는 상세한 설명은 한정적인 의미로서 취하려는 것이 아니며, 본 발명의 범위는, 적절하게 설명된다면, 그 청구항들이 주장하는 것과 균등한 모든 범위와 더불어 첨부된 청구항에 의해서만 한정된다. 도면에서 유사한 참조부호는 여러 측면에 걸쳐서 동일하거나 유사한 기능을 지칭한다.
이하, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자가 본 발명을 용이하게 실시할 수 있도록 하기 위하여, 본 발명의 바람직한 실시예들에 관하여 첨부된 도면을 참조하여 상세히 설명하기로 한다.
도 1은 본 발명의 일 실시예에 따른 컴퓨팅 장치(100)가 스레드 풀(30)의 사이즈를 동적으로 관리하는 방법을 개략적으로 설명하기 위한 개념도이다.
도 2는 상기 본 발명의 일 실시예에 따른 컴퓨팅 장치(100)의 블록도이다.
먼저, 도 2에 도시된 바와 같이, 본 발명의 컴퓨팅 장치(100)는 통신부(110)와 프로세서(120)를 포함하고, 경우에 따라 도 2와는 달리 후술할 데이터베이스(130)도 포함할 수 있다.
여기서, 본 발명의 일 실시예에 따른 스레드 풀의 사이즈를 동적으로 관리하는 컴퓨팅 장치(100)는 디지털 기기로서, 프로세서를 탑재하여 연산 능력을 갖춘 디지털 기기라면 얼마든지 본 발명에 따른 컴퓨팅 장치(100)로서 채택될 수 있다. 특히, 컴퓨팅 장치(100)는 클라이언트 단말의 요청에 응답하여 서비스를 제공하는 웹 서버로 구현될 수 있다.
통신부(110)는 작업 요청을 획득하는 구성이다. 예를 들어, 클라이언트로부터 소정의 요청이 있는 경우 통신부(110)는 이러한 작업 요청을 획득할 수 있다.
프로세서(120)는 뒤에서 상세한 설명을 통하여 자세하게 알아보기로 한다.
한편, 데이터베이스(130)는 컴퓨팅 장치(100)의 통신부(110)에 의해 접근이 가능할 수 있다.
다음으로, 도 1을 참조하면, 본 발명의 일 실시예에 따른 컴퓨팅 장치(100)의 프로세서(120)는 프로그램을 실행하기 위한 적어도 하나의 프로세스를 관리하고 프로세서(120)에 의해 적어도 하나의 작업(21, 22, 23)을 포함하는 작업 큐(20), 적어도 하나의 스레드(가령, 31, 32, 33, 34)를 포함하는 스레드 풀(30)이 관리되고 있음을 알 수 있다. 프로세서(120)는 적어도 하나의 스레드(31, 32, 33, 34) 각각에 복수의 작업 중 적어도 하나를 할당하여 실행되도록 한다. 여기서, 상기 스레드는 워커 스레드를 의미한다.
기설정된 최대 스레드 값 이하의 스레드가 생성되어 스레드 풀(30)에 포함되고, 프로세서(120)는 작업 큐(20)에서 작업을 꺼내어 스레드 풀(30)에 포함된 스레드에 할당할 수 있다. 작업이 끝난 스레드는 폐기되지 않고 스레드 풀에서 다음 작업을 할당받을 때까지 대기할 수 있다.
스레드 풀(30)에는 보유할 수 있는 최대의 스레드 수를 나타내는 최대 스레드 값 및 보유할 수 있는 최소의 스레드 수를 나타내는 최소 스레드 값이 설정되어 있을 수 있다.
그런데, 실시간으로 빠르게 변화하는 웹 환경에서는 적절한 최소 스레드 개수나 최대 스레드 개수를 결정하는게 쉽지 않은 바, 본 발명의 일 실시예에 따른 컴퓨팅 장치(100)는 다음의 방법으로 최대 스레드 개수를 실시간으로 조정한다.
본 발명의 일 실시예에 따른 컴퓨팅 장치(100)는 감시자 스레드(surveillance thread 40)를 두고, 감시자 스레드(40)가 작업 큐(20)와 스레드 풀(30)의 상황을 실시간으로 체크하여 스레드 풀(30)의 최대 스레드 값을 조정하는 기능을 수행할 수 있다. 참고로, 도 1에서는 감시자 스레드(40)가 스레드 풀(30)에 포함되지 않은 것으로 도시하였지만, 반드시 이에 한정되는 것은 아닐 것이다.
구체적으로, 감시자 스레드(40)는 스레드 풀(30)에 포함된 스레드의 수가 현재 설정되어 있는 최대 스레드 값에 소정의 범위 내로 근접하는지 모니터링할 수 있다. 그리고, 스레드 풀(30)에 포함된 스레드의 수가 소정의 범위 내로 근접하면, 감시자 스레드(40)는 상기 현재 설정되어 있는 최대 스레드 값을 천천히 증가(1차 증가)시킬 수 있다. 이 경우에는 몰려오는 작업을 효율적으로 처리하기 위해 현재의 스레드의 수가 부족할 수 있으므로 최대 스레드 값을 천천히 증가시켜 현재의 스레드 수를 늘려주기 위한 것이다.
구체적으로, 상기 현재 설정되어 있는 최대 스레드 값을 CPU 코어의 개수를 참조로 하여 증가(1차 증가)시킬 수 있다. 또한, 상기 1차 증가뿐만 아니라 후술할 2차 증가로서, 1차 증가 이후 소정의 조건이 만족되면 최대 스레드 값을 다시 증가(2차 증가)시키는 경우에도 CPU 코어의 개수를 참조로 하여 증가시킬 수 있다.
여기서, CPU 코어의 개수를 참조로 한다는 것은 CPU 코어의 개수와 동일, 또는 CPU 코어의 개수를 기초로 하여 다소 간의 수를 가감할 수 있다는 것이다.
이때, 최대 스레드 값을 천천히 증가시키는 이유는 각 스레드에 할당되는 개별 작업의 CPU 사용량을 알 수 없기 때문이다. 하나의 작업 요청에는 I/O나 네트워크 사용 등으로 인해 CPU를 사용하지 않는 idle time이 있고 실제로 CPU를 사용해서 계산 작업을 하는 work time이 있다. idle time이 긴 작업이 많이 들어오는 경우는 최대 스레드 값을 늘려줘서 더 많은 스레드를 생성해야 한다. 다만, 한번에 최대 스레드 값을 많이 늘려서 스레드를 많이 생성하게 되면 문맥 교환(context switching) 때문에 시스템 성능에 안 좋은 영향을 미칠 수 있으므로 최대 스레드 값을 천천히 증가시키는 것이 시스템 안정성을 확보하면서도 최대의 성능을 이끌어낼 수 있는 방법이 된다. 그리고 이는 idle time이 짧고 work time이 긴 작업이 많이 들어오는 경우도 마찬가지이다.
한편, 컴퓨팅 장치(100)의 프로세서(120)는 스레드 풀(30)에 포함된 스레드의 수가 현재 설정되어 있는 최대 스레드 값에 소정의 범위 내로 근접하면, 현재 설정되어 있는 최대 스레드 값을 증가(1차 증가)시킬 수 있다. 여기서 증가된 최대 스레드 값은 데이터베이스(130)에 저장될 수 있다.
예를 들어, 현재 설정되어 있는 최대 스레드 값이 100개라고 할 때, 프로세서(120)는 감시자 스레드(40)로 하여금 작업을 할당받은 스레드를 포함하는 스레드 풀(30)의 스레드의 개수가 최대 스레드 값의 99%인 99개 이상이 되는지 살펴보도록 할 수 있다. 만일 스레드 풀(30)의 스레드의 개수가 99개 이상이라면, 프로세서(120)는 감시자 스레드(40)로 하여금 현재 설정되어 있는 최대 스레드 값을 120개로 증가시켜 증가된 최대 스레드 값의 상태를 데이터베이스(130)에 저장하도록 할 수 있다.
이처럼 프로세서(120)는, 스레드 풀(30)에 포함된 스레드의 수가 최대 스레드 값과 동일하지 않은 경우라도 소정의 범위 내로 근접하면 감시자 스레드(40)로 하여금 최대 스레드 값을 증가시키도록 하여 스레드 수가 포화 상태가 되는 것을 예방할 수 있다.
물론, 프로세서(120)는, 스레드 풀(30)에 포함된 스레드의 수가 현재 설정되어 있는 최대 스레드 값과 동일한 경우, 감시자 스레드(40)로 하여금 현재 설정되어 있는 최대 스레드 값을 증가시켜 데이터베이스(130)에 저장하도록 할 수도 있다.
여기서, 현재 설정되어 있는 최대 스레드 값을 증가시키는 것은 컴퓨팅 장치(100)의 프로세서(120)가 (i) 상기 최대 스레드 값이 증가된 만큼 새로운 스레드를 생성하여 스레드 풀(30)에 넣고, (ii) 상기 작업 큐(20)에서 새로운 작업을 획득하여 상기 생성된 새로운 스레드에 할당하는 프로세스가 포함된 것이다.
도 3은 본 발명의 일 실시예에 따라 작업 큐(20)에서 출력되는 작업(310)을 나타내는 도면이다.
도 4는 본 발명의 일 실시예에 따라 소정의 시간마다 throughput을 그룹핑하여 나타낸 그래프이다.
이후, 컴퓨팅 장치(100)는 소정의 시간 동안 적어도 하나 이상의 throughput을 원소로 하는 그룹에 대응되는 구간당 작업 처리량을 산출하는 기능을 수행할 수 있다. 여기서, throughput은 도 3을 참조할 때, 단위 시간 동안 작업 큐(20)에서 출력되는 request(310)의 수를 의미한다. 스레드에 할당된 기존 작업이 처리된 다음에 작업 큐(20)에 있는 작업이 출력되어 각 스레드에 다시 할당되므로, 작업 큐(20)에서 출력되는 request 수는 스레드 풀(30)에서 처리된 request 수를 추정하는데 사용할 수 있다.
즉, throughput은 단위 시간 동안 작업 큐(20)에서 출력되는 request 수이고, 컴퓨팅 장치(100)의 프로세서(120)는 소정의 시간 동안 상기 throughput의 그룹에 대응되는 구간당 작업 처리량을 산출할 수 있다. 도 4를 참조하면, 상기 그래프는 소정 시간 당 출력되는 request 수를 나타낸 것으로, 그래프에 나타난 각각의 포인트는 단위 시간당 작업 큐(20)에서 출력되는 request 수인 throughput이며, 상기 그래프의 예시로서 총 20초동안 4개의 그룹(도 4에서의 소정의 시간인 5초 간격의 throughput 그룹)이 존재하는 경우를 상정하였다.
도 4를 참조할 때, 상기 그룹에 대응되는 구간당 작업 처리량은 5초 동안의 throughput들의 평균값, 상기 5초 구간 중 출력되는 request 수가 가장 큰 throughput의 값, 상기 5초 구간 중 출력되는 request 수가 가장 작은 throughput의 값, 상기 5초 구간 중 임의의 throughput의 값을 포함할 수 있다.
한편, 상기 컴퓨팅 장치(100)는 최대 스레드 값이 증가(1차 증가)하기 이전에 산출된 제1 그룹에 대응되는 구간당 작업 처리량과 상기 최대 스레드 값이 증가(1차 증가)한 이후에 산출된 제2 그룹에 대응되는 구간당 작업 처리량을 비교할 수 있다.
도 4를 참조하면, 최대 스레드 값이 증가한 시점인 10초를 중심으로 5~10초 사이 throughput을 원소로 하는 제1 그룹에 대응되는 구간당 작업 처리량과 10~15초 사이 throughput을 원소로 하는 제2 그룹에 대응되는 구간당 작업 처리량을 비교할 수 있다.
이후, 컴퓨팅 장치(100)의 프로세서(120)는 최대 스레드 값이 증가(1차 증가)한 이후에 산출된 제2 그룹에 대응되는 구간당 작업 처리량이 상기 최대 스레드 값이 증가(1차 증가)하기 이전에 산출된 제1 그룹에 대응되는 구간당 작업 처리량보다 기설정된 제1 임계치만큼 큰 경우, 최대 스레드 값을 다시 증가(2차 증가)시킬 수 있다.
이는 스레드의 수가 증가한 이후 스레드 풀(30)에서의 작업 처리량이 스레드의 수가 증가하기 전 스레드 풀(30)에서의 작업 처리량보다 제1 임계치 이상으로 큰 경우, 스레드의 수가 증가함에 따라 작업 처리량이 증가된 것으로 보고 스레드의 수를 다시 증가시켜 적정한 스레드의 수를 찾기 위함이다.
도 4(a)를 참조할 때, 최대 스레드 값이 증가한 10초를 중심으로 제1 그룹과 제2 그룹 사이 구간당 작업 처리량의 차이가 d1이고, 도 4(b)는 d2인 것을 확인할 수 있다. 기설정된 제1 임계치가 d2보다는 크고, d1보다는 작다고 할 때, 도 4(a)에서는 제2 그룹 구간(10~15초)이후 최대 스레드 값을 다시 증가시키고, 도 4(b)에서는 제2 그룹 구간(10~15초)이후 최대 스레드 값을 다시 증가시키지 않을 것이다.
이는, 도 4(a)의 경우 적정한 스레드의 수를 아직 찾지 못했기에 최대 스레드 값을 다시 증가시키는 것이고, 도 4(b)의 경우 CPU성능과 관련하여 적정한 숫자의 스레드가 스레드 풀(30)에 이미 포함되어, 스레드의 수를 늘린다고 하여 작업 처리량이 늘어나는 것이 아니기 때문에 최대 스레드 값을 다시 증가시키지 않는 것이다.
한편, 구간당 작업 처리량은 throughput을 원소로 가지는 그룹에 포함된 throughput의 평균값일 수 있으나 이에 한정되는 것은 아니다.
가령, 컴퓨팅 장치(100)는 제1 그룹에 포함된 throughput의 평균값과 제2 그룹에 포함된 throughput의 평균값을 산출하는 기능을 수행하되, 제1 그룹에 포함된 throughput의 평균값과 제2 그룹에 포함된 throughput의 평균값을 비교하고, 제2 그룹에 포함된 throughput의 평균값이 제1 그룹에 포함된 throughput의 평균값보다 기설정된 제2 임계치 이상으로 큰 경우, 상기 최대 스레드 값을 다시 증가시킬 수 있다.
여기서, 제2 임계치는 제1 임계치와 동일할 수도, 다를 수도 있다.
도 5는 본 발명의 일 실시예에 따라 어느 하나의 throughput 그룹의 안정성을 검증하기 위한 예시를 나타내는 도면이다.
한편, 컴퓨팅 장치(100)의 프로세서(120)는 최대 스레드 값이 증가(1차 증가)한 이후에 산출된 상기 제2 그룹에 포함된 throughput을 참조하여, 시계열의 안정성 검증법(stationarity of time series)을 통해 소정의 범위 내에서 증감이 이루어져 안정성을 만족하는지 판단할 수 있다.
여기서, 시계열의 안정성 검증법이란 시간이 변하더라도 어떤 대상이 어느 정도 일정한지를 검증하는 것으로 크게 단위근 검증(unit root test)과 공적분 검증(cointegration test)로 나뉜다. 대표적인 안정성 검증법으로 상기 단위근 검증에 속하는 Dickey-Fuller Test가 있다.
상기 안정성이 만족되면, 소정의 시간 동안 적어도 하나 이상의 throughput을 원소로 포함하는 그룹에 대응되는 구간당 작업 처리량을 산출하는 기능을 수행하되, 최대 스레드 값이 증가(1차 증가)하기 이전에 산출된 제1 그룹에 대응되는 구간당 작업 처리량과 상기 최대 스레드 값이 증가(1차 증가)한 이후에 산출된 제2 그룹에 대응되는 구간당 작업 처리량을 비교하고, 상기 최대 스레드 값이 증가한 이후에 산출된 제2 그룹에 대응되는 구간당 작업 처리량이 상기 최대 스레드 값이 증가하기 이전에 산출된 제1 그룹에 대응되는 구간당 작업 처리량보다 상기 기설정된 제1 임계치만큼 큰 경우, 상기 최대 스레드 값을 다시 증가(2차 증가)시킬 수 있다.
상기 안정성을 조건으로 하는 이유는 최대 스레드 값을 증가시킨 직후에는 스레드가 늘어나게 되면서 request 처리량이 요동칠 수 있는데, 최대 스레드 값을 증가시킨 직후의 request 처리량은 request 증가여부를 반영하지 못하므로, request 처리량이 어느 정도 안정된 후에 최대 스레드 값을 증가시키기 전과 비교를 해야 하기 때문이다.
이때, 안정됨의 여부를 시계열의 안정성 검증법, 특히 Dickey-Fuller Test를 사용하여 제2 그룹에 포함된 throughput들이 소정의 범위 내에서 증감이 이루어지는지를 판단할 수 있다.
예를 들면, 그 진폭이 어느 정도 이내로 들어와야만 비로소 안정하다고 생각할 수 있으므로, 가령 구간 평균의 5%보다 표준편차가 작으면 안정되었다고 판단할 수 있다.
또한, 도 5에서 볼 수 있듯이, 안정성이 만족되는 진폭의 소정의 범위를 d3라고 하고, 최대 스레드 값이 증가(1차 증가)한 10초 직후의 그룹에 포함된 throughput을 확대하여 살펴보면, 가장 큰 값을 가지는 throughput과 가장 작은 값을 가지는 throughput의 차이가 d3보다 작으므로 안정성을 만족한다고 볼 수 있으므로 제1 그룹 및 제2 그룹에 대응되는 구간당 작업 처리량을 비교하여 최대 스레드 값을 증가시킬지 여부를 판단할 수 있다. 반면, 안정성이 만족되지 않는 경우에 대해서는 아래에서 살펴보겠다.
Throughput을 원소로 포함하는 그룹에 대응되는 구간당 작업 처리량이 제k 구간 작업 처리량, 제k+1 구간 작업 처리량을 포함하고, 상기 제k+1 구간 작업 처리량은 제k+1 구간의 구간당 작업 처리량으로서, 상기 제k+1 구간은 제k 구간 다음 구간이라고 하자.
이때, 제k 구간 작업 처리량의 안정성이 만족되지 않는다면, 최대 스레드 값을 증가시키지 않고, 제k+1 구간 작업 처리량의 안정성이 만족되는지를 판단할 수 있다.
이는 한 개의 그룹에 포함된 복수의 throughput이 소정의 범위를 넘어서 요동을 친다면, 이때 그래프 상의 출력되는 request 수는 실제의 request 처리량을 반영하지 못하기 때문이다. 따라서, 제k 구간 작업 처리량의 안정성이 만족되지 않는다면, 최대 스레드 값을 증가시키지 않고 제k+1 구간 작업 처리량의 안정성이 만족되는지를 판단해야 할 것이다.
마찬가지로, 제k+1 구간 작업 처리량의 안정성이 만족되지 않는다면, 최대 스레드 값을 증가시키지 않고 제k+2 구간 작업 처리량의 안정성이 만족되는지를 판단한다.
한편, 최대 스레드 값이 다시 증가(2차 증가)할 때의 증가분은, 최대 스레드 값이 증가한 이후에 산출된 제2 그룹에 대응되는 구간당 작업 처리량이 상기 최대 스레드 값이 증가하기 이전에 산출된 제1 그룹에 대응되는 구간당 작업 처리량보다 큰 정도를 참조로 하여 결정될 수도 있다.
예를 들어, 기설정된 제1 임계치가 50이고, 제2 그룹에 대응되는 구간당 작업 처리량이 제1 그룹에 대응되는 구간당 작업 처리량보다 200만큼 큰 경우, 차이가 100인 경우보다 최대 스레드 값의 증가가 더 클 수 있다.
이때까지는 그룹별로 구간당 작업 처리량을 비교하여 최대 스레드 값을 증가시킬지 여부를 판단하였으나, 이하에서는 작업 큐의 사이즈에 대한 정보를 함께 고려하여 서술하겠다.
도 6은 본 발명의 다른 실시예에 따라 최대 스레드 값을 다시 증가(2차 증가)하기까지의 과정을 나타내는 도면이다.
컴퓨팅 장치(100)는 프로세스가 시작(S610)되면, 우선 스레드 풀(30)에 포함된 스레드의 수가 현재 설정되어 있는 최대 스레드 값에 소정의 범위 내로 접근하면 최대 스레드 값을 증가(1차 증가)시킨다(S620).
다음 단계로 1차 증가 이후 제2 그룹에 대응되는 구간당 작업 처리량이 제1 그룹에 대응되는 구간당 작업 처리량보다 제1 임계치만큼 큰지를 판단(S630)하는데 조건을 만족하지 못하면 다시 S620단계로 복귀해 모니터링을 수행하고, 만족하면 다음 단계인 S640으로 넘어간다. 참고로, 도면에는 미도시하였으나 상기 조건을 판단하기 전에 시계열의 안정성 검증법을 통해 안정성을 만족하는지를 먼저 판단할 수 있다.
상기 조건이 만족되면, 컴퓨팅 장치(100)는 작업 큐(20)의 사이즈에 대한 정보를 추가로 참조할 수 있는데, 최대 스레드 값이 증가하기 이전의 작업 큐(20)의 사이즈와 최대 스레드 값이 증가한 이후의 작업 큐(20)의 사이즈를 비교하고, 최대 스레드 값이 증가한 이후의 작업 큐(20)의 사이즈가 최대 스레드 값이 증가하기 이전의 작업 큐(20)의 사이즈보다 크거나 같은지를 판단할 수 있다(S640).
상기 작업 큐의 사이즈 관련 조건도 만족된다면, 컴퓨팅 장치(100)의 프로세서(120)는 최대 스레드 값을 다시 증가(2차 증가)시킬 수 있다(S650).
이하에서는 상기 작업 큐의 사이즈 관련 조건 판단에 대해 좀더 자세히 살펴보겠다.
이 경우에는 최대 스레드 값이 증가하였음에도 작업 큐(20)의 사이즈가 종전과 동일하게 유지되거나 증가된 것에 비추어 몰려오는 작업을 수행하기에는 현재의 스레드 수가 부족하다고 판단되므로 최대 스레드 값을 다시 증가시키는 것이다. 최대 스레드 값이 증가되었음에도 작업 큐(20)의 사이즈에 변화가 없는 경우는 최대 스레드 값의 증가로 새로운 스레드가 생성되어 작업 큐(20)의 작업이 할당되었음에도 작업 큐(20)의 사이즈가 변화가 없는 경우로서, 현재의 스레드 수가 몰려오는 작업량을 감소시킬 정도로 충분하지 않은 상황으로 볼 수 있으므로 작업 큐(20)의 사이즈가 증가한 경우에 준해서 처리할 수도 있다.
구체적으로, 프로세서(120)는 감시자 스레드(40)로 하여금 현재 설정되어 있는 최대 스레드 값을 120으로 증가(1차 증가)시킨 경우, 최대 스레드 값이 100일 때의 작업 큐(20)의 사이즈와 최대 스레드 값이 120으로 증가한 이후의 작업 큐(20)의 사이즈를 비교하도록 할 수 있다. 그리고, 최대 스레드 값이 120이 된 이후의 작업 큐(20)의 사이즈가 최대 스레드 값이 100일 때의 작업 큐(20)의 사이즈보다 크거나 같으면 최대 스레드 값을 다시 140으로 증가시켜 데이터베이스(130)에 저장하도록 할 수 있다. 이러한 경우는 최대 스레드 값이 120으로 설정되어 스레드 수가 증가하였음에도 불구하고 작업 큐(20)에 포함되어 있는 작업의 수가 줄어들지 않았으므로 더 많은 스레드가 필요하다고 판단되기 때문이다.
상기 작업 큐(20)의 사이즈 관련 조건만을 판단하면, CPU를 100% 사용하는 경우 대처를 할 수 없게 될 수 있다. CPU를 100% 사용하는 상황에서는 아무리 스레드를 늘려도 request 처리능력이 향상되지 않으므로 이런 상황에서는 스레드와 작업 큐(20)의 사이즈만 계속하여 늘어나게 된다.
따라서, 상기 컴퓨팅 장치(100)는 상기 작업 큐(20)의 사이즈 관련 조건뿐만 아니라 최대 스레드 값을 증가(1차 증가)시킨 후 단위 시간당 처리하는 request 수인 throughput이 늘어나지 않으면 최대 스레드 값의 증가를 멈출 수 있다.
한편, 전술한 본 발명의 프로세서(120)는 멀티 코어를 포함하고 멀티 코어를 통해 감시자 스레드(40) 및 복수의 (워커) 스레드 각각을 실행할 수 있다. 이 경우 멀티 코어 중 하나는 감시자 스레드(40)를 동작시키고 나머지 코어는 스레드를 동작시킬 수 있고, 여러 코어가 번갈아 가면서 감시자 스레드(40) 또는 스레드를 동작시키도록 구현될 수도 있다. 또한, 하나의 코어가 감시자 스레드(40)와 스레드를 번갈아가면서 동작시키도록 구현되는 것도 가능하다.
본 발명의 일 실시예에 따른 스레드 풀(30)의 사이즈를 동적으로 관리하는 컴퓨팅 장치(100)의 데이터베이스(130)는, 스레드 풀(30)의 사이즈를 동적으로 관리하기 위해 필요한 각종 데이터를 저장할 수 있다. 우선, 작업 큐(20)는 메모리 상에 위치할 수 있고 작업에 대한 데이터의 포인터를 저장할 수 있다. 또한, 데이터베이스(130)는 스레드의 데이터를 저장하고 스레드 문맥 교환(context switching)에 이용되기도 한다. 또한, 데이터베이스(130)는 작업 큐(20)의 사이즈, 스레드 풀(30)에 설정되어 있는 최대 스레드 값, 최소 스레드 값을 저장할 수 있다.
이상 설명된 본 발명에 따른 실시예들은 다양한 컴퓨터 구성요소를 통하여 수행될 수 있는 프로그램 명령어의 형태로 구현되어 컴퓨터 판독 가능한 기록 매체에 기록될 수 있다. 상기 컴퓨터 판독 가능한 기록 매체는 프로그램 명령어, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있다. 상기 컴퓨터 판독 가능한 기록 매체에 기록되는 프로그램 명령어는 본 발명을 위하여 특별히 설계되고 구성된 것들이거나 컴퓨터 소프트웨어 분야의 당업자에게 공지되어 사용 가능한 것일 수도 있다. 컴퓨터 판독 가능한 기록 매체의 예에는, 하드 디스크, 플로피 디스크 및 자기 테이프와 같은 자기 매체, CD-ROM, DVD와 같은 광기록 매체, 플롭티컬 디스크(floptical disk)와 같은 자기-광 매체(magneto-optical media), 및 ROM, RAM, 플래시 메모리 등과 같은 프로그램 명령어를 저장하고 수행하도록 특별히 구성된 하드웨어 장치가 포함된다. 프로그램 명령어의 예에는, 컴파일러에 의해 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터 등을 사용해서 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드도 포함된다. 상기 하드웨어 장치는 본 발명에 따른 처리를 수행하기 위해 하나 이상의 소프트웨어 모듈로서 작동하도록 구성될 수 있으며, 그 역도 마찬가지이다.
이상에서 본 발명이 구체적인 구성요소 등과 같은 특정 사항들과 한정된 실시예 및 도면에 의해 설명되었으나, 이는 본 발명의 보다 전반적인 이해를 돕기 위해서 제공된 것일 뿐, 본 발명이 상기 실시예들에 한정되는 것은 아니며, 본 발명이 속하는 기술분야에서 통상적인 지식을 가진 자라면 이러한 기재로부터 다양한 수정 및 변형을 꾀할 수 있다.
따라서, 본 발명의 사상은 상기 설명된 실시예에 국한되어 정해져서는 아니 되며, 후술하는 특허청구범위뿐만 아니라 이 특허청구범위와 균등하게 또는 등가적으로 변형된 모든 것들은 본 발명의 사상의 범주에 속한다고 할 것이다.
20: 작업 큐
30: 스레드 풀
40: 감시자 스레드
100: 컴퓨팅 장치
110: 통신부
120: 프로세서
130: 데이터베이스
310: 작업 큐에서 출력되는 request

Claims (22)

  1. 스레드 풀(thread pool)의 사이즈를 동적으로 관리하는 방법에 있어서,
    (a) 컴퓨팅 장치가, 현재 설정되어 있는 최대 스레드 값을 증가시키는 단계, 및
    (b) 상기 컴퓨팅 장치는, 소정의 시간 동안 적어도 하나 이상의 throughput - 상기 throughput은 단위 시간당 작업 큐에서 출력되는 request수임 - 을 원소로 포함하는 그룹에 대응되는 구간당 작업 처리량을 산출하는 기능을 수행하되, 상기 최대 스레드 값이 증가하기 이전에 산출된 제1 그룹에 대응되는 구간당 작업 처리량과 상기 최대 스레드 값이 증가한 이후에 산출된 제2 그룹에 대응되는 구간당 작업 처리량을 비교하고, 상기 최대 스레드 값이 증가한 이후에 산출된 제2 그룹에 대응되는 구간당 작업 처리량이 상기 최대 스레드 값이 증가하기 이전에 산출된 제1 그룹에 대응되는 구간당 작업 처리량보다 기설정된 제1 임계치만큼 큰 경우, 상기 최대 스레드 값을 다시 증가시키는 단계를 포함하되,
    상기 (b) 단계에서,
    상기 컴퓨팅 장치는, 상기 (a) 단계에 의해 상기 최대 스레드 값이 증가한 이후에 산출된 상기 제2 그룹에 포함된 throughput을 참조하여, 시계열의 안정성 검증법(stationarity of time series)을 통해 소정의 범위 내에서 증감이 이루어져 안정성을 만족하는지 판단하고, 상기 안정성이 만족되면, 상기 소정의 시간 동안 적어도 하나 이상의 throughput을 원소로 포함하는 그룹에 대응되는 구간당 작업 처리량을 산출하는 기능을 수행하되, 상기 최대 스레드 값이 증가하기 이전에 산출된 제1 그룹에 대응되는 구간당 작업 처리량과 상기 최대 스레드 값이 증가한 이후에 산출된 제2 그룹에 대응되는 구간당 작업 처리량을 비교하고, 상기 최대 스레드 값이 증가한 이후에 산출된 제2 그룹에 대응되는 구간당 작업 처리량이 상기 최대 스레드 값이 증가하기 이전에 산출된 제1 그룹에 대응되는 구간당 작업 처리량보다 상기 기설정된 제1 임계치만큼 큰 경우, 상기 최대 스레드 값을 다시 증가시키고,
    상기 throughput을 원소로 포함하는 그룹에 대응되는 구간당 작업 처리량이 제k 구간 작업 처리량, 제k+1 구간 작업 처리량을 포함하고, 상기 제k+1 구간 작업 처리량은 제k+1 구간의 구간당 작업 처리량으로서, 상기 제k+1 구간은 제k 구간 다음 구간이라고 할 때,
    상기 (b) 단계에서,
    상기 제k 구간 작업 처리량의 안정성이 만족되지 않는다면, 상기 최대 스레드 값을 증가시키지 않고, 상기 제k+1 구간 작업 처리량의 안정성이 만족되는지를 판단하는 것을 특징으로 하는 방법.
  2. 삭제
  3. 삭제
  4. 제1항에 있어서,
    상기 시계열의 안정성 검증법은 dickey-fuller test를 포함하는 것을 특징으로 하는 방법.
  5. 제1항에 있어서,
    상기 (a) 단계는,
    (a1) 상기 컴퓨팅 장치가, 상기 최대 스레드 값이 증가된 분만큼 새로운 스레드를 생성하여 상기 스레드 풀에 넣는 단계, 및
    (a2) 상기 컴퓨팅 장치가, 상기 작업 큐에서 새로운 작업을 획득하여 상기 생성된 새로운 스레드에 할당하는 단계를 포함하는 것을 특징으로 하는 방법.
  6. 제1항에 있어서,
    상기 (b) 단계는,
    상기 컴퓨팅 장치가, 상기 제1 그룹에 포함된 throughput의 평균값과 상기 제2 그룹에 포함된 throughput의 평균값을 산출하는 기능을 수행하되, 상기 제1 그룹에 포함된 throughput의 평균값과 상기 제2 그룹에 포함된 throughput의 평균값을 비교하고, 상기 제2 그룹에 포함된 throughput의 평균값이 상기 제1 그룹에 포함된 throughput의 평균값보다 기설정된 제2 임계치만큼 큰 경우, 상기 최대 스레드 값을 다시 증가시키는 단계를 포함하는 것을 특징으로 하는 방법.
  7. 제1항에 있어서,
    상기 (a) 단계는,
    상기 스레드 풀에 포함된 스레드의 수가 현재 설정되어 있는 최대 스레드 값에 소정의 범위 내로 근접하면, 상기 컴퓨팅 장치가, 상기 현재 설정되어 있는 최대 스레드 값을 증가시키는 것을 특징으로 하는 방법.
  8. 제1항에 있어서,
    상기 (a) 단계 및 상기 (b) 단계 각각에서 증가되는 최대 스레드 값은 CPU코어의 개수를 참조로 하여 결정되는 것을 특징으로 하는 방법.
  9. 제1항에 있어서,
    상기 (a) 단계는,
    상기 컴퓨팅 장치가 감시자 스레드로 하여금 상기 현재 설정되어 있는 최대 스레드 값을 증가시키도록 하는 것을 특징으로 하는 방법.
  10. 제1항에 있어서,
    상기 (b) 단계에서 최대 스레드 값의 증가분은, 상기 최대 스레드 값이 증가한 이후에 산출된 제2 그룹에 대응되는 구간당 작업 처리량이 상기 최대 스레드 값이 증가하기 이전에 산출된 제1 그룹에 대응되는 구간당 작업 처리량보다 큰 정도를 참조로 하여 결정되는 것을 특징으로 하는 방법.
  11. 제1항에 있어서,
    상기 (b) 단계는,
    상기 컴퓨팅 장치가, (i) 소정의 시간 동안 적어도 하나 이상의 throughput을 원소로 포함하는 그룹에 대응되는 구간당 작업 처리량을 산출하는 기능을 수행하되, 상기 최대 스레드 값이 증가하기 이전에 산출된 제1 그룹에 대응되는 구간당 작업 처리량과 상기 최대 스레드 값이 증가한 이후에 산출된 제2 그룹에 대응되는 구간당 작업 처리량을 비교하고, 상기 최대 스레드 값이 증가한 이후에 산출된 제2 그룹에 대응되는 구간당 작업 처리량이 상기 최대 스레드 값이 증가하기 이전에 산출된 제1 그룹에 대응되는 구간당 작업 처리량보다 상기 기설정된 제1 임계치만큼 크고, (ii) 상기 작업 큐의 사이즈에 대한 정보를 참조로 하여, 상기 최대 스레드 값이 증가하기 이전의 작업 큐의 사이즈와 상기 최대 스레드 값이 증가한 이후의 작업 큐의 사이즈를 비교하고, 상기 최대 스레드 값이 증가한 이후의 작업 큐의 사이즈가 상기 최대 스레드 값이 증가하기 이전의 작업 큐의 사이즈보다 크거나 같을 경우, 상기 최대 스레드 값을 다시 증가시키는 단계를 포함하는 방법.
  12. 스레드 풀(thread pool)의 사이즈를 동적으로 관리하는 컴퓨팅 장치에 있어서,
    작업 요청을 획득하는 통신부; 및
    (i) 현재 설정되어 있는 최대 스레드 값을 증가시키는 프로세스, (ii) 소정의 시간 동안 적어도 하나 이상의 throughput - 상기 throughput은 단위 시간당 작업 큐에서 출력되는 request수임 - 을 원소로 포함하는 그룹에 대응되는 구간당 작업 처리량을 산출하는 기능을 수행하되, 상기 최대 스레드 값이 증가하기 이전에 산출된 제1 그룹에 대응되는 구간당 작업 처리량과 상기 최대 스레드 값이 증가한 이후에 산출된 제2 그룹에 대응되는 구간당 작업 처리량을 비교하고, 상기 최대 스레드 값이 증가한 이후에 산출된 제2 그룹에 대응되는 구간당 작업 처리량이 상기 최대 스레드 값이 증가하기 이전에 산출된 제1 그룹에 대응되는 구간당 작업 처리량보다 기설정된 제1 임계치만큼 큰 경우, 상기 최대 스레드 값을 다시 증가시키는 프로세스를 수행하는 프로세서를 포함하고,
    상기 (ii) 프로세스에서,
    상기 프로세서는, 상기 (i) 프로세스에 의해 상기 최대 스레드 값이 증가한 이후에 산출된 상기 제2 그룹에 포함된 throughput을 참조하여, 시계열의 안정성 검증법(stationarity of time series)을 통해 소정의 범위 내에서 증감이 이루어져 안정성을 만족하는지 판단하고, 상기 안정성이 만족되면, 상기 소정의 시간 동안 적어도 하나 이상의 throughput을 원소로 포함하는 그룹에 대응되는 구간당 작업 처리량을 산출하는 기능을 수행하되, 상기 최대 스레드 값이 증가하기 이전에 산출된 제1 그룹에 대응되는 구간당 작업 처리량과 상기 최대 스레드 값이 증가한 이후에 산출된 제2 그룹에 대응되는 구간당 작업 처리량을 비교하고, 상기 최대 스레드 값이 증가한 이후에 산출된 제2 그룹에 대응되는 구간당 작업 처리량이 상기 최대 스레드 값이 증가하기 이전에 산출된 제1 그룹에 대응되는 구간당 작업 처리량보다 상기 기설정된 제1 임계치만큼 큰 경우, 상기 최대 스레드 값을 다시 증가시키며,
    상기 throughput을 원소로 포함하는 그룹에 대응되는 구간당 작업 처리량이 제k 구간 작업 처리량, 제k+1 구간 작업 처리량을 포함하고, 상기 제k+1 구간 작업 처리량은 제k+1 구간의 구간당 작업 처리량으로서, 상기 제k+1 구간은 제k 구간 다음 구간이라고 할 때,
    상기 (ii) 프로세스에서,
    상기 제k 구간 작업 처리량의 안정성이 만족되지 않는다면, 상기 최대 스레드 값을 증가시키지 않고, 상기 제k+1 구간 작업 처리량의 안정성이 만족되는지를 판단하는 것을 특징으로 하는 장치.
  13. 삭제
  14. 삭제
  15. 제12항에 있어서,
    상기 시계열의 안정성 검증법은 dickey-fuller test를 포함하는 것을 특징으로 하는 장치.
  16. 제12항에 있어서,
    상기 (i) 프로세스는,
    (i-1) 상기 프로세서가, 상기 최대 스레드 값이 증가된 분만큼 새로운 스레드를 생성하여 상기 스레드 풀에 넣는 프로세스, 및
    (i-2) 상기 프로세서가, 상기 작업 큐에서 새로운 작업을 획득하여 상기 생성된 새로운 스레드에 할당하는 프로세스를 포함하는 것을 특징으로 하는 장치.
  17. 제12항에 있어서,
    상기 (ii) 프로세스는,
    상기 프로세서가, 상기 제1 그룹에 포함된 throughput의 평균값과 상기 제2 그룹에 포함된 throughput의 평균값을 산출하는 기능을 수행하되, 상기 제1 그룹에 포함된 throughput의 평균값과 상기 제2 그룹에 포함된 throughput의 평균값을 비교하고, 상기 제2 그룹에 포함된 throughput의 평균값이 상기 제1 그룹에 포함된 throughput의 평균값보다 기설정된 제2 임계치만큼 큰 경우, 상기 최대 스레드 값을 다시 증가시키는 프로세스를 포함하는 것을 특징으로 하는 장치.
  18. 제12항에 있어서,
    상기 (i) 프로세스는,
    상기 스레드 풀에 포함된 스레드의 수가 현재 설정되어 있는 최대 스레드 값에 소정의 범위 내로 근접하면, 상기 프로세서가, 상기 현재 설정되어 있는 최대 스레드 값을 증가시키는 것을 특징으로 하는 장치.
  19. 제12항에 있어서,
    상기 (i) 프로세스 및 상기 (ii) 프로세스 각각에서 증가되는 최대 스레드 값은 CPU코어의 개수를 참조로 하여 결정되는 것을 특징으로 하는 장치.
  20. 제12항에 있어서,
    상기 (i) 프로세스는,
    상기 프로세서가 감시자 스레드로 하여금 상기 현재 설정되어 있는 최대 스레드 값을 증가시키도록 하는 것을 특징으로 하는 장치.
  21. 제12항에 있어서,
    상기 (ii) 프로세스에서 최대 스레드 값의 증가분은, 상기 최대 스레드 값이 증가한 이후에 산출된 제2 그룹에 대응되는 구간당 작업 처리량이 상기 최대 스레드 값이 증가하기 이전에 산출된 제1 그룹에 대응되는 구간당 작업 처리량보다 큰 정도를 참조로 하여 결정되는 것을 특징으로 하는 장치.
  22. 제12항에 있어서,
    상기 (ii) 프로세스는,
    상기 프로세서가, (ii-1) 소정의 시간 동안 적어도 하나 이상의 throughput을 원소로 포함하는 그룹에 대응되는 구간당 작업 처리량을 산출하는 기능을 수행하되, 상기 최대 스레드 값이 증가하기 이전에 산출된 제1 그룹에 대응되는 구간당 작업 처리량과 상기 최대 스레드 값이 증가한 이후에 산출된 제2 그룹에 대응되는 구간당 작업 처리량을 비교하고, 상기 최대 스레드 값이 증가한 이후에 산출된 제2 그룹에 대응되는 구간당 작업 처리량이 상기 최대 스레드 값이 증가하기 이전에 산출된 제1 그룹에 대응되는 구간당 작업 처리량보다 상기 기설정된 제1 임계치만큼 크고, (ii-2) 상기 작업 큐의 사이즈에 대한 정보를 참조로 하여, 상기 최대 스레드 값이 증가하기 이전의 작업 큐의 사이즈와 상기 최대 스레드 값이 증가한 이후의 작업 큐의 사이즈를 비교하고, 상기 최대 스레드 값이 증가한 이후의 작업 큐의 사이즈가 상기 최대 스레드 값이 증가하기 이전의 작업 큐의 사이즈보다 크거나 같을 경우, 상기 최대 스레드 값을 다시 증가시키는 프로세스를 포함하는 장치.
KR1020170090497A 2017-07-17 2017-07-17 스레드 풀의 사이즈를 동적으로 관리하는 방법 및 컴퓨팅 장치 KR101839392B1 (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR1020170090497A KR101839392B1 (ko) 2017-07-17 2017-07-17 스레드 풀의 사이즈를 동적으로 관리하는 방법 및 컴퓨팅 장치
US15/657,648 US9910711B1 (en) 2017-07-17 2017-07-24 Method and computing device for managing size of thread pool dynamically

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020170090497A KR101839392B1 (ko) 2017-07-17 2017-07-17 스레드 풀의 사이즈를 동적으로 관리하는 방법 및 컴퓨팅 장치

Publications (1)

Publication Number Publication Date
KR101839392B1 true KR101839392B1 (ko) 2018-03-16

Family

ID=61257212

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020170090497A KR101839392B1 (ko) 2017-07-17 2017-07-17 스레드 풀의 사이즈를 동적으로 관리하는 방법 및 컴퓨팅 장치

Country Status (2)

Country Link
US (1) US9910711B1 (ko)
KR (1) KR101839392B1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11340955B2 (en) 2020-01-02 2022-05-24 International Business Machines Corporation Thread pool management for multiple applications

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9547521B2 (en) * 2014-09-25 2017-01-17 Oracle International Corporation System and method for supporting dynamic thread pool sizing in a distributed data grid
US10552213B2 (en) * 2017-12-15 2020-02-04 Red Hat, Inc. Thread pool and task queuing method and system
CN108920275A (zh) * 2018-06-25 2018-11-30 郑州云海信息技术有限公司 一种抓取黑盒日志的方法、装置、设备及计算机存储介质
CN108874550A (zh) * 2018-07-18 2018-11-23 郑州云海信息技术有限公司 一种调整线程池的方法、装置、存储介质和计算机设备
CN109814994B (zh) * 2019-01-03 2021-10-08 福建天泉教育科技有限公司 一种动态调度线程池的方法及终端
CN112181894B (zh) * 2019-07-04 2022-05-31 山东省计算中心(国家超级计算济南中心) 一种基于申威众核处理器的核组内分组自适应调整运行方法
JP7353836B2 (ja) * 2019-07-16 2023-10-02 キヤノン株式会社 情報処理装置、方法およびプログラム
US11467877B2 (en) * 2020-01-31 2022-10-11 Salesforce, Inc. Throttling and limiting thread resources of service computing platform
CN117076094B (zh) * 2023-10-16 2024-01-16 中国船舶集团有限公司第七〇七研究所 一种密码运算多任务并发处理方法

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004525436A (ja) 2000-11-09 2004-08-19 エス・ピー・エス・エス・インコーポレイテツド 時系列モデルを構築するためのシステムおよび方法
US20080295107A1 (en) 2007-05-23 2008-11-27 Fabrizio Muscarella Adaptive Thread Pool
KR101576628B1 (ko) * 2015-05-14 2015-12-10 주식회사 티맥스 소프트 스레드 풀의 사이즈를 동적으로 관리하는 방법, 서버 및 컴퓨터 판독 가능한 기록매체
US20160092263A1 (en) * 2014-09-25 2016-03-31 Oracle International Corporation System and method for supporting dynamic thread pool sizing in a distributed data grid
US20160212053A1 (en) 2015-01-20 2016-07-21 Synchronoss Technologies, Inc. Network analysis including guaranteeing consistent flow by dynamically smoothing traffic bursts, isolating non-optimally performing external systems from multi-tenant/shared services and implementing downstream aware transactional workflows

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1266590C (zh) * 2002-12-31 2006-07-26 上海科泰世纪科技有限公司 面向构件基于系统内核的进程池/线程池管理方法
US7237242B2 (en) * 2002-12-31 2007-06-26 International Business Machines Corporation Dynamic thread pool tuning techniques
US8286173B2 (en) * 2007-03-23 2012-10-09 Oracle America, Inc. Methods and apparatus for window-based fair priority scheduling
US8122449B2 (en) * 2007-09-07 2012-02-21 International Business Machines Corporation Determining whether to retain or terminate a thread based on a minimum number of threads in a thread pool and a maximum number of threads allowed waiting on the channel
US8620834B2 (en) * 2010-06-04 2013-12-31 Hewlett-Packard Development Company, L.P. Forecasting through time domain analysis

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004525436A (ja) 2000-11-09 2004-08-19 エス・ピー・エス・エス・インコーポレイテツド 時系列モデルを構築するためのシステムおよび方法
US20080295107A1 (en) 2007-05-23 2008-11-27 Fabrizio Muscarella Adaptive Thread Pool
US20160092263A1 (en) * 2014-09-25 2016-03-31 Oracle International Corporation System and method for supporting dynamic thread pool sizing in a distributed data grid
US20160212053A1 (en) 2015-01-20 2016-07-21 Synchronoss Technologies, Inc. Network analysis including guaranteeing consistent flow by dynamically smoothing traffic bursts, isolating non-optimally performing external systems from multi-tenant/shared services and implementing downstream aware transactional workflows
KR101576628B1 (ko) * 2015-05-14 2015-12-10 주식회사 티맥스 소프트 스레드 풀의 사이즈를 동적으로 관리하는 방법, 서버 및 컴퓨터 판독 가능한 기록매체

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11340955B2 (en) 2020-01-02 2022-05-24 International Business Machines Corporation Thread pool management for multiple applications

Also Published As

Publication number Publication date
US9910711B1 (en) 2018-03-06

Similar Documents

Publication Publication Date Title
KR101839392B1 (ko) 스레드 풀의 사이즈를 동적으로 관리하는 방법 및 컴퓨팅 장치
US9354931B1 (en) Method, server and computer-readable recording medium for managing size of thread pool dynamically
US9152443B2 (en) System and method for automated assignment of virtual machines and physical machines to hosts with right-sizing
US9396008B2 (en) System and method for continuous optimization of computing systems with automated assignment of virtual machines and physical machines to hosts
US9043787B2 (en) System and method for automated assignment of virtual machines and physical machines to hosts
US20140019964A1 (en) System and method for automated assignment of virtual machines and physical machines to hosts using interval analysis
US8200805B2 (en) System and method for performing capacity planning for enterprise applications
US8560667B2 (en) Analysis method and apparatus
US11216310B2 (en) Capacity expansion method and apparatus
US9513835B2 (en) Impact-based migration scheduling from a first tier at a source to a second tier at a destination
US11150999B2 (en) Method, device, and computer program product for scheduling backup jobs
US20170359271A1 (en) Multi-tenant based system and method for providing services
US20130290499A1 (en) Method and system for dynamic scaling in a cloud environment
US20210271648A1 (en) Data migration methods and system
KR101852610B1 (ko) Ai 학습 기반 실시간 분석 시스템을 이용한 자원 사용 방법 및 이를 사용한 매니지먼트 서버
US20180295044A1 (en) Automated management of service instances
US9460399B1 (en) Dynamic event driven storage system optimization
US20180081566A1 (en) Data block processing
US10250517B2 (en) Completion-side client throttling
US9660891B2 (en) Methods and systems for computer monitoring
KR101702218B1 (ko) 역경매 방식 자원할당 장치를 포함하는 하이브리드 클라우드 서버 및 그 자원 할당 방법 및 시스템
US9983911B2 (en) Analysis controller, analysis control method and computer-readable medium
US11108698B2 (en) Systems and methods for client-side throttling after server handling in a trusted client component
US20240112055A1 (en) Computer-readable recording medium storing node allocation program at the time of quantum simulation execution, node allocation method at the time of quantum simulation execution, and information processing device
US20070067369A1 (en) Method and system for quantifying and comparing workload on an application server

Legal Events

Date Code Title Description
GRNT Written decision to grant