{"id":18443224,"url":"https://github.com/mkroening/unikraft-virtio_ring-error-repro","last_synced_at":"2025-04-14T20:15:53.203Z","repository":{"id":181153210,"uuid":"666312590","full_name":"mkroening/unikraft-virtio_ring-error-repro","owner":"mkroening","description":"Reproduction of a Unikraft virtio_ring error","archived":false,"fork":false,"pushed_at":"2023-07-14T12:05:13.000Z","size":4,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-14T20:15:50.244Z","etag":null,"topics":["unikraft","virtio"],"latest_commit_sha":null,"homepage":"https://github.com/unikraft/unikraft/issues/853","language":"C","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mkroening.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-07-14T07:51:34.000Z","updated_at":"2023-07-14T08:06:16.000Z","dependencies_parsed_at":null,"dependency_job_id":"aacfaee4-6b58-4e43-a422-b35a162761f6","html_url":"https://github.com/mkroening/unikraft-virtio_ring-error-repro","commit_stats":null,"previous_names":["mkroening/unikraft-virtio_ring-error-repro"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mkroening%2Funikraft-virtio_ring-error-repro","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mkroening%2Funikraft-virtio_ring-error-repro/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mkroening%2Funikraft-virtio_ring-error-repro/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mkroening%2Funikraft-virtio_ring-error-repro/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mkroening","download_url":"https://codeload.github.com/mkroening/unikraft-virtio_ring-error-repro/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248952356,"owners_count":21188427,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["unikraft","virtio"],"created_at":"2024-11-06T06:46:41.547Z","updated_at":"2025-04-14T20:15:53.182Z","avatar_url":"https://github.com/mkroening.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Unikraft `virtio_ring.c` Error Reproduction\n\nThis repository reproduces the https://github.com/unikraft/unikraft/issues/853 `virtio_ring.c` error:\n\n```terminal\nWaiting for connections!\nWriting!\nHalf-time break!\nBreak over!\n[    3.335716] ERR:  [libkvmvirtio] \u003cvirtio_ring.c @  348\u003e Available descriptor:0, Request2\n[    3.338315] ERR:  [libkvmvirtio] \u003cvirtio_ring.c @  348\u003e Available descriptor:0, Request2\nWritten everything!\nClient served!\nWaiting for connections!\n```\n\nThis is a minimal server-client setup.\nThe server transmits 128 MiB to the client.\nIn the middle of the transmission, the server makes a short break.\nThen the transmission continues, resulting in the error.\n\nThe error relies on a race condition.\nIt may trigger more or less often depending on:\n- The size of the unikernel (e.g. adding musl to the binary makes it more frequent).\n- The size of the buffer (bigger transmissions tend to cause errors more reliable).\n- The pause (without pauses inbetween transmissions, the error won't show up).\n- The speed of the QEMU network device (user mode emulation does not show the error, TAP devices do).\n\n# How to Reproduce\n\n0. Make sure to check out the submodules for Unikraft and lwIP sources.\n   ```bash\n   git submodule init\n   ```\n1. Setup the TAP device.\n   ```bash\n   sudo ./setup_tap.sh\n   ```\n2. Start the server using Unikraft.\n   ```bash\n   ./run_server.sh\n   ```\n3. From another terminal, start the client.\n   ```bash\n   ./run_client.sh\n   ```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmkroening%2Funikraft-virtio_ring-error-repro","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmkroening%2Funikraft-virtio_ring-error-repro","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmkroening%2Funikraft-virtio_ring-error-repro/lists"}