KR20220158804A - 네트워크 스택 프레임워크에서 일관성 있게 부착된 인터페이스들의 이용 - Google Patents

네트워크 스택 프레임워크에서 일관성 있게 부착된 인터페이스들의 이용 Download PDF

Info

Publication number
KR20220158804A
KR20220158804A KR1020227037307A KR20227037307A KR20220158804A KR 20220158804 A KR20220158804 A KR 20220158804A KR 1020227037307 A KR1020227037307 A KR 1020227037307A KR 20227037307 A KR20227037307 A KR 20227037307A KR 20220158804 A KR20220158804 A KR 20220158804A
Authority
KR
South Korea
Prior art keywords
network
buffers
buffer
queuing
applications
Prior art date
Application number
KR1020227037307A
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 인터내셔널 비지네스 머신즈 코포레이션
Publication of KR20220158804A publication Critical patent/KR20220158804A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1605Handling requests for interconnection or transfer for access to memory bus based on arbitration
    • G06F13/1652Handling requests for interconnection or transfer for access to memory bus based on arbitration in a multiprocessor architecture
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/90Buffering arrangements
    • H04L49/9005Buffering arrangements using dynamic buffer space allocation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/36Handling requests for interconnection or transfer for access to common bus or bus 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/54Interprogram communication
    • G06F9/547Remote procedure calls [RPC]; Web services
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/90Buffering arrangements
    • H04L49/9047Buffering arrangements including multiple buffers, e.g. buffer pools

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Software Systems (AREA)
  • Multi Processors (AREA)
  • Computer And Data Communications (AREA)
  • Stackable Containers (AREA)
  • Packaging For Recording Disks (AREA)
  • Pallets (AREA)
  • Small-Scale Networks (AREA)
  • Stacking Of Articles And Auxiliary Devices (AREA)

Abstract

네트워크 스택 프레임워크에서 일관성 있게 부착된 네트워크 버퍼들(UTILIZING COHERENTLY ATTACHED INTERFACES IN A NETWORK STACK FRAMEWORK)
컴퓨팅 환경에서 향상된 네트워크 스택 프레임워크를 구현하기 위한 실시예들이 제공된다. 하나 또는 그 이상의 애플리케이션들과 네트워크 인터페이스 사이에 일관성 있게 부착된 복수의 네트워크 버퍼들은 애플리케이션 버퍼, 원형 버퍼 및 큐잉 및 풀링 작업을 사용하여 하나 또는 그 이상의 드라이버들과 운영 체제를 우회하는 동안 공유될 수 있다.

Description

네트워크 스택 프레임워크에서 일관성 있게 부착된 인터페이스들의 이용
[0001] 본 발명은 일반적으로 컴퓨팅 시스템에 관한 것으로, 보다 상세하게는, 컴퓨팅 환경에서 네트워크 스택 프레임워크에서 일관성 있게 부착된 인터페이스(coherently attached interfaces in a network stack framework)를 이용하기 위한 다양한 실시예들에 관한 것이다.
[0002] 오늘날의 사회에서, 소비자, 사업가, 교육자 및 기타 사람들은 다양한 환경에서 빈도가 증가하는 다양한 컴퓨팅 네트워트 시스템들을 사용한다. 컴퓨터 시스템은 직장, 집 또는 학교에서 찾을 수 있다. 컴퓨터 시스템은 데이터를 처리하고 저장하기 위해 데이터 스토리지 시스템(data storage systems) 또는 디스크 스토리지 시스템(disk storage systems)을 포함할 수 있다. 최근 몇 년 동안, 소프트웨어와 하드웨어 기술 모두 놀라운 발전을 경험했다. 새로운 기술로, 점점 더 많은 기능들이 추가되고, 이들 컴퓨팅 시스템들과 함께 사용하기 위한 더 큰 편의성이 제공된다.
[0003] 컴퓨팅 환경에서 향상된 네트워크 스택 프레임워크를 구현하기 위한 다양한 실시예들이 제공된다. 하나 또는 그 이상의 애플리케이션들과 네트워크 인터페이스 사이에 일관성 있게 부착된 복수의 네트워크 버퍼들은 애플리케이션 버퍼, 원형 버퍼 및 큐잉 및 풀링 작업을 사용하여 하나 또는 그 이상의 드라이버들과 운영 체제를 우회하는 동안 공유될 수 있다.
[0004] 제1 실시 예로부터, 본 발명은 컴퓨팅 환경에서 향상된 네트워크 스택 프레임워크를 이용하기 위한, 프로세서에 의한, 방법을 제공하고, 상기 방법은: 애플리케이션 버퍼, 원형 버퍼 및 큐잉 및 풀링 작업(a queuing and pooling operation)을 사용하여 하나 또는 그이상의 드라이버들 및 운영 체제를 우회하면서 하나 또는 그 이상의 애플리케이션들과 네트워크 인터페이스 사이에 일관성 있게 부착된(coherently attached) 복수의 네트워크 버퍼들을 공유하는 단계를 포함한다.
[0005] 바람직하게도, 본 발명을 방법을 제공하고, 상기 방법은 공유 라이브러리에 의해 복수의 네트워크 버퍼들을 제어하는 단계를 더 포함한다.
[0006] 바람직하게도, 본 발명을 방법을 제공하고, 상기 방법은 상기 네트워크 인터페이스를 사용하여 상기 하나 또는 그 이상의 애플리케이션들 사이에서 상기 복수의 네트워크 버퍼들 중 하나 또는 그 이상의 주소 공간들을 공유하는 단계를 더 포함하고, 상기 복수의 네트워크 버퍼들은 입/출력(I/O) 제어에 사용된다.
[0007] 바람직하게도, 본 발명을 방법을 제공하고, 상기 방법은 상기 원형 버퍼를 사용하여 일관성 있게 부착된 디바이스들과 메모리 포인터들을 교환하는 단계를 더 포함한다.
[0008] 바람직하게도, 본 발명을 방법을 제공하고, 상기 방법은 네트워크 버퍼 전송, 수신 및 조작을 위해 상기 복수의 네트워크 버퍼들에 대한 큐잉 및 풀링 작업을 실행하는 단계를 더 포함한다.
[0009] 바람직하게도, 본 발명을 방법을 제공하고, 상기 큐잉 및 풀링 작업은 하나 또는 그 이상의 큐들 및 하나 또는 그 이상의 풀들로부터 상기 복수의 네트워크 버퍼들 중 하나를 이동, 할당 또는 재할당하는 단계를 더 포함한다.
[0010] 바람직하게도, 본 발명을 제공하고, 상기 방법은 상기 복수의 네트워크 버퍼들을 사용하여 공유 메모리 영역 및 사설 메모리 영역을 설정하는 단계를 더 포함한다.
[0011] 다른 실시 예로부터, 본 발명은 컴퓨팅 환경에서 향상된 네트워크 스택 프레임워크를 이용하기 위한 시스템을 제공하고, 상기 시스템은: 실행 가능 명령들이 있는 하나 또는 그 이상의 컴퓨터들을 포함하고, 상기 실행 가능 명령들은 실행될 때 상기 시스템이: 애플리케이션 버퍼, 원형 버퍼 및 큐잉 및 풀링 작업(a queuing and pooling operation)을 사용하여 하나 또는 그 이상의 드라이버들 및 운영 체제를 우회하면서 하나 또는 그 이상의 애플리케이션들과 네트워크 인터페이스 사이에 일관성 있게 부착된(coherently attached) 복수의 네트워크 버퍼들을 공유하는 단계를 수행하게 한다.
[0012] 바람직하게도, 본 발명을 시스템을 제공하고, 상기 실행 가능 명령들은 실행될 때 상기 시스템이 공유 라이브러리에 의해 복수의 네트워크 버퍼들을 제어하는 단계를 수행하게 한다.
[0013] 바람직하게도, 본 발명을 시스템을 제공하고, 상기 실행 가능 명령들은 실행될 때 상기 시스템이 상기 네트워크 인터페이스를 사용하여 상기 하나 또는 그 이상의 애플리케이션들 사이에서 상기 복수의 네트워크 버퍼들 중 하나 또는 그 이상의 주소 공간들을 공유하는 단계를 수행하게 하고, 상기 복수의 네트워크 버퍼들은 입/출력(I/O) 제어에 사용된다.
[0014] 바람직하게도, 본 발명을 시스템을 제공하고, 상기 실행 가능 명령들은 실행될 때 상기 시스템이 상기 원형 버퍼를 사용하여 일관성 있게 부착된 디바이스들과 메모리 포인터들을 교환하는 단계를 수행하게 한다.
[0015] 바람직하게도, 본 발명을 시스템을 제공하고, 상기 실행 가능 명령들은 실행될 때 상기 시스템이 네트워크 버퍼 전송, 수신 및 조작을 위해 상기 복수의 네트워크 버퍼들에 대한 큐잉 및 풀링 작업을 실행하는 단계를 수행하게 한다.
[0016] 바람직하게도, 본 발명을 시스템을 제공하고, 상기 실행 가능 명령들은 실행될 때 상기 시스템이 상기 큐잉 및 풀링 작업을 실행하기 위해 하나 또는 그 이상의 큐들 및 하나 또는 그이상의 풀들로부터 상기 복수의 네트워크 버퍼들 중 하나를 이동, 할당 또는 재할당하는 단계를 수행하게 한다.
[0017] 바람직하게도, 본 발명을 시스템을 제공하고, 상기 실행 가능 명령들은 실행될 때 상기 시스템이 상기 복수의 네트워크 버퍼들을 사용하여 공유 메모리 영역 및 사설 메모리 영역을 설정하는 단계를 수행하게 한다.
[0018] 다른 실시 예로부터, 본 발명은 프로세서에 의해 향상된 네트워크 스택 프레임워크를 이용하기 위한 컴퓨터 프로그램 제품을 제공하고, 상기 컴퓨터 프로그램 제품은 컴퓨터 판독가능 프로그램 코드 부분들이 저장된 비-일시적 컴퓨터 판독가능 저장 매체를 포함하며, 상기 컴퓨터 판독가능 프로그램 코드 부분들은: 애플리케이션 버퍼, 원형 버퍼 및 큐잉 및 풀링 작업(a queuing and pooling operation)을 사용하여 하나 또는 그이상의 드라이버들 및 운영 체제를 우회하면서 하나 또는 그 이상의 애플리케이션들과 네트워크 인터페이스 사이에 일관성 있게 부착된(coherently attached) 복수의 네트워크 버퍼들을 공유하는 단계를 수행하는 실행 가능한 부분을 포함한다.
[0019] 바람직하게도, 본 발명을 컴퓨터 프로그램 제품을 제공하고, 상기 컴퓨터 프로그램 제품은 공유 라이브러리에 의해 복수의 네트워크 버퍼들을 제어하는 단계를 수행하는 실행 가능한 부분을 더 포함한다.
[0020] 바람직하게도, 본 발명을 컴퓨터 프로그램 제품을 제공하고, 상기 컴퓨터 프로그램 제품은 상기 네트워크 인터페이스를 사용하여 상기 하나 또는 그 이상의 애플리케이션들 사이에서 상기 복수의 네트워크 버퍼들 중 하나 또는 그 이상의 주소 공간들을 공유하는 단계를 수행하는 실행 가능한 부분을 더 포함하고, 상기 복수의 네트워크 버퍼들은 입/출력(I/O) 제어에 사용된다.
[0021] 바람직하게도, 본 발명을 컴퓨터 프로그램 제품을 제공하고, 상기 컴퓨터 프로그램 제품은 상기 원형 버퍼를 사용하여 일관성 있게 부착된 디바이스들과 메모리 포인터들을 교환하는 단계 및 네트워크 버퍼 전송, 수신 및 조작을 위해 상기 복수의 네트워크 버퍼들에 대한 큐잉 및 풀링 작업을 실행하는 단계를 수행하는 실행 가능한 부분을 더 포함한다.
[0022] 바람직하게도, 본 발명을 컴퓨터 프로그램 제품을 제공하고, 상기 컴퓨터 프로그램 제품은 상기 큐잉 및 풀링 작업을 실행하기 위해 하나 또는 그 이상의 큐들 및 하나 또는 그이상의 풀들로부터 상기 복수의 네트워크 버퍼들 중 하나를 이동, 할당 또는 재할당하는 단계를 수행하는 실행 가능한 부분을 더 포함한다.
[0023] 바람직하게도, 본 발명을 컴퓨터 프로그램 제품을 제공하고, 상기 컴퓨터 프로그램 제품은 상기 복수의 네트워크 버퍼들을 사용하여 공유 메모리 영역 및 사설 메모리 영역을 설정하는 단계를 수행하는 실행 가능한 부분을 더 포함한다.
[0024] 본 발명의 이점들이 용이하게 이해될 수 있도록, 위에서 간략히 설명된 본 발명의 보다 구체적인 설명은 첨부된 도면에 도시된 특정 실시예들을 참조하여 제시될 것이다. 이 도면들이 본 발명의 전형적인 실시예만을 나타낸 것으로 그 범위를 한정하는 것으로 간주되어서는 안된다는 것을 이해하고, 본 발명은 다음과 같은 첨부된 도면을 사용하여 추가적인 특효성과 상세함으로 기술되고 설명될 것이다:
[0025] 도 1은 본 발명의 일 실시예에 따른 예시적인 클라우드 컴퓨팅 노드(an exemplary cloud computing node)를 도시한 블록도이다;
[0026] 도 2는 본 발명의 일 실시예에 따른 예시적인 클라우드 컴퓨팅 환경을 도시한 추가 블록도이다;
[0027] 도 3은 본 발명의 일 실시예에 따른 추상화 모델 층(abstraction model layers)을 도시한 추가 블록도이다;
[0028] 도 4는 본 발명의 다양한 측면이 실현될 수 있는 컴퓨팅 환경에서 네트워크 스택 프레임워크에서 일관성 있게 부착된 인터페이스를 이용하기 위한 오퍼레이션 모드(an operation mode)를 도시한 블록도이다;
[0029] 도 5A-5B는 본 발명의 양상들에 따른 컴퓨팅 환경에서 네트워크 스택 프레임워크에서 일관성 있게 부착된 인터페이스를 이용하는 것을 도시한 도면이다;
[0030] 도 6A-6B는 본 발명의 양상에 따른 컴퓨팅 환경에서 네트워크 스택 프레임워크에서 일관성 있게 부착된 인터페이스를 이용하기 위한 원형 버퍼(a circular buffer)의 사용을 나타내는 도면이다;
[0031] 도 7은 본 발명의 양상들이 실현될 수 있는 컴퓨팅 환경에서 네트워크 스택 프레임워크에서 일관성 있게 부착된 인터페이스를 이용하기 위한 오퍼레이션 모드를 도시한 블록도이다; 그리고
[0032] 도 8은 본 발명의 양상들이 실현될 수 있는 컴퓨팅 환경에서 네트워크 스택 프레임워크에서 일관성 있게 부착된 인터페이스를 이용하기 위한 추가적인 예시적인 방법을 도시한 플로 차트이다.
[0033] 예비적인 문제로서, 메모리 일관성(memory coherence)이라고도 불리는 캐시 일관성(cache coherence)은 두 개 이상의 프로세서 또는 코어가 메모리의 공통 영역을 공유하는 컴퓨터 시스템의 설계에 영향을 미치는 문제이다. 단일 프로세서 시스템에는, 모든 작업을 수행하는 프로세싱 엘리멘트는 하나뿐이며, 따라서 주어진 메모리 위치에서 읽거나 쓸 수 있는 프로세싱 엘리멘트는 하나뿐이다. 결과적으로, 값이 변경되면, 해당 메모리 위치의 모든 후속 읽기 작업은 캐시된 경우에도 업데이트된 값을 보게된다.
[0034] 반대로, 멀티프로세서(또는 멀티코어 시스템)에서는, 두 개 이상의 프로세싱 엘리멘트가 동시에 작동하므로 동일한 메모리 위치에 동시에 액세스할 수 있다. 프로세서가 이 위치에서 데이터를 변경하지 않는 한, 프로세서는 데이터를 무제한으로 공유하고 원하는 대로 데이터를 캐시할 수 있다. 그러나, 프로세서가 위치를 업데이트하는 즉시, 다른 프로세서는 로컬 캐시에 있을 수 있는 오래된 복사본에서 작업할 수 있다. 따라서, 공유 값에 대한 변경 사항을 모든 프로세싱 엘리멘트에 알리기 위해 어떤 방식이 필요한데 이러한 방식은 "캐시 일관성 프로토콜"로 알려져 있으며, 그리고 이러한 프로토콜이 사용된다면, 시스템은 "캐시 일관성"이 있다고 한다. 캐시 일관성의 정확한 본질과 의미는 일관성 프로토콜이 구현하는 일관성 모델에 의해 결정된다.
[0035] 캐시 일관성 프로토콜은 일반적으로 캐시 상태와 전환이 이루어지는 캐시 상태 사이의 전환을 트리거하는 이벤트뿐만 아니라 메모리 블록의 캐시 복사본과 관련하여 저장된 캐시 상태 세트를 정의한다. 따라서, 시스템 전체에 걸쳐 데이터의 일관성을 유지하기 위해, 캐시 일관성 프로토콜은, 예를 들어, 디렉토리 기반 프로토콜(a directory-based protocol), 스눕 기반 프로토콜(a snoop-based protocol), 이들의 조합, 또는 다른 변형들과 같은 시스템 메모리의 내용에 대한 다양한 프로세서 코어의 “뷰(views)”사이에 적어도 최소한 필요한 수준의 일관성을 보장하기 위해 사용된다.
[0036] 또한, 현대의 컴퓨팅 시스템, 다양한 시스템 버스, 다양한 애플리케이션과 로컬 또는 인접 시스템 간의 시스템 인트라커넥트(intraconnects) 및 인터커넥트(interconnects)는 다양한 컴포넌트들 간에 데이터를 전송하고 메모리를 공유하기 위한 다양한 프로토콜을 가지고 있다. 예를 들어, 컴퓨팅 시스템은 이기종 컴퓨팅(heterogeneous computing)을 위한 범용 프로세서와 가속기 디바이스(acceleration devices) 사이의 일관성 있는 상호 연결을 가능하게 하기 위해 캐시 일관성을 사용하여 향상된 성능을 제공하는 것을 목표로 하는데, 이것은 예를들어, PCI 익스프레스(a PCI Express, PCIe) 버스(여기서 PCIe는 한 레인에서 여러 레인으로 확장 가능한 멀티 레인(multilane), 점대점 인터커넥트(point-to-point interconnect)이다)에서와 같은 일부 연결에 내재된 대역폭 제한 또는 대기 시간을 피하려고 시도한다. 즉, 컴퓨팅 시스템은 다양한 유형의 프로세서의 메모리 공간에 걸쳐 데이터 액세스를 제공할 때 캐시 일관성을 유지하면서 향상된 컴퓨팅 효율성을 제공하려고 한다. 예를 들어, 개방 일관성 가속기 프로세서 인터페이스(coherent accelerator processor interface, CAPI)는 프로세서와 가속기(accelerators) 간의 인터페이스로 대역폭을 늘리고 지연 시간을 단축한다. 또 다른 예로, 고속 하드웨어 가속기(high-speed hardware accelerators)를 위한 칩-투-칩 인터커넥트(chip-to-chip interconnect)를 제공하고 특정 애플리케이션을 대상으로 하는 PCI 익스프레스(PCIe)에 구축된 가속기용 캐시 일관성 인터커넥트 (cache coherent interconnect for accelerators, “CCIX”)가 사용될 수 있다.
[0037] 그러나, 이러한 최신 컴퓨팅 시스템 내에서도, 다양한 애플리케이션과 로컬 또는 인접 시스템 간의 데이터 전송, 통신 및/또는 수신은 여전히 네트워크 경로를 따라 네트워크 지연을 경험한다. 예를 들어, 스위칭 층이 거의 없는 긴밀하게 통합된 고성능 컴퓨터(high performance computer, "HPC") 시스템의 맥락에서, 타겟 애플리케이션에 데이터를 전달하는 것은 서버 간에 데이터를 전송하는 것보다 몇 나노초(nanoseconds, “nsecs”) 더 높을 수 있는 네트워크 경로 지연(목적지 장치 내에서 한 번)이 포함된다 (예를 들어, 특히 네트워크 스택을 통과해야 하는 경우, 최소한 몇 개의 같은 위치에 있는 랙의 규모 내에서). 따라서, HPC/이기종 컴퓨팅 시스템에서 캐시 일관성을 유지하고, 대역폭을 증가시키며, 네트워크 액세스 지연 경로를 감소/제거하기 위해 캐시 일관성 인터커넥트 시스템을 제공해야할 필요가 있는데, 여기서 네트워크 액세스 지연은 데이터 신호가 네트워크 인터페이스에 도착한 시간부터 시작하여 수신 애플리케이션이 데이터를 사용할 수 있도록 하는 데이터가 있는 공유 메모리로 끝날 수 있다 (예를 들어, 목적지 메모리/메모리 셀에 대한 데이터의 실제 데이터 복사본으로 끝남).
[0038] 따라서, 본 명세서에 설명된 바와 같이, 다양한 실시예들은 로컬 시스템 버스 아키텍처-애그노스틱 로드(local system bus architecture-agnostic loads)의 직접 마스터링을 가능하게 하고 오프-칩 주변기기(off-chip peripherals)에 의해 시스템 메모리에 작업을 저장하는 프로세서의 캐시-일관성 부착(cache-coherent attachment)을 이용하는 향상된 네트워크 아키텍처(enhanced network architecture)를 제공한다. 이러한 방식으로, 메모리 트랜잭션은 특정 버스 아키텍처에서 분리되며 동일한 수정되지 않은 일관적으로-부착된 로직(the same unmodified coherently-attached logic)(가속기, 네트워크 인터페이스 등의)이 서로 다른 SoC 아키텍처에 인터페이스될 수 있다. 일 실시 예에서, 다양한 실시예들은 네트워크 액세스 지연 경로를 개선하고 하나 또는 그 이상의 드라이버와 운영 체제를 우회하면서 하나 또는 그 이상의 애플리케이션과 하나 또는 그 이상의 네트워크 인터페이스 간에 메모리를 공유하도록 제공한다.
[0039] 향상된 네트워크 아키텍처의 예시된 실시예들의 메커니즘은 오프-칩 가속기(off-chip accelerators)가 칩 상의 시스템 ("SoC ")과 통합될 수 있게 하고, 비슷한 지연 시간과 대역폭을 갖는 동일한 메모리 액세스 데이터 경로(예: 온-칩 주체(on-chip entities)(예: 프로세서, 코프로세서)와 유사한 하드웨어 데이터 경로)를 사용하여 시스템 메모리에 직접 마스터하고 캐시-일관성으로(cache-coherently) 로드 및 저장한다.
[0040] 추가적인 실시 예에서, 본 발명은, 또한 일관성 있게 부착된 포트(coherently attached ports)에 의해 제공되는, 인-메모리 데이터(in-memory data)에 대한 직접 액세스, 인터럽트의 발생(generation of interrupts) 및 CPU와의 스핀록(spinlocks)에 대해 원자적으로 경쟁할 수 있는 능력을 제공한다. 이는 애플리케이션과 일관성있게-부착된 디바이스(coherently-attached device)가 데이터 형식에 일치하는 경우, 분산-수집 데이터 전송(scatter-gather data transfers)에 사용할 운영 체제 장치 드라이버 지원 및 DMA 프로그래밍 가능 하드웨어(DMA programmable hardware)에 대한 요구 조건이 없음을 의미한다. 드라이버 없는 통합(driver-less integration)을 가능하게 하고 제공함으로써, 스레드 상호 제외(a thread mutual exclusion)로 나타나는 프로그래밍 모델 및 애플리케이션 프로그래밍 인터페이스(application programming interface, “API”)가 더욱 단순화되어 컴퓨팅 효율성이 향상된다, 즉 네트워크 I/O는 하드웨어 스레드(a hardware thread)의 특수한 형태로 통합된다.
[0041] 따라서, 본 발명은 다양한 애플리케이션들과 네트워크 인터페이스(들) 사이에서 메모리 버퍼(memory buffers)(예를 들어, "네트워크 버퍼(network buffers)")를 공유하는 네트워크 프레임워크 스택을 제공한다. 일 실시 예에서, 메모리 버퍼는 네트워크 버퍼와 상호 교환 가능하게 사용될 수 있다. 네트워크 버퍼는 운영 체제(“OS”)에 의해 하나 또는 그 이상의 애플리케이션들을 대신하여 할당될 수 있으며 라이브러리(예: 공유 라이브러리)의 제어 하에 제공된다. 일 실시 예에서, 공유 메모리 메커니즘을 통해 설정되는 모든 참여 애플리케이션들 사이의 공유 주소 공간은 입력/출력 ("I/O") 제어를 위해 제공되고 사용될 수 있다 (즉, 포인터의 교환 및 스핀록 핸들링(spinlock handling)).그런 다음, 각 애플리케이션은 애플리케이션 네트워크 버퍼를 포함하는 공통 주소 공간에서 가속기와 공유 액세스를 보호하는 메모리 관리 장치(a memory management unit, “MMU”)를 가질 수 있다.
[0042] 이러한 방식으로, 본 발명은 애플리케이션들이 포인터들과 스핀록들만을 처리함으로써 네트워크를 통해 메모리 내 데이터를 원활하게 교환할 수 있게 하고 일관성 있게 부착된 포트 기술을 사용함으로써 원격 직접 기억 장치 접근(a remote direct memory access, “RDMA”)-스타일 네트워크 통신을 더욱 단순화 하게 할 수 있어 “블랙 박스”내에서 데이터 전달을 위한 전례 없는 지연 시간(예: 현재 RDMA 왕복 지연 시간은 하나의 스위칭 층에서 1.2 마이크로초(microseconds) “usec”인 반면, 일관성 있게 부착된 인터페이스(Coherently attached interfaces)는 이 지연 시간을 600-700 나노초(nanoseconds) “nsec”까지 줄일 수 있다)을 달성할 수 있게 하고 네트워크 미디어가 초고속 버스트를 이용할 수 있도록 한다 (즉, 전체 애플리케이션-레벨 메시지 크기(the whole application- level message size)에 대한 단일 하드웨어-레벨 버스트(a single hardware-level burst)가 이제 가능하다). 네트워크 스택 프레임워크 시스템의 예시된 실시예들은 모든 네트워크 매체 접속 프로토콜(Medium Access Protocols, “MAC”) 또는 링크 층 제어 프로토콜(Link Layer Control protocols, “LLC”)에 불가지론적인 프레임워크이며, 따라서 모든 패킷 또는 회선망 기술과 잠재적으로 통합될 수 있다.
[0043] 본 발명은 클라우드 컴퓨팅에 관해서 상세한 설명들을 포함하지만, 여기서 설명된 그러한 기술적 사상들의 구현은 클라우드 컴퓨팅 환경에만 한정되는 것은 아님을 이해하여야 한다. 오히려, 본 발명의 실시 예들은 지금 알려져 있거나 또는 나중에 개발될 모든 다른 유형의 컴퓨팅 환경과 함께 구현될 수 있다.
[0044] 클라우드 컴퓨팅은, 최소한의 관리 노력 또는 서비스 제공자와의 상호작용으로 빠르게 제공되고 해제될 수 있는, 구성 가능한(configurable) 컴퓨팅 자원들(예를 들어, 네트워크들, 네트워크 대역폭, 서버들, 처리, 메모리, 스토리지, 애플리케이션들, 가상 머신들, 및 서비스들)의 공유 풀에 대한 편리한 주문형(on-demand) 네트워크 액세스를 가능하게 하는 서비스 전달 모델이다. 이 클라우드 모델은 적어도 5가지의 특성(characteristics), 적어도 3가지 서비스 모델(service models), 및 적어도 4가지 배치 모델(deployment models)을 포함할 수 있다.
[0045] 특성들은 다음과 같다:
주문형 셀프-서비스(On-demand self-service): 클라우드 소비자는, 서비스 제공자와의 인적 상호작용을 필요로 하지 않고 필요한 만큼 자동적으로, 서버 시간(server time) 및 네트워크 스토리지 같은 컴퓨팅 용량들을 일방적으로 제공(provision)할 수 있다.
광역 네트워크 액세스(Broad network access): 혼성의 씬 또는 씩 클라이언트 플랫폼들(heterogeneous thin or thick client platforms)(예를 들어, 모바일폰들, 랩탑들, 및 PDA들)에 의한 사용을 장려하는 표준 메커니즘들을 통해 액세스되는 기능들을 네트워크를 통해서 이용할 수 있다.
자원 풀링(Resource pooling): 제공자의 컴퓨팅 자원들은, 각기 다른 물리적 및 가상 자원들을 요구(demand)에 따라 동적으로 할당 및 재할당하는, 멀티-테넌트 모델(a multi-tenant model)을 사용하는 다수의 소비자들에게 서비스할 수 있도록 풀에 넣어둔다(pooled). 소비자는 일반적으로 제공된 자원들의 정확한 위치를 제어할 수 없거나 그에 대한 지식이 없지만 더 높은 추상 수준에서(예를 들어, 국가, 주, 또는 데이터센터) 위치를 명시할 수 있다는 점에서 위치 독립성이 있다.
기민한 탄력성(Rapid elasticity): 용량들(capabilities)이 기민하게 탄력적으로 제공되어 (어떤 경우엔 자동으로) 신속히 규모를 확장할 수도 있고(scale out) 그리고 탄력적으로 해제되어 신속히 규모를 축소할 수도 있다(scale in). 소비자에게 제공할 수 있는 가능성이 종종 무제한이고 언제든지 원하는 수량으로 구매할 수 있는 것처럼 보인다.
측정 가능한 서비스(Measured service): 클라우드 시스템들은 자원 사용을 자동으로 제어하고 최적화하는데, 서비스의 유형(예를 들어, 스토리지, 처리, 대역폭, 및 활성 사용자 계정)에 적절한 추상화 수준에서(at some level of abstraction) 계측 기능을 이용하여서 그렇게 한다. 자원 사용량은 모니터 되고, 제어되고, 그리고 보고될 수 있으며 이로써 이용하는 서비스의 제공자와 사용자 모두에게 투명성을 제공한다.
[0046] 서비스 모델들(Service Models)은 다음과 같다:
소프트웨어 서비스(Software as a Service)(SaaS): 소비자에게 제공되는 서비스는 클라우드 하부구조 상에서 실행되는 제공자의 애플리케이션들을 사용하게 해주는 것이다. 애플리케이션들은 웹 브라우저(예를 들어, 웹기반 이메일) 같은 씬(thin) 클라이언트 인터페이스를 통해 여러 클라이언트 장치들에서 액세스 가능하다. 소비자는 네트워크, 서버들, 운영 체제들, 스토리지, 또는 개별 애플리케이션 능력들을 포함하는 하부 클라우드 하부구조를 관리하거나 제어하지 않는다. 단, 제한된 사용자-특정 애플리케이션 구성 세팅들은 예외로서 가능하다.
플랫폼 서비스(Platform as a Service)(PaaS): 소비자에게 제공되는 서비스는 제공자에 의해 지원되는 프로그래밍 언어들 및 도구들을 이용하여 생성된 소비자-생성 또는 획득 애플리케이션들을 클라우드 하부구조에 배치하게 해주는 것이다. 소비자는 네트워크, 서버들, 운영 체제들, 또는 스토리지를 포함하는 하부 클라우드 하부구조를 관리하거나 제어하지 않는다. 그러나 배치된 애플리케이션들에 대해서 그리고 가능한 경우 애플리케이션 호스팅 환경 구성들에 대해서 제어할 수 있다.
하부구조 서비스(Infrastructure as a Service)(IaaS): 소비자에게 제공되는 서비스는 처리, 스토리지, 네트워크, 및 기타 기본 컴퓨팅 자원들을 제공하여 주는 것이며, 여기서 소비자는 임의의 소프트웨어를 배치 및 실행할 수 있고, 이 소프트웨어에는 운영 체제들과 애플리케이션들이 포함될 수 있다. 소비자는 하부 클라우드 하부구조를 관리하거나 제어하지 않지만, 운영 체제들, 스토리지, 배치된 애플리케이션들, 및 가능한 경우 선택된 네트워킹 컴포넌트들의 제한적인 제어(예를 들어, 호스트 방화벽들)에 대하여 제어할 수 있다.
[0047] 배치 모델들(Deployment Models)은 다음과 같다:
사설 클라우드(Private cloud): 클라우드 하부구조는 오직 한 조직(an organization)을 위해서 운영되고, 그 조직 또는 제3자에 의해 관리될 수 있으며 옥내(on-premises) 또는 옥외(off-premises)에 위치할 수 있다.
커뮤니티 클라우드(Community cloud): 클라우드 하부구조는 여러 조직들에 의해 공유되고 관심사(예를 들어, 선교, 보안 요건, 정책, 및 규정 준수 심사)를 공유하는 특정 커뮤니티를 지원하며, 여러 조직들 또는 제3자에 의해 관리될 수 있으며 옥내(on-premises) 또는 옥외(off-premises)에 위치할 수 있다.
공공 클라우드(Public cloud): 클라우드 하부구조는 일반 대중 또는 대규모 산업 집단에서 이용할 수 있으며 클라우드 서비스를 판매하는 조직이 소유한다.
하이브리드 클라우드(Hybrid cloud): 클라우드 하부구조는 둘 또는 그 이상의 클라우드들(사설, 커뮤니티, 또는 공공)이 혼합된 구성이며, 이들은 고유한 주체들로 있지만 데이터 및 애플리케이션 이식가능성(portability)을 가능하게 해주는 표준화된 또는 소유권 있는 기술(예를 들어, 클라우드들 사이의 부하 균형을 위한 클라우드 버스팅(cloud bursting))에 의해 서로 결합되어 있다
클라우드 컴퓨팅 환경은 상태비보존(statelessness), 낮은 결합(low coupling), 모듈 방식(modularity), 및 의미적 상호운용성(semantic interoperability)에 집중하는 서비스를 지향한다. 클라우드 컴퓨팅의 중심에는 상호 연결된 노드들의 네트워크를 포함하는 하부구조가 있다
[0048] 이제 도 1을 참조하면, 클라우드 컴퓨팅 노드의 예의 개략도가 도시되어 있다. 클라우드 컴퓨팅 노드(10)는 적합한 클라우드 컴퓨팅 노드의 한 예일뿐이며 여기에 설명된 본 발명의 실시예의 기능 또는 사용 범위에 대한 제한을 제시하려는 것은 아니다. 그럼에도 불구하고, 클라우드 컴퓨팅 노드(10)는 구현될 수 있고/있거나 위에서 설명된 기능 모두를 수행할 수 있다.
[0049] 클라우드 컴퓨팅 노드(10)에는, 수많은 다른 범용 또는 특수 목적 컴퓨팅 환경들 또는 구성들과 함께 운영되는, 컴퓨터 시스템/서버(12)가 있다. 컴퓨터 시스템 /서버(12)와 함께 사용하기에 적합할 수 있는 잘 알려진 컴퓨팅 시스템들, 환경들, 및/또는 구성들의 예들은, 개인용 컴퓨터 시스템들, 서버 컴퓨터 시스템들, 씬 클라이언트들, 씩 클라이언트들, 핸드헬드 또는 랩탑 디바이스들, 멀티-프로세서 시스템들, 마이크로프로세서-기반 시스템들, 셋톱 박스들, 프로그래밍 가능한 소비자 전자 제품들, 네트워크 PC들, 미니 컴퓨터 시스템들, 메인프레임 컴퓨터 시스템들, 및 상기 시스템들 또는 디바이스들 중 하나를 포함하는 분산 클라우드 컴퓨팅 환경들, 등을 포함하나, 이에 국한하는 것은 아니다.
[0050] 컴퓨터 시스템/서버(12)는, 컴퓨터 시스템에 의해 실행되는, 프로그램 모듈들과 같은, 컴퓨터 시스템-실행 가능한 명령들의 일반적인 컨텍스트로 기술될 수 있다. 일반적으로 프로그램 모듈들은 특정 작업들을 수행하거나 또는 특정 추상 데이터 유형들을 구현하는 루틴들, 프로그램들, 객체들, 컴포넌트들, 로직, 데이터 구조들 등을 포함할 수 있다. 컴퓨터 시스템/서버(12)는 통신 네트워크을 통해 링크되는 원격 처리 디바이스들에 의해 작업들이 수행되는 분산 클라우드 컴퓨팅 환경에서 실시될 수 있다. 분산 클라우드 컴퓨팅 환경에서, 프로그램 모듈들은 메모리 스토리지 디바이스들을 포함하는 로컬 및 원격 컴퓨터 시스템 스토리지 매체 모두에 위치할 수 있다.
[0051] 도 1에서 도시된 바와 같이, 클라우드 컴퓨팅 노드(10)에서 컴퓨터 시스템/서버(12)는 범용 컴퓨터 디바이스의 형태로 도시된다. 컴퓨터 시스템/서버(12)의 컴포넌트들은 하나 또는 그 이상의 프로세서들 또는 처리 유닛들(16), 시스템 메모리(28), 및 시스템 메모리(28)를 포함하는 다양한 시스템 컴포넌트들을 프로세서(16)에 연결하는 버스(18)를 포함할 수 있지만, 이에 국한되지 않는다.
[0052] 버스(18)는, 다양한 버스 아키텍처들 중 하나를 사용하는, 메모리 버스 또는 메모리 컨트롤러, 주변 버스, 가속 그래픽 포트, 및 프로세서 또는 로컬 버스를 포함하는, 버스 구조들의 여러 유형들 중 하나 또는 그 이상을 나타낸다. 예를 들어, 그러한 아키텍처들은 ISA(include Industry Standard Architecture) 버스, MCA(Micro Channel Architecture) 버스, EISA(Enhanced ISA) 버스, VESA(Video Electronics Standards Association) 로컬 버스 및 PCI(Peripheral Component Interconnect) 버스를 포함하나, 이에 국한되지는 않는다.
[0053] 컴퓨터 시스템/서버(12)는 일반적으로 다양한 컴퓨터 시스템 판독 가능한 매체를 포함한다. 그러한 매체는 컴퓨터 시스템/서버(12)에 의해 액세스 가능한 모든 이용 가능한 매체일 수 있으며 , 휘발성 및 비휘발성 매체, 착탈식 및 비-착탈식 매체를 모두 포함한다.
[0054] 시스템 메모리(28)은, 예컨대 랜덤 액세스 메모리(RAM)(30) 및/또는 캐시 메모리(32)와 같은, 휘발성 메모리의 형태의 컴퓨터 시스템 판독 가능한 매체를 포함할 수 있다. 컴퓨터 시스템/서버(12)는 또한, 다른 착탈식/비-착탈식, 휘발성/비휘발성 컴퓨터 시스템 스토리지 매체를 포함할 수 있다. 단지 예로서, 스토리지 시스템(34)이 비착탈식, 비휘발성 자기 매체(도시되지 않고 일반적으로 "하드 드라이브"라고 함)로부터 읽고 쓰기 위해 제공될 수 있다. 도시되지는 않았지만, 착탈가능 비휘발성 자기 디스크(예: "플로피 디스크") 에서 읽고 쓰기 위한 자기 디스크 드라이브 및, CD-ROM, DVD-ROM 또는 기타 광학 매체와 같은, 착탈가능 비휘발성 광학 디스크에서 읽거나 쓰기 위한 광학 디스크 드라이브가 제공될 수 있다. 그러한 경우에, 각각은 하나 또는 그 이상의 데이터 매체 인터페이스들에 의해 버스(18)에 연결될 수 있다. 아래에서 추가로 도시되고 설명되는 바와 같이, 메모리(28)는 본 발명의 실시예들의 기능들을 수행하도록 구성된 프로그램 모듈들의 세트(예를 들어, 적어도 하나)를 갖는 적어도 하나의 프로그램 제품을 포함할 수 있다.
[0055] 프로그램 모듈들의 (적어도 하나)세트(42)를 갖는, 프로그램/유틸리티(40)는, 예를 들어, 메모리(28)에 저장될 수 있지만, 이에 국한되는 것은 아니다. 운영 체제, 하나 또는 그 이상의 애플리케이션 프로그램들, 기타 프로그램 모듈들, 및 프로그램 데이터 또는 이들의 조합은 네트워킹 환경의 구현을 포함할 수 있다. 프로그램 모듈들(42)은 일반적으로 본 명세서에 기술된 바와 같은 본 발명의 실시예의 기능들 및/또는 방법들을 수행한다.
[0056] 컴퓨터 시스템/서버(12)는 키보드, 포인팅 디바이스, 디스플레이(24) 등과 같은, 하나 또는 그 이상의 외부 디바이스들(14); 사용자가 컴퓨터 시스템/서버(12)와 상호작용할 수 있게 하는 하나 또는 그 이상의 디바이스들; 및/또는 컴퓨터 시스템/서버(12)가 하나 또는 그 이상의 다른 컴퓨팅 디바이스들과 통신할 수 있게 하는 모든 디바이스들(예를 들어, 네트워크 카드, 모뎀 등)과 통신 할 수 있다. 그러한 통신은 입/출력(I/O) 인터페이스(22)를 통해 발생할 수 있다. 또한, 컴퓨터 시스템/서버(12)는 근거리 통신망(LAN), 일반 광역 통신망(WAN), 및/또는 네트워크 어댑터(20)를 통한 공중 네트워크(예를 들어, 인터넷)와 같은, 하나 또는 그 이상의 네트워크들과 통신할 수 있다. 도시된 바와 같이, 네트워크 어댑터(20)는 버스(18)를 통해 클라우드 컴퓨팅 노드(10)의 다른 컴포넌트들과 통신한다. 도시되지는 않았지만, 다른 하드웨어 및/또는 소프트웨어 컴포넌트들이 컴퓨터 시스템/서버(12)와 함께 사용될 수 있음을 이해해야 한다. 이들의 예들에는: 마이크로코드, 디바이스 드라이버들, 리던던트 처리 유닛들, 외부 디스크 드라이브 어레이들, RAID 시스템들, 테이프 드라이브들 및 데이터 아카이벌 스토리지 시스템들이 포함되지만 이에 국한되지는 않는다.
[0057] 본 발명의 맥락에서, 그리고 당업자가 이해할 수 있는 바와 같이, 도 1에 도시된 다양한 컴포넌트들은 이동하는 차량에 위치될 수 있다. 예를 들어, 예시된 실시예들의 메커니즘과 관련된 처리 및 데이터 저장 기능들 중 일부는 로컬 처리 컴포넌트들을 통해 국부적으로 구현될 수 있지만, 동일 컴포넌트들은 네트워크를 통해 원격에 위치한 분산 컴퓨팅 데이터 처리 및 저장 컴포넌트들에 연결되어 다양한 본 발명의 목적을 달성할 수 있다. 다시 말하지만, 본 기술 분야의 통상의 지식을 가진 자가 이해하는 바와 같이, 본 예시는 다양한 발명의 실시 예들을 집합적으로 달성하는 분산 컴퓨팅 컴포넌트들의 전체 연결된 네트워크일 수 있는 것의 서브세트만을 전달하도록 의도된 것이다.
[0058] 이제 도 2를 참조하면, 예시적인 클라우드 컴퓨팅 환경(50)이 도시된다. 도시된 바와 같이, 클라우드 컴퓨팅 환경(50)은 예를 들어 개인 휴대 정보 단말기(PDA) 또는 휴대폰(54A), 데스크탑 컴퓨터(54B), 랩탑 컴퓨터(54C), 및/또는 자동차용 컴퓨터 시스템(54N)과 통신할 수 있는 것과 같이, 클라우드 소비자가 사용하는 로컬 컴퓨팅 디바이스가 하나 또는 그 이상의 클라우드 컴퓨팅 노드들(52)을 포함한다. 노드들(52)은 서로 통신할 수 있다. 이들은 여기에 기술된 바와 같은 사설, 커뮤니티, 공공, 또는 하이브리드 클라우드들 또는 이들의 조합 등의 하나 또는 그 이상의 네트워크들에서 물리적으로 또는 가상으로 그룹화될 수 있다(도시되지 않음). 이것은 클라우드 소비자가 로컬 컴퓨팅 장치 상에 자원들을 유지할 필요가 없게 클라우드 컴퓨팅 환경(50)이 하부구조, 플랫폼들 및/또는 소프트웨어를 서비스로서 제공할 수 있게 해준다. 도 2에 도시된 컴퓨팅 장치들(54A-N)의 유형들은 단지 예시의 목적으로 기술한 것이며 컴퓨팅 노드들(52)과 클라우드 컴퓨팅 환경(50)은 모든 유형의 네트워크 및/또는 네트워크 주소지정가능 연결을 통해서 (예를 들어, 웹 브라우저를 사용하여) 모든 유형의 컴퓨터화된 디바이스와 통신할 수 있다는 것을 이해해야 한다.
[0059] 이제 도 3을 참조하면, 클라우드 컴퓨팅 환경(50) (도 2)에 의해 제공되는 일 세트의 기능별 추상화 층들이 도시된다. 도 3에 도시된 컴포넌트들, 층들, 및 기능들은 단지 예시의 목적이며 본 발명의 바람직한 실시 예들은 이것에 한정되지 않는다는 것을 미리 이해해야 한다. 도시된 바와 같이, 다음의 층들과 그에 대응하는 기능들이 제공된다:
[0060] 디바이스 층(55)은 클라우드 컴퓨팅 환경(50)에서 다양한 작업들을 수행하기 위해 전자 장치들, 센서들, 액추에이터들 및 기타 객체들에 내장된 및/또는 독립된 물리적 및/또는 가상 디바이스들을 포함한다. 디바이스 층(55)의 디바이스들 각각은 네트워킹 기능을 다른 기능적 추상화 층들에 통합하여 상기 디바이스들로부터 획득된 정보가 다른 기능적 추상화 층들에 제공될 수 있도록 하거나, 및/또는 다른 기능적 추상화 층들로부터의 정보가 상기 디바이스들에 제공될 수 있게 한다. 일 실시예에서, 디바이스 층(55)에 포함되는 다양한 디바이스들은 "사물 인터넷"(IoT)이라고 집합적으로 알려진 주체들의 네트워크를 통합할 수 있다. 그러한 주체들의 네트워크는, 당업자가 인식하는 바와 같이, 매우 다양한 목적들을 달성하기 위해 데이터의 상호 통신, 수집 및 보급을 가능하게 한다.
[0061] 도시된 디바이스 층(55)은, 도시된 바와 같이, 센서(52), 액추에이터(53), 통합 프로세싱, 센서 및 네트워킹 전자 장치를 갖는 "학습" 온도 조절기(56), 카메라(57), 제어 가능한 가정용 콘센트/리셉터클(58), 및 제어 가능한 전기 스위치(59)를 포함한다. 다른 가능한 디바이스들은 다양한 추가 센서 디바이스들, 네트워킹 디바이스들, 전자 디바이스들(예: 원격 제어 디바이스), 추가 액추에이터 디바이스들, 예를 들어 냉장고 또는 세탁기/건조기와 같은 소위 "스마트" 기기들, 및 다양한 다른 가능한 상호 연결된 객체들을 포함할 수 있지만, 이들에 국한되지는 않는다.
[0062] 하드웨어 및 소프트웨어 층(60)은 하드웨어 및 소프트웨어 컴포넌트들을 포함한다. 하드웨어 컴포넌트들의 예들에는: 메인프레임들(61); RISC(Reduced Instruction Set Computer) 아키텍처 기반 서버들(62); 서버들(63); 블레이드 서버들(64); 스토리지 디바이스들(65); 그리고 네트워크 및 네트워킹 컴포넌트들(66)이 포함된다. 일부 실시 예들에서, 소프트웨어 컴포넌트들은 네트워크 애플리케이션 서버 소프트웨어(67) 및 데이터베이스 소프트웨어(68)를 포함한다.
[0063] 가상화 층(70)은 추상화 층을 제공하며 이로부터 다음의 가상 주체들의 예들이 제공될 수 있다: 가상 서버들(71); 가상 스토리지(72); 가상 사설 네트워크를 포함하는, 가상 네트워크들(73); 가상 애플리케이션들 및 운영 체제들(74); 및 가상 클라이언트들(75).
[0064] 한 예에서, 관리 층(80)은 아래에 기술하는 기능들을 제공한다. 자원 제공(Resource provisioning)(81)은 클라우드 컴퓨팅 환경 내에서 작업들을 수행하는 데 이용되는 컴퓨팅 자원들 및 기타 자원들의 동적 조달을 제공한다. 계측 및 가격 책정(Metering and Pricing)(82)은 자원들이 클라우드 컴퓨팅 환경 내에서 이용될 때 비용 추적, 및 이 자원들의 소비에 대한 요금 청구 또는 송장을 제공한다. 한 예에서, 이 자원들은 애플리케이션 소프트웨어 라이센스를 포함할 수 있다. 보안(Security)은 데이터 및 기타 자원들에 대한 보호뿐 아니라 클라우드 소비자들과 작업들에 대한 신원 확인을 제공한다. 사용자 포털(User portal)(83)은 소비자들 및 시스템 관리자들에게 클라우드 컴퓨팅 환경에 대한 액세스를 제공한다. 서비스 수준 관리(Service level management)(84)는 요구되는 서비스 수준이 충족되도록 클라우드 컴퓨팅 자원 할당 및 관리를 제공한다. 서비스 수준 협약서(SLA) 기획 및 충족(planning and fulfillment)(85)은 SLA에 부합하는 예상되는 미래 요건에 맞는 클라우드 컴퓨팅 자원들의 사전-배치(pre-arrangement) 및 조달(procurement)을 제공한다.
[0065] 워크로드 층(90)은 클라우드 컴퓨팅 환경이 이용될 수 있는 기능들의 예들을 제공한다. 이 층에서 제공될 수 있는 워크로드들과 기능들의 예들은 다음을 포함한: 맵핑 및 네비게이션(91); 소프트웨어 개발 및 라이프사이클 관리(92); 가상 교실 교육 전달(93); 데이터 분석 처리(94); 트랜잭션 처리(95); 및 본 발명의 예시된 실시예들의 맥락에서, 네트워크 스택 프레임워크에서 일관되게 부착된 인터페이스들을 이용하기 위한 다양한 워크로드들 및 기능들(96). 또한, 네트워크 스택 프레임워크에서 일관성 있게 연결된 인터페이스를 이용하기 위한 워크로드들 및 기능들(96)은 데이터 분석과 같은 작업들(operations)을 포함할 수 있다. 당업자는 본 발명의 예시된 실시예들의 다양한 목적을 달성하기 위해 네트워크 스택 프레임워크에서 일관성 있게 연결된 인터페이스들을 이용하기 위한 워크로드들 및 기능들(96)이 하드웨어 및 소프트웨어(60), 가상화(70), 관리(80), 및 다른 워크로드들(90)(예를 들어, 데이터 분석 처리(94)와 같은)의 부분들과 같은 다양한 추상화 층의 다른 부분들과 함께 협업(work)할 수도 있음을 이해할 것이다.
[0066] 이제 도 4를 참조하면, 도시된 실시예들의 다양한 메커니즘에 따른 예시적인 기능 컴포넌트들(400)을 도시한 블록도가 도시되어 있다. 도 4는 네트워크 스택 프레임워크에서 일관성 있게 부착된 인터페이스들(coherently attached interfaces in a network stack framework)을 이용하기 위한 시스템(400)을 도시한다. 도시된 바와 같이, 많은 기능 브록들은 또한 도 1-3에서 앞서 설명된 바와 같은 동일 의미에서 기능의 “모듈들” 또는 “컴포넌트들”로 간주될 수 있다. 전술한 바와 같이, 모듈/컴포넌트 블록들(400)은 또한 본 발명에 따른 지능형 인과 지식 추출(intelligent causal knowledge extraction)을 위한 시스템의 다양한 하드웨어 및 소프트웨어 컴포넌트들에 통합될 수 있다. 많은 기능 블록들(400)은 분산 컴퓨팅 컴포넌트들(distributed computing components), 사용자 디바이스들, 또는 다른 곳에서 다양한 컴포넌트들에 대한 백그라운드 프로세스로서 실행될 수 있다.
[0067] 도 4에 도시된 바와 같이, 네트워크 스택 공유 서비스(410)이 도시되어 있으며, 본 발명의 다양한 실시 예에 따라 다양한 계산, 데이터 처리 및 기타 기능을 수행하기 위해 도 1의 프로세싱 유닛(16)(“프로세서”) 및 메모리(28)일수도 있는 프로세싱 유닛(420)(“프로세서”) 및 메모리(430)을 통합한다. 프로세싱 유닛(420)은 메모리(430)과 통신할 수 있다. 네트워크 스택 공유 서비스(410)은 도 1의 컴퓨터 시스템/서버(12)에 의해 제공될 수 있다.
[0068] 당업계에서 기본적인 기술 중 하나로 이해되듯이, 네트워크 스택 공유 서비스(410)에서의 다양한 기능 유닛들의 설명은 예시적인 목적을 위한 것이며, 기능 유닛들은 네트워크 스택 공유 서비스(410)내에 위치할 수도 있고 분산 컴퓨팅 컴포넌트들 내 및/또는 그 사이의 다른 곳에 위치할 수도 있다.
[0069] 네트워크 스택 공유 서비스(410)은 공유 컴포넌트(440), 애플리케이션 버퍼 컴포넌트(application buffer component)(450), 원형 버퍼 컴포넌트(circular buffer component)(460), 큐잉(queuing) 및 풀링(pooling) 컴포넌트(470)을 포함할 수 있다. 따라서, 네트워크 스택 공유 서비스(410)는 드라이버들과 OS를 완전히 우회하여(bypassing) 시스템 메모리에 네트워크 인터페이스들을 일관성 있게 부착(coherent attachment of network interfaces)할 수 있게 한다.
[0070] 일 실시예에서, 단지 예로서, 공유 컴포넌트(440)(및/또는 애플리케이션 버퍼 컴포넌트, 원형 버퍼 컴포넌트(460), 큐잉 및 풀링 컴포넌트(470), 또는 이들의 조합과 관련하여)은 애플리케이션 버퍼, 원형 버퍼, 큐잉 및 풀링 작업을 사용하여 하나 또는 그 이상의 드라이버들 및 운영 체제를 우회하면서 하나 또는 그 이상의 애플리케이션들과 네트워크 인터페이스 사이에 일관성 있게 부착된 복수의 네트워크 버퍼들을 공유할 수 있다.
[0071] 공유 컴포넌트(440)은 공유 라이브러리에 의해 복수의 네트워크 버퍼들을 제어하는 공유 라이브러리(도 5A-5B의 공유 라이브러리(504) 참조)를 포함 및/또는 이와 연관될 수 있다.
[0072] 공유 컴포넌트(440)은 네트워크 인터페이스를 사용하여 하나 또는 그 이상의 애플리케이션들 간에 복수의 네트워크 버퍼들의 하나 또는 그 이상의 주소 공간을 공유할 수 있으며, 상기 복수의 네트워크 버퍼들은 입/출력(I/O) 제어에 사용된다.
[0073] 애플리케이션 버퍼 구성 컴포넌트(450)은 일관성 있게 부착된 네트워크 인터페이스와 다수의 네트워크 버퍼들의 하나 또는 그 이상의 애플리케이션 가상 주소 공간들을 안전하게 공유할 수 있다 (도 5의 일관성 있게 부착된 네트워크 인터페이스(512) 참조). 원형 버퍼 컴포넌트(460)은 메모리 포인터들을 하나 또는 그 이상의 일관성 있게 부착된 디바이스들(coherently attached devices)과 교환할 수 있다.
[0074] 큐잉 및 풀링 컴포넌트(470)은 네트워크 버퍼 전송, 수신 및 조작을 위한 복수의 네트워크 버퍼들에 대해 큐잉 및 풀링 작업(operation)을 실행할 수 있다. 큐잉 및 풀링 컴포넌트(470)은 큐잉 및 풀링 작업을 실행하기 위해 하나 또는 그 이상의 큐들(queues) 및 하나 또는 그 이상의 풀들(pools)로부터 복수의 네트워크 버퍼들 중 하나를 이동, 할당 또는 재할당할 수 있다. 즉, 큐잉 및 풀링 컴포넌트(470)은 네트워크 버퍼 전송, 수신, 조작을 제공할 수 있으며 서로 다른 애플리케이션 가상 주소 공간들에 속하는 버퍼를 일관성 도메인(a coherent domain)의 네트워크 인터페이스와 공유할 수 있다.
[0075] 공유 컴포넌트(440)은 상기 복수의 네트워크 버퍼들을 이용하여 공유 메모리 영역 및 사설 메모리 영역을 설정할 수 있다.
[0076] 이제 도 5a-5b를 참조하면, 일관성 있게 부착된 인터페이스들을 이용하기 위한 네트워크 스택 프레임워크(500, 515)의 개략도를 도시하는 다이어그램이다. 도시된 바와 같이, 많은 기능 블록들은 또한 도 1-4에서 앞서 설명된 것과 동일 의미에서 기능의 "모듈들" 또는 "컴포넌트들"로 간주될 수 있다. 또한, 도 1-4의 작업들 및 단계들 중 하나 또는 그 이상은 도 5a-5b의 하나 또는 그 이상의 작업들 또는 동작들에 포함될 수 있다. 본 명세서에 기술된 다른 실시예들에서 사용되는 유사한 엘리먼트들(elements), 컴포넌트들(components), 모듈들(modules), 서비스들(services), 애플리케이션들(applications) 및/또는 기능들(functions)에 대한 반복적인 설명은 간결함을 위해 생략된다.
[0077] 도시된 바와 같이, 네트워크 스택 프레임워크(500)은 하나 또는 그 이상의 애플리케이션들을 포함하거나 연관된다(예: 앱 1 또는 “애플리케이션(502A)” 및 앱 N 또는 “애플리케이션 N”). 또한, 하나 또는 그 이상의 애플리케이션들(502A-502N)은 공유 라이브러리(504)와 통신할 수 있다. 네트워크 스택 프레임워크(500)은 또한, 예를 들어, 네트워크 버퍼들(510A-510C)와 같은 하나 또는 그 이상의 네트워크 버퍼들을 포함할 수 있다. 일 실시 예에서, 네트워크 버퍼들(510A-510C)은 공유 및/또는 "사설(private)"로서 제한될 수 있다. 예를 들어, 네트워크 버퍼(510A)는 공유 네트워크 버퍼일 수 있는 반면 네트워크 버퍼(510B) 및 (510C)는 사설 네트워크 버퍼(private network buffers)일 수 있다. 네트워크 버퍼(510A-510C)는 일관성 있게 부착된 네트워크 인터페이스(512)와 통신/연관될 수 있다. 따라서, 네트워크 버퍼들(510A-510C)은 애플리케이션 버퍼, 원형 버퍼(도 6A-6B 참조)와 큐잉 및 풀링 작업(도 6A-6B 참조)을 사용하여 하나 또는 그 이상의 드라이버들 및 운영 체제를 우회하면서 하나 또는 그 이상의 애플리케이션들(예: 애플리케이션 (502A-502N))과 네트워크 인터페이스(예: 일관성 있게 부착된 네트워크 인터페이스(512) 사이에 일관성 있게 부착될 수 있다.
[0078] 일 실시 예에서, 단지 예로서, 네트워크 버퍼들(510A-510C)을 위한 주소 공간들의 배열은, 예를 들어, 애플리케이션들(502A-502N)과 같은 N개의 예시적인 애플리케이션들에 대해 도시된다. 공유 라이브러리(504)는 공유 메모리(예: 네트워크 버퍼(510A)에서 애플리케이션에 대한 액세스 공유를 위한 “APP_SHARED”) 및 사설 영역 (예: 네트워크 버퍼(510B-510C)에서 애플리케이션에 대한 개인 액세스를 제공하기 위한 “APP_PRIVATE”)에 대한 공통 영역을 설정할 수 있다. 또한, 본 명세서에 기술된 바와 같이, 네트워크 버퍼 스택을 구성하는 다양한 구성들은 또한 사용되는 주소 공간을 참조할 것이고, 일관성 있게 부착된 네트워크 인터페이스(들)(512)는 예를 들어 PCI PASID(peripheral component interface, “PCI”) 프로세스 어드레스 스페이스 식별자(process address space identifier, “PASID”)등과 같은 하드웨어 레벨 지원을 이용함으로써 별개의 애플리케이션 주소 공간과 동시에 연관될 수 있다.
[0079] 일 실시 예에서, 하나 또는 그 이상의 원격 상대방들과의 연결 설정의 일부로서, 애플리케이션(예: 사용자 애플리케이션일 수 있는 애플리케이션(502A-502N))은, 사설 영역(예: 네트워크 버퍼(510B-510C)에서 애플리케이션에 대한 개인 액세스를 제공하기 위한 “APP_PRIVIATE”)에 상주하는, 통신을 위한 다수의 연관된 네트워크 버퍼들을 예약할 수 있다. 각 애플리케이션의 맥락에서, 네트워크 버퍼(예: 네트워크 버퍼(510A-510C) 중 하나)는 특정 시점에 각각의 애플리케이션에 대해 공유 라이브러리(504)에 의해 별도로 유지될 수 있는 다음 6가지 구성들(constructs) 중 하나에 대해서만 속할 수 있다. 또한, 본 명세서에 기술된 바와 같이, 큐들 및 풀들 각각은 설명된 큐들 및 풀들 각각의 다양한 기능들을 실행하고 수행하기 위해 도 6a-6b의 원형 버퍼(620A-620N)를 사용할 수 있다.
[0080] 제1 구성 또는 "제1 풀(first pool)"에서 글로벌 소프트웨어(global software)("s/w") 프리 풀(free pool)(예: 기본 상태)은 모든 애플리케이션들에 걸쳐 모든 연결들을 위한 공통 풀일 수 있으며 모든 네트워크 버퍼들은 동작(action)이 수행될 때까지 초기화 동안 여기에 속한다. 이들 모든 네트워크 버퍼들에 대한 포인터들은 네트워크 버퍼(510A)의 "APP_SHARED" 영역에서 공유 라이브러리(504)에 의해 유지되며, 활성 어플리케이션별로 분류되고 네트워크 버퍼 포인터들만 포함한다.
[0081] 제2 구성 또는 "제2 풀(second pool)"에서, 글로벌 하드웨어("H/w") 프리 풀은 사전에 이 글로벌 하드웨어 프리 풀로 푸시되는 다수의 프리 네트워크 버퍼일 수 있으며, 프리 네트워크 버퍼는 글로벌 소프트웨어("s/w") 프리 풀로부터 이동될 수 있다. 각 애플리케이션은 이 풀(예: 글로벌 소프트웨어("s/w") 프리 풀)에 버퍼를 제공할 수 있으며, 네트워크 버퍼가 데이터 수신에 사용되므로 항상 글로벌 소프트웨어("s/w")의 프리 풀을 보충해야 한다. 주어진 애플리케이션에 대해 글로벌 소프트웨어("s/w") 프리 풀이 비어있으면, 글로벌 소프트웨어("s/w") 프리 풀이 원격 노드들로부터 해당 애플리션으로 향한 네트워크 버퍼들의 수락을 중지한다. 이 글로벌 소프트웨어("s/w") 프리 풀에 대한 포인터들은 네트워크 버퍼(510A의) "APP_SHARED" 영역에 상주하고 네트워크 버퍼 포인터들만 포함한다.
[0082] 제3 구성 또는 "제3 풀(third pool)"에서, 프로세싱 풀(들)은 로컬 프로세서(local processors), 그래픽 처리 장치(graphics processing units, "GPUs") 및 가속기(accelerators) 등에 의해 능동적으로 수정되는 네트워크 버퍼들을 포함할 수 있으며, 이는 “애플리케이션 풀 당”으로 가비지 수집(garbage collection) 목적으로 유지 관리된다. 상기 네트워크 버퍼들이 반환되지 않는 경우, 상기 네트워크 버퍼들은 소유자 애플리케이션 종료 시 공유 라이브러리(504)에 의해 수집되는 가비지이다. 상기 프로세싱 풀(들)은 네트워크 버퍼(510A)의 "APP_SHARED" 영역에 상주할 수 있으며 네트워크 버퍼 포인터들만을 포함한다.
[0083] 제3 구성 또는 "제3 큐"에서, 수신 큐(들)(a receive queue(s))은 통신이 설정된 원격 호스트로부터 전송된 콘텐츠로 업데이트되는 네트워크 버퍼들을 포함할 수 있는데, 여기서 하나의 수신 큐는 원격 연결 당 네트워크 버퍼(510A)의 "APP_SHARED" 영역에서 생성된다(예를 들어, 버퍼 포인터들만 호스트한다). 수신 큐(들)은 선입선출(first-in-first-out, “FIFO”) 큐일 수 있다.
[0084] 제4 구성 또는 "제4 큐"에서, 글로벌 전송 큐(a global send queue)는 전송용으로 표시된 네트워크 버퍼들을 포함할 수 있고, 글로벌 전송 큐는 하드웨어가 모든 네트워크 버퍼들에 액세스하고 전송을 수행할 수 있도록 모든 애플리케이션들에 걸쳐 모든 연결들 간에 공유된다 (예를 들어, 글로벌 전송 큐는 네트워크 버퍼 포인터들만을 호스트한다). 글로벌 전송 큐는 포인터들을 포함하는 FIFO 큐이고 네트워크 버퍼(510A)의 "APP_SHARED" 영역에 있다.
[0085] 제5 구성 또는 "제5 큐"에서, 전송된 큐는 전송이 완료된 네트워크 버퍼들을 포함할 수 있으며 이 큐를 통해 소유자 애플리케이션으로 다시 반환될 수 있다. 상기 전송된 큐(들)는 (보호된 네트워크 버퍼 공간인) 네트워크 버퍼(510A)의 "APP_SHARED" 영역에 상주하는 포인터들을 갖는 FIFO 큐일 수 있다.
[0086] 추가적인 실시 예에서, 도 5b에 도시된 바와 같이, 모든 큐들 및 풀들은, 예를 들어, 네트워크 버퍼(510A)의 "APP_SHARED" 영역에서 유지될 수 있고 각 애플리케이션 주소 공간(네트워크 버퍼(510B-510C)의 “APP_PRIVATE” 영역의)에 상주하는 다양한 애플리케이션 버퍼들(예: APP 1 버퍼 및 APPN 버퍼)을 가리키는 가상 주소 포인터들을 포함할 수 있다.
[0087] 상기 애플리케이션 버퍼들(예: APP 1 버퍼들 및 APPN 버퍼들)은 하나 또는 그 이상의 애플리케이션 프로그래밍 인터페이스(“API”) 호출들 및/또는 하드웨어 이벤트들에 대한 응답으로 다양한 풀들과 큐들(위에서 설명한 바와 같이) 간에 전송/이동될 수 있다. 즉, 애플리케이션들은 네트워크 버퍼들을 글로벌 S/w 프리 풀로부터 그들의 프로세싱 풀로 이동할 수 있다. 애플리케이션 프로세싱 풀에 속하는 각 네트워크 버퍼는 소유자 애플리케이션에 의해 글로벌 전송 큐로 이동될 수 있다. 애플리케이션은 하나 또는 그 이상의 네트워크 버퍼들을 프로세싱 풀로 다시 전송/이동함으로써 애플리케이션의 전송된 큐로부터 하나 또는 그 이상의 네트워크 버퍼들을 재사용할 수 있다. 상기 전송된 큐는 각 애플리케이션에 대해 고정된 크기를 가질 수 있으므로 상기 전송된 큐가 해당 애플리케이션을 무시한다면, 상기 전송된 큐가 가득 찬 경우에, 상기 전송된 큐는 버퍼를 글로벌 S/w 프리 풀로 반환하기 시작할 수 있다. 수신 큐 내의 모든 네트워크 버퍼는 공유 라이브러리(504)에 의해 읽혀지면 프로세싱 풀로 제거될 수 있다. 수신 큐로 반환되는 모든 네트워크 버퍼에 대해, 공유 라이브러리(504)는 하드웨어가 원격 호스트로부터 데이터를 계속 수신할 수 있도록 네트워크 버퍼를 글로벌 S/w 프리 풀에서 글로벌 H/w 프리 풀로 이동한다.
[0088] 추가적인 실시 예에서, 네트워크 어드레싱 및 논리적 연결(즉, 로컬 호스트에서 실행되는 로컬 애플리케이션과 원격 호스트에서 실행되는 원격 애플리케이션 사이에 설정된 통신)을 위해 공유 라이브러리(504)(소프트웨어 라이브러리일 수 있음)는 로컬 대 원격 애플리케이션의 모든 활성 연결을 갖는 연결 스택을 유지한다. 커넥션 튜플들(Connection tuples)(즉, 로컬 호스트에서 실행되는 로컬 애플리케이션과 원격 호스트에서 실행되는 원격 애플리케이션 간의 양방향 통신을 설정하기 위해 필요한 모든 라우팅 및 식별자 정보를 보유하는 튜플들)은 고정된 크기일 수 있으며, 저장되는 전용 스택에서 오프셋 역할도 하는 고유한 식별자로 액세스할 수 있다. 각 연결 튜플은 1) 목적지 연결 식별자 ("ID") 및 네트워크 식별자 (연결 설정 중에 획득할 수 있고 기본 네트워크 아키텍처/기술에 따라 다름), 2) 다양한 큐들에 액세스하기 위한 로컬 식별자들, 3) 커넥션 튜플이 액세스할 수 있는 다양한 큐들에 대한 인증 자격 증명들,및/또는 4)네트워크 버퍼가 애플리케이션에 전달될 수 있도록 하는 내부 포트 정보를 포함할 수 있다.
[0089] 도 6a-6b는 컴퓨팅 환경에서 네트워크 스택 프레임워크에서 일관성 있게 부착된 인터페이스들을 이용하기 위한 원형 버퍼의 다이어그램들(600, 615)이다. 도시된 바와 같이, 많은 기능 블록들은 또한 도 1-5a-5b에서 앞서 설명한 바와 같은 설명적인 의미에서, 기능의 "모듈들" 또는 "컴포넌트들"로 간주될 수 있다. 또한, 도 1-5a-5b의 작업들 및 단계들 중 하나 또는 그 이상은 도 6a-6b의 하나 또는 그 이상의 작업들 또는 동작들에도 포함될 수 있다. 본 명세서에 기술된 다른 실시예들에서 사용되는 유사한 엘리먼트들, 컴포넌트들, 모듈들, 서비스들, 애플리케이션들 및/또는 기능들에 대한 반복적인 설명은 간결함을 위해 생략된다.
[0090] 도시된 바와 같이, 시스템 메모리에 상주할 수 있는 원형 버퍼(620) (예: 도 6a의 원형 버퍼(620) 및 도 6b의 원형 버퍼(620-620N))가 도시되어 있다. 일 실시 예에서, 스핀록들(spinlocks)에 대해 원자적으로 경쟁하는 하드웨어 컴포넌트의 능력이 주어지면, 하드웨어-소프트웨어 코-디자인(a hardware-software co-design)은 원형 버퍼(620)와의 원형 버퍼 통신(circular buffer communication)을 위해 사용될 수 있다.
[0091] 일 실시 예에서, 원형 버퍼(620)은 프로세서의 동작(behavior)(예: CPU들이 경쟁하는 방법)과 유사한 동작들(operations)을 모방하거나(resemble) /반사(mirror)할 수 있지만, 전체 하드웨어 스레드(all-hardware thread)는 네트워크 인터페이스(예: 네트워크 인터페이스 하드웨어(630))에 의해 구현될 수 있고 시스템 메모리에서 네트워크 인터페이스(예: 네트워크 인터페이스 하드웨어(630))로/로부터 데이터를 "푸시(push)/풀(pull)"하는 데 필요할 수 있다. CPU 스레드(CPU thread)는 애플리케이션에 대한 전달을 위해 필요할 수도 있으며 라이브러리(610)에 의해 생성된다(spawned). 예를 들어, 특정 원자 커맨드(예: 레지스터에서 비트(bits)를 원자적으로 어소트(assert) 및 디어소트(de-assert)할 수 있는 특정 프로세서 아키텍처의 원자 빌트인 커맨드들(atomic built-in commands))는 원형 버퍼(620)에 대한 공유 액세스를 구현하는 데 사용될 수 있다. 각 원형 버퍼 인스턴스(instance)는 원형 버퍼의 어떤 필드들이 유효한 엔트리들을 가지고 있는지를 나타내는 단일 레지스터가 특징이다. 보다 구체적으로, 각 비트 위치는 비트 위치 값이 논리 값과 같으면 해당하는 특정 원형 버퍼 항목이 유효한 데이터를 가지고 있고 비트 위치 값이 0과 같으면 데이터를 포함하지 않음을 나타낸다. 원형 버퍼(620)에서 어떤 엔트리가 유효한지를 나타내는 상기 레지스터에 대한 원자적 연산들(the atomic operations)을 이용하여, 일관성 있게 부착된 네트워크 인터페이스는 해당 CPU(소프트웨어 라이브러리가 실행되는)와 버퍼를 안전하게 공유하고 데이터를 교환할 수 있다.
[0092] 도 6b에 보다 명확하게 도시된 바와 같이, 원형 버퍼(620A-620N)는 공유 라이브러리(610) (예: 소프트웨어 라이브러리 또는 "소프트웨어 사이드")와 네트워크 인터페이스 하드웨어(630) (예: 하드웨어 버퍼, 네트워크 버퍼, 네트워크 버퍼 디스패처 또는 “하드웨어 사이드”) 사이의 양단간 연결을 도시하고 있다. 원형 버퍼들(620A-620N)은 단방향 하드웨어-소프트웨어 공유 원형 버퍼(예: 소프트웨어 라이브러리(610)와 네트워크 인터페이스 하드웨어(630)는 원형 버퍼를 공유함)일 수 있으며 상호 작용들(예: 포인터 교환에 사용)에 사용될 수 있다.
[0093] 원형 버퍼들(620A-620N)은 단일 방향일 수 있으며, 다양한 인스턴스들이 다양한 풀/큐 유형들에 대해 사용되어야 하는데, 예를 들어, 글로벌 소프트웨어(“s/w”) 프리 풀(602A), 글로벌 하드웨어 (“H/w”) 프리 풀(602B), 프로세싱 풀(들)(즉, 현재 로컬 호스트에서 실행되는 애플리케이션 코드에 의해 조작되는 있는 버퍼 풀), 수신 큐(들)(608A-606B) (예: 연결당 수신 큐), 글로벌 전송 큐(604A 및 604B), (즉, 일관성 있게 부착된 네트워크 인터페이스에 의해 전송되어야 하지만 아직 전송되지 않은 모든 버퍼를 포함하는 호스트의 모든 애플리케이션 간에 공유되는 단일 호스트-와이드 큐(a single host-wide queue)) 및/또는 글로벌 전송 큐(들)(606A-606B) (즉, 연결 당 하나의 전송된 큐는 일관성 있게 부착된 네트워크 인터페이스에 의해 원격 호스트로 전송된 버퍼들을 포함하므로 상기 애플리케이션은 그들을 재사용할 수 있다)에 대해 사용되어야 한다.
[0094] 일 실시 예에서, 소프트웨어 측에서는, 디스패처 스레드(640)가 사용될 수 있고, 하드웨어 측에서는 우선순위/아비터 디스패치(640)(예: 하드웨어 버퍼 디스패처)가 사용될 수 있으며, 네트워크 인터페이스를 향한/네트워크 인터페이스로부터 시스템 메모리 사이에서 데이터를 푸시 및/또는 풀링하기 위해 원형 버퍼(620A-620N)에 의해 사용될 수 있다. 따라서, 원형 버퍼들 각각(620A-620N)은 소프트웨어 기능 및 하드웨어 기능 모두에 사용될 수 있다.
[0095] 그러므로, 단지 예로서, 원형 버퍼들 각각(620A-620N)은 하드웨어 측(예: 네트워크 인터페이스 하드웨어(630))으로부터 스핀록들을 풀(pull)할 수 있고, 하드웨어 스레드들은 상기 데이터를 획득하기 위해 소프트웨어 스레드들로부터 자신을 서로 배제할 수 있다.
[0096] 일 실시 예에서, 원형 버퍼들(620A-620N)은 즉각적인 전송을 위해서만 사용될 수 있으므로, 소프트웨어(예: 애플리케이션) 및 하드웨어(네트워크/메모리) 측 모두 비동기 연산을 지원하기 위한 선입선출 “FIFO” 작업(operation)을 가질 수 있다. 그러므로, 원형 버퍼들(620A-620N)는 주소 공간에 대한 포인터들을 검색하고 다양한 큐들 및 풀들을 사용하여 애플리케이션들 및 네트워크내에서 네트워크 버퍼들을 제거, 이동 및/또는 전송할 수 있다.
[0097] 작업(opration)에서, 예를 들어, 각 애플리케이션은 상태를 가지며 상기 상태는 큐들 및 풀들의 상태일 수 있는데, 이 상태는 네트워크 버퍼들이 큐들 및 풀들(예: 글로벌 소프트웨어 (“s/w”) 프리 풀(602A), 글로벌 하드웨어 (“H/w”) 프리 풀(602B), 프로세싱 풀(들)(이는 다른 풀에 속하지 않아 애플리케이션에 의해 조작되는 버퍼를 참조하는 가상 풀이다), 수신 큐(들)(608A-606B), 글로벌 전송 큐(604A 및 604B), 및/또는 글로벌 전송 큐(들)(606A-606))에 있는 위치를 나타낸다. 디스패처 스레드(640)을 사용하여, 큐들 및 풀들의 각 상태는 소프트웨어 사이드(S/W)에서 오직 하드웨어 사이드(H/W)로 포인터들을 교환함으로써 반사된다(mirrored). 큐들 및 풀들의 상태를 반사하면 모든 변경들 및 모든 업데이트들을 알 수 있다. 이제 하드웨어 측은 소프트웨어 라이브러리(610)과 동일한 뷰를 갖고 하드웨어로 오프로드될 수 있는 동작들(actions)을 수행한다. 이러한 방식으로, 소프트웨어 측(S/W) 및 하드웨어 측(H/W) 모두 소프트웨어 측으로부터 하드웨어 측으로 포인터들을 교환하고 상기 큐들과 풀들에 대해 포인터들을 사용함으로써 네트워크 버퍼들 중 어떤 것이 발송될 수 있고, 전송/수신될 수 있는지, 및/또는 프리 될 수 있는지 이해한다. 따라서, 예를 들어, 하드웨어는 결정을 실행하고, 작업을 수행하며, 애플리케이션으로부터 날짜를 검색하고, 그 결과들을 투명하게 애플리케이션들에게 푸시 백 할 수 있다.
[0098] 도 7은 컴퓨팅 환경에서 네트워크 스택 프레임워크에서 일관성 있게 부착된 인터페이스를 이용하기 위한 예시적인 엔드-투-엔드 드라이버리스 커넥션 시스템(end-to-end driverless connection system)(700)을 도시한 블록도이다. 도시한 바와 같이, 많은 기능 블록들은 또한 도 1-6a-6b에서 앞서 설명한 바와 같은 설명적인 의미에서 기능의 "모듈들" 또는 "컴포넌트들"로 간주될 수 있다. 또한, 도 1-6a-6b의 하나 또는 그 이상의 작업들 및 단계들은 또한 도 7의 하나 또는 그 이상의 작업들 또는 동작들에 포함될 수 있다. 본 명세서에 기술된 다른 실시예들에서 사용되는 유사한 엘리먼트들, 컴포넌트들, 모듈들, 서비스들, 애플리케이션들 및/또는 기능들에 대한 반복적인 설명은 간결함을 위해 생략한다.
[0099] 도시된 바와 같이, 네트워크 스택 프레임워크에서 일관성 있게 부착된 인터페이스를 이용하기 위한 시스템(700)은 하나 또는 그 이상의 시스템 인터커넥트들(710A 및 710B)을 포함할 수 있다. 시스템 인터커넥트들(710A (일관성 도메인(coherence domain) 1을 가짐)) 및 (710B(일관성 도메인 2를 가짐))는 하나 또는 그 이상의 애플리케이션 버퍼들(710C)을 네트워크 버퍼 하드웨어(710A 및 710B)(예: 하드웨어 사이드)에 연결하며, 이는 네트워크 스위칭 층들(network switching layers)(710A-B)에도 연결된 네트워크 인터페이스 하드웨어(730)을 통해 활성화될 수 있다. 또한, 로컬 인터페이스(712)는 또한 각 네트워크 버퍼 하드웨어(710A 및 710B)를 네트워크 스위칭 층들(710A-B)(예: 로컬 네트워크 인터페이스)에 연결하기 위해 사용될 수 있다. 간단히 말해서, 네트워크 인터페이스 하드웨어(730)은 애플리케이션들(702A-N)(예: App1, …, AppN 및 소프트웨어 측), 라이브러리(704) 및 버퍼(710)이 네트워크 인터페이스 하드웨어(730)을 통해 엔드-투-엔드(end-to-end)로 연결될 수 있도록 한다. 따라서, 시스템(700)은 드라이버들과 OS를 완전히 우회하는 시스템 인터커넥트들(710A-710B)을 통해 네트워크 인터페이스 하드웨어(730)의 일관된 부착을 가능하게 한다. 상기 애플리케이션 버퍼들은 운영 체제의 개입 없이 네트워크 인터페이스 하드웨어 출력 버퍼들로 직접 복사된다.
[00100] 도 8은 예시된 실시예들의 다양한 측면들이 구현될 수 있는 컴퓨팅 환경에서 네트워크 스택 프레임워크에서 일관성 있게 부착된 인터페이스들을 이용하는 예시적인 방법(800)을 도시하는 플로 차트이다. 방법(800)은 적어도 하나의 컴퓨터 판독가능 저장 매체 또는 하나의 기계에서 명령들로 실행되는 방법으로 구현될 수 있으며, 상기 명령들은 적어도 하나의 컴퓨터 판독 가능한 스토리지 매체(computer readable storage medium) 또는 하나의 비일시적 기계 판독 가능한 스토리지 매체(non-transitory machine-readable storage medium)에 포함되는 기계상의 명령들로서 실행되는 방법으로서 구현될 수 있다. 방법(800)은 블록(802)에서 시작할 수 있다.
[00101] 블록(804)에서, 하나 또는 그 이상의 네트워크 버퍼들은 하나 또는 그 이상의 애플리케이션들과 네트워크 인터페이스 사이에 일관성 있게 부착된다. 블록(806)에서, 하나 또는 그 이상의 애플리케이션들과 네트워크 인터페이스 사이에 일관되게 부착된 네트워크 버퍼들은 네트워크 통신을 위해 애플리케이션 버퍼, 원형 버퍼 및 큐잉 및 풀링 작업을 사용하여 하나 또는 그 이상의 드라이버들 및 운영 체제를 우회하면서 공유될 수 있다. 방법(800)은 블록(808)에서 종료될 수 있다.
[00102] 일 실시 예에서, 도 8의 적어도 하나의 블록과 관련하여 및/또는 그 일부로서, 방법(800)의 작업들은 다음 각각 중 하나 또는 그 이상을 포함할 수 있다. 방법(800)의 작업들은 공유 라이브러리에 의해 복수의 네트워크 버퍼들을 제어할 수 있다.
[00103] 방법(800)의 작업들은 네트워크 인터페이스를 사용하여 하나 또는 그 이상의 애플리케이션들 사이에서 복수의 네트워크 버퍼들 중 하나 또는 그 이상의 주소 공간들을 공유할 수 있다. 상기 복수의 네트워크 버퍼들은 입/출력(I/O) 제어를 위해 사용될 수 있다. 원형 버퍼는 일관성 있게 부착된 디바이스들과 메모리 포인터들을 교환할 수 있다.
[00104] 방법(800)의 작업들은 네트워크 버퍼 전송, 수신 및 조작을 위해 복수의 네트워크 버퍼들에 대한 큐잉 및 풀링 작업을 실행할 수 있다. 방법(800)의 작업들은 큐잉 및 풀링 작업을 실행하기 위해 하나 또는 그 이상의 큐들 및 하나 또는 그 이상의 풀들로부터 복수의 네트워크 버퍼들 중 하나를 이동, 할당 또는 재할당할 수 있다. 방법(800)의 작업들은 복수의 네트워크 버퍼들을 사용하여 공유 메모리 영역 및 사설 메모리 영역(a private memory region)을 설정할 수 있다.
[00105] 본 발명의 실시 예들은 시스템, 방법, 및/또는 컴퓨터 프로그램 제품이 될 수 있다. 컴퓨터 프로그램 제품은 컴퓨터 판독 가능 스토리지 매체(또는 매체)를 포함할 수 있으며, 이 매체 상에 프로세서가 본 발명의 실시 예들을 수행하도록 하는 컴퓨터 판독 가능 프로그램 명령들을 갖는다.
[00106] 상기 컴퓨터 판독 가능 스토리지 매체는 명령 실행 장치에 의해 사용될 명령들을 유지 및 저장할 수 있는 유형의(tangible) 디바이스일 수 있다. 상기 컴퓨터 판독 가능 스토리지 매체는, 예를 들면, 전자 스토리지 디바이스, 자기 스토리지 디바이스, 광 스토리지 디바이스, 전자기 스토리지 디바이스, 반도체 스토리지 디바이스, 또는 전술한 것들의 모든 적절한 조합일 수 있으며, 그러나 이에 한정되지는 않는다. 컴퓨터 판독 가능 스토리지 매체의 더 구체적인 예들의 비포괄적인 목록에는 다음이 포함될 수 있다: 휴대용 컴퓨터 디스켓, 하드 디스크, 랜덤 액세스 메모리(RAM), 판독-전용 메모리(ROM), 소거 및 프로그램가능 판독-전용 메모리(EPROM 또는 플래시 메모리), 정적 랜덤 액세스 메모리(SRAM), 휴대용 컴팩트 디스크 판독-전용 메모리(CD-ROM), 디지털 다용도 디스크(DVD), 메모리 스틱, 플로피 디스크, 천공-카드들 또는 명령들이 기록된 홈에 있는 융기된 구조들 같이 머신적으로 인코드 된 장치, 및 전술한 것들의 모든 적절한 조합. 본 명세서에서 사용될 때, 컴퓨터 판독 가능 스토리지 매체는 무선 전파들이나 다른 자유롭게 전파되는 전자기파들, 도파관이나 기타 전송 매체(예를 들어, 광섬유 케이블을 통해 전달되는 광 펄스들)를 통해 전파되는 전자기파들, 또는 선(wire)을 통해 전송되는 전기 신호들 같이 그 자체로 일시적인(transitory) 신호들로 해석되지는 않는다.
[00107] 본 명세서에 기술되는 컴퓨터 판독 가능 명령들은, 예를 들어, 인터넷, 근거리 통신망, 광역 통신망 및/또는 무선 네트워크 등의 통신망(네트워크)을 통해 컴퓨터 판독 가능 스토리지 매체로부터 각각 컴퓨팅/처리 디바이스들로 또는 외부 스토리지 디바이스로부터 외부 컴퓨터로 다운로드 될 수 있다. 상기 통신망은 구리 전송 케이블들, 광 전송 섬유들, 무선 전송, 라우터들, 방화벽들, 스위치들, 게이트웨이 컴퓨터들 및/또는 엣지 서버들을 포함할 수 있다. 각 컴퓨팅/처리 유닛 내 네트워크 어댑터 카드 또는 네트워크 인터페이스는 상기 통신망으로부터 컴퓨터 판독 가능 프로그램 명령들을 수신하고 그 컴퓨터 판독 가능 프로그램 명령들을 각각의 컴퓨팅/처리 디바이스 내의 컴퓨터 판독 가능 스토리지 매체에 저장하기 위해 전송한다.
[00108] 본 발명의 연산들을 실행하기 위한 컴퓨터 판독 가능 프로그램 명령들은 Smalltalk, C++ 또는 그와 유사 언어 등의 객체 지향 프로그래밍 언어와 "C" 프로그래밍 언어 또는 그와 유사한 프로그래밍 언어 등의 종래의 절차적 프로그래밍 언어들을 포함하여, 하나 또는 그 이상의 프로그래밍 언어들을 조합하여 작성된(written) 어셈블러 명령들, 명령-세트-아키텍처(ISA) 명령들, 머신 명령들, 머신 종속 명령들, 마이크로코드, 펌웨어 명령들, 상태-셋팅 데이터, 집적회로를 위한 구성 데이터, 또는 소스 코드나 목적 코드일 수 있다. 상기 컴퓨터 판독 가능 프로그램 명령들은 전적으로 사용자의 컴퓨터상에서, 부분적으로 사용자의 컴퓨터상에서, 독립형(stand-alone) 소프트웨어 패키지로서, 부분적으로 사용자의 컴퓨터상에서 그리고 부분적으로 원격 컴퓨터상에서 또는 전적으로 원격 컴퓨터나 서버상에서 실행될 수 있다. 위에서 마지막의 경우에, 원격 컴퓨터는 근거리 통신망(LAN) 또는 광역 통신망(WAN)을 포함한 모든 종류의 네트워크를 통해서 사용자의 컴퓨터에 접속될 수 있고, 또는 이 접속은 (예를 들어, 인터넷 서비스 제공자를 이용한 인터넷을 통해서) 외부 컴퓨터에 이루어질 수도 있다. 일부 실시 예들에서, 예를 들어 프로그램 가능 로직 회로, 필드-프로그램 가능 게이트 어레이들(FPGA), 또는 프로그램 가능 로직 어레이들(PLA)을 포함한 전자 회로는 본 발명의 실시 예들을 수행하기 위해 전자 회로를 맞춤화하도록 상기 컴퓨터 판독 가능 프로그램 명령들의 상태 정보를 이용하여 상기 컴퓨터 판독 가능 프로그램 명령들을 실행할 수 있다.
[00109] 본 발명의 특징들이 본 발명의 실시 예들에 따른 방법들, 장치들(시스템들), 및 컴퓨터 프로그램 제품들의 플로 차트 예시도들 및/또는 블록도들을 참조하여 기술된다. 플로 차트 예시도들 및/또는 블록도들의 각 블록과 플로 차트 예시도들 및/또는 블록도들 내 블록들의 조합들은 컴퓨터 판독 가능 프로그램 명령들에 의해 구현될 수 있다는 것을 이해할 수 있을 것이다.
[00110] 이들 컴퓨터 판독 가능 프로그램 명령들은 범용 컴퓨터, 특수목적용 컴퓨터, 또는 기타 프로그램가능 데이터 처리 유닛의 프로세서에 제공되어 머신(machine)을 생성하고, 그렇게 하여 그 명령들이 상기 컴퓨터 또는 기타 프로그램가능 데이터 처리 유닛의 프로세서를 통해서 실행되어, 상기 플로 차트 및/또는 블록도의 블록 또는 블록들에 명시된 기능들/동작들을 구현하기 위한 수단을 생성할 수 있다. 이들 컴퓨터 판독 가능 프로그램 명령들은 또한 컴퓨터 판독 가능 스토리지 매체에 저장될 수 있으며, 컴퓨터, 프로그램가능 데이터 처리 유닛 및/또는 기타 디바이스들에 지시하여 명령들이 저장된 상기 컴퓨터 판독 가능 스토리지 매체가 상기 플로 차트 및/또는 블록도의 블록 또는 블록들에 명시된 기능/동작의 특징들을 구현하는 명령들을 포함하는 제조품(an article of manufacture)을 포함하도록 특정한 방식으로 기능하게 할 수 있다.
[00111] 상기 컴퓨터 판독 가능 프로그램 명령들은 또한 컴퓨터, 기타 프로그램가능 데이터 처리 유닛, 또는 다른 디바이스에 로드 되어, 상기 컴퓨터, 기타 프로그램가능 장치 또는 다른 디바이스에서 일련의 동작 단계들이 수행되게 하여 컴퓨터 구현 프로세스를 생성하며, 그렇게 하여 상기 컴퓨터, 기타 프로그램가능 장치, 또는 다른 디바이스 상에서 실행되는 명령들이 플로 차트 및/또는 블록도의 블록 또는 블록들에 명시된 기능들/동작들을 구현할 수 있다.
[00112] 도면들 내 플로 차트 및 블록도들은 본 발명의 여러 실시 예들에 따른 시스템들, 방법들 및 컴퓨터 프로그램 제품들의 가능한 구현들의 아키텍처, 기능(functionality), 및 연산(operation)을 예시한다. 이와 관련하여, 상기 플로 차트 또는 블록도들 내 각 블록은 상기 명시된 로직 기능(들)을 구현하기 위한 하나 또는 그 이상의 실행 가능한 명령들을 포함한 모듈, 세그먼트 또는 명령들의 일부분을 나타낼 수 있다. 일부 다른 실시 예들에서, 상기 블록에 언급되는 기능들은 도면들에 언급된 순서와 다르게 일어날 수도 있다. 예를 들면, 연속으로 도시된 두 개의 블록들은 실제로는 사실상 동시에 실행될 수도 있고, 또는 이 두 블록들은 때때로 관련된 기능에 따라서는 역순으로 실행될 수도 있다. 블록도들 및/또는 플로 차트 예시도의 각 블록, 및 블록도들 및/또는 플로 차트 예시도 내 블록들의 조합들은 특수목적용 하드웨어 및 컴퓨터 명령들의 명시된 기능들 또는 동작들, 또는 이들의 조합들을 수행하는 특수목적용 하드웨어-기반 시스템들에 의해 구현될 수 있다는 것에 또한 주목해야 한다.

Claims (20)

  1. 컴퓨팅 환경에서 향상된 네트워크 스택 프레임워크를 이용하기 위한, 프로세서에 의한, 방법에 있어서, 상기 방법은:
    애플리케이션 버퍼, 원형 버퍼 및 큐잉 및 풀링 작업(a queuing and pooling operation)을 사용하여 하나 또는 그 이상의 드라이버들 및 운영 체제를 우회하면서 하나 또는 그 이상의 애플리케이션들과 네트워크 인터페이스 사이에 일관성 있게 부착된(coherently attached) 복수의 네트워크 버퍼들을 공유하는 단계를 포함하는
    방법.
  2. 제1항에 있어서, 상기 방법은 공유 라이브러리에 의해 복수의 네트워크 버퍼들을 제어하는 단계를 더 포함하는
    방법.
  3. 제1항에 있어서, 상기 방법은 상기 네트워크 인터페이스를 사용하여 상기 하나 또는 그 이상의 애플리케이션들 사이에서 상기 복수의 네트워크 버퍼들 중 하나 또는 그 이상의 주소 공간들을 공유하는 단계를 더 포함하고, 상기 복수의 네트워크 버퍼들은 입/출력(I/O) 제어에 사용되는
    방법.
  4. 제1항에 있어서, 상기 방법은 상기 원형 버퍼를 사용하여 일관성 있게 부착된 디바이스들과 메모리 포인터들을 교환하는 단계를 더 포함하는
    방법.
  5. 제1항에 있어서, 상기 방법은 네트워크 버퍼 전송, 수신 및 조작을 위해 상기 복수의 네트워크 버퍼들에 대한 큐잉 및 풀링 작업을 실행하는 단계를 더 포함하는
    방법.
  6. 제1항에 있어서, 상기 큐잉 및 풀링 작업은 하나 또는 그 이상의 큐들 및 하나 또는 그 이상의 풀들로부터 상기 복수의 네트워크 버퍼들 중 하나를 이동, 할당 또는 재할당하는 단계를 더 포함하는
    방법.
  7. 제1항에 있어서, 상기 방법은 상기 복수의 네트워크 버퍼들을 사용하여 공유 메모리 영역 및 사설 메모리 영역을 설정하는 단계를 더 포함하는
    방법.
  8. 향상된 네트워크 스택 프레임워크를 이용하기 위한 시스템에 있어서, 상기 시스템은:
    실행 가능 명령들이 있는 하나 또는 그이상의 컴퓨터들을 포함하고, 상기 실행 가능 명령들은 실행될 때 상기 시스템이:
    애플리케이션 버퍼, 원형 버퍼 및 큐잉 및 풀링 작업(a queuing and pooling operation)을 사용하여 하나 또는 그 이상의 드라이버들 및 운영 체제를 우회하면서 하나 또는 그 이상의 애플리케이션들과 네트워크 인터페이스 사이에 일관성 있게 부착된(coherently attached) 복수의 네트워크 버퍼들을 공유하는 단계를 수행하게 하는
    시스템.
  9. 제8항에 있어서, 상기 실행 가능 명령들은 실행될 때 상기 시스템이 공유 라이브러리에 의해 복수의 네트워크 버퍼들을 제어하는 단계를 수행하게 하는
    시스템.
  10. 제8항에 있어서, 상기 실행 가능 명령들은 실행될 때 상기 시스템이 상기 네트워크 인터페이스를 사용하여 상기 하나 또는 그 이상의 애플리케이션들 사이에서 상기 복수의 네트워크 버퍼들 중 하나 또는 그 이상의 주소 공간들을 공유하는 단계를 수행하게 하고, 상기 복수의 네트워크 버퍼들은 입/출력(I/O) 제어에 사용되는
    시스템.
  11. 제8항에 있어서, 상기 실행 가능 명령들은 실행될 때 상기 시스템이 상기 원형 버퍼를 사용하여 일관성 있게 부착된 디바이스들과 메모리 포인터들을 교환하는 단계를 수행하게 하는
    시스템.
  12. 제8항에 있어서, 상기 실행 가능 명령들은 실행될 때 상기 시스템이 네트워크 버퍼 전송, 수신 및 조작을 위해 상기 복수의 네트워크 버퍼들에 대한 큐잉 및 풀링 작업을 실행하는 단계를 수행하게 하는
    시스템.
  13. 제8항에 있어서, 상기 실행 가능 명령들은 실행될 때 상기 시스템이 상기 큐잉 및 풀링 작업을 실행하기 위해 하나 또는 그 이상의 큐들 및 하나 또는 그이상의 풀들로부터 상기 복수의 네트워크 버퍼들 중 하나를 이동, 할당 또는 재할당하는 단계를 수행하게 하는
    시스템.
  14. 제8항에 있어서, 상기 실행 가능 명령들은 실행될 때 상기 시스템이 상기 복수의 네트워크 버퍼들을 사용하여 공유 메모리 영역 및 사설 메모리 영역을 설정하는 단계를 수행하게 하는
    시스템.
  15. 프로세서에 의해 향상된 네트워크 스택 프레임워크를 이용하기 위한 컴퓨터 프로그램 제품에 있어서, 상기 컴퓨터 프로그램 제품은 컴퓨터 판독가능 프로그램 코드 부분들이 저장된 비-일시적 컴퓨터 판독가능 저장 매체를 포함하고, 상기 컴퓨터 판독가능 프로그램 코드 부분들은: 애플리케이션 버퍼, 원형 버퍼 및 큐잉 및 풀링 작업(a queuing and pooling operation)을 사용하여 하나 또는 그 이상의 드라이버들 및 운영 체제를 우회하면서 하나 또는 그 이상의 애플리케이션들과 네트워크 인터페이스 사이에 일관성 있게 부착된(coherently attached) 복수의 네트워크 버퍼들을 공유하는 단계를 수행하는 실행 가능한 부분을 포함하는
    컴퓨터 프로그램 제품.
  16. 제15항에 있어서, 상기 컴퓨터 판독가능 프로그램 코드 부분들은 공유 라이브러리에 의해 복수의 네트워크 버퍼들을 제어하는 단계를 수행하는 실행 가능한 부분을 더 포함하는
    컴퓨터 프로그램 제품.
  17. 제15항에 있어서, 상기 컴퓨터 판독가능 프로그램 코드 부분들은 상기 네트워크 인터페이스를 사용하여 상기 하나 또는 그 이상의 애플리케이션들 사이에서 상기 복수의 네트워크 버퍼들 중 하나 또는 그 이상의 주소 공간들을 공유하는 단계를 수행하는 실행 가능한 부분을 더 포함하고, 상기 복수의 네트워크 버퍼들은 입/출력(I/O) 제어에 사용되는
    컴퓨터 프로그램 제품.
  18. 제15항에 있어서, 상기 컴퓨터 판독가능 프로그램 코드 부분들은
    상기 원형 버퍼를 사용하여 일관성 있게 부착된 디바이스들과 메모리 포인터들을 교환하는 단계 및
    네트워크 버퍼 전송, 수신 및 조작을 위해 상기 복수의 네트워크 버퍼들에 대한 큐잉 및 풀링 작업을 실행하는 단계를 수행하는 실행 가능한 부분을 더 포함하는
    컴퓨터 프로그램 제품.
  19. 제15항에 있어서, 상기 컴퓨터 판독가능 프로그램 코드 부분들은 상기 큐잉 및 풀링 작업을 실행하기 위해 하나 또는 그 이상의 큐들 및 하나 또는 그 이상의 풀들로부터 상기 복수의 네트워크 버퍼들 중 하나를 이동, 할당 또는 재할당하는 단계를 수행하는 실행 가능한 부분을 더 포함하는
    컴퓨터 프로그램 제품.
  20. 제15항에 있어서, 상기 컴퓨터 판독가능 프로그램 코드 부분들은 상기 복수의 네트워크 버퍼들을 사용하여 공유 메모리 영역 및 사설 메모리 영역을 설정하는 단계를 수행하는 실행 가능한 부분을 더 포함하는
    컴퓨터 프로그램 제품.
KR1020227037307A 2020-05-06 2021-04-30 네트워크 스택 프레임워크에서 일관성 있게 부착된 인터페이스들의 이용 KR20220158804A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/929,518 2020-05-06
US15/929,518 US11863469B2 (en) 2020-05-06 2020-05-06 Utilizing coherently attached interfaces in a network stack framework
PCT/IB2021/053622 WO2021224739A1 (en) 2020-05-06 2021-04-30 Utilizing coherently attached interfaces in a network stack framework

Publications (1)

Publication Number Publication Date
KR20220158804A true KR20220158804A (ko) 2022-12-01

Family

ID=78413384

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020227037307A KR20220158804A (ko) 2020-05-06 2021-04-30 네트워크 스택 프레임워크에서 일관성 있게 부착된 인터페이스들의 이용

Country Status (10)

Country Link
US (1) US11863469B2 (ko)
JP (1) JP2023524665A (ko)
KR (1) KR20220158804A (ko)
CN (1) CN115485671A (ko)
AU (1) AU2021269201B2 (ko)
CA (1) CA3173088A1 (ko)
DE (1) DE112021001408T5 (ko)
GB (1) GB2610750A (ko)
IL (1) IL296397A (ko)
WO (1) WO2021224739A1 (ko)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11863469B2 (en) 2020-05-06 2024-01-02 International Business Machines Corporation Utilizing coherently attached interfaces in a network stack framework
US11595472B2 (en) * 2021-01-19 2023-02-28 Mellanox Technologies, Ltd. Controlling packet delivery based on application level information
US11740900B2 (en) * 2021-06-22 2023-08-29 Marvell Asia Pte Ltd Associatively indexed circular buffer
US11792139B2 (en) 2022-01-24 2023-10-17 Mellanox Technologies, Ltd. Efficient packet reordering using hints
CN116455849B (zh) * 2023-06-15 2023-08-11 中国人民解放军国防科技大学 一种面向众核处理器的并发通信方法、装置、设备和介质

Family Cites Families (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7668841B2 (en) * 2003-03-10 2010-02-23 Brocade Communication Systems, Inc. Virtual write buffers for accelerated memory and storage access
US7555597B2 (en) * 2006-09-08 2009-06-30 Intel Corporation Direct cache access in multiple core processors
US8909872B1 (en) 2006-10-31 2014-12-09 Hewlett-Packard Development Company, L. P. Computer system with coherent interconnection
US7987469B2 (en) 2006-12-14 2011-07-26 Intel Corporation RDMA (remote direct memory access) data transfer in a virtual environment
US20090089475A1 (en) 2007-09-28 2009-04-02 Nagabhushan Chitlur Low latency interface between device driver and network interface card
KR101466573B1 (ko) 2008-01-22 2014-12-10 삼성전자주식회사 통신 단말 장치 및 통신 단말 장치에 탑재된 복수개의네트워크 인터페이스를 이용하여 통신을 수행하는 방법
CN102006241B (zh) 2010-12-17 2013-11-27 曙光信息产业股份有限公司 一种多个应用共享一个缓冲区的报文接收方法
US9143467B2 (en) 2011-10-25 2015-09-22 Mellanox Technologies Ltd. Network interface controller with circular receive buffer
WO2014022492A1 (en) * 2012-07-31 2014-02-06 Huawei Technologies Co., Ltd. A method to allocate packet buffers in a packet transferring system
CN104620558B (zh) * 2012-09-07 2018-02-16 甲骨文国际公司 用于支持分布式数据网格集群中的消息预处理的***和方法
US9256537B2 (en) 2013-02-14 2016-02-09 International Business Machines Corporation Coherent attached processor proxy supporting coherence state update in presence of dispatched master
US9311230B2 (en) * 2013-04-23 2016-04-12 Globalfoundries Inc. Local direct storage class memory access
US9773292B2 (en) * 2014-06-26 2017-09-26 Intel Corporation Graphics workload submissions by unprivileged applications
US9607120B2 (en) 2014-12-30 2017-03-28 International Business Machines Corporation Implementing system irritator accelerator FPGA unit (AFU) residing behind a coherent attached processors interface (CAPI) unit
WO2016171739A1 (en) 2015-04-23 2016-10-27 Hewlett-Packard Development Company, L.P. Multi-processor computing systems
US20170139849A1 (en) 2015-11-17 2017-05-18 HGST Netherlands B.V. Driverless storage device using serially-attached non-volatile memory
TWI604308B (zh) 2015-11-18 2017-11-01 慧榮科技股份有限公司 資料儲存裝置及其資料維護方法
GB2544515B (en) 2015-11-19 2020-02-12 Canon Kk System for receiving or transmitting data with a fast-path protocol processing architecture
WO2017209876A1 (en) 2016-05-31 2017-12-07 Brocade Communications Systems, Inc. Buffer manager
US10375168B2 (en) * 2016-05-31 2019-08-06 Veritas Technologies Llc Throughput in openfabrics environments
US20180122037A1 (en) 2016-10-31 2018-05-03 Intel Corporation Offloading fused kernel execution to a graphics processor
US10310811B2 (en) 2017-03-31 2019-06-04 Hewlett Packard Enterprise Development Lp Transitioning a buffer to be accessed exclusively by a driver layer for writing immediate data stream
US10338847B1 (en) 2017-08-28 2019-07-02 Amazon Technologies, Inc. Coherent buffer mapping for virtualized graphics processing
US11347643B2 (en) 2018-06-29 2022-05-31 Intel Corporation Control logic and methods to map host-managed device memory to a system address space
US11443072B2 (en) 2018-06-29 2022-09-13 Microsoft Technology Licensing, Llc Peripheral device with resource isolation
CN109558226B (zh) 2018-11-05 2021-03-30 上海无线通信研究中心 一种基于核间中断的dsp多核并行计算调度方法
US11210216B2 (en) 2019-06-25 2021-12-28 Intel Corporation Techniques to facilitate a hardware based table lookup
CN111104459A (zh) 2019-08-22 2020-05-05 华为技术有限公司 存储设备、分布式存储***以及数据处理方法
US11030129B2 (en) * 2019-09-19 2021-06-08 Samsung Electronics Co., Ltd. Systems and methods for message tunneling
US11863469B2 (en) 2020-05-06 2024-01-02 International Business Machines Corporation Utilizing coherently attached interfaces in a network stack framework

Also Published As

Publication number Publication date
JP2023524665A (ja) 2023-06-13
CA3173088A1 (en) 2021-11-11
DE112021001408T5 (de) 2023-03-09
AU2021269201A1 (en) 2022-11-10
AU2021269201B2 (en) 2024-01-11
US20210352023A1 (en) 2021-11-11
CN115485671A (zh) 2022-12-16
US11863469B2 (en) 2024-01-02
WO2021224739A1 (en) 2021-11-11
GB2610750A (en) 2023-03-15
GB202218232D0 (en) 2023-01-18
IL296397A (en) 2022-11-01

Similar Documents

Publication Publication Date Title
AU2021269201B2 (en) Utilizing coherently attached interfaces in a network stack framework
US10325343B1 (en) Topology aware grouping and provisioning of GPU resources in GPU-as-a-Service platform
US11159453B2 (en) Fabric-based storage-server connection
KR102220528B1 (ko) 데이터 액세스 장치 및 그것의 동작 방법
US11036669B2 (en) Scalable direct inter-node communication over peripheral component interconnect-express (PCIe)
US9998531B2 (en) Computer-based, balanced provisioning and optimization of data transfer resources for products and services
US9996484B1 (en) Hardware acceleration for software emulation of PCI express compliant devices
US9442669B2 (en) Cost-effective IAAS (infrastructure-as-a-service) cloud storage based on adaptive virtual disks (AVD)
US9448901B1 (en) Remote direct memory access for high availability nodes using a coherent accelerator processor interface
US9575657B2 (en) Dataset replica migration
US9535759B2 (en) Work queue thread balancing
US11048447B2 (en) Providing direct data access between accelerators and storage in a computing environment, wherein the direct data access is independent of host CPU and the host CPU transfers object map identifying object of the data
US10204060B2 (en) Determining memory access categories to use to assign tasks to processor cores to execute
JP2020532803A (ja) 同期入出を介して生成されたキャッシュ・ヒットに応答してメタデータ・トラックの非同期更新をする方法、システム、コンピュータ・プログラムおよび記憶制御装置
US11144230B2 (en) Data copy amount reduction in data replication
US10225344B2 (en) High-performance key-value store using a coherent attached bus
US11347512B1 (en) Substitution through protocol to protocol translation
KR20220071246A (ko) 통합 시스템에서 애플리케이션 플로와의 통신
US11263130B2 (en) Data processing for allocating memory to application containers
US10802882B2 (en) Accelerating memory access in a network using thread progress based arbitration
US9176910B2 (en) Sending a next request to a resource before a completion interrupt for a previous request
US20210073033A1 (en) Memory management using coherent accelerator functionality
US11966338B2 (en) Prefetching management in database system based on number of pages being prefetched
US11252232B2 (en) NVME-of queue management in host clusters
US11520713B2 (en) Distributed bus arbiter for one-cycle channel selection using inter-channel ordering constraints in a disaggregated memory system

Legal Events

Date Code Title Description
A201 Request for examination