KR102509988B1 - 커넥션 기반 로드 밸런싱을 위한 저장 시스템 및 방법 - Google Patents

커넥션 기반 로드 밸런싱을 위한 저장 시스템 및 방법 Download PDF

Info

Publication number
KR102509988B1
KR102509988B1 KR1020150179199A KR20150179199A KR102509988B1 KR 102509988 B1 KR102509988 B1 KR 102509988B1 KR 1020150179199 A KR1020150179199 A KR 1020150179199A KR 20150179199 A KR20150179199 A KR 20150179199A KR 102509988 B1 KR102509988 B1 KR 102509988B1
Authority
KR
South Korea
Prior art keywords
thread
input
client
connection
data
Prior art date
Application number
KR1020150179199A
Other languages
English (en)
Other versions
KR20170071180A (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 KR1020150179199A priority Critical patent/KR102509988B1/ko
Priority to US15/361,450 priority patent/US10313431B2/en
Publication of KR20170071180A publication Critical patent/KR20170071180A/ko
Application granted granted Critical
Publication of KR102509988B1 publication Critical patent/KR102509988B1/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/5083Techniques for rebalancing the load in a distributed system
    • 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/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • 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
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1001Protocols in which an application is distributed across nodes in the network for accessing one among a plurality of replicated servers
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1097Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Computer And Data Communications (AREA)
  • Debugging And Monitoring (AREA)

Abstract

저장 시스템 및 저장 시스템에서의 로드 밸런싱 방법이 개시된다. 본 개시의 예시적 실시예에 따른 로드 밸런싱 방법은, 컨트롤 스레드에 의해서 클라이언트의 로그인 요청에 응답하여 클라이언트와의 커넥션을 복수의 스레드들 중 하나에 할당 또는 배정하는 단계, 및 커넥션이 할당 또는 배정된 스레드에 의해서 커넥션을 통해서 수신된 입력 또는 출력 요청에 따른 동작을 제어하는 단계를 포함할 수 있다.

Description

커넥션 기반 로드 밸런싱을 위한 저장 시스템 및 방법{STORAGE SYSTEM AND METHOD FOR CONNECTION-BASED LOAD BALANCING}
본 개시의 기술적 사상은 저장 시스템에 관한 것으로서, 커넥션 기반 로드 밸런싱을 구현하는 저장 시스템 및 그것의 동작 방법에 관한 것이다.
저장 시스템은 데이터를 저장하는 저장 장치를 포함할 수 있고, 개인용 컴퓨터 또는 컴퓨팅 서버와 같은 네트워크에 접속된 클라이언트에 저장 장치에 대한 엑세스를 제공할 수 있다. 저장 장치에 대한 복수의 클라이언트들의 엑세스들을 효율적으로 처리하기 위하여, 저장 시스템은 데이터 프로세서를 포함할 수 있다.
데이터 프로세서는 네트워크를 통해서 클라이언트들이 전송한 복수의 요청들을 처리할 수 있고, 저장 장치를 제어함으로써 클라이언트들의 요청들에 따른 동작을 제어할 수 있다. 저장 시스템의 성능은, 이러한 클라이언트들의 요청들을 효율적으로 처리하는 것에 의존할 수 있다.
본 개시의 기술적 사상은 저장 시스템에 관한 것으로서, 네트워크를 통해서 클라이언트들의 입출력 요청들을 수신하고 수신된 입출력 요청들에 응답하여 동작을 수행하는 저장 시스템 및 그것의 동작 방법을 제공한다.
상기와 같은 목적을 달성하기 위하여, 본 개시의 기술적 사상의 일측면에 따른 로드 밸런싱 방법은, 복수의 코어(core)들 및 상기 복수의 코어들을 클라이언트들이 접속(link)된 데이터 네트워크에 접속시키는 네트워크 어댑터를 포함하는 저장 시스템에서 수행될 수 있고, 상기 복수의 코어들은 복수의 스레드(thread)들을 실행할 수 있다. 로드 밸런싱 방법은, 클라이언트의 로그인 요청에 응답하여 상기 클라이언트와의 커넥션(connection)을 상기 복수의 스레드들 중 하나에 할당(allocation) 또는 배정(assignment)하는 단계, 및 적어도 하나의 커넥션이 할당 또는 배정된 스레드에 의해서, 상기 적어도 하나의 커넥션을 통해서 수신된 입력 또는 출력 요청(request)에 따른 입력 또는 출력 동작을 제어하는 단계를 포함할 수 있고, 상기 클라이언트와의 커넥션을 상기 복수의 스레드들 중 하나에 할당 또는 배정하는 단계는, 상기 복수의 스레드들 중 컨트롤 스레드에 의해서 수행될 수 있다.
본 개시의 기술적 사상의 일측면에 따른 로드 밸런싱 방법은, 복수의 코어(core)들 및 상기 복수의 코어들을 클라이언트들이 접속(link)된 데이터 네트워크에 접속시키는 네트워크 어댑터를 포함하는 저장 시스템에서 수행될 수 있고, 상기 복수의 코어들은 컨트롤 스레드(thread) 및 복수의 데이터 스레드들을 실행할 수 있다. 로드 밸런싱 방법은, 상기 컨트롤 스레드에 의해서, 제1 클라이언트의 로그인 요청에 응답하여 상기 제1 클라이언트의 후속하는(subsequent) 입력 또는 출력 요청(request)들이 제1 데이터 스레드에 의해서 처리되도록 상기 저장 시스템을 구성하는 단계, 및 상기 제1 데이터 스레드에 의해서, 상기 제1 클라이언트의 입력 또는 출력 요청에 따른 입력 또는 출력 동작을 제어하는 단계를 포함할 수 있다.
본 개시의 기술적 사상에 따른 저장 시스템에서의 로드 밸런싱 방법은, 클라이언트들의 요청들을 효율적으로 처리함으로써 향상된 QoS(quality of service)를 제공할 수 있다.
또한, 본 개시의 기술적 사상에 따른 저장 시스템에서의 로드 밸런싱 방법은, 저장 시스템의 데이터 프로세서의 사용률(utilization)을 상승시킴으로써 고성능 데이터 프로세서에 대한 필요성을 감소시킬 수 있고, 이에 따라 저장 시스템의 비용을 감소시킬 수 있다.
도 1은 본 개시의 예시적 실시예에 따른 저장 시스템의 블록도를 나타내는 도면이다.
도 2는 본 개시의 예시적 실시예에 따라 도 1의 저장 시스템에서의 로드 밸런싱 방법을 나타내는 순서도이다.
도 3은 본 개시의 예시적 실시예에 따라 커넥션들이 할당되는 동작을 나타내는 도면이다.
도 4는 본 개시의 예시적 실시예에 따라 하나의 데이터 스레드에 의해서 복수의 커넥션들에 대응하는 입력 또는 출력 요청들이 처리되는 동작을 나타내는 도면이다.
도 5는 본 개시의 예시적 실시예에 따라 코어에서 실행되는 스레드를 나타내는 도면이다.
도 6a 및 도 6b는 본 개시의 예시적 실시예에 따른 저장 시스템에서의 로드 밸런싱 방법의 실험 결과를 설명하기 위한 표들을 각각 나타내는 도면들이다.
도 7은 본 개시의 예시적 실시예에 따라 도 2의 단계 S300의 예시를 나타내는 순서도이다.
도 8은 본 개시의 예시적 실시예에 따라, 도 7의 단계 S320의 동작을 설명하기 위한 표를 나타내는 도면이다.
도 9는 본 개시의 예시적 실시예에 따라 네트워크 어댑터의 동작을 나타내는 도면이다.
도 10은 본 개시의 예시적 실시예에 따라 도 9의 디렉션 테이블의 예시를 나타내는 도면이다.
도 11은 본 개시의 예시적 실시예에 따라 저장 시스템의 구성요소들 사이의 동작을 시간의 흐름에 따라 나타내는 도면이다.
도 12는 본 개시의 예시적 실시예에 따라 도 1의 저장 시스템에서의 로드 밸런싱 방법을 나타내는 순서도이다.
도 13은 본 개시의 예시적 실시예에 따라, 도 12의 단계 S500의 동작을 설명하기 위한 표를 나타내는 도면이다.
도 14는 본 개시의 예시적 실시예에 따른 공유 메모리의 예시를 나타내는 도면이다.
이하, 첨부한 도면을 참조하여 본 발명의 실시 예에 대해 상세히 설명한다. 본 발명의 실시 예는 당 업계에서 평균적인 지식을 가진 자에게 본 발명을 보다 완전하게 설명하기 위하여 제공되는 것이다. 본 발명은 다양한 변경을 가할 수 있고 여러 가지 형태를 가질 수 있는 바, 특정 실시 예들을 도면에 예시하고 상세하게 설명하고자 한다. 그러나, 이는 본 발명을 특정한 개시 형태에 대해 한정하려는 것이 아니며, 본 발명의 사상 및 기술 범위에 포함되는 모든 변경, 균등물 내지 대체물을 포함하는 것으로 이해되어야 한다. 각 도면을 설명하면서 유사한 참조부호를 유사한 구성요소에 대해 사용한다. 첨부된 도면에 있어서, 구조물들의 치수는 본 발명의 명확성을 기하기 위하여 실제보다 확대하거나 축소하여 도시한 것이다.
본 출원에서 사용한 용어는 단지 특정한 실시 예를 설명하기 위해 사용된 것으로, 본 발명을 한정하려는 의도가 아니다. 단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함한다. 본 출원에서, "포함하다" 또는 "가지다" 등의 용어는 명세서 상에 기재된 특징, 숫자, 단계, 동작, 구성요소, 부분품 또는 이들을 조합한 것이 존재함을 지정하려는 것이지, 하나 또는 그 이상의 다른 특징들이나 숫자, 단계, 동작, 구성 요소, 부분품 또는 이들을 조합한 것들의 존재 또는 부가 가능성을 미리 배제하지 않는 것으로 이해되어야 한다.
다르게 정의되지 않는 한, 기술적이거나 과학적인 용어를 포함해서 여기서 사용되는 모든 용어들은 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 것과 동일한 의미를 갖는다. 일반적으로 사용되는 사전에 정의되어 있는 것과 같은 용어들은 관련 기술의 문맥상 가지는 의미와 일치하는 의미를 가지는 것으로 해석되어야 하며, 본 출원에서 명백하게 정의하지 한, 이상적이거나 과도하게 형식적인 의미로 해석되지 않는다.
도 1은 본 개시의 예시적 실시예에 따른 저장 시스템(10)의 블록도를 나타내는 도면이다. 도 1에 도시된 바와 같이, 저장 시스템(10)은 데이터 네트워크(또는 네트워크)(20)에 접속될 수 있고, 복수의 클라이언트들(31 내지 33)도 데이터 네트워크(20)에 접속될 수 있다. 저장 시스템(10) 및 복수의 클라이언트들(31 내지 33)은 데이터 네트워크(20)를 통해서 통신할 수 있다.
데이터 네트워크(20)는, 비제한적인 예시로서 이더넷(ethernet) 또는 IP(internet protocol), RDMA(Remote Direct Memory Access) 네트워크 등일 수 있고, 라우터(router), 리피터(repeater), 게이트웨이(gateway), 허브(hub) 등을 포함할 수 있다. 데이터 네트워크(20)는, 예컨대 파이버 채널(Fibre Channel), FCoE(Fibre Channel over Ethernet), iSCSI(Internet Small Computer System Interface), NVMe over Fabrics 등과 같은 프로토콜을 사용할 수 있다.
클라이언트들(31 내지 33) 각각은, 데스크탑 컴퓨터(desktop computer), 서버(server), 워크스테이션(workstation), 랩탑 컴퓨터(laptop computer), 태블릿 컴퓨터(tablet computer), PDA(personal digital assistant), 모바일 폰(mobile phone), 스마트 폰(smart phone) 등과 같은, 고정된(stationary) 또는 휴대용(mobile) 컴퓨팅 시스템들 중 하나일 수 있다. 클라이언트들(31 내지 33) 각각은 저장 시스템(10)과의 커넥션(connection)을 형성함으로써 저장 시스템(10)과 통신할 수 있다. 예를 들면, 클라이언트들(31 내지 33) 각각은 저장 장치(10)에 커넥션의 형성을 요청할 수 있고, 형성된 커넥션 상에서 저장 장치(10)에 입력 또는 출력 요청을 전송하거나 저장 장치(10)로부터 응답을 수신할 수 있다.
저장 시스템(10)은 데이터 네트워크(20)에 접속된 클라이언트들(31 내지 33) 사이에서 데이터를 공유하기 위하여 사용될 수 있다. 도 1을 참조하면, 저장 시스템(10)은, 프로세서 서브시스템(100), 데이터 저장 장치(200), 네트워크 어댑터(300) 및 메모리 서브시스템(400)를 포함할 수 있다. 저장 시스템(10)의 구성요소들(100, 200, 300, 400)은 시스템 버스(500)에 연결될 수 있고, 시스템 버스(500)를 통해서 서로 통신할 수 있다.
프로세서 서브시스템(100)은 네트워크 어댑터(300)를 통해서 수신되는 클라이언트들(31 내지 33)의 요청들을 처리할 수 있다. 예를 들면, 프로세서 서브시스템(100)은 클라이언트들(31 내지 33)의 로그인 요청을 처리할 수 있고, 클라이언트들(31 내지 33)과 협상(negotiation)을 통해서 클라이언트들(31 내지 33)의 입출력 요구사항(requirement)을 결정할 수 있다. 또한, 프로세서 서브시스템(100)은 데이터 저장 장치(200)를 제어함으로써 클라이언트들(31 내지 33)의 요청들에 따른 동작, 예컨대 데이터의 입력 또는 출력 동작을 제어할 수 있다. 또한, 프로세스 서브시스템(100)은 저장 장치(10)에 엑세스하는 클라이언트들의 개수 또는 그 클라이언트들 각각의 입출력 요구사항 등을 결정할 수 있다.
도 1에 도시된 바와 같이, 프로세서 서브시스템(100)은 복수의 코어(core)들(110 내지 140)을 포함할 수 있다. 코어는 독립적으로 명렁어들을 실행할 수 있는 프로세싱 유닛을 지칭할 수 있다. 예를 들면, 코어는 x86, Alpha, PowerPC, SPARC 등의 명령어 세트(instruction set)에 따른 명령어들을 독립적으로 실행하는 회로를 포함할 수 있다. 코어들(110 내지 140)은 캐쉬(cache) 메모리에 저장된 데이터 및/또는 명령어에 엑세스할 수 있고, 캐쉬 메모리는 계층적 구조를 가질 수 있다. 도 1에 도시되지 아니하였으나, 캐쉬 메모리는 프로세서 서브시스템(100)에 포함될 수 있다.
프로세서 서브시스템(100)은, 복수의 코어들을 포함하는 멀티-코어 프로세서로서 구성될 수도 있고, 하나 이상의 멀티-코어 프로세서들로서 구성될 수도 있다. 비록, 도 1의 예시에서 4개의 코어들(110 내지 140)을 포함하는 프로세서 서브시스템(100)이 도시되고, 이하에서 프로세서 서브시스템(100)은 4개의 코어들(110 내지 140)을 포함하는 것으로서 설명되나, 본 개시의 기술적 사상은 이에 제한되지 아니한다. 즉, 본 개시의 예시적 실시예들에 따라 저장 시스템(10)의 프로세서 서브시스템은 4개 초과 또는 4개 미만의 코어들을 포함할 수도 있다.
데이터 저장 장치(200)는, 비제한적인 예시로서 하드 디스크 드라이브(hard disk drive; HDD), 솔리드 스테이트 드라이브(solid state drive; SSD), 반도체 메모리 장치, 메모리 카드, 자기 테이프, 광 디스크 등과 같은 데이터 저장 매체를 포함할 수 있다. 데이터 저장 장치(200)에 데이터를 기입하거나 데이터 저장 장치(200)로부터 데이터를 독출하는 동작은 프로세서 서브시스템(100)에 의해서 제어될 수 있다.
네트워크 어댑터(300)는 프로세서 서브시스템(100)에 데이터 네트워크(20)에 대한 인터페이스를 제공할 수 있다. 예를 들면, 네트워크 어댑터(300)는 시스템 버스(500)에 연결된 적어도 하나의 네트워크 인터페이스 카드를 포함할 수 있고, 네트워크 인터페이스 카드는 패킷(packet) 단위로 데이터 네트워크(20)를 통해서 데이터를 수신하거나 데이터를 전송할 수 있다.
메모리 서브시스템(400)은 시스템 버스(500)를 통해서 저장 시스템(10)의 다른 구성요소들(100, 200, 300)에 의해서 엑세스될 수 있다. 예를 들면, 메모리 서브시스템(400)은 프로세서 서브시스템(100)에서 수행되는 프로그램을 구성하는 복수의 명령어들을 저장하거나 저장 시스템(10)의 설정 정보들을 저장하기 위하여, EEPROM (non-volatile memory such as a Electrically Erasable Programmable Read-Only Memory), 플래시 메모리(flash memory), PRAM(Phase Change Random Access Memory), RRAM(Resistance Random Access Memory), NFGM (Nano Floating Gate Memory), PoRAM(Polymer Random Access Memory), MRAM (Magnetic Random Access Memory), FRAM(Ferroelectric Random Access Memory) 등과 같은 비휘발성 메모리 장치를 포함할 수 있다. 또한, 메모리 서브시스템(400)은 저장 시스템(10)의 다른 구성요소들(100, 200, 300) 사이에 이동하는 데이터를 저장하거나 프로세서 서브시스템(100)의 캐쉬 메모리를 위하여, DRAM(Dynamic Random Access Memory), SRAM(Static Random Access Memory), 모바일 DRAM, DDR SDRAM(Double Data Rate Synchronous Dynamic Random Access Memory), LPDDR (Low Power DDR) SDRAM, GDDR (Graphic DDR) SDRAM, RDRAM(Rambus Dynamic Random Access Memory) 등과 같은 휘발성 메모리 장치를 포함할 수 있다.
도 1을 참조하면, 메모리 서브시스템(400)은 공유 메모리(410)를 포함할 수 있다. 예를 들면, 공유 메모리(410)는 DRAM, SRAM 등과 같은 랜덤 엑세스 메모리(random access memory; RAM)으로서 구현될 수 있고, 저장 시스템(10)의 다른 구성요소들(100, 200, 300)에 의해 공유되는 데이터를 저장할 수 있다. 또한, 공유 메모리(410)는 프로세서 서브시스템(100)(즉, 코어들(110 내지 140))에 의해서 실행되는 명령어들을 저장할 수도 있고, 코어들(110 내지 140)에 의해서 공유되는 데이터를 저장할 수도 있다.
프로세서 서브시스템(100)의 코어들(110 내지 140) 각각은 적어도 하나의 스레드(thread)를 실행할 수 있다. 스레드는 (일반적으로 운영 체제에 의해서 제공되는) 스케줄러(scheduler)에 의해서 독립적으로 관리될 수 있는 일련의 명령어들을 지칭할 수 있고, 하나의 스레드는 하나의 코어에 의해서 실행될 수 있다. 복수의 코어들(110 내지 140)을 포함하는 프로세서 서브시스템(100)에서 복수의 스레드들은 병렬적으로 실행될 수 있고, 프로세서 서브시스템(100)은 복수의 스레드들에 의해서 네트워크 어댑터(300)를 통해서 수신되는 클라이언트들(31 내지 33)의 요청들을 처리할 수 있다. 본 명세서에서, 스레드에 의한 동작 및 스레드가 수행하는 동작은 코어가 스레드에 포함된 명령어들을 실행함으로써 수행되는 동작을 지칭할 수 있다.
본 개시의 예시적 실시예에 따라, 클라이언트들(31 내지 33) 중 하나 및 저장 장치(10) 사이에 형성된 커넥션은 복수의 스레드들 중 하나에 할당(assignment) 또는 배정(assignment)될 수 있다. 예를 들면, 제1 클라이언트(31)과 저장 장치(10) 사이에 형성된 제1 커넥션은 제1 코어(110)에서 실행되는 제1 스레드(후술하는 바와 같이, 데이터 스레드)에 할당 또는 배정될 수 있고, 제1 스레드는 제1 커넥션 상에서 제1 클라이언트(31)로부터 수신되는 입력 또는 요청들을 처리할 수 있다. 즉, 제1 클라이언트(31)로부터 수신되는 요청들은 복수의 스레드들에 할당 또는 배정되어 처리되는 대신, 제1 커넥션이 할당 또는 배정된 제1 스레드에 의해서 처리될 수 있다. 도 6a 및 도 6b를 참조하여 후술되는 바와 같이, 실험 결과는 커넥션이 할당 또는 배정된 스레드에 의해서 클라이언트의 입력 또는 출력 요청들이 처리되는 경우, 코어 사용률 및 입출력 처리량이 향상됨을 보여준다. 이와 같이, 클라이언트의 입력 또는 출력 요청에 응답하여 클라이언트의 입력 또는 출력 요청에 따른 동작을 제어하는 스레드는 데이터 스레드 (또는 데이터 플레인(data plane) 스레드)로서 지칭될 수 있다.
또한, 본 개시의 예시적 실시예에 따라, 클라이언트들(31 내지 33) 중 하나 및 저장 장치(10) 사이에 형성된 커넥션을 복수의 스레드들 중 하나에 할당 또는 배정하는 동작은, 코어들(110 내지 140) 중 하나에서 수행되는 스레드, 즉 컨트롤 스레드 (또는 컨트롤 플레인(control plane) 스레드)에 의해서 수행될 수 있다. 후술되는 바와 같이, 컨트롤 스레드는 커넥션을 데이터 스레드들 중 하나에 동적으로 할당 또는 배정하고 커넥션을 다른 데이터 스레드에 동적으로 이송함으로써, 코어들(110 내지 140)의 이용률을 상승시킬 수 있다.
도 2는 본 개시의 예시적 실시예에 따라 도 1의 저장 시스템(10)에서의 로드 밸런싱 방법을 나타내는 순서도이다. 구체적으로, 도 2는 클라이언트가 저장 시스템(10)과의 통신을 개시할 때 커넥션을 데이터 스레드에 할당 또는 배정하는 방법을 나타내는 순서도이다. 도 2의 로드 밸런싱 방법은, 복수의 스레드들을 실행하는 프로세서 서브시스템(10)(또는 코어들(110 내지 140))에 의해서 수행될 수 있다.
도 2를 참조하면, 단계 S100에서, 컨트롤 스레드에 의해서 복수의 데이터 스레드들의 현재 입출력 처리량(IOPS 또는 throughput) 및/또는 처리속도(latency)를 모니터링 하는 동작이 수행될 수 있다. 예를 들면, 컨트롤 스레드에 의해서, 데이터 스레드에 할당 또는 배정된 커넥션에서의 실시간 입출력 처리량과 처리속도, 평균 입출력 처리량과 처리속도 및 입출력 요구사항이 모니터링될 수 있다. 데이터 스레드들의 현재 입출력 처리량은 새로운 클라이언트의 커넥션을 데이터 스레드에 할당 또는 배정하는데 사용될 수도 있고, 커넥션이 할당 또는 배정된 데이터 스레드로부터 다른 데이터 스레드에 커넥션을 이송하는데 사용될 수도 있다. 컨트롤 스레드에 의해서, 데이터 스레드들의 현재 입출력 처리량은, 주기적으로 획득될 수도 있고 특정한 이벤트가 발생한 때에 획득될 수도 있다. 예를 들면, 비록 도 2의 예시에서, 단계 S100은 단계 S200 이전에 수행되는 것으로 도시되었으나, 본 개시의 예시적 실시예에 따라 단계 S200에서 클라이언트로부터 로그인 요청이 수신된 이후 수행될 수도 있다.
단계 S200에서, 클라이언트로부터 로그인 요청이 수신되었는지 여부를 판단하는 동작이 수행될 수 있다. 예를 들면, 제1 클라이언트(31)는 저장 장치(10)와 통신을 개시하기 위하여 (즉, 저장 장치(10)와의 커넥션을 형성하기 위하여) 데이터 네트워크(20)를 통해서 저장 장치(10)에 로그인 요청을 전송할 수 있고, 네트워크 어댑터(300)를 통해서 수신된 제1 클라이언트(31)의 로그인 요청은 컨트롤 스레드에 의해서 처리될 수 있다. 클라이언트로부터 로그인 요청이 수신되지 아니한 경우, 컨트롤 스레드에 의해서 데이터 스레드들의 현재 입출력 처리량 및/또는 처리속도를 모니터링 하는 동작이 다시 수행될 수 있다.
클라이언트로부터 로그인 요청이 수신된 경우, 단계 S300에서, 컨트롤 스레드에 의해서, 클라이언트와의 커넥션을 데이터 스레드에 할당 또는 배정하는 동작이 수행될 수 있다. 예를 들면, 컨트롤 스레드에 의해서, 제1 클라이언트(31)의 입출력 요구사항(requirement), 현재 입출력 처리량, 처리속도 및 데이터 스레드들의 미리 정해진 한계(limit) 입출력 처리량 중 적어도 하나에 기초하여 제1 클라이언트(31)와의 제1 커넥션이 할당 또는 배정될 데이터 스레드가 결정될 수 있다. 제1 커넥션이 데이터 스레드에 할당 또는 배정되도록, 저장 시스템(10)은 컨트롤 스레드에 의해서 구성될 수 있다. 또한, 본 개시의 예시적 실시예에 따라, 컨트롤 스레드는 데이터 스레드와 유사하게 스스로 클라이언트의 입력 또는 출력 요청을 처리할 수 있고, 이에 따라 클라이언트와의 커넥션을 스스로 할당 또는 배정 받을 수도 있다. 단계 S300에 대한 상세한 내용은 도 7을 참조하여 후술될 것이다.
단계 S400에서, 커넥션이 할당 또는 배정된 데이터 스레드에 의해서, 클라이언트의 요청에 따른 동작을 제어하는 동작이 수행될 수 있다. 예를 들면, 제1 클라이언트(31)와의 제1 커넥션이 할당 또는 배정된 데이터 스레드에 의해서, 제1 클라이언트(31)의 후속하는 입력 또는 출력 요청들에 따른 동작들이 제어될 수 있다.
도 3은 본 개시의 예시적 실시예에 따라 커넥션들이 할당 또는 배정되는 동작을 나타내는 도면이다. 도 1 및 도 2를 참조하여 전술된 바와 같이, 컨트롤 스레드에 의해서 커넥션은 데이터 스레드에 할당 또는 배정될 수 있다. 도 3의 예시에서, 저장 장치(10)는 10개의 클라이언트들에 대한 10개의 커넥션들(C01 내지 C10)을 가지고 있는 것으로 가정된다.
도 3을 참조하면, 4개의 코어들(110 내지 140)은 데이터 스레드들(DT_1 내지 DT_4)을 각각 실행할 수 있고, 컨트롤 스레드(CT)는 4개의 코어들(110 내지 140) 중 하나에서 실행될 수 있다. 본 개시의 예시적 실시예에 따라, 컨트롤 스레드(CT)는 데이터 스레드들(DT_1 내지 DT_4)과 상이한 코어에서 실행될 수도 있다. 하나 이상의 커넥션이 데이터 스레드들(DT_1 내지 DT_4) 각각에 할당 또는 배정될 수 있고, 커넥션에 대응하는 입력 또는 출력 요청들이 커넥션이 할당 또는 배정된 데이터 스레드에 의해서 처리될 수 있다.
도 3에 도시된 바와 같이, 컨트롤 스레드(CT)로부터 10개의 커넥션들(C01 내지 C10)이 4개의 데이터 스레드들(DT_1 내지 DT_4)에 할당 또는 배정될 수 있다. 예를 들면, 제1 커넥션(C01), 제5 커넥션(C05), 제8 커넥션(C08) 및 제9 커넥션(C09)은 제1 코어(110)에서 실행되는 제1 데이터 스레드(DT_1)에 할당 또는 배정될 수 있다. 또한, 2개의 커넥션들(C02, C06)이 제2 코어(120)에서 실행되는 제2 데이터 스레드(DT_2)에 할당 또는 배정될 수 있고, 3개의 커넥션들(C03, C07, C10)이 제3 코어(130)에서 실행되는 제3 데이터 스레드(DT_3)에 할당 또는 배정될 수 있으며, 1개의 커넥션(C04)이 제4 코어(140)에서 실행되는 제4 데이터 스레드(DT_4)에 할당 또는 배정될 수 있다.
도 4는 본 개시의 예시적 실시예에 따라 하나의 데이터 스레드에 의해서 복수의 커넥션들에 대응하는 입력 또는 출력 요청들이 처리되는 동작을 나타내는 도면이다. 구체적으로, 도 4는 도 3의 제1 코어(110)에서 실행되는 제1 데이터 스레드(DT_1)에 의해서 4개의 커넥션들(C01, C05, C08, C09)에 대응하는 입력 또는 출력 요청들이 처리되는 동작을 나타낸다. 도 4에서 요청들(REQ_1, REQ_5, REQ_8, REQ_9)은 데이터 저장 장치(200)에 데이터를 기입하기 위한 입력 요청 또는 데이터 저장 장치(200)에 저장된 데이터를 독출하기 위한 출력 요청일 수 있다. 또한, 도 4에서 응답들(RES_1, RES_5, RES_8, RES_9)은 요청들(REQ_1, REQ_5, REQ_8, REQ_9)에 각각 대응하는, 데이터 저장 장치(200)에 데이터가 기입되는 동작 또는 데이터 저장 장치(200)에 저장된 데이터가 독출되는 동작을 포함할 수 있다.
데이터 스레드는 할당 또는 배정된 커넥션들의 요청들을 스케줄링할 수 있고, 스케줄링된 요청들을 처리할 수 있다. 예를 들면, 제1 데이터 스레드(DT_1)는, 라운드 로빈(round robin)과 같이 공평한(fair) 스케줄링을 통해서 4개 커넥션들(C01, C05, C08, C09)에 대응하는 입력 또는 출력 요청들을 처리할 수도 있고, 가중 라운드 로빈(weighted round robin)과 같이 4개 커넥션들(C01, C05, C08, C09) 각각에 대응하는 가중치(또는 우선순위)에 기초한 스케줄링을 통해서 4개 커넥션들(C01, C05, C08, C09)에 대응하는 입력 또는 출력 요청들을 처리할 수도 있다.
본 개시의 예시적 실시예에 따라, 입력 또는 출력 요청 및 그에 대응하는 응답 사이에 다른 입력 또는 출력 요청이나 그에 대응하는 응답이 처리될 수도 있다. 즉, 커넥션의 우선순위 및/또는 데이터 저장 장치(200)의 내부 동작에 따라, 입력 또는 출력 요청 및 그에 대응하는 응답의 처리 시점이 결정될 수 있다. 예를 들면, 시점 T5에서 제8 커넥션(C08)의 요청(REQ_8) 및 그에 대응하는 응답(RES_8)은 연이어 처리된 한편, 시점 T1에서 제9 커넥션(C09)의 요청(REQ_9) 및 그에 대응하는 응답(RES_9) 사이에 복수의 요청들(REQ_5, REQ_1, REQ_8) 및 복수의 응답들(RES_5, RES_8)이 처리될 수 있다.
도 5는 본 개시의 예시적 실시예에 따라 코어에서 실행되는 스레드를 나타내는 도면이다. 구체적으로, 도 5는 제1 코어(110a)에서 실행되는 2개의 스레드들(RX_1, TX_1) 및 2개의 스레드들(RX_1, TX_1)에 할당 또는 배정된 커넥션들(C01, C05, C08, C09)를 나타낸다.
본 개시의 예시적 실시예에 따라, 하나의 커넥션에 대응하는 입력 및 출력 요청은 하나의 코어에서 실행되는 상이한 스레드들에 의해서 처리될 수 있다. 예를 들면, 도 5에 도시된 바와 같이, 4개의 커넥션들(C01, C05, C08, C09)의 입력 요청들은 제1 수신 스레드(RX_1)에 의해서 처리될 수 있고, 4개의 커넥션들(C01, C05, C08, C09)의 출력 요청들은 제1 송신 스레드(TX_1)에 의해서 처리될 수 있다. 본 개시의 예시적 실시예에 따라, 제1 수신 스레드(RX_1) 및 제2 송신 스레드(TX1)은 제1 데이터 스레드(DT_1)의 서브스레드(subthread)들일 수 있다.
도 6a 및 도 6b는 본 개시의 예시적 실시예에 따른 저장 시스템(10)에서의 로드 밸런싱 방법의 실험 결과를 설명하기 위한 표들을 각각 나타낸다. 구체적으로, 도 6a는 5개의 코어들을 포함하는 프로세서 서브시스템에서, 스케줄러에 의해서 클라이언트들의 요청들을 하나의 작업 큐에 저장하고, 작업 큐로부터 복수의 코어들에서 실행되는 스레드들에 요청들을 할당 또는 배정하는 경우 코어의 사용률 및 입출력 처리량을 나타낸다. 도 6b는 4개의 코어들을 포함하는 프로세서 서브시스템에서, 본 개시의 예시적 실시예에 따라 클라이언트와의 커넥션을 하나의 코어에서 실행되는 스레드에 할당 또는 배정하는 경우 코어의 사용률 및 입출력 처리량을 나타낸다. 본 개시의 예시적 실시예에 따라, 데이터 스레드에 의해서 커넥션 상의 입력 또는 출력 요청이 즉각적으로 처리됨으로써, 입력 또는 출력 요청을 큐잉(queueing)하는 데 기인하는 오버헤드 또는 하나의 코어에서 복수의 스레드들이 수행됨으로써 스레드들 사이 문맥 교환(context switching)에 기인하는 오버헤드가 감소할 수 있다.
도 6a 및 도 6b를 참조하면, 저장 시스템이 1개의 클라이언트와 통신하는 경우(즉, 1개의 커넥션을 가지는 경우), 도 6a는 2개의 코어들에 의한 총 76%의 사용률을 나타내는 한편, 도 6b는 1개의 코어에 의한 총 100%의 사용률을 나타낸다. 입출력 처리량 또한 도 6b의 경우에서 도 6a의 경우보다 약 14K IOPS(input/output operations per second)만큼 향상된 성능을 나타낸다. 유사하게, 저장 시스템이 2개 내지 4개의 클라이언트들과 통신하는 경우들(즉, 2개 내지 4개의 커넥션들을 가지는 경우들)에서도, 도 6b는 도 6a보다 향상된 코어 사용률 및 입출력 처리량을 나타낸다.
도 7은 본 개시의 예시적 실시예에 따라 도 2의 단계 S300의 예시를 나타내는 순서도이다. 도 2를 참조하여 전술한 바와 같이, 단계 S300에서, 컨트롤 스레드에 의해서, 클라이언트와의 커넥션을 데이터 스레드에 할당 또는 배정하는 동작이 수행될 수 있다. 도 7에 도시된 바와 같이, 단계 S300은 단계들(S310 내지 S330)을 포함할 수 있고, 단계들(S310 내지 S330)은 복수의 코어들(110 내지 140) 중 하나에서 수행되는 컨트롤 스레드에 의해서 수행될 수 있다.
도 7을 참조하면, 단계 S310에서, 클라이언트와 협상(negotiation)하는 동작이 수행될 수 있다. 클라이언트는 저장 시스템(10)과 통신을 개시하기 위한 로그인 요청에 입출력 요구사항(requirement)을 포함시키거나, 로그인 요청에 후속하여 입출력 요구사항을 저장 시스템(10)에 전송할 수 있다. 컨트롤 스레드에 의해서, 모니터링된 현재 입출력 처리량 및/또는 처리속도에 기초하여 클라이언트의 입출력 요구사항의 수용 여부가 클라이언트에 전송될 수 있고, 클라이언트는 입출력 요구사항이 저장 시스템(10)에서 수용되지 아니하는 경우 새로운 입출력 요구사항을 다시 저장 시스템(10)에 전송할 수 있다. 이와 같이, 클라이언트의 최종 입출력 요구사항을 결정하는 과정은 협상으로 지칭될 수 있고, 본 개시의 예시적 실시예에 따라 클라이언트와의 협상은 컨트롤 스레드에 의해서 수행될 수 있다.
단계 S320에서, 클라이언트의 입출력 요구사항, 현재 입출력 처리량, 처리속도 및 한계 입출력 처리량에 기초하여 커넥션이 할당 또는 배정될 데이터 스레드를 결정하는 동작이 수행될 수 있다. 예를 들면, 클라이언트의 입출력 요구사항은 저장 시스템(10)의 관리자(administrator)가 설정할 수 있다. 한계 입출력 처리량은 스레드(또는 코어)의 한계 입출력 처리량을 의미할 수 있다. 예를 들면, 프로세서 서브시스템(100)(또는 코어들(110 내지 140))의 컴퓨팅 능력(computing power), 데이터 저장 장치(200)의 성능, 네트워크 어댑터(300)의 성능, 데이터 네트워크(20)의 상태 등에 기초하여 스레드(또는 코어)의 한계 입출력 처리량은 계산될 수 있다. 스레드들(또는 코어들)은 상이한 한계 입출력 처리량을 가질 수 있고, 본 개시의 실시예에 따라 한계 입출력 처리량은 컨트롤 스레드에 의해서 동적으로 변경될 수도 있다. 단계 S320에 대한 상세한 내용은 도 8을 참조하여 후술될 것이다.
단계 S330에서, 클라이언트의 입력 또는 출력 요청이 결정된 데이터 스레드에 의해서 처리되도록 저장 시스템(10)을 구성하는 동작이 수행될 수 있다. 즉, 커넥션이 결정된 데이터 스레드에 할당 또는 배정되도록, 저장 시스템(10)은 컨트롤 스레드에 의해서 설정될 수 있고, 이에 따라 도 2의 단계 S400에서, 커넥션이 할당 또는 배정된 데이터 스레드에 의해서, 클라이언트의 요청에 따른 동작을 제어할 수 있다. 단계 S330에 대한 상세한 내용은 도 9 및 도 10을 참조하여 후술될 것이다.
도 8은 본 개시의 예시적 실시예에 따라, 도 7의 단계 S320의 동작을 설명하기 위한 표를 나타낸다. 구체적으로, 도 8의 표는, 도 3에 도시된 바와 같이 10개의 커넥션들(C01 내지 C10)이 4개의 스레드들(DT_1 내지 DT_4)에 할당 또는 배정된 경우, 4개의 데이터 스레드들(DT_1 내지 DT_4)이 가지는 한계 입출력 처리량들 및 10개의 커넥션들(C01 내지 C10)이 가지는 현재 입출력 처리량들을 나타낸다. 도 7을 참조하여 전술한 바와 같이, 단계 S320에서, 클라이언트의 입출력 요구사항, 현재 입출력 처리량 및 한계 입출력 처리량에 기초하여 커넥션이 할당 또는 배정될 데이터 스레드를 결정하는 동작이 수행될 수 있다.
도 8에 도시된 바와 같이, 신규한 제11 클라이언트의 제11 커넥션을 할당 또는 배정할 데이터 스레드를 결정하기 위하여, 데이터 스레드들의 현재 입출력 처리량, 한계 입출력 처리량 및 제11 클라이언트의 입출력 요구사항이 컨트롤 스레드에 의해서 고려될 수 있다. 협상을 통해서 제11 클라이언트의 입출력 요구사항이 20K IOPS로 결정된 경우, 컨트롤 스레드에 의해서 제3 데이터 스레드(DT_3) 또는 제4 데이터 스레드(DT_4)가 선택될 수 있다. 즉, 제1 데이터 스레드(DT_1) 및 제2 데이터 스레드(DT_2)의 경우, 제11 커넥션이 할당 또는 배정되는 경우 한계 입출력 처리량이 초과하게 되므로, 제1 데이터 스레드(DT_1) 및 제2 데이터 스레드(DT_2)는 배제될 수 있다. 도 8에 도시된 바와 같이, 제3 데이터 스레드(DT_3) 및 제4 데이터 스레드(DT_4)의 여유 입출력 처리량(즉, 20K IOPS)이 동일한 경우, 미리 정해진 기준, 예컨대 데이터 스레드들 사이 우선순위, 이미 할당 또는 배정된 커넥션의 개수, 한계 입출력 처리량의 크기 등에 기초하여 제11 커넥션(C11)이 할당 또는 배정될 데이터 스레드가 결정될 수 있다.
도 9는 본 개시의 예시적 실시예에 따라 네트워크 어댑터(300b)의 동작을 나타내는 도면이고, 도 10은 본 개시의 예시적 실시예에 따라 도 9의 디렉션 테이블(310)의 예시(310’)를 나타내는 도면이다. 도 7을 참조하여 전술한 바와 같이, 단계 S330에서, 클라이언트의 입력 또는 출력 요청이 결정된 데이터 스레드에 의해서 처리되도록 저장 시스템(10)을 구성하는 동작이 수행될 수 있다. 본 개시의 예시적 실시예에 따라, 컨트롤 스레드는 네트워크 어댑터(300b)를 설정함으로써 클라이언트의 입력 또는 출력 요청이 결정된 데이터 스레드에 의해서 처리되도록 저장 시스템(10)을 구성하는 동작을 수행할 수 있다. 도 9에서 4개의 코어들(110b 내지 140b)(또는 4개의 데이터 스레드들(DT_1 내지 DT_4))은, 도 3에 도시된 바와 같이 10개의 커넥션들(C01 내지 C10)이 할당 또는 배정된 것으로 가정된다.
도 9를 참조하면, 저장 시스템(10)은 코어들(110b 내지 140b)이 각각 엑세스 가능한 작업 큐(work queue)들(Q1 내지 Q4)을 포함할 수 있다. 예를 들면, 도 9에 도시된 바와 같이 작업 큐들(Q1 내지 Q4)는 공유 메모리(410)에 구현될 수도 있고, 네트워크 어댑터(300b)에 포함된 메모리에 구현될 수도 있다. 코어들(110b 내지 140b) 각각은 대응하는 작업 큐에 엑세스함으로써, 클라이언트로부터 수신된 입력 또는 출력 요청을 처리할 수 있다. 예를 들면, 도 9에 도시된 바와 같이, 제1 코어(110b)는 제1 작업 큐(Q1)에 엑세스함으로써, 제1 커넥션(C01)에 대응하는 요청(REQ_11), 제5 커넥션(C05)에 대응하는 요청(REQ_51) 및 제8 커넥션(C08)에 대응하는 요청(REQ)81)을 처리할 수 있다. 즉, 코어에 대응하는 작업 큐에 코어에서 실행되는 데이터 스레드에 할당 또는 배정된 커넥션의 요청들을 추가하는 경우, 데이터 스레드는 할당 또는 배정된 커넥션의 요청들을 수행할 수 있다. 즉, 커넥션이 데이터 스레드에 할당 또는 배정될 수 있다.
네트워크 어댑터(300b)는 디렉션 테이블(310)을 포함할 수 있고, 디렉션 테이블(310)을 참조함으로써 데이터 네트워크(20)를 통해서 수신되는 요청들을 특정한 작업 큐에 추가할 수 있다. 도 10을 참조하면, 도 3에 도시된 바와 같이 10개의 커넥션들(C01 내지 C10)이 4개의 코어들(110b 내지 140b)에 할당 또는 배정된 경우, 디렉션 테이블(310’)은 도 10에 도시된 바와 같이 구성될 수 있다. 즉, 디렉션 테이블(310’)은 커넥션 및 커넥션이 할당 또는 배정된 데이터 스레드가 실행되는 코어에 의해 엑세스되는 작업 큐에 대한 정보를 포함할 수 있다. 예를 들면, 디렉션 테이블(310’)에 기초하여, 제1 코어(110b)에 의해서 실행되는 제1 데이터 스레드(DT_1)에 할당 또는 배정된 제1 커넥션(C01)의 요청들은 제1 작업 큐(Q1)에 추가될 수 있다.
본 개시의 예시적 실시예에 따라, 도 9의 디렉션 테이블(310)은 컨트롤 스레드에 의해서 프로그램될 수 있다. 즉, 컨트롤 스레드는 디렉션 테이블(310)을 프로그램함으로써, 클라이언트의 입력 또는 출력 요청이 결정된 데이터 스레드에 의해서 처리되도록 저장 시스템(10)을 구성하는 동작, 즉 커넥션을 데이터 스레드에 할당 또는 배정하는 동작을 구현할 수 있다.
다른 한편으로, 본 개시의 예시적 실시예에 따라, 컨트롤 스레드는 클라이언트의 커넥션에 대응하는 통신 핸들(handle)을 데이터 스레드에 할당 또는 배정함으로써, 클라이언트의 입력 또는 출력 요청이 결정된 데이터 스레드에 의해서 처리되도록 저장 시스템(10)을 구성하는 동작, 즉 커넥션을 데이터 스레드에 할당 또는 배정하는 동작을 구현할 수도 있다. 통신 핸들(handle)은, 비제한적 예시로서 소켓 핸들(socket handle) 등일 수 있다. 소켓(또는 네트워크 소켓)은 프로세스 간 통신의 종착점(endpoint)로서, 데이터 이동의 출발점 및 도착점에 대한 정보를 포함할 수 있다. 데이터 스레드는 할당 또는 배정된 소켓 핸들을 통해 소켓 핸들에 대응하는 클라이언트의 요청들을 처리할 수 있다.
도 11은 본 개시의 예시적 실시예에 따라 저장 시스템(10)의 구성요소들 사이의 동작을 시간의 흐름에 따라 나타내는 도면이다. 구체적으로, 도 11은 클라이언트가 저장 시스템(10)과의 통신을 개시할 때, 커넥션을 데이터 스레드에 할당 또는 배정하는 동작을 나타낸다. 도 11에서, 컨트롤 스레드(CT)는 제1 코어(110c)에서 실행되고, 클라이언트의 커넥션은 제2 코어(120c)에서 실행되는 제2 데이터 스레드(DT_2)에 할당 또는 배정된다.
도 11을 참조하면, 단계 S10에서, 네트워크 어댑터(300c)는 데이터 네트워크(20)를 통해서 클라이언트로부터 로그인 요청을 수신할 수 있고, 로그인 요청은 제1 코어(110c)에 전달될 수 있다. 그 다음에, 단계 S20에서, 컨트롤 스레드(CT)는 네트워크 어댑터(300c) 및 데이터 네트워크(20)를 통해서 클라이언트와 정보를 교환함으로써, 클라이언트와 협상을 수행할 수 있다. 클라이언트와의 협상 결과, 클라이언트의 입출력 요구사항이 결정될 수 있다.
단계 S30에서, 컨트롤 스레드(CT)는 커넥션을 할당 또는 배정할 데이터 스레드로서 제2 데이터 스레드(DT_2)를 결정할 수 있다. 전술된 바와 같이, 컨트롤 스레드(CT)는 클라이언트의 입출력 요구사항, 현재 입출력 처리량, 처리속도 및 한계 입출력 처리량에 기초하여 제2 데이터 스레드(DT_2)를 결정할 수 있다.
단계 S40에서, 컨트롤 스레드(CT)는 네트워크 어댑터(300c)를 설정할 수 있다. 예를 들면, 도 9 및 도 10을 참조하여 전술한 바와 같이, 컨트롤 스레드(CT)는 클라이언트와의 커넥션 및 제2 작업 큐(Q2) 정보를 네트워크 어댑터(300c)에 포함된 디렉션 테이블에 추가할 수 있다.
단계 S50에서, 네트워크 어댑터(300c)는 데이터 네트워크(20)를 통해서 클라이언트로부터 입출력 요청(즉, 입력 또는 출력 요청)을 수신할 수 있다. 그 다음에, 단계 S60에서, 네트워크 어댑터(300c)는 디렉션 테이블에 기초하여 클라이언트의 입출력 요청을 제2 작업 큐(Q2)에 추가할 수 있다.
단계 S70에서, 제2 데이터 스레드(DT_2)는 제2 작업 큐(Q2)로부터 클라이언트의 입출력 요청을 독출할 수 있다. 그 다음에 단계 S80에서 클라이언트의 입출력 요청에 따른 동작을 제어할 수 있다.
도 12는 본 개시의 예시적 실시예에 따라 도 1의 저장 시스템(10)에서의 로드 밸런싱 방법을 나타내는 순서도이다. 구체적으로, 도 12는 커넥션이 할당 또는 배정된 데이터 스레드로부터 다른 스레드에 커넥션을 이송하는 방법을 나타내는 순서도이다. 도 12의 로드 밸런싱 방법은, 복수의 스레드들을 실행하는 프로세서 서브시스템(10)(또는 코어들(110 내지 140))에 의해서 수행될 수 있다.
도 12를 참조하면, 단계 S100’에서, 컨트롤 스레드에 의해서 복수의 스레드들의 현재 입출력 처리량 및/또는 처리속도을 모니터링 하는 동작이 수행될 수 있다. 예를 들면, 컨트롤 스레드에 의해서, 데이터 스레드들의 현재 입출력 처리량과 처리속도는 주기적으로 획득될 수 있다.
단계 S500에서, 커넥션의 이송이 가능한지 여부를 판단하는 동작이 수행될 수 있다. 예를 들면, 코어의 사용률을 향상시키거나 커넥션의 입출력 처리량 혹은 처리속도를 만족시키기 위하여, 또는 변경된 한계 입출력 처리량에 기인하여, 커넥션의 이송이 가능한지 여부가 컨트롤 스레드에 의해서 판단될 수 있다. 단계 S500에 대한 자세한 내용은 도 13을 참조하여 후술될 것이다. 커넥션의 이송이 불가능한 경우, 단계 S100’에서, 컨트롤 스레드에 의해서 복수의 데이터 스레드들의 현재 입출력 처리량 및/또는 처리속도를 모니터링하는 동작이 다시 수행될 수 있다.
커넥션의 이송이 가능한 경우, 단계 S600에서, 컨트롤 스레드에 의해서, 커넥션을 다른 데이터 스레드로 이송하는 동작이 수행될 수 있다. 즉, 커넥션의 후속하는 입력 또는 출력 요청들이 커넥션이 이송될 데이터 스레드에 의해서 처리되도록, 저장 시스템(10)은 컨트롤 스레드에 의해서 설정될 수 있다. 예를 들면, 도 9 및 도 10을 참조하여 전술한 바와 같이, 컨트롤 스레드는 네트워크 어댑터(300)의 디렉션 테이블을 프로그램함으로써 커넥션의 이송을 구현할 수 있다. 그 다음에, 단계 S700에서, 커넥션이 이송된 데이터 스레드에 의해서, 클라이언트의 요청에 따른 동작이 수행될 수 있다.
도 13은 본 개시의 예시적 실시예에 따라, 도 12의 단계 S500의 동작을 설명하기 위한 표를 나타낸다. 구체적으로, 도 13의 좌측 표는 커넥션의 이송 전 상태를 나타내고, 도 13의 우측 표는 커넥션의 이송 후 상태를 나타낸다.
특정 커넥션에서 입출력 처리량이 크게 증가하거나 데이터 스레드의 한계 입출력 처리량이 동적으로 감소하는 경우, 데이터 스레드에서 요구되는 입출력 처리량은 데이터 스레드의 한계 입출력 처리량을 초과할 수 있다. 예를 들면, 제9 커넥션(C09)에서 입출력 처리량이, 도 8에 도시된 40K IOPS로부터, 도 13에 도시된 60K IOPS로 증가한 경우, 제1 데이터 스레드(DT_1)에서 요구되는 입출력 처리량(180K IOPS)은 한계 입출력 처리량(160K IOPS)를 초과할 수 있다. 컨트롤 스레드는 데이터 스레드들(DT_1 내지 DT_4)의 현재 입출력 처리량을 모니터링함으로써 이와 같은 이벤트의 발생을 확인할 수 있다.
본 개시의 예시적 실시예에 따라, 데이터 스레드는 스스로 이와 같은 이벤트가 발생하는 경우, 입출력 처리량이 한계 입출력 처리량 이하가 되도록 적어도 하나의 커넥션의 입출력 처리량을 강제로 제한할 수도 있다. 즉, 도 13의 예시에서 제1 데이터 스레드(DT_1)는 4개의 커넥션들(C01, C05, C08, C09)의 총 입출력 처리량이 160K IOPS 이하가 되도록, 4개의 커넥션들(C01, C05, C08, C09) 중 적어도 하나의 입출력 처리량을 제한할 수 있다.
컨트롤 스레드는 제9 커넥션(C09)을 제1 데이터 스레드(DT_1)와 상이한 데이터 스레드에 할당 또는 배정하는 것이 가능한지 판단할 수 있다. 초과된 입출력 처리량이 20K IOPS이므로, 제 3 및 제4 데이터 스레드(DT_3, DT_4)가 고려될 수 있다. 제3 및 제4 데이터 스레드(DT_3, DT_4) 모두 제9 커넥션(C09)을 수용할 수 없으므로, 스레드의 교환이 고려될 수 있다. 이에 따라, 도 13에 도시된 바와 같이, 컨트롤 스레드에 의해서, 제1 데이터 스레드(DT_1)의 제9 커넥션(C09)이 제3 데이터 스레드(DT_3)로 이송되고, 제3 데이터 스레드(DT_3)에 할당 또는 배정된 제10 커넥션(C10)이 제1 데이터 스레드(DT_1)로 이송될 수 있다. 즉, 컨트롤 스레드에 의해서, 제9 커넥션(C09) 및 제10 커넥션(C10)이 교환될 수 있다. 이에 따라, 도 13의 우측 표에 도시되 바와 같이, 모든 데이터 스레드들(DT_1 내지 DT_4)은 한계 입출력 처리량 이하의 입출력 처리량을 가질 수 있다.
도 14는 본 개시의 예시적 실시예에 따른 공유 메모리(410)의 예시(410’)를 나타내는 도면이다. 도 1을 참조하여 전술한 바와 같이, 메모리 서브시스템(400)은 공유 메모리(410)를 포함할 수 있고, 공유 메모리(410)는 저장 시스템(10)의 다른 구성요소들(100, 200, 300)에 의해 공유되는 데이터, 코어들(110 내지 140)에 의해서 실행되는 명령어들 또는 코어들(110 내지 140)에 의해서 공유되는 데이터를 저장할 수도 있다. 도 14를 참조하면, 공유 메모리(410’)는, 복수의 큐들(411’ 내지 414’), 컨트롤 스레드(415’), 제1 내지 제4 데이터 스레드(416’ 내지 419’) 및 데이터 저장 장치 드라이버(420’)를 포함할 수 있다.
복수의 큐들(411’ 내지 414’)은 코어들(110 내지 140)에 의해서 각각 엑세스될 수 있고, 코어들(110 내지 140)에서 실행되는 데이터 스레드들에 의해서 데이터 저장 장치(200)로부터 독출된 데이터 또는 데이터 저장 장치(200)에 기입될 데이터가 저장될 수 있다. 또한, 본 개시의 예시적 실시예에 따라, 복수의 큐들(411’ 내지 414’)은 도 9의 작업 큐들(Q1 내지 Q4)을 각각 포함할 수도 있다.
컨트롤 스레드(415’)는, 전술된 본 개시의 예시적 실시예에 따라 컨트롤 스레드에 의해서 수행된 동작들을 위한 명령어들을 포함할 수 있다. 코어들(110 내지 140) 중 하나는 공유 메모리(410’)의 컨트롤 스레드(415’)를 엑세스할 수 있고, 컨트롤 스레드(415’)에 포함된 명령어들을 실행할 수 있다.
제1 내지 제4 데이터 스레드(416’ 내지 419’)는, 전술된 본 개시의 예시적 실시예에 따라 데이터 스레드에 의해서 수행된 동작들을 위한 명령어들을 각각 포함할 수 있다. 코어들(110 내지 140)은 공유 메모리(410’)의 제1 내지 제4 데이터 스레드(416’ 내지 419’)를 각각 엑세스할 수 있고, 제1 내지 제4 데이터 스레드(416’ 내지 419’) 각각에 포함된 명령어들을 각각 실행할 수 있다.
데이터 저장 장치 드라이버(420’)는 데이터 저장 장치(200)를 엑세스하는 동작들을 위한 명령어들을 포함할 수 있다. 예를 들면, 제1 내지 제4 데이터 스레드들(416’ 내지 419’)은 데이터 저장 장치 드라이버(420’)가 제공하는 함수를 사용하여 데이터 저장 장치(200)를 엑세스하는 동작을 제어할 수 있다.
이상에서와 같이 도면과 명세서에서 예시적인 실시예들이 개시되었다. 본 명세서에서 특정한 용어를 사용하여 실시예들을 설명되었으나, 이는 단지 본 개시의 기술적 사상을 설명하기 위한 목적에서 사용된 것이지 의미 한정이나 특허청구범위에 기재된 본 개시의 범위를 제한하기 위하여 사용된 것은 아니다. 그러므로 본 기술분야의 통상의 지식을 가진 자라면 이로부터 다양한 변형 및 균등한 타 실시예가 가능하다는 점을 이해할 것이다. 따라서, 본 개시의 진정한 기술적 보호범위는 첨부된 특허청구범위의 기술적 사상에 의해 정해져야 할 것이다.

Claims (10)

  1. 복수의 코어(core)들 및 상기 복수의 코어들을 클라이언트들이 접속(link)된 데이터 네트워크에 접속시키는 네트워크 어댑터를 포함하는 저장 시스템에서 로드 밸런싱(load balancing)을 위한 방법으로서,
    상기 복수의 코어들은 복수의 스레드(thread)들을 실행하고,
    상기 복수의 코어들 중 하나의 코어에 의해서 실행되는 컨트롤 스레드에 의해서,
    클라이언트의 로그인 요청에 응답하여 상기 저장 시스템 및 상기 클라이언트 사이에 형성된 커넥션(connection)을 상기 복수의 스레드들 중 하나에 할당(allocation) 또는 배정(assignment)하는 단계; 및
    적어도 하나의 커넥션이 할당 또는 배정된 스레드에 의해서, 상기 적어도 하나의 커넥션을 통해서 상기 클라이언트로부터 수신된 모든 입력 또는 출력 요청(request)들에 따른 입력 또는 출력 동작들을 제어하는 단계를 포함하는 로드 밸런싱 방법.
  2. 제1항에 있어서,
    상기 컨트롤 스레드에 의해서, 상기 복수의 스레드들의 현재 입출력 처리량(IOPS 또는 throughput) 및 처리속도(latency) 중 적어도 하나를 모니터링하는 단계를 포함하는 로드 밸런싱 방법.
  3. 제2항에 있어서,
    상기 클라이언트와의 커넥션을 상기 복수의 스레드들 중 하나에 할당 또는 배정하는 단계는, 상기 클라이언트의 입출력 요구사항(requirement), 상기 현재 입출력 처리량, 처리속도 및 상기 복수의 스레드들의 미리 정해진 한계(limit) 입출력 처리량 중 적어도 하나에 기초하여, 상기 복수의 스레드들 중 하나를 결정하는 단계를 포함하는 것을 특징으로 하는 로드 밸런싱 방법.
  4. 제2항에 있어서,
    상기 컨트롤 스레드에 의해서, 상기 현재 입출력 처리량 및 처리속도 중 적어도 하나에 기초하여 상기 클라이언트와의 커넥션을 다른 스레드로 이송(migration)하는 단계를 더 포함하는 로드 밸런싱 방법.
  5. 제1항에 있어서,
    상기 저장 시스템은, 상기 복수의 코어들이 각각 엑세스 가능한 복수의 작업 큐(work queue)들을 포함하고,
    상기 클라이언트와의 커넥션을 상기 복수의 스레드들 중 하나에 할당 또는 배정하는 단계는, 커넥션을 통해서 수신되는 입력 또는 출력 요청이 상기 커넥션이 할당 또는 배정된 스레드를 실행하는 코어에 의해서 엑세스 가능한 작업 큐에 저장되도록 상기 네트워크 어댑터를 설정하는 단계를 포함하는 것을 특징으로 하는 로드 밸런싱 방법.
  6. 제1항에 있어서,
    상기 클라이언트와의 커넥션을 상기 복수의 스레드들 중 하나에 할당 또는 배정하는 단계는, 상기 클라이언트와의 커넥션에 대응하는 통신 핸들(handle)을 상기 클라이언트와의 커넥션이 할당 또는 배정된 스레드에 할당 또는 배정하는 것을 특징으로 하는 로드 밸런싱 방법.
  7. 제1항에 있어서,
    적어도 하나의 커넥션이 할당 또는 배정된 스레드들 각각에 의해서, 상기 적어도 하나의 커넥션의 입출력 처리량을 제한하는 단계를 더 포함하는 것을 특징으로 하는 로드 밸런싱 방법.
  8. 복수의 코어(core)들 및 상기 복수의 코어들을 클라이언트들이 접속(link)된 데이터 네트워크에 접속시키는 네트워크 어댑터를 포함하는 저장 시스템에서 로드 밸런싱(load balancing)을 위한 방법으로서,
    상기 복수의 코어들은, 컨트롤 스레드(thread)를 실행하는 하나의 코어 및 복수의 데이터 스레드들을 실행하는 적어도 하나의 코어를 포함하고,
    상기 컨트롤 스레드에 의해서, 제1 클라이언트의 로그인 요청에 응답하여 상기 제1 클라이언트의 후속하는(subsequent) 모든 입력 또는 출력 요청(request)들이 제1 데이터 스레드에 의해서 처리되도록, 상기 저장 시스템 및 상기 제1 클라이언트 사이에 형성된 제1 커넥션(connection)을 상기 제1 데이터 스레드에 할당(allocation) 또는 배정(assignment)함으로써 상기 저장 시스템을 구성하는 단계; 및
    상기 제1 데이터 스레드에 의해서, 상기 제1 클라이언트의 모든 입력 또는 출력 요청들에 따른 입력 또는 출력 동작들을 제어하는 단계를 포함하는 로드 밸런싱 방법.
  9. 제8항에 있어서,
    상기 제1 클라이언트의 입력 또는 출력 요청에 따른 입력 또는 출력 동작을 제어하는 단계는,
    제1 수신 스레드에 의해서, 상기 제1 클라이언트의 후속하는 입력 요청에 따른 입력 동작을 제어하는 단계; 및
    제1 송신 스레드에 의해서, 상기 제1 클라이언트의 후속하는 출력 요청에 따른 출력 동작을 제어하는 단계를 포함하고,
    상기 제1 수신 스레드 및 제1 송신 스레드는 상기 제1 데이터 스레드와 동일한 코어에서 실행되는 것을 특징으로 하는 로드 밸런싱 방법.
  10. 제8항에 있어서,
    상기 제1 데이터 스레드에 의해서, 제2 클라이언트의 입력 또는 출력 요청에 따른 입력 또는 출력 동작을 제어하는 단계; 및
    상기 제1 데이터 스레드에 의해서, 상기 제1 및 제2 클라이언트의 입력 또는 출력 요청들에 따른 입력 또는 출력 동작들을 스케줄링하는 단계를 더 포함하는 로드 밸런싱 방법.
KR1020150179199A 2015-12-15 2015-12-15 커넥션 기반 로드 밸런싱을 위한 저장 시스템 및 방법 KR102509988B1 (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR1020150179199A KR102509988B1 (ko) 2015-12-15 2015-12-15 커넥션 기반 로드 밸런싱을 위한 저장 시스템 및 방법
US15/361,450 US10313431B2 (en) 2015-12-15 2016-11-27 Storage system and method for connection-based load balancing

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020150179199A KR102509988B1 (ko) 2015-12-15 2015-12-15 커넥션 기반 로드 밸런싱을 위한 저장 시스템 및 방법

Publications (2)

Publication Number Publication Date
KR20170071180A KR20170071180A (ko) 2017-06-23
KR102509988B1 true KR102509988B1 (ko) 2023-03-14

Family

ID=59020342

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020150179199A KR102509988B1 (ko) 2015-12-15 2015-12-15 커넥션 기반 로드 밸런싱을 위한 저장 시스템 및 방법

Country Status (2)

Country Link
US (1) US10313431B2 (ko)
KR (1) KR102509988B1 (ko)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10263905B2 (en) * 2017-03-20 2019-04-16 Diamanti Inc. Distributed flexible scheduler for converged traffic
US20190044809A1 (en) * 2017-08-30 2019-02-07 Intel Corporation Technologies for managing a flexible host interface of a network interface controller
KR102203204B1 (ko) * 2019-05-08 2021-01-13 고려대학교 산학협력단 가상화 환경에서의 성능 제어 방법 및 이를 위한 정보 처리 장치
CN112395076A (zh) * 2019-08-15 2021-02-23 阿里巴巴集团控股有限公司 网络数据的处理方法、设备及存储介质
US11494236B2 (en) * 2020-05-06 2022-11-08 EMP IP Holding Company, LLC System and method for sharing central processing unit (CPU) resources with unbalanced applications
US11563690B2 (en) * 2020-08-19 2023-01-24 Redpanda Data, Inc. Low latency queuing system
US11586466B2 (en) * 2021-01-20 2023-02-21 EMC IP Holding Company LLC Centralized high-availability flows execution framework

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011198063A (ja) * 2010-03-19 2011-10-06 Fujitsu Ltd データ入出力制御方法,データ入出力制御プログラムおよびデータ入出力制御装置
US20160019150A1 (en) 2014-07-18 2016-01-21 Fujitsu Limited Information processing device, control method of information processing device and control program of information processing device

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6173306B1 (en) 1995-07-21 2001-01-09 Emc Corporation Dynamic load balancing
US8281022B1 (en) 2000-06-30 2012-10-02 Emc Corporation Method and apparatus for implementing high-performance, scaleable data processing and storage systems
US9043194B2 (en) 2002-09-17 2015-05-26 International Business Machines Corporation Method and system for efficient emulation of multiprocessor memory consistency
US7954102B2 (en) 2002-11-13 2011-05-31 Fujitsu Limited Scheduling method in multithreading processor, and multithreading processor
US7519725B2 (en) 2003-05-23 2009-04-14 International Business Machines Corporation System and method for utilizing informed throttling to guarantee quality of service to I/O streams
US7209967B2 (en) 2004-06-01 2007-04-24 Hitachi, Ltd. Dynamic load balancing of a storage system
US7924720B2 (en) 2007-02-26 2011-04-12 Hewlett-Packard Development Company, L.P. Network traffic monitoring
US8949472B2 (en) 2008-09-10 2015-02-03 International Business Machines Corporation Data affinity based scheme for mapping connections to CPUs in I/O adapter
KR101553650B1 (ko) * 2008-12-24 2015-09-16 삼성전자주식회사 멀티코어 시스템에서의 로드 밸런싱 장치 및 방법
US8881157B2 (en) * 2009-09-11 2014-11-04 Empire Technology Development Llc Allocating threads to cores based on threads falling behind thread completion target deadline
US8180973B1 (en) 2009-12-23 2012-05-15 Emc Corporation Servicing interrupts and scheduling code thread execution in a multi-CPU network file server
US8799454B2 (en) * 2010-12-15 2014-08-05 International Business Machines Corporation Behavior based client selection for disparate treatment
CN103392314B (zh) 2010-12-29 2016-06-15 思杰系统有限公司 用于可扩展的n核统计信息聚合的系统和方法
US8819307B1 (en) 2011-12-29 2014-08-26 Emc Corporation Identification and use of preferred path groups in host computer based on differential performance
US8930633B2 (en) * 2012-06-14 2015-01-06 International Business Machines Corporation Reducing read latency using a pool of processing cores
US8909608B2 (en) * 2012-06-14 2014-12-09 International Business Machines Corporation Reducing decompression latency in a compression storage system
US8904204B2 (en) 2012-06-29 2014-12-02 International Business Machines Corporation Managing computing resources through aggregated core management
US9559900B1 (en) * 2013-06-13 2017-01-31 Amazon Technologies, Inc. Dedicated endpoints for network-accessible services
KR101684677B1 (ko) * 2013-12-26 2016-12-09 한국전자통신연구원 멀티코어 시스템의 시스템 성능 최적화 장치 및 방법
US9600337B2 (en) * 2014-09-30 2017-03-21 Nimble Storage, Inc. Congestion avoidance in network storage device using dynamic weights
US9575811B2 (en) * 2015-02-03 2017-02-21 Dell Products L.P. Dynamically controlled distributed workload execution

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011198063A (ja) * 2010-03-19 2011-10-06 Fujitsu Ltd データ入出力制御方法,データ入出力制御プログラムおよびデータ入出力制御装置
US20160019150A1 (en) 2014-07-18 2016-01-21 Fujitsu Limited Information processing device, control method of information processing device and control program of information processing device

Also Published As

Publication number Publication date
US20170171302A1 (en) 2017-06-15
US10313431B2 (en) 2019-06-04
KR20170071180A (ko) 2017-06-23

Similar Documents

Publication Publication Date Title
KR102509988B1 (ko) 커넥션 기반 로드 밸런싱을 위한 저장 시스템 및 방법
US20220224657A1 (en) Technologies for accelerating edge device workloads
US12073125B2 (en) Multi-stream SSD QOS management
EP3572948B1 (en) Resource management method and device
US10140236B2 (en) Receiving buffer credits by a plurality of channels of one or more host computational devices for transmitting data to a control unit
US11792132B2 (en) Technologies for aligning network flows to processing resources
US10810143B2 (en) Distributed storage system and method for managing storage access bandwidth for multiple clients
AU2015361607B2 (en) Resource management method, host, and endpoint
KR102505855B1 (ko) 가중치 기반 멀티-큐 가능 리소스 공유 방법
CN108028833A (zh) 一种nas数据访问的方法、系统及相关设备
US8301805B2 (en) Managing I/O request in a storage system
KR102204670B1 (ko) 프록시 기반 멀티스레딩 메시지 전달 통신을 위한 기술
US20170366460A1 (en) Rdma-over-ethernet storage system with congestion avoidance without ethernet flow control
Stephens et al. Titan: Fair Packet Scheduling for Commodity Multiqueue {NICs}
US20230359401A1 (en) Independent set data lanes for iod ssd
JP2009512011A (ja) リソースコマンドメッセージおよび方法
CN113467926B (zh) 具有存储设备的存储服务器的分组处理方法和系统
US11144242B2 (en) Distributed storage system
JP2018041190A (ja) 情報処理装置、制御方法およびプログラム
US9542356B2 (en) Determining, at least in part, one or more respective amounts of buffer memory
WO2024169161A1 (zh) 一种资源配置方法、装置、系统及设备
US10298510B1 (en) Controlling data transmission rates of multiple devices
JPWO2016088371A1 (ja) 管理ノード、端末、通信システム、通信方法、および、プログラム記録媒体
KR20210148751A (ko) 네트워크 운용장치 및 그 동작 방법
JP2009251875A (ja) ジョブ実行システム

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