{"action":"created","issue":{"url":"https://api.github.com/repos/zfsonlinux/zfs/issues/2129","labels_url":"https://api.github.com/repos/zfsonlinux/zfs/issues/2129/labels{/name}","comments_url":"https://api.github.com/repos/zfsonlinux/zfs/issues/2129/comments","events_url":"https://api.github.com/repos/zfsonlinux/zfs/issues/2129/events","html_url":"https://github.com/zfsonlinux/zfs/pull/2129","id":27691251,"number":2129,"title":"Move ARC data buffers out of vmalloc","user":{"login":"tuxoko","id":119672,"avatar_url":"https://avatars.githubusercontent.com/u/119672?v=3","gravatar_id":"","url":"https://api.github.com/users/tuxoko","html_url":"https://github.com/tuxoko","followers_url":"https://api.github.com/users/tuxoko/followers","following_url":"https://api.github.com/users/tuxoko/following{/other_user}","gists_url":"https://api.github.com/users/tuxoko/gists{/gist_id}","starred_url":"https://api.github.com/users/tuxoko/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tuxoko/subscriptions","organizations_url":"https://api.github.com/users/tuxoko/orgs","repos_url":"https://api.github.com/users/tuxoko/repos","events_url":"https://api.github.com/users/tuxoko/events{/privacy}","received_events_url":"https://api.github.com/users/tuxoko/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/zfsonlinux/zfs/labels/Feature","name":"Feature","color":"02d7e1"}],"state":"open","locked":false,"assignee":null,"milestone":{"url":"https://api.github.com/repos/zfsonlinux/zfs/milestones/11","labels_url":"https://api.github.com/repos/zfsonlinux/zfs/milestones/11/labels","id":7013,"number":11,"title":"0.7.0","description":"ZFS on Linux v0.7.0 - Memory management\r\n\r\n","creator":{"login":"behlendorf","id":148917,"avatar_url":"https://avatars.githubusercontent.com/u/148917?v=3","gravatar_id":"","url":"https://api.github.com/users/behlendorf","html_url":"https://github.com/behlendorf","followers_url":"https://api.github.com/users/behlendorf/followers","following_url":"https://api.github.com/users/behlendorf/following{/other_user}","gists_url":"https://api.github.com/users/behlendorf/gists{/gist_id}","starred_url":"https://api.github.com/users/behlendorf/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/behlendorf/subscriptions","organizations_url":"https://api.github.com/users/behlendorf/orgs","repos_url":"https://api.github.com/users/behlendorf/repos","events_url":"https://api.github.com/users/behlendorf/events{/privacy}","received_events_url":"https://api.github.com/users/behlendorf/received_events","type":"User","site_admin":false},"open_issues":77,"closed_issues":97,"state":"open","created_at":"2011-05-03T17:38:46Z","updated_at":"2015-01-16T19:57:31Z","due_on":null,"closed_at":null},"comments":118,"created_at":"2014-02-17T04:05:12Z","updated_at":"2015-02-18T16:57:18Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/zfsonlinux/zfs/pulls/2129","html_url":"https://github.com/zfsonlinux/zfs/pull/2129","diff_url":"https://github.com/zfsonlinux/zfs/pull/2129.diff","patch_url":"https://github.com/zfsonlinux/zfs/pull/2129.patch"},"body":"***Warning***\r\nThis patchset requires further testing and review.\r\nDO NOT USE IN PRODUCTION.\r\n\r\n---\r\nIntroduce ABD: linear/scatter dual typed buffer for ARC\r\n\r\nzfsolinux currently uses vmalloc backed slab for ARC buffers. There are some\r\nmajor problems with this approach. One is that 32-bit system have only a\r\nhandful of vmalloc space. Another is that the fragmentation in slab will easily\r\ntrigger OOM in busy system.\r\n\r\nWith ABD, we use scatterlist to allocate data buffers. In this approach we can\r\nallocate in HIGHMEM, which alleviates vmalloc space pressure on 32-bit. Also,\r\nwe don't have to rely on slab, so there's no fragmentation issue.\r\n\r\nBut for metadata buffers, we still uses linear buffer from slab. The reason for\r\nthis is that there are a lot of *_phys pointers directly point to metadata\r\nbuffers. So it's kind of impractical to change all those code. And metadata\r\nshould only be a small percentage so we probably don't have to worry about\r\nthe 32-bit and fragmentation issue, right?\r\n\r\n---\r\nThis patchset is divided into the following part:\r\n1. Add compatibility layer for {kmap,kunmap}\\_atomic\r\n2. Introduce ABD, but with scatter type disabled\r\n3. Modify checksum implementation for ABD\r\n4. Modify every file which touches abd_t field\r\n5. Enable scatter type ABD\r\n\r\n---\r\nEdit:\r\nI forgot to mention...\r\nThere are some parts that hasn't been able to handle scatter buffer,\r\ncompression and raidz gaussian elimination to name a few.\r\nEnable them will cost you extra copy than without this patch set.\r\nAnother thing is the xuio thing, which I totally skip.\r\n\r\nTodo:\r\n1. Clean up the implementation and documentation\r\n2. Compression and raidz gaussian elimination takes scatter buffer\r\n3. Probably change vdev_cache and vdev_queue to scatter buffer\r\n4. vdev_file should be able to submit a iovec."},"comment":{"url":"https://api.github.com/repos/zfsonlinux/zfs/issues/comments/74901060","html_url":"https://github.com/zfsonlinux/zfs/pull/2129#issuecomment-74901060","issue_url":"https://api.github.com/repos/zfsonlinux/zfs/issues/2129","id":74901060,"user":{"login":"tuxoko","id":119672,"avatar_url":"https://avatars.githubusercontent.com/u/119672?v=3","gravatar_id":"","url":"https://api.github.com/users/tuxoko","html_url":"https://github.com/tuxoko","followers_url":"https://api.github.com/users/tuxoko/followers","following_url":"https://api.github.com/users/tuxoko/following{/other_user}","gists_url":"https://api.github.com/users/tuxoko/gists{/gist_id}","starred_url":"https://api.github.com/users/tuxoko/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tuxoko/subscriptions","organizations_url":"https://api.github.com/users/tuxoko/orgs","repos_url":"https://api.github.com/users/tuxoko/repos","events_url":"https://api.github.com/users/tuxoko/events{/privacy}","received_events_url":"https://api.github.com/users/tuxoko/received_events","type":"User","site_admin":false},"created_at":"2015-02-18T16:57:18Z","updated_at":"2015-02-18T16:57:18Z","body":"@edillmann\r\nYou shouldn't be using abd_next branch or any other abd_*  other than abd. Those are just acting as a bridge for my hosts, and they could be in very buggy or messy states when I'm working on it. But in this moment abd_next is essentially the same as abd. So it's really strange that you could produce the result so easily while I've never seen it myself.\r\nAnyway, could you repull abd branch (not abd_next) and test again? It might be that your branch is stale and in an incomplete state. Thanks."}}