From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756633AbcG0PJm (ORCPT ); Wed, 27 Jul 2016 11:09:42 -0400 Received: from mail-pf0-f193.google.com ([209.85.192.193]:34032 "EHLO mail-pf0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753301AbcG0PJk (ORCPT ); Wed, 27 Jul 2016 11:09:40 -0400 From: Namhyung Kim To: kvm@vger.kernel.org, qemu-devel@nongnu.org, virtualization@lists.linux-foundation.org Cc: LKML , Paolo Bonzini , =?UTF-8?q?Radim=20Kr=C4=8Dm=C3=A1=C5=99?= , "Michael S. Tsirkin" , Anthony Liguori , Anton Vorontsov , Colin Cross , Kees Cook , Tony Luck , Steven Rostedt , Ingo Molnar , Minchan Kim , Will Deacon Subject: [RFC/PATCHSET 0/7] virtio: Implement virtio pstore device (v2) Date: Thu, 28 Jul 2016 00:08:24 +0900 Message-Id: <1469632111-23260-1-git-send-email-namhyung@kernel.org> X-Mailer: git-send-email 2.8.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hello, This is v2 of the virtio-pstore work. In this patchset I addressed most of feedbacks from previous version. Limiting disk size is not implemented yet. * changes in v2) - update VIRTIO_ID_PSTORE to 22 (Cornelia, Stefan) - make buffer size configurable (Cornelia) - support PSTORE_TYPE_CONSOLE (Kees) - use separate virtqueues for read and write - support concurrent async write - manage pstore (file) id in device side - fix various mistakes in qemu device (Stefan) It started from the fact that dumping ftrace buffer at kernel oops/panic takes too much time. Although there's a way to reduce the size of the original data, sometimes I want to have the information as many as possible. Maybe kexec/kdump can solve this problem but it consumes some portion of guest memory so I'd like to avoid it. And I know the qemu + crashtool can dump and analyze the whole guest memory including the ftrace buffer without wasting guest memory, but it adds one more layer and has some limitation as an out-of-tree tool like not being in sync with the kernel changes. So I think it'd be great using the pstore interface to dump guest kernel data on the host. One can read the data on the host directly or on the guest (at the next boot) using pstore filesystem as usual. While this patchset only implements dumping kernel log buffer, it can be extended to have ftrace buffer and probably some more.. The patch 0001-0003 are preparation for pstore to support virtio device which requires async write. The patch 0004 implements virtio pstore driver. It has two virt queue for (sync) read and (async) write, pstore buffer and io request and response structure. The virtio_pstore_req struct is to give information about the current pstore operation. The result will be written to the virtio_pstore_res struct. For read operation it also uses virtio_pstore_fileinfo struct. The patch 0005 adds support for PSTORE_TYPE_CONSOLE which was requested by Kees. The console data is appended to a single file for now. The patch 0006 and 0007 implement virtio-pstore legacy PCI device on qemu-kvm and kvmtool respectively. I referenced virtio-baloon and virtio-rng implementations and I don't know whether kvmtool supports modern virtio 1.0+ spec. Other transports might be supported later. For example, using virtio-pstore on qemu looks like below: $ qemu-system-x86_64 -enable-kvm -device virtio-pstore,directory=xxx When guest kernel gets panic the log messages will be saved under the xxx directory. $ ls xxx dmesg-1.enc.z dmesg-2.enc.z As you can see the pstore subsystem compresses the log data using zlib (now supports lzo and lz4 too). The data can be extracted with the following command: $ cat xxx/dmesg-1.enc.z | \ > python -c 'import sys, zlib; print(zlib.decompress(sys.stdin.read()))' Oops#1 Part1 <5>[ 0.000000] Linux version 4.6.0kvm+ (namhyung@danjae) (gcc version 5.3.0 (GCC) ) #145 SMP Mon Jul 18 10:22:45 KST 2016 <6>[ 0.000000] Command line: root=/dev/vda console=ttyS0 <6>[ 0.000000] x86/fpu: Legacy x87 FPU detected. <6>[ 0.000000] x86/fpu: Using 'eager' FPU context switches. <6>[ 0.000000] e820: BIOS-provided physical RAM map: <6>[ 0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009fbff] usable <6>[ 0.000000] BIOS-e820: [mem 0x000000000009fc00-0x000000000009ffff] reserved <6>[ 0.000000] BIOS-e820: [mem 0x00000000000f0000-0x00000000000fffff] reserved <6>[ 0.000000] BIOS-e820: [mem 0x0000000000100000-0x0000000007fddfff] usable <6>[ 0.000000] BIOS-e820: [mem 0x0000000007fde000-0x0000000007ffffff] reserved <6>[ 0.000000] BIOS-e820: [mem 0x00000000feffc000-0x00000000feffffff] reserved <6>[ 0.000000] BIOS-e820: [mem 0x00000000fffc0000-0x00000000ffffffff] reserved <6>[ 0.000000] NX (Execute Disable) protection: active <6>[ 0.000000] SMBIOS 2.8 present. <7>[ 0.000000] DMI: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.9.3-0-ge2fc41e-prebuilt.qemu-project.org 04/01/2014 ... To enable PSTORE_TYPE_CONSOLE, add 'console=true' to virtio-pstore device option. Also 'bufsize' option can set different size for pstore buffer (default is 16K). Maybe we can add a config option to control the compression later. Currently the kvmtool doesn't support any options except the directory the pstore saves the logs. Namhyung Kim (7): pstore: Split pstore fragile flags pstore/ram: Set pstore flags dynamically pstore: Manage buffer position for async write virtio: Basic implementation of virtio pstore driver virtio-pstore: Support PSTORE_TYPE_CONSOLE qemu: Implement virtio-pstore device kvmtool: Implement virtio-pstore device drivers/acpi/apei/erst.c | 2 +- drivers/firmware/efi/efi-pstore.c | 4 +- drivers/virtio/Kconfig | 10 + drivers/virtio/Makefile | 1 + drivers/virtio/virtio_pstore.c | 421 +++++++++++++++++++++ fs/pstore/platform.c | 65 +++- fs/pstore/ram.c | 8 + include/linux/pstore.h | 9 +- include/uapi/linux/Kbuild | 1 + include/uapi/linux/virtio_ids.h | 1 + include/uapi/linux/virtio_pstore.h | 78 +++- 11 files changed, 580 insertions(+), 20 deletions(-) create mode 100644 drivers/virtio/virtio_pstore.c create mode 100644 include/uapi/linux/virtio_pstore.h Cc: Paolo Bonzini Cc: Radim Krčmář Cc: "Michael S. Tsirkin" Cc: Anthony Liguori Cc: Anton Vorontsov Cc: Colin Cross Cc: Kees Cook Cc: Tony Luck Cc: Steven Rostedt Cc: Ingo Molnar Cc: Minchan Kim Cc: Will Deacon Cc: kvm@vger.kernel.org Cc: qemu-devel@nongnu.org Cc: virtualization@lists.linux-foundation.org Thanks, Namhyung -- 2.8.0