From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1759185AbcHaIIW (ORCPT ); Wed, 31 Aug 2016 04:08:22 -0400 Received: from mail-pa0-f67.google.com ([209.85.220.67]:36543 "EHLO mail-pa0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1758791AbcHaIIQ (ORCPT ); Wed, 31 Aug 2016 04:08:16 -0400 From: Namhyung Kim To: virtio-dev@lists.oasis-open.org, virtualization@lists.linux-foundation.org, kvm@vger.kernel.org, qemu-devel@nongnu.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/3] virtio: Implement virtio pstore device (v4) Date: Wed, 31 Aug 2016 17:07:59 +0900 Message-Id: <20160831080802.13408-1-namhyung@kernel.org> X-Mailer: git-send-email 2.9.3 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 another iteration of the virtio-pstore work. I've addressed all comments from Daniel Berrange on the qemu side. * changes in v4) - use qio_channel_file_new_path() (Daniel) - rename to delete_old_pstore_file (Daniel) - convert G_REMOVE_SOURCE to FALSE (Daniel) * changes in v3) - use QIOChannel API (Stefan, Daniel) - add bound check for malcious guests (Daniel) - drop support PSTORE_TYPE_CONSOLE for now - update license to allow GPL v2 or later (Michael) - limit number of pstore files on qemu * 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 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 0002 and 0003 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 ... Namhyung Kim (3): virtio: Basic implementation of virtio pstore driver qemu: Implement virtio-pstore device kvmtool: Implement virtio-pstore device drivers/virtio/Kconfig | 10 + drivers/virtio/Makefile | 1 + drivers/virtio/virtio_pstore.c | 417 +++++++++++++++++++++++++++++++++++++ include/uapi/linux/Kbuild | 1 + include/uapi/linux/virtio_ids.h | 1 + include/uapi/linux/virtio_pstore.h | 74 +++++++ 6 files changed, 504 insertions(+) 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 Cc: virtio-dev@lists.oasis-open.org Thanks, Namhyung -- 2.9.3 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Namhyung Kim Subject: [RFC/PATCHSET 0/3] virtio: Implement virtio pstore device (v4) Date: Wed, 31 Aug 2016 17:07:59 +0900 Message-ID: <20160831080802.13408-1-namhyung@kernel.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: Tony Luck , =?UTF-8?q?Radim=20Kr=C4=8Dm=C3=A1=C5=99?= , Kees Cook , "Michael S. Tsirkin" , Anton Vorontsov , Will Deacon , LKML , Steven Rostedt , Minchan Kim , Anthony Liguori , Colin Cross , Paolo Bonzini , Ingo Molnar To: virtio-dev@lists.oasis-open.org, virtualization@lists.linux-foundation.org, kvm@vger.kernel.org, qemu-devel@nongnu.org Return-path: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: virtualization-bounces@lists.linux-foundation.org Errors-To: virtualization-bounces@lists.linux-foundation.org List-Id: kvm.vger.kernel.org SGVsbG8sCgpUaGlzIGlzIGFub3RoZXIgaXRlcmF0aW9uIG9mIHRoZSB2aXJ0aW8tcHN0b3JlIHdv cmsuICBJJ3ZlIGFkZHJlc3NlZAphbGwgY29tbWVudHMgZnJvbSBEYW5pZWwgQmVycmFuZ2Ugb24g dGhlIHFlbXUgc2lkZS4KCiAqIGNoYW5nZXMgaW4gdjQpCiAgLSB1c2UgcWlvX2NoYW5uZWxfZmls ZV9uZXdfcGF0aCgpICAoRGFuaWVsKQogIC0gcmVuYW1lIHRvIGRlbGV0ZV9vbGRfcHN0b3JlX2Zp bGUgIChEYW5pZWwpCiAgLSBjb252ZXJ0IEdfUkVNT1ZFX1NPVVJDRSB0byBGQUxTRSAgKERhbmll bCkKCiAqIGNoYW5nZXMgaW4gdjMpCiAgLSB1c2UgUUlPQ2hhbm5lbCBBUEkgIChTdGVmYW4sIERh bmllbCkKICAtIGFkZCBib3VuZCBjaGVjayBmb3IgbWFsY2lvdXMgZ3Vlc3RzICAoRGFuaWVsKQog IC0gZHJvcCBzdXBwb3J0IFBTVE9SRV9UWVBFX0NPTlNPTEUgZm9yIG5vdwogIC0gdXBkYXRlIGxp Y2Vuc2UgdG8gYWxsb3cgR1BMIHYyIG9yIGxhdGVyICAoTWljaGFlbCkKICAtIGxpbWl0IG51bWJl ciBvZiBwc3RvcmUgZmlsZXMgb24gcWVtdQoKICogY2hhbmdlcyBpbiB2MikKICAtIHVwZGF0ZSBW SVJUSU9fSURfUFNUT1JFIHRvIDIyICAoQ29ybmVsaWEsIFN0ZWZhbikKICAtIG1ha2UgYnVmZmVy IHNpemUgY29uZmlndXJhYmxlICAoQ29ybmVsaWEpCiAgLSBzdXBwb3J0IFBTVE9SRV9UWVBFX0NP TlNPTEUgIChLZWVzKQogIC0gdXNlIHNlcGFyYXRlIHZpcnRxdWV1ZXMgZm9yIHJlYWQgYW5kIHdy aXRlCiAgLSBzdXBwb3J0IGNvbmN1cnJlbnQgYXN5bmMgd3JpdGUKICAtIG1hbmFnZSBwc3RvcmUg KGZpbGUpIGlkIGluIGRldmljZSBzaWRlCiAgLSBmaXggdmFyaW91cyBtaXN0YWtlcyBpbiBxZW11 IGRldmljZSAgKFN0ZWZhbikKCkl0IHN0YXJ0ZWQgZnJvbSB0aGUgZmFjdCB0aGF0IGR1bXBpbmcg ZnRyYWNlIGJ1ZmZlciBhdCBrZXJuZWwKb29wcy9wYW5pYyB0YWtlcyB0b28gbXVjaCB0aW1lLiAg QWx0aG91Z2ggdGhlcmUncyBhIHdheSB0byByZWR1Y2UgdGhlCnNpemUgb2YgdGhlIG9yaWdpbmFs IGRhdGEsIHNvbWV0aW1lcyBJIHdhbnQgdG8gaGF2ZSB0aGUgaW5mb3JtYXRpb24gYXMKbWFueSBh cyBwb3NzaWJsZS4gIE1heWJlIGtleGVjL2tkdW1wIGNhbiBzb2x2ZSB0aGlzIHByb2JsZW0gYnV0 IGl0CmNvbnN1bWVzIHNvbWUgcG9ydGlvbiBvZiBndWVzdCBtZW1vcnkgc28gSSdkIGxpa2UgdG8g YXZvaWQgaXQuICBBbmQgSQprbm93IHRoZSBxZW11ICsgY3Jhc2h0b29sIGNhbiBkdW1wIGFuZCBh bmFseXplIHRoZSB3aG9sZSBndWVzdCBtZW1vcnkKaW5jbHVkaW5nIHRoZSBmdHJhY2UgYnVmZmVy IHdpdGhvdXQgd2FzdGluZyBndWVzdCBtZW1vcnksIGJ1dCBpdCBhZGRzCm9uZSBtb3JlIGxheWVy IGFuZCBoYXMgc29tZSBsaW1pdGF0aW9uIGFzIGFuIG91dC1vZi10cmVlIHRvb2wgbGlrZSBub3QK YmVpbmcgaW4gc3luYyB3aXRoIHRoZSBrZXJuZWwgY2hhbmdlcy4KClNvIEkgdGhpbmsgaXQnZCBi ZSBncmVhdCB1c2luZyB0aGUgcHN0b3JlIGludGVyZmFjZSB0byBkdW1wIGd1ZXN0Cmtlcm5lbCBk YXRhIG9uIHRoZSBob3N0LiAgT25lIGNhbiByZWFkIHRoZSBkYXRhIG9uIHRoZSBob3N0IGRpcmVj dGx5Cm9yIG9uIHRoZSBndWVzdCAoYXQgdGhlIG5leHQgYm9vdCkgdXNpbmcgcHN0b3JlIGZpbGVz eXN0ZW0gYXMgdXN1YWwuCldoaWxlIHRoaXMgcGF0Y2hzZXQgb25seSBpbXBsZW1lbnRzIGR1bXBp bmcga2VybmVsIGxvZyBidWZmZXIsIGl0IGNhbgpiZSBleHRlbmRlZCB0byBoYXZlIGZ0cmFjZSBi dWZmZXIgYW5kIHByb2JhYmx5IHNvbWUgbW9yZS4uCgpUaGUgcGF0Y2ggMDAwMSBpbXBsZW1lbnRz IHZpcnRpbyBwc3RvcmUgZHJpdmVyLiAgSXQgaGFzIHR3byB2aXJ0IHF1ZXVlCmZvciAoc3luYykg cmVhZCBhbmQgKGFzeW5jKSB3cml0ZSwgcHN0b3JlIGJ1ZmZlciBhbmQgaW8gcmVxdWVzdCBhbmQK cmVzcG9uc2Ugc3RydWN0dXJlLiAgVGhlIHZpcnRpb19wc3RvcmVfcmVxIHN0cnVjdCBpcyB0byBn aXZlCmluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IHBzdG9yZSBvcGVyYXRpb24uICBUaGUg cmVzdWx0IHdpbGwgYmUKd3JpdHRlbiB0byB0aGUgdmlydGlvX3BzdG9yZV9yZXMgc3RydWN0LiAg Rm9yIHJlYWQgb3BlcmF0aW9uIGl0IGFsc28KdXNlcyB2aXJ0aW9fcHN0b3JlX2ZpbGVpbmZvIHN0 cnVjdC4KClRoZSBwYXRjaCAwMDAyIGFuZCAwMDAzIGltcGxlbWVudCB2aXJ0aW8tcHN0b3JlIGxl Z2FjeSBQQ0kgZGV2aWNlIG9uCnFlbXUta3ZtIGFuZCBrdm10b29sIHJlc3BlY3RpdmVseS4gIEkg cmVmZXJlbmNlZCB2aXJ0aW8tYmFsb29uIGFuZAp2aXJ0aW8tcm5nIGltcGxlbWVudGF0aW9ucyBh bmQgSSBkb24ndCBrbm93IHdoZXRoZXIga3ZtdG9vbCBzdXBwb3J0cwptb2Rlcm4gdmlydGlvIDEu MCsgc3BlYy4gIE90aGVyIHRyYW5zcG9ydHMgbWlnaHQgYmUgc3VwcG9ydGVkIGxhdGVyLgoKRm9y IGV4YW1wbGUsIHVzaW5nIHZpcnRpby1wc3RvcmUgb24gcWVtdSBsb29rcyBsaWtlIGJlbG93OgoK ICAkIHFlbXUtc3lzdGVtLXg4Nl82NCAtZW5hYmxlLWt2bSAtZGV2aWNlIHZpcnRpby1wc3RvcmUs ZGlyZWN0b3J5PXh4eAoKV2hlbiBndWVzdCBrZXJuZWwgZ2V0cyBwYW5pYyB0aGUgbG9nIG1lc3Nh Z2VzIHdpbGwgYmUgc2F2ZWQgdW5kZXIgdGhlCnh4eCBkaXJlY3RvcnkuCgogICQgbHMgeHh4CiAg ZG1lc2ctMS5lbmMueiAgZG1lc2ctMi5lbmMuegoKQXMgeW91IGNhbiBzZWUgdGhlIHBzdG9yZSBz dWJzeXN0ZW0gY29tcHJlc3NlcyB0aGUgbG9nIGRhdGEgdXNpbmcgemxpYgoobm93IHN1cHBvcnRz IGx6byBhbmQgbHo0IHRvbykuICBUaGUgZGF0YSBjYW4gYmUgZXh0cmFjdGVkIHdpdGggdGhlCmZv bGxvd2luZyBjb21tYW5kOgoKICAkIGNhdCB4eHgvZG1lc2ctMS5lbmMueiB8IFwKICA+IHB5dGhv biAtYyAnaW1wb3J0IHN5cywgemxpYjsgcHJpbnQoemxpYi5kZWNvbXByZXNzKHN5cy5zdGRpbi5y ZWFkKCkpKScKICBPb3BzIzEgUGFydDEKICA8NT5bICAgIDAuMDAwMDAwXSBMaW51eCB2ZXJzaW9u IDQuNi4wa3ZtKyAobmFtaHl1bmdAZGFuamFlKSAoZ2NjIHZlcnNpb24gNS4zLjAgKEdDQykgKSAj MTQ1IFNNUCBNb24gSnVsIDE4IDEwOjIyOjQ1IEtTVCAyMDE2CiAgPDY+WyAgICAwLjAwMDAwMF0g Q29tbWFuZCBsaW5lOiByb290PS9kZXYvdmRhIGNvbnNvbGU9dHR5UzAKICA8Nj5bICAgIDAuMDAw MDAwXSB4ODYvZnB1OiBMZWdhY3kgeDg3IEZQVSBkZXRlY3RlZC4KICA8Nj5bICAgIDAuMDAwMDAw XSB4ODYvZnB1OiBVc2luZyAnZWFnZXInIEZQVSBjb250ZXh0IHN3aXRjaGVzLgogIDw2PlsgICAg MC4wMDAwMDBdIGU4MjA6IEJJT1MtcHJvdmlkZWQgcGh5c2ljYWwgUkFNIG1hcDoKICA8Nj5bICAg IDAuMDAwMDAwXSBCSU9TLWU4MjA6IFttZW0gMHgwMDAwMDAwMDAwMDAwMDAwLTB4MDAwMDAwMDAw MDA5ZmJmZl0gdXNhYmxlCiAgPDY+WyAgICAwLjAwMDAwMF0gQklPUy1lODIwOiBbbWVtIDB4MDAw MDAwMDAwMDA5ZmMwMC0weDAwMDAwMDAwMDAwOWZmZmZdIHJlc2VydmVkCiAgPDY+WyAgICAwLjAw MDAwMF0gQklPUy1lODIwOiBbbWVtIDB4MDAwMDAwMDAwMDBmMDAwMC0weDAwMDAwMDAwMDAwZmZm ZmZdIHJlc2VydmVkCiAgPDY+WyAgICAwLjAwMDAwMF0gQklPUy1lODIwOiBbbWVtIDB4MDAwMDAw MDAwMDEwMDAwMC0weDAwMDAwMDAwMDdmZGRmZmZdIHVzYWJsZQogIDw2PlsgICAgMC4wMDAwMDBd IEJJT1MtZTgyMDogW21lbSAweDAwMDAwMDAwMDdmZGUwMDAtMHgwMDAwMDAwMDA3ZmZmZmZmXSBy ZXNlcnZlZAogIDw2PlsgICAgMC4wMDAwMDBdIEJJT1MtZTgyMDogW21lbSAweDAwMDAwMDAwZmVm ZmMwMDAtMHgwMDAwMDAwMGZlZmZmZmZmXSByZXNlcnZlZAogIDw2PlsgICAgMC4wMDAwMDBdIEJJ T1MtZTgyMDogW21lbSAweDAwMDAwMDAwZmZmYzAwMDAtMHgwMDAwMDAwMGZmZmZmZmZmXSByZXNl cnZlZAogIDw2PlsgICAgMC4wMDAwMDBdIE5YIChFeGVjdXRlIERpc2FibGUpIHByb3RlY3Rpb246 IGFjdGl2ZQogIDw2PlsgICAgMC4wMDAwMDBdIFNNQklPUyAyLjggcHJlc2VudC4KICA8Nz5bICAg IDAuMDAwMDAwXSBETUk6IFFFTVUgU3RhbmRhcmQgUEMgKGk0NDBGWCArIFBJSVgsIDE5OTYpLCBC SU9TIHJlbC0xLjkuMy0wLWdlMmZjNDFlLXByZWJ1aWx0LnFlbXUtcHJvamVjdC5vcmcgMDQvMDEv MjAxNAogIC4uLgoKCk5hbWh5dW5nIEtpbSAoMyk6CiAgdmlydGlvOiBCYXNpYyBpbXBsZW1lbnRh dGlvbiBvZiB2aXJ0aW8gcHN0b3JlIGRyaXZlcgogIHFlbXU6IEltcGxlbWVudCB2aXJ0aW8tcHN0 b3JlIGRldmljZQogIGt2bXRvb2w6IEltcGxlbWVudCB2aXJ0aW8tcHN0b3JlIGRldmljZQoKCiBk cml2ZXJzL3ZpcnRpby9LY29uZmlnICAgICAgICAgICAgIHwgIDEwICsKIGRyaXZlcnMvdmlydGlv L01ha2VmaWxlICAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy92aXJ0aW8vdmlydGlvX3BzdG9y ZS5jICAgICB8IDQxNyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBpbmNs dWRlL3VhcGkvbGludXgvS2J1aWxkICAgICAgICAgIHwgICAxICsKIGluY2x1ZGUvdWFwaS9saW51 eC92aXJ0aW9faWRzLmggICAgfCAgIDEgKwogaW5jbHVkZS91YXBpL2xpbnV4L3ZpcnRpb19wc3Rv cmUuaCB8ICA3NCArKysrKysrCiA2IGZpbGVzIGNoYW5nZWQsIDUwNCBpbnNlcnRpb25zKCspCiBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy92aXJ0aW8vdmlydGlvX3BzdG9yZS5jCiBjcmVhdGUg bW9kZSAxMDA2NDQgaW5jbHVkZS91YXBpL2xpbnV4L3ZpcnRpb19wc3RvcmUuaAoKCkNjOiBQYW9s byBCb256aW5pIDxwYm9uemluaUByZWRoYXQuY29tPgpDYzogUmFkaW0gS3LEjW3DocWZIDxya3Jj bWFyQHJlZGhhdC5jb20+CkNjOiAiTWljaGFlbCBTLiBUc2lya2luIiA8bXN0QHJlZGhhdC5jb20+ CkNjOiBBbnRob255IExpZ3VvcmkgPGFsaWd1b3JpQGFtYXpvbi5jb20+CkNjOiBBbnRvbiBWb3Jv bnRzb3YgPGFudG9uQGVub21zZy5vcmc+CkNjOiBDb2xpbiBDcm9zcyA8Y2Nyb3NzQGFuZHJvaWQu Y29tPgpDYzogS2VlcyBDb29rIDxrZWVzY29va0BjaHJvbWl1bS5vcmc+CkNjOiBUb255IEx1Y2sg PHRvbnkubHVja0BpbnRlbC5jb20+CkNjOiBTdGV2ZW4gUm9zdGVkdCA8cm9zdGVkdEBnb29kbWlz Lm9yZz4KQ2M6IEluZ28gTW9sbmFyIDxtaW5nb0BrZXJuZWwub3JnPgpDYzogTWluY2hhbiBLaW0g PG1pbmNoYW5Aa2VybmVsLm9yZz4KQ2M6IFdpbGwgRGVhY29uIDx3aWxsLmRlYWNvbkBhcm0uY29t PgpDYzoga3ZtQHZnZXIua2VybmVsLm9yZwpDYzogcWVtdS1kZXZlbEBub25nbnUub3JnCkNjOiB2 aXJ0dWFsaXphdGlvbkBsaXN0cy5saW51eC1mb3VuZGF0aW9uLm9yZwpDYzogdmlydGlvLWRldkBs aXN0cy5vYXNpcy1vcGVuLm9yZwpUaGFua3MsCk5hbWh5dW5nCgoKLS0gCjIuOS4zCgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpWaXJ0dWFsaXphdGlvbiBt YWlsaW5nIGxpc3QKVmlydHVhbGl6YXRpb25AbGlzdHMubGludXgtZm91bmRhdGlvbi5vcmcKaHR0 cHM6Ly9saXN0cy5saW51eGZvdW5kYXRpb24ub3JnL21haWxtYW4vbGlzdGluZm8vdmlydHVhbGl6 YXRpb24= From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44372) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bf0ZJ-0003II-Am for qemu-devel@nongnu.org; Wed, 31 Aug 2016 04:08:24 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bf0ZE-0000aV-Ga for qemu-devel@nongnu.org; Wed, 31 Aug 2016 04:08:20 -0400 Received: from mail-pa0-x244.google.com ([2607:f8b0:400e:c03::244]:36489) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bf0ZE-0000aB-5Z for qemu-devel@nongnu.org; Wed, 31 Aug 2016 04:08:16 -0400 Received: by mail-pa0-x244.google.com with SMTP id ez1so2260147pab.3 for ; Wed, 31 Aug 2016 01:08:15 -0700 (PDT) Sender: Namhyung Kim From: Namhyung Kim Date: Wed, 31 Aug 2016 17:07:59 +0900 Message-Id: <20160831080802.13408-1-namhyung@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Subject: [Qemu-devel] [RFC/PATCHSET 0/3] virtio: Implement virtio pstore device (v4) List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: virtio-dev@lists.oasis-open.org, virtualization@lists.linux-foundation.org, kvm@vger.kernel.org, qemu-devel@nongnu.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 Hello, This is another iteration of the virtio-pstore work. I've addressed all comments from Daniel Berrange on the qemu side. * changes in v4) - use qio_channel_file_new_path() (Daniel) - rename to delete_old_pstore_file (Daniel) - convert G_REMOVE_SOURCE to FALSE (Daniel) * changes in v3) - use QIOChannel API (Stefan, Daniel) - add bound check for malcious guests (Daniel) - drop support PSTORE_TYPE_CONSOLE for now - update license to allow GPL v2 or later (Michael) - limit number of pstore files on qemu * 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 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 0002 and 0003 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 ... Namhyung Kim (3): virtio: Basic implementation of virtio pstore driver qemu: Implement virtio-pstore device kvmtool: Implement virtio-pstore device drivers/virtio/Kconfig | 10 + drivers/virtio/Makefile | 1 + drivers/virtio/virtio_pstore.c | 417 +++++++++++++++++++++++++++++++++++++ include/uapi/linux/Kbuild | 1 + include/uapi/linux/virtio_ids.h | 1 + include/uapi/linux/virtio_pstore.h | 74 +++++++ 6 files changed, 504 insertions(+) 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 Cc: virtio-dev@lists.oasis-open.org Thanks, Namhyung -- 2.9.3