Received: by 2002:a05:6a10:c604:0:0:0:0 with SMTP id y4csp365206pxt; Thu, 5 Aug 2021 01:25:22 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxxknlwBLYfDU5TdKN+aIZ7C59B4UlY7RO9zjg13zrvZAzoxUhN8d5OhJyiyuNpGHReqlCj X-Received: by 2002:a05:6402:12c3:: with SMTP id k3mr5035562edx.11.1628151922087; Thu, 05 Aug 2021 01:25:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1628151922; cv=none; d=google.com; s=arc-20160816; b=Qd9UVwF5/zEyFKUAOHP/3oM2W0MHZDTCtOfGMOqcQJ80HiSYcmIvckvRG5NG3SbDhg LzCQ4sjgFCacgGBBB/tAACluYOJVLpCAwntoxlYO9xtzlmCxi8yRjiuViZPZSOIcSX5x fVIx7dBPUVCAZKMxkoL5wgTeDQhTRr2uCN9n2d2xNy+ng5MD33YmDliwA09PbeX8Uqss JBDW+pD0993d7ykwDEORVuj0vKa3KKPR7srBOtTMXchQutACztJdPhVyBaeyByv5VpkR l7RnMhsVk2mCTEIQ059/5jdG6e/VDV52+YLBTMbqIveAAwwUFMPLA5KYaKSOKztMb8PS jTkw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature:dkim-filter; bh=DkvT+P/azRRMQG1BsDMNIW1kNHl9G9/qgI0tmgKhpLI=; b=YX32eYCC+kGKI2q0Q0XYToky6LkBqQiE8dzl34do7JhhvOcUI3hXREwxLR3wFP6DL/ oQCJ+BdGe25x9/QPKVYyFvu89A9rK4adQU+ZNcRD/7juu1WyjhIUoN2/+4/m5nwMtFAd lqkto6OWYztHNsmhAywd7bhciDd0GyaH04ygdMCk5vrWSPsHWokdGFpTCowX6FyBQSjZ qUnM6Xg/fRNByTL8QEmjTQK80lO8FkaWII8CHX4G1q7tKTtlKdMNsXM3rbLHWiKRz6I6 zXbgE+pA5bXTO/s1eujPs4+DDX3ZgkP/VqCYFvDu6FJ5kz3u1S15I4DNgglrd/LdQlT+ ypKQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxonhyperv.com header.s=default header.b=ahPBJA3I; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxonhyperv.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id i15si4907875edf.611.2021.08.05.01.24.58; Thu, 05 Aug 2021 01:25:22 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxonhyperv.com header.s=default header.b=ahPBJA3I; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxonhyperv.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235659AbhHEHAg (ORCPT + 99 others); Thu, 5 Aug 2021 03:00:36 -0400 Received: from linux.microsoft.com ([13.77.154.182]:48562 "EHLO linux.microsoft.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229869AbhHEHAg (ORCPT ); Thu, 5 Aug 2021 03:00:36 -0400 Received: by linux.microsoft.com (Postfix, from userid 1004) id 4BF88209E044; Thu, 5 Aug 2021 00:00:22 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com 4BF88209E044 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linuxonhyperv.com; s=default; t=1628146822; bh=DkvT+P/azRRMQG1BsDMNIW1kNHl9G9/qgI0tmgKhpLI=; h=From:To:Cc:Subject:Date:From; b=ahPBJA3IIY+Xyh+kRZ1FZhUSaRJKuP2VFCTlaeN1Y9qsCU+INlSsIM9Lq5oMzvuhC TGTmk+uaJ7nd3eh5DP6vVt+eR2AAClww25DMdflZFVwbAn9NWcoaoY9hlOBRm8F2lf kYyC+3JGbiGwMRsIl/8VsExQhVXq4DS4uU3RCf5A= From: longli@linuxonhyperv.com To: linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, linux-hyperv@vger.kernel.org Cc: Long Li , Jonathan Corbet , "K. Y. Srinivasan" , Haiyang Zhang , Stephen Hemminger , Wei Liu , Dexuan Cui , Greg Kroah-Hartman , Bjorn Andersson , Hans de Goede , Dan Williams , Maximilian Luz , Mike Rapoport , Ben Widawsky , Jiri Slaby , Andra Paraschiv , Siddharth Gupta , Hannes Reinecke Subject: [Patch v5 0/3] Introduce a driver to support host accelerated access to Microsoft Azure Blob for Azure VM Date: Thu, 5 Aug 2021 00:00:09 -0700 Message-Id: <1628146812-29798-1-git-send-email-longli@linuxonhyperv.com> X-Mailer: git-send-email 1.8.3.1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Long Li Azure Blob storage [1] is Microsoft's object storage solution for the cloud. Users or client applications can access objects in Blob storage via HTTP, from anywhere in the world. Objects in Blob storage are accessible via the Azure Storage REST API, Azure PowerShell, Azure CLI, or an Azure Storage client library. The Blob storage interface is not designed to be a POSIX compliant interface. Problem: When a client accesses Blob storage via HTTP, it must go through the Blob storage boundary of Azure and get to the storage server through multiple servers. This is also true for an Azure VM. Solution: For an Azure VM, the Blob storage access can be accelerated by having Azure host execute the Blob storage requests to the backend storage server directly. This driver implements a VSC (Virtual Service Client) for accelerating Blob storage access for an Azure VM by communicating with a VSP (Virtual Service Provider) on the Azure host. Instead of using HTTP to access the Blob storage, an Azure VM passes the Blob storage request to the VSP on the Azure host. The Azure host uses its native network to perform Blob storage requests to the backend server directly. This driver doesn’t implement Blob storage APIs. It acts as a fast channel to pass user-mode Blob storage requests to the Azure host. The user-mode program using this driver implements Blob storage APIs and packages the Blob storage request as structured data to VSC. The request data is modeled as three user provided buffers (request, response and data buffers), that are patterned on the HTTP model used by existing Azure Blob clients. The VSC passes those buffers to VSP for Blob storage requests. The driver optimizes Blob storage access for an Azure VM in two ways: 1. The Blob storage requests are performed by the Azure host to the Azure Blob backend storage server directly. 2. It allows the Azure host to use transport technologies (e.g. RDMA) available to the Azure host but not available to the VM, to reach to Azure Blob backend servers. Test results using this driver for an Azure VM: 100 Blob clients running on an Azure VM, each reading 100GB Block Blobs. (10 TB total read data) With REST API over HTTP: 94.4 mins Using this driver: 72.5 mins Performance (measured in throughput) gain: 30%. [1] https://docs.microsoft.com/en-us/azure/storage/blobs/storage-blobs-introduction Cc: Jonathan Corbet Cc: "K. Y. Srinivasan" Cc: Haiyang Zhang Cc: Stephen Hemminger Cc: Wei Liu Cc: Dexuan Cui Cc: Greg Kroah-Hartman Cc: Bjorn Andersson Cc: Hans de Goede Cc: Dan Williams Cc: Maximilian Luz Cc: Mike Rapoport Cc: Ben Widawsky Cc: Jiri Slaby Cc: Andra Paraschiv Cc: Siddharth Gupta Cc: Hannes Reinecke Changes: v2: Refactored the code in vmbus to scan devices Reworked Azure Blob driver and moved user-mode interfaces to uapi v3: Changed licensing language Patch format passed "checkpatch --strict" debugfs and logging, module parameter cleanup General code clean up Fix device removal race conditions v4: Addressed licencing issues Changed to dynamic device model v5: Added problem statement and test numbers to patch 0 Changed uapi header file to explicitly include all header files needed for user-mode Make the driver handle vmbus rescind without waiting on user-mode for device removal Long Li (3): Drivers: hv: vmbus: add support to ignore certain PCIE devices Drivers: hv: add Azure Blob driver Drivers: hv: Add to maintainer for Hyper-V/Azure drivers Documentation/userspace-api/ioctl/ioctl-number.rst | 2 + MAINTAINERS | 2 + drivers/hv/Kconfig | 11 + drivers/hv/Makefile | 1 + drivers/hv/channel_mgmt.c | 55 +- drivers/hv/hv_azure_blob.c | 574 +++++++++++++++++++++ include/linux/hyperv.h | 9 + include/uapi/misc/hv_azure_blob.h | 35 ++ 8 files changed, 683 insertions(+), 6 deletions(-) create mode 100644 drivers/hv/hv_azure_blob.c create mode 100644 include/uapi/misc/hv_azure_blob.h -- 1.8.3.1