Andrea3000

Members
  • Posts

    39
  • Joined

  • Last visited

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

Andrea3000's Achievements

Rookie

Rookie (2/14)

7

Reputation

  1. Thanks @JorgeB I just upgraded to 6.12 and everything appears to be working as expected. I’m running the zpool import command from a user script that is set to run at first array start only. It works but I need to force a refresh of the ZFS master portion of the dashboard the first time I open the page. Almost as if the pool is mounted after the ZFS master plug-in scans for available ZFS pools. I will try to move the command to the go script to see if it makes a difference.
  2. Thanks @JorgeB At the moment I'm not mounting it manually, it is done automatically by the ZFS plugin. Do you happen to know what would the command be to properly mount the zfs pool?
  3. Hi, I’m currently still on Unraid 6.11. I have 1 standard array made of a single nvme drive that I use for dockers and VMs, and that is mounted as default. While the main data “array” is a 8x HDD ZFS pool that I created using the plug-in and that uses a custom mount point at /zfs. I have a lot of user scripts that access the datasets/pool using that custom mount point and I would like to keep those unchanged. If I upgrade to Unraid 6.12, is there a way: 1) Have 2 arrays. One for the fast NVME drive (either xfs or zfs) and one for the large (but slow) ZFS pool? 2) Keep the custom mount point for the zfs pool? Thanks Andrea
  4. Quick update on some findings. 1) I took the source code of eglinfo, which is a tool that is part of the mesa-tools and that lists the EGL capabilities of the system (the equivalent of glxinfo or EGL). 2) I modified the source code to implement the creation of the GBM surface in order to query the capabilities of off-screen rendering of the system, instead of on-screen. This is basically the equivalent of what QEMU does, in fact I copied the relevant portion from the QEMU source code. You can find the final code below: /* * eglinfo - like glxinfo but for EGL * * Brian Paul * 11 March 2005 * * Copyright (C) 2005 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include <epoxy/egl.h> #include <EGL/eglext.h> #include <assert.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <fcntl.h> #include <unistd.h> #include "gbm.h" #define MAX_CONFIGS 1000 #define MAX_MODES 1000 #define MAX_SCREENS 10 /* These are X visual types, so if you're running eglinfo under * something not X, they probably don't make sense. */ static const char *vnames[] = { "SG", "GS", "SC", "PC", "TC", "DC" }; /** * Print table of all available configurations. */ static void PrintConfigs(EGLDisplay d) { EGLConfig configs[MAX_CONFIGS]; EGLint numConfigs, i; eglGetConfigs(d, configs, MAX_CONFIGS, &numConfigs); printf("Configurations:\n"); printf(" bf lv colorbuffer dp st ms vis cav bi renderable supported\n"); printf(" id sz l r g b a th cl ns b id eat nd gl es es2 vg surfaces \n"); /* ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ * | | | | | | | | | | | | | | | | | | | * | | | | | | | | | | | | | | | | | | EGL_SURFACE_TYPE * | | | | | | | | | | | | | | EGL_RENDERABLE_TYPE * | | | | | | | | | | | | | EGL_BIND_TO_TEXTURE_RGB/EGL_BIND_TO_TEXTURE_RGBA * | | | | | | | | | | | | EGL_CONFIG_CAVEAT * | | | | | | | | | | | EGL_NATIVE_VISUAL_ID/EGL_NATIVE_VISUAL_TYPE * | | | | | | | | | | EGL_SAMPLE_BUFFERS * | | | | | | | | | EGL_SAMPLES * | | | | | | | | EGL_STENCIL_SIZE * | | | | | | | EGL_DEPTH_SIZE * | | | | | | EGL_ALPHA_SIZE * | | | | | EGL_BLUE_SIZE * | | | | EGL_GREEN_SIZE * | | | EGL_RED_SIZE * | | EGL_LEVEL * | EGL_BUFFER_SIZE * EGL_CONFIG_ID */ printf("---------------------------------------------------------------------\n"); for (i = 0; i < numConfigs; i++) { EGLint id, size, level; EGLint red, green, blue, alpha; EGLint depth, stencil; EGLint renderable, surfaces; EGLint vid, vtype, caveat, bindRgb, bindRgba; EGLint samples, sampleBuffers; char surfString[100] = ""; eglGetConfigAttrib(d, configs[i], EGL_CONFIG_ID, &id); eglGetConfigAttrib(d, configs[i], EGL_BUFFER_SIZE, &size); eglGetConfigAttrib(d, configs[i], EGL_LEVEL, &level); eglGetConfigAttrib(d, configs[i], EGL_RED_SIZE, &red); eglGetConfigAttrib(d, configs[i], EGL_GREEN_SIZE, &green); eglGetConfigAttrib(d, configs[i], EGL_BLUE_SIZE, &blue); eglGetConfigAttrib(d, configs[i], EGL_ALPHA_SIZE, &alpha); eglGetConfigAttrib(d, configs[i], EGL_DEPTH_SIZE, &depth); eglGetConfigAttrib(d, configs[i], EGL_STENCIL_SIZE, &stencil); eglGetConfigAttrib(d, configs[i], EGL_NATIVE_VISUAL_ID, &vid); eglGetConfigAttrib(d, configs[i], EGL_NATIVE_VISUAL_TYPE, &vtype); eglGetConfigAttrib(d, configs[i], EGL_CONFIG_CAVEAT, &caveat); eglGetConfigAttrib(d, configs[i], EGL_BIND_TO_TEXTURE_RGB, &bindRgb); eglGetConfigAttrib(d, configs[i], EGL_BIND_TO_TEXTURE_RGBA, &bindRgba); eglGetConfigAttrib(d, configs[i], EGL_RENDERABLE_TYPE, &renderable); eglGetConfigAttrib(d, configs[i], EGL_SURFACE_TYPE, &surfaces); eglGetConfigAttrib(d, configs[i], EGL_SAMPLES, &samples); eglGetConfigAttrib(d, configs[i], EGL_SAMPLE_BUFFERS, &sampleBuffers); if (surfaces & EGL_WINDOW_BIT) strcat(surfString, "win,"); if (surfaces & EGL_PBUFFER_BIT) strcat(surfString, "pb,"); if (surfaces & EGL_PIXMAP_BIT) strcat(surfString, "pix,"); if (surfaces & EGL_STREAM_BIT_KHR) strcat(surfString, "str,"); if (strlen(surfString) > 0) surfString[strlen(surfString) - 1] = 0; printf("0x%02x %2d %2d %2d %2d %2d %2d %2d %2d %2d%2d 0x%02x%s ", id, size, level, red, green, blue, alpha, depth, stencil, samples, sampleBuffers, vid, vtype < 6 ? vnames[vtype] : "--"); printf(" %c %c %c %c %c %c %s\n", (caveat != EGL_NONE) ? 'y' : ' ', (bindRgba) ? 'a' : (bindRgb) ? 'y' : ' ', (renderable & EGL_OPENGL_BIT) ? 'y' : ' ', (renderable & EGL_OPENGL_ES_BIT) ? 'y' : ' ', (renderable & EGL_OPENGL_ES2_BIT) ? 'y' : ' ', (renderable & EGL_OPENVG_BIT) ? 'y' : ' ', surfString); } } static const char * PrintExtensions(EGLDisplay d) { const char *extensions, *p, *end, *next; int column; puts(d == EGL_NO_DISPLAY ? "EGL client extensions string:" : "EGL extensions string:"); extensions = eglQueryString(d, EGL_EXTENSIONS); if (!extensions) return NULL; column = 0; end = extensions + strlen(extensions); for (p = extensions; p < end; p = next + 1) { next = strchr(p, ' '); if (next == NULL) next = end; if (column > 0 && column + next - p + 1 > 70) { printf("\n"); column = 0; } if (column == 0) printf(" "); else printf(" "); column += next - p + 1; printf("%.*s", (int) (next - p), p); p = next + 1; } if (column > 0) printf("\n"); return extensions; } const char *egl_get_error_string(void) { EGLint error = eglGetError(); switch (error) { case EGL_SUCCESS: return "EGL_SUCCESS"; case EGL_NOT_INITIALIZED: return "EGL_NOT_INITIALIZED"; case EGL_BAD_ACCESS: return "EGL_BAD_ACCESS"; case EGL_BAD_ALLOC: return "EGL_BAD_ALLOC"; case EGL_BAD_ATTRIBUTE: return "EGL_BAD_ATTRIBUTE"; case EGL_BAD_CONTEXT: return "EGL_BAD_CONTEXT"; case EGL_BAD_CONFIG: return "EGL_BAD_CONFIG"; case EGL_BAD_CURRENT_SURFACE: return "EGL_BAD_CURRENT_SURFACE"; case EGL_BAD_DISPLAY: return "EGL_BAD_DISPLAY"; case EGL_BAD_SURFACE: return "EGL_BAD_SURFACE"; case EGL_BAD_MATCH: return "EGL_BAD_MATCH"; case EGL_BAD_PARAMETER: return "EGL_BAD_PARAMETER"; case EGL_BAD_NATIVE_PIXMAP: return "EGL_BAD_NATIVE_PIXMAP"; case EGL_BAD_NATIVE_WINDOW: return "EGL_BAD_NATIVE_WINDOW"; case EGL_CONTEXT_LOST: return "EGL_CONTEXT_LOST"; default: return "Unknown EGL error"; } } static int doOneDisplay(EGLDisplay d, const char *name) { int maj, min; printf("%s:\n", name); if (!eglInitialize(d, &maj, &min)) { printf("eglinfo: eglInitialize failed\n\n"); return 1; } printf("EGL API version: %d.%d\n", maj, min); printf("EGL vendor string: %s\n", eglQueryString(d, EGL_VENDOR)); printf("EGL version string: %s\n", eglQueryString(d, EGL_VERSION)); #ifdef EGL_VERSION_1_2 printf("EGL client APIs: %s\n", eglQueryString(d, EGL_CLIENT_APIS)); #endif PrintExtensions(d); PrintConfigs(d); eglTerminate(d); printf("\n"); return 0; } int qemu_egl_rn_fd; struct gbm_device *qemu_egl_rn_gbm_dev; int egl_rendernode_init(const char *rendernode) { qemu_egl_rn_fd = -1; int rc; qemu_egl_rn_fd = open(rendernode, O_RDWR | O_CLOEXEC | O_NOCTTY | O_NONBLOCK); if (qemu_egl_rn_fd == -1) { printf("egl: no drm render node available\n"); goto err; } qemu_egl_rn_gbm_dev = gbm_create_device(qemu_egl_rn_fd); if (!qemu_egl_rn_gbm_dev) { printf("egl: gbm_create_device failed\n"); goto err; } return 0; err: if (qemu_egl_rn_gbm_dev) { gbm_device_destroy(qemu_egl_rn_gbm_dev); } if (qemu_egl_rn_fd != -1) { close(qemu_egl_rn_fd); } return -1; } int main(int argc, char *argv[]) { int ret = 0; const char *clientext; char *rendernode; if (argc > 1) { rendernode = argv[1]; } clientext = PrintExtensions(EGL_NO_DISPLAY); printf("\n"); if (strstr(clientext, "EGL_EXT_platform_base")) { PFNEGLGETPLATFORMDISPLAYEXTPROC getPlatformDisplay = (PFNEGLGETPLATFORMDISPLAYEXTPROC) eglGetProcAddress( "eglGetPlatformDisplayEXT"); if (strstr(clientext, "EGL_MESA_platform_gbm") || strstr(clientext, "EGL_KHR_platform_gbm")) ret += doOneDisplay(getPlatformDisplay(EGL_PLATFORM_GBM_MESA, (EGLNativeDisplayType)qemu_egl_rn_gbm_dev, NULL), "GBM platform"); } else { egl_rendernode_init(rendernode); EGLDisplay *egl_display = eglGetDisplay((EGLNativeDisplayType)qemu_egl_rn_gbm_dev); if (egl_display == EGL_NO_DISPLAY) { printf("egl: eglGetDisplay failed: %s\n", egl_get_error_string()); if (qemu_egl_rn_gbm_dev) { gbm_device_destroy(qemu_egl_rn_gbm_dev); } if (qemu_egl_rn_fd != -1) { close(qemu_egl_rn_fd); } return 0; } ret = doOneDisplay(egl_display, "GBM platform"); } return ret; } 3) I was then able to see what was the error code...which is actually EGL_SUCCESS!! Despite still returning EGL_NO_DISPLAY 4) I then created a Slackware 15.0 VM on Unraid and I passed through the IGPU. 5) Running the code above on the stock Slackware VM produces the following output: EGL client extensions string: EGL_EXT_device_base EGL_EXT_device_enumeration EGL_EXT_device_query EGL_EXT_platform_base EGL_KHR_client_get_all_proc_addresses EGL_EXT_client_extensions EGL_KHR_debug EGL_EXT_platform_device EGL_EXT_platform_wayland EGL_KHR_platform_wayland EGL_EXT_platform_x11 EGL_KHR_platform_x11 EGL_MESA_platform_xcb EGL_MESA_platform_gbm EGL_KHR_platform_gbm EGL_MESA_platform_surfaceless GBM platform: EGL API version: 1.5 EGL vendor string: Mesa Project EGL version string: 1.5 EGL client APIs: OpenGL OpenGL_ES EGL extensions string: EGL_ANDROID_blob_cache EGL_ANDROID_native_fence_sync EGL_EXT_buffer_age EGL_EXT_create_context_robustness EGL_EXT_image_dma_buf_import EGL_EXT_image_dma_buf_import_modifiers EGL_IMG_context_priority EGL_KHR_cl_event2 EGL_KHR_config_attribs EGL_KHR_create_context EGL_KHR_create_context_no_error EGL_KHR_fence_sync EGL_KHR_get_all_proc_addresses EGL_KHR_gl_colorspace EGL_KHR_gl_renderbuffer_image EGL_KHR_gl_texture_2D_image EGL_KHR_gl_texture_3D_image EGL_KHR_gl_texture_cubemap_image EGL_KHR_image EGL_KHR_image_base EGL_KHR_image_pixmap EGL_KHR_no_config_context EGL_KHR_reusable_sync EGL_KHR_surfaceless_context EGL_EXT_pixel_format_float EGL_KHR_wait_sync EGL_MESA_configless_context EGL_MESA_drm_image EGL_MESA_image_dma_buf_export EGL_MESA_query_driver EGL_WL_bind_wayland_display Configurations: bf lv colorbuffer dp st ms vis cav bi renderable supported id sz l r g b a th cl ns b id eat nd gl es es2 vg surfaces --------------------------------------------------------------------- 0x01 32 0 10 10 10 2 0 0 0 0 0x30335241-- y y y win 0x02 32 0 10 10 10 2 16 0 0 0 0x30335241-- y y y win 0x03 32 0 10 10 10 2 24 0 0 0 0x30335241-- y y y win 0x04 32 0 10 10 10 2 24 8 0 0 0x30335241-- y y y win 0x05 32 0 10 10 10 2 0 0 2 1 0x30335241-- y y y win 0x06 32 0 10 10 10 2 0 0 4 1 0x30335241-- y y y win 0x07 32 0 10 10 10 2 0 0 8 1 0x30335241-- y y y win 0x08 32 0 10 10 10 2 0 0 16 1 0x30335241-- y y y win 0x09 32 0 10 10 10 2 16 0 2 1 0x30335241-- y y y win 0x0a 32 0 10 10 10 2 16 0 4 1 0x30335241-- y y y win 0x0b 32 0 10 10 10 2 16 0 8 1 0x30335241-- y y y win 0x0c 32 0 10 10 10 2 16 0 16 1 0x30335241-- y y y win 0x0d 32 0 10 10 10 2 24 0 2 1 0x30335241-- y y y win 0x0e 32 0 10 10 10 2 24 0 4 1 0x30335241-- y y y win 0x0f 32 0 10 10 10 2 24 0 8 1 0x30335241-- y y y win 0x10 32 0 10 10 10 2 24 0 16 1 0x30335241-- y y y win 0x11 32 0 10 10 10 2 24 8 2 1 0x30335241-- y y y win 0x12 32 0 10 10 10 2 24 8 4 1 0x30335241-- y y y win 0x13 32 0 10 10 10 2 24 8 8 1 0x30335241-- y y y win 0x14 32 0 10 10 10 2 24 8 16 1 0x30335241-- y y y win 0x15 30 0 10 10 10 0 0 0 0 0 0x30335258-- y y y win 0x16 30 0 10 10 10 0 16 0 0 0 0x30335258-- y y y win 0x17 30 0 10 10 10 0 24 0 0 0 0x30335258-- y y y win 0x18 30 0 10 10 10 0 24 8 0 0 0x30335258-- y y y win 0x19 30 0 10 10 10 0 0 0 2 1 0x30335258-- y y y win 0x1a 30 0 10 10 10 0 0 0 4 1 0x30335258-- y y y win 0x1b 30 0 10 10 10 0 0 0 8 1 0x30335258-- y y y win 0x1c 30 0 10 10 10 0 0 0 16 1 0x30335258-- y y y win 0x1d 30 0 10 10 10 0 16 0 2 1 0x30335258-- y y y win 0x1e 30 0 10 10 10 0 16 0 4 1 0x30335258-- y y y win 0x1f 30 0 10 10 10 0 16 0 8 1 0x30335258-- y y y win 0x20 30 0 10 10 10 0 16 0 16 1 0x30335258-- y y y win 0x21 30 0 10 10 10 0 24 0 2 1 0x30335258-- y y y win 0x22 30 0 10 10 10 0 24 0 4 1 0x30335258-- y y y win 0x23 30 0 10 10 10 0 24 0 8 1 0x30335258-- y y y win 0x24 30 0 10 10 10 0 24 0 16 1 0x30335258-- y y y win 0x25 30 0 10 10 10 0 24 8 2 1 0x30335258-- y y y win 0x26 30 0 10 10 10 0 24 8 4 1 0x30335258-- y y y win 0x27 30 0 10 10 10 0 24 8 8 1 0x30335258-- y y y win 0x28 30 0 10 10 10 0 24 8 16 1 0x30335258-- y y y win 0x29 32 0 8 8 8 8 0 0 0 0 0x34325241-- y y y win 0x2a 32 0 8 8 8 8 16 0 0 0 0x34325241-- y y y win 0x2b 32 0 8 8 8 8 24 0 0 0 0x34325241-- y y y win 0x2c 32 0 8 8 8 8 24 8 0 0 0x34325241-- y y y win 0x2d 32 0 8 8 8 8 0 0 2 1 0x34325241-- y y y win 0x2e 32 0 8 8 8 8 0 0 4 1 0x34325241-- y y y win 0x2f 32 0 8 8 8 8 0 0 8 1 0x34325241-- y y y win 0x30 32 0 8 8 8 8 0 0 16 1 0x34325241-- y y y win 0x31 32 0 8 8 8 8 16 0 2 1 0x34325241-- y y y win 0x32 32 0 8 8 8 8 16 0 4 1 0x34325241-- y y y win 0x33 32 0 8 8 8 8 16 0 8 1 0x34325241-- y y y win 0x34 32 0 8 8 8 8 16 0 16 1 0x34325241-- y y y win 0x35 32 0 8 8 8 8 24 0 2 1 0x34325241-- y y y win 0x36 32 0 8 8 8 8 24 0 4 1 0x34325241-- y y y win 0x37 32 0 8 8 8 8 24 0 8 1 0x34325241-- y y y win 0x38 32 0 8 8 8 8 24 0 16 1 0x34325241-- y y y win 0x39 32 0 8 8 8 8 24 8 2 1 0x34325241-- y y y win 0x3a 32 0 8 8 8 8 24 8 4 1 0x34325241-- y y y win 0x3b 32 0 8 8 8 8 24 8 8 1 0x34325241-- y y y win 0x3c 32 0 8 8 8 8 24 8 16 1 0x34325241-- y y y win 0x3d 24 0 8 8 8 0 0 0 0 0 0x34325258-- y y y win 0x3e 24 0 8 8 8 0 16 0 0 0 0x34325258-- y y y win 0x3f 24 0 8 8 8 0 24 0 0 0 0x34325258-- y y y win 0x40 24 0 8 8 8 0 24 8 0 0 0x34325258-- y y y win 0x41 24 0 8 8 8 0 0 0 2 1 0x34325258-- y y y win 0x42 24 0 8 8 8 0 0 0 4 1 0x34325258-- y y y win 0x43 24 0 8 8 8 0 0 0 8 1 0x34325258-- y y y win 0x44 24 0 8 8 8 0 0 0 16 1 0x34325258-- y y y win 0x45 24 0 8 8 8 0 16 0 2 1 0x34325258-- y y y win 0x46 24 0 8 8 8 0 16 0 4 1 0x34325258-- y y y win 0x47 24 0 8 8 8 0 16 0 8 1 0x34325258-- y y y win 0x48 24 0 8 8 8 0 16 0 16 1 0x34325258-- y y y win 0x49 24 0 8 8 8 0 24 0 2 1 0x34325258-- y y y win 0x4a 24 0 8 8 8 0 24 0 4 1 0x34325258-- y y y win 0x4b 24 0 8 8 8 0 24 0 8 1 0x34325258-- y y y win 0x4c 24 0 8 8 8 0 24 0 16 1 0x34325258-- y y y win 0x4d 24 0 8 8 8 0 24 8 2 1 0x34325258-- y y y win 0x4e 24 0 8 8 8 0 24 8 4 1 0x34325258-- y y y win 0x4f 24 0 8 8 8 0 24 8 8 1 0x34325258-- y y y win 0x50 24 0 8 8 8 0 24 8 16 1 0x34325258-- y y y win 0x51 16 0 5 6 5 0 0 0 0 0 0x36314752-- y y y win 0x52 16 0 5 6 5 0 16 0 0 0 0x36314752-- y y y win 0x53 16 0 5 6 5 0 24 0 0 0 0x36314752-- y y y win 0x54 16 0 5 6 5 0 24 8 0 0 0x36314752-- y y y win 0x55 16 0 5 6 5 0 0 0 2 1 0x36314752-- y y y win 0x56 16 0 5 6 5 0 0 0 4 1 0x36314752-- y y y win 0x57 16 0 5 6 5 0 0 0 8 1 0x36314752-- y y y win 0x58 16 0 5 6 5 0 0 0 16 1 0x36314752-- y y y win 0x59 16 0 5 6 5 0 16 0 2 1 0x36314752-- y y y win 0x5a 16 0 5 6 5 0 16 0 4 1 0x36314752-- y y y win 0x5b 16 0 5 6 5 0 16 0 8 1 0x36314752-- y y y win 0x5c 16 0 5 6 5 0 16 0 16 1 0x36314752-- y y y win 0x5d 16 0 5 6 5 0 24 0 2 1 0x36314752-- y y y win 0x5e 16 0 5 6 5 0 24 0 4 1 0x36314752-- y y y win 0x5f 16 0 5 6 5 0 24 0 8 1 0x36314752-- y y y win 0x60 16 0 5 6 5 0 24 0 16 1 0x36314752-- y y y win 0x61 16 0 5 6 5 0 24 8 2 1 0x36314752-- y y y win 0x62 16 0 5 6 5 0 24 8 4 1 0x36314752-- y y y win 0x63 16 0 5 6 5 0 24 8 8 1 0x36314752-- y y y win 0x64 16 0 5 6 5 0 24 8 16 1 0x36314752-- y y y win 0x65 64 0 16 16 16 16 0 0 0 0 0x48344241-- y y y win 0x66 64 0 16 16 16 16 16 0 0 0 0x48344241-- y y y win 0x67 64 0 16 16 16 16 24 0 0 0 0x48344241-- y y y win 0x68 64 0 16 16 16 16 24 8 0 0 0x48344241-- y y y win 0x69 64 0 16 16 16 16 0 0 2 1 0x48344241-- y y y win 0x6a 64 0 16 16 16 16 0 0 4 1 0x48344241-- y y y win 0x6b 64 0 16 16 16 16 0 0 8 1 0x48344241-- y y y win 0x6c 64 0 16 16 16 16 0 0 16 1 0x48344241-- y y y win 0x6d 64 0 16 16 16 16 16 0 2 1 0x48344241-- y y y win 0x6e 64 0 16 16 16 16 16 0 4 1 0x48344241-- y y y win 0x6f 64 0 16 16 16 16 16 0 8 1 0x48344241-- y y y win 0x70 64 0 16 16 16 16 16 0 16 1 0x48344241-- y y y win 0x71 64 0 16 16 16 16 24 0 2 1 0x48344241-- y y y win 0x72 64 0 16 16 16 16 24 0 4 1 0x48344241-- y y y win 0x73 64 0 16 16 16 16 24 0 8 1 0x48344241-- y y y win 0x74 64 0 16 16 16 16 24 0 16 1 0x48344241-- y y y win 0x75 64 0 16 16 16 16 24 8 2 1 0x48344241-- y y y win 0x76 64 0 16 16 16 16 24 8 4 1 0x48344241-- y y y win 0x77 64 0 16 16 16 16 24 8 8 1 0x48344241-- y y y win 0x78 64 0 16 16 16 16 24 8 16 1 0x48344241-- y y y win 0x79 48 0 16 16 16 0 0 0 0 0 0x48344258-- y y y win 0x7a 48 0 16 16 16 0 16 0 0 0 0x48344258-- y y y win 0x7b 48 0 16 16 16 0 24 0 0 0 0x48344258-- y y y win 0x7c 48 0 16 16 16 0 24 8 0 0 0x48344258-- y y y win 0x7d 48 0 16 16 16 0 0 0 2 1 0x48344258-- y y y win 0x7e 48 0 16 16 16 0 0 0 4 1 0x48344258-- y y y win 0x7f 48 0 16 16 16 0 0 0 8 1 0x48344258-- y y y win 0x80 48 0 16 16 16 0 0 0 16 1 0x48344258-- y y y win 0x81 48 0 16 16 16 0 16 0 2 1 0x48344258-- y y y win 0x82 48 0 16 16 16 0 16 0 4 1 0x48344258-- y y y win 0x83 48 0 16 16 16 0 16 0 8 1 0x48344258-- y y y win 0x84 48 0 16 16 16 0 16 0 16 1 0x48344258-- y y y win 0x85 48 0 16 16 16 0 24 0 2 1 0x48344258-- y y y win 0x86 48 0 16 16 16 0 24 0 4 1 0x48344258-- y y y win 0x87 48 0 16 16 16 0 24 0 8 1 0x48344258-- y y y win 0x88 48 0 16 16 16 0 24 0 16 1 0x48344258-- y y y win 0x89 48 0 16 16 16 0 24 8 2 1 0x48344258-- y y y win 0x8a 48 0 16 16 16 0 24 8 4 1 0x48344258-- y y y win 0x8b 48 0 16 16 16 0 24 8 8 1 0x48344258-- y y y win 0x8c 48 0 16 16 16 0 24 8 16 1 0x48344258-- y y y win Here everything works and the tool shows support to EGL_MESA_platform_gbm which is required for off-screen rendering. 6) Instead, running the same code on Unraid produces the following output: EGL client extensions string: egl: eglGetDisplay failed: EGL_SUCCESS As you can see, the GPU driver on Unraid doesn't support any EGL extension, making off-screen rendering impossible! I've raised a bug on the bug reporting section of the forum, because QEMU is compiled with OpenGL support but the GPU drivers that are shipped with Unraid are the limiting factor to make QEMU work correctly with OpenGL:
  5. Despite the fact that QEMU is compiled with OpenGL support since 6.10, not all elements are in place for it to work. I can't create a VM with "egl-headless" graphical framebuffer. I've created a post in the VM forum to explain the steps I made: To follow-up from that post I modified the eglinfo executable to create a GBM surface like QEMU does and to check what the error code is. The error code is surprisingly "EGL_SUCCESS", but it still returns "EGL_NO_DISPLAY" I dug a bit deeper with the modded eglinfo executable and I found out that on Unraid there aren't any supported EGL client extensions, in particular it's missing the crucial "EGL_MESA_platform_gbm" and "EGL_KHR_platform_gbm". Without those extensions, off-screen rendering isn't possible and egl-headless can't work. Have those extensions been removed for a reason?
  6. Thanks. In the meantime I will keep investigating because I would like to find a solution without having to wait for the next Unraid release
  7. I have a supported CPU (i3-9100) and I already use the GVT-g plug-in. With that, GVT-g works perfectly in a Windows 10 VM. The way it works in the Windows 10 VM is that the primary gpu (the one used with VNC access) is an emulated device, while the mediated device is a secondary GPU that is used via RDP to provide hardware rendering. I’m trying to get GVT-g working also with MacOS, and for that the mediated device needs to be the only video device presented to the guest. For that reason I have to enable display=on in the hostdev entry in the xml and use egl-headless combined with VNC or Spice (as per instructions from my first post). I don’t even think that the qemu command goes as far as trying to boot the OS, it fails already when trying to setup the display output. From qemu 8.0 the log will show what is the actual error for failing to get the display, as you can see here: https://github.com/qemu/qemu/blob/83a9cdbd65ceb4a443630aed011a00ef217ed408/ui/egl-helpers.c#L485 The error can be one of the following: switch (error) { case EGL_SUCCESS: return "EGL_SUCCESS"; case EGL_NOT_INITIALIZED: return "EGL_NOT_INITIALIZED"; case EGL_BAD_ACCESS: return "EGL_BAD_ACCESS"; case EGL_BAD_ALLOC: return "EGL_BAD_ALLOC"; case EGL_BAD_ATTRIBUTE: return "EGL_BAD_ATTRIBUTE"; case EGL_BAD_CONTEXT: return "EGL_BAD_CONTEXT"; case EGL_BAD_CONFIG: return "EGL_BAD_CONFIG"; case EGL_BAD_CURRENT_SURFACE: return "EGL_BAD_CURRENT_SURFACE"; case EGL_BAD_DISPLAY: return "EGL_BAD_DISPLAY"; case EGL_BAD_SURFACE: return "EGL_BAD_SURFACE"; case EGL_BAD_MATCH: return "EGL_BAD_MATCH"; case EGL_BAD_PARAMETER: return "EGL_BAD_PARAMETER"; case EGL_BAD_NATIVE_PIXMAP: return "EGL_BAD_NATIVE_PIXMAP"; case EGL_BAD_NATIVE_WINDOW: return "EGL_BAD_NATIVE_WINDOW"; case EGL_CONTEXT_LOST: return "EGL_CONTEXT_LOST"; default: return "Unknown EGL error"; For older versions of qemu, the log message doesn’t display what the error actually is (see the GitHub link from the first post). As far as I can see, there is no way to get qemu 8.0 on Unraid at the moment, is that correct?
  8. Hi all, I'm trying to create a VM that uses "egl-headless" graphical framebuffer, combined with VNC or Spice to enable hardware acceleration on the guest with a mediated device (iGPU). I've followed this guide: https://wiki.archlinux.org/title/Intel_GVT-g As far as I know, starting from Unraid 6.10, QEMU has been compiled with OpenGL support, therefore this should be possible. This is the xml for the VM: <?xml version='1.0' encoding='UTF-8'?> <domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'> <name>MacOS Monterey</name> <uuid>91b82c42-f5a2-424f-b45f-714ed7c190de</uuid> <description>MacOS Monterey</description> <metadata> <vmtemplate xmlns="unraid" name="Windows 10" icon="default.png" os="osx"/> </metadata> <memory unit='KiB'>8388608</memory> <currentMemory unit='KiB'>8388608</currentMemory> <memoryBacking> <nosharepages/> </memoryBacking> <vcpu placement='static'>2</vcpu> <cputune> <vcpupin vcpu='0' cpuset='0'/> <vcpupin vcpu='1' cpuset='1'/> </cputune> <os> <type arch='x86_64' machine='pc-q35-7.1'>hvm</type> <loader readonly='yes' type='pflash'>/mnt/user/system/custom_ovmf/Macinabox_CODE-pure-efi.fd</loader> <nvram>/etc/libvirt/qemu/nvram/91b82c42-f5a2-424f-b45f-714ed7c190de_VARS-pure-efi.fd</nvram> </os> <features> <acpi/> <apic/> </features> <cpu mode='host-passthrough' check='none' migratable='on'> <topology sockets='1' dies='1' cores='2' threads='1'/> <cache mode='passthrough'/> </cpu> <clock offset='utc'> <timer name='rtc' tickpolicy='catchup'/> <timer name='pit' tickpolicy='delay'/> <timer name='hpet' present='no'/> </clock> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>restart</on_crash> <devices> <emulator>/usr/local/sbin/qemu</emulator> <disk type='file' device='disk'> <driver name='qemu' type='raw' cache='writeback'/> <source file='/mnt/user/domains/Macinabox Monterey/macos_disk.img'/> <target dev='hdc' bus='sata'/> <boot order='1'/> <address type='drive' controller='0' bus='0' target='0' unit='2'/> </disk> <controller type='usb' index='0' model='ich9-ehci1'> <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x7'/> </controller> <controller type='usb' index='0' model='ich9-uhci1'> <master startport='0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0' multifunction='on'/> </controller> <controller type='usb' index='0' model='ich9-uhci2'> <master startport='2'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x1' multifunction='on'/> </controller> <controller type='usb' index='0' model='ich9-uhci3'> <master startport='4'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x2'/> </controller> <controller type='pci' index='0' model='pcie-root'/> <controller type='pci' index='1' model='pcie-root-port'> <model name='pcie-root-port'/> <target chassis='1' port='0x10'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0' multifunction='on'/> </controller> <controller type='pci' index='2' model='pcie-root-port'> <model name='pcie-root-port'/> <target chassis='2' port='0x11'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x1'/> </controller> <controller type='pci' index='3' model='pcie-root-port'> <model name='pcie-root-port'/> <target chassis='3' port='0x12'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x2'/> </controller> <controller type='pci' index='4' model='pcie-root-port'> <model name='pcie-root-port'/> <target chassis='4' port='0x13'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x3'/> </controller> <controller type='virtio-serial' index='0'> <address type='pci' domain='0x0000' bus='0x02' slot='0x00' function='0x0'/> </controller> <controller type='sata' index='0'> <address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/> </controller> <interface type='bridge'> <mac address='52:54:00:7d:24:fd'/> <source bridge='br0'/> <model type='virtio'/> <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/> </interface> <serial type='pty'> <target type='isa-serial' port='0'> <model name='isa-serial'/> </target> </serial> <console type='pty'> <target type='serial' port='0'/> </console> <channel type='unix'> <target type='virtio' name='org.qemu.guest_agent.0'/> <address type='virtio-serial' controller='0' bus='0' port='1'/> </channel> <input type='tablet' bus='usb'> <address type='usb' bus='0' port='1'/> </input> <input type='mouse' bus='ps2'/> <input type='keyboard' bus='ps2'/> <graphics type='vnc' port='-1' autoport='yes' websocket='-1' listen='0.0.0.0' keymap='en-us'> <listen type='address' address='0.0.0.0'/> </graphics> <graphics type='egl-headless'> <gl rendernode='/dev/dri/by-path/pci-0000:00:02.0-render'/> </graphics> <audio id='1' type='none'/> <video> <model type='none'/> </video> <hostdev mode='subsystem' type='mdev' managed='no' model='vfio-pci' display='on' ramfb='on'> <source> <address uuid='42a87f64-e629-4d69-9672-6bef7162d042'/> </source> <address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/> </hostdev> <memballoon model='virtio'> <address type='pci' domain='0x0000' bus='0x03' slot='0x00' function='0x0'/> </memballoon> </devices> <qemu:commandline> <qemu:arg value='-usb'/> <qemu:arg value='-device'/> <qemu:arg value='usb-kbd,bus=usb-bus.0'/> <qemu:arg value='-device'/> <qemu:arg value='isa-applesmc,osk=[---HIDDEN---]'/> <qemu:arg value='-smbios'/> <qemu:arg value='type=2'/> <qemu:arg value='-cpu'/> <qemu:arg value='Penryn,kvm=on,vendor=GenuineIntel,+kvm_pv_unhalt,+kvm_pv_eoi,+hypervisor,+invtsc,+pcid,+ssse3,+sse4.2,+popcnt,+avx,+avx2,+aes,+fma,+bmi1,+bmi2,+xsave,+xsaveopt,+rdrand,check'/> </qemu:commandline> <qemu:override> <qemu:device alias='hostdev0'> <qemu:frontend> <qemu:property name='x-igd-opregion' type='bool' value='true'/> <qemu:property name='romfile' type='string' value='/mnt/user/data/i915dev/i915ovmf.rom'/> <qemu:property name='driver' type='string' value='vfio-pci-nohotplug'/> <qemu:property name='ramfb' type='bool' value='true'/> </qemu:frontend> </qemu:device> </qemu:override> </domain> When I first launched the VM I got this error in the libvirt log: showing that the MESA library was missing. I installed the MESA library and its dependencies from here: https://slackware.pkgs.org/15.0/slackware-x86_64/mesa-21.3.5-x86_64-2.txz.html Now when I launch the VM I get the following error: The error that triggers all the others is qemu-system-x86_64: egl: eglGetDisplay failed Looking at the source code of QEMU, it happens here: https://github.com/qemu/qemu/blob/9abcf9776d8906c53feacab686f3d50137654b62/ui/egl-helpers.c#L441C51-L441C51 Do you know what could be causing this error?
  9. Hi all, I came across this reddit post: https://www.reddit.com/r/VFIO/comments/innriq/successful_macos_catalina_with_intel_gvtg/ that reports partial success (no hardware acceleration) of GVT-g on a MacOS VM using a custom VBIOS. The instructions to set it up on Fedora and Linux are available on this GitHub page: https://github.com/patmagauran/i915ovmfPkg/wiki/Using I'm trying to make this work on Unraid. I already have the Intel GVT-g plugin from @ich777 installed and it works correctly on a Windows 10 VM. I've used the Macinabox docker container to install MacOS Monterey: Without assigning any vGPU to the MacOS VM it works just fine with software rendering. I then created compiled the custom ROM, created a new vGPU instance, assigned it to the MacOS VM, and I have modified the xml to closely match the instruction shown for QEMU on the GitHub page. This is what I have in the end: <?xml version='1.0' encoding='UTF-8'?> <domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'> <name>MacOS Monterey</name> <uuid>91b82c42-f5a2-424f-b45f-714ed7c190de</uuid> <description>MacOS Monterey</description> <metadata> <vmtemplate xmlns="unraid" name="Windows 10" icon="default.png" os="osx"/> </metadata> <memory unit='KiB'>8388608</memory> <currentMemory unit='KiB'>8388608</currentMemory> <memoryBacking> <nosharepages/> </memoryBacking> <vcpu placement='static'>2</vcpu> <cputune> <vcpupin vcpu='0' cpuset='0'/> <vcpupin vcpu='1' cpuset='1'/> </cputune> <os> <type arch='x86_64' machine='pc-q35-7.1'>hvm</type> <loader readonly='yes' type='pflash'>/mnt/user/system/custom_ovmf/Macinabox_CODE-pure-efi.fd</loader> <nvram>/etc/libvirt/qemu/nvram/91b82c42-f5a2-424f-b45f-714ed7c190de_VARS-pure-efi.fd</nvram> </os> <features> <acpi/> <apic/> </features> <cpu mode='host-passthrough' check='none' migratable='on'> <topology sockets='1' dies='1' cores='2' threads='1'/> <cache mode='passthrough'/> </cpu> <clock offset='utc'> <timer name='rtc' tickpolicy='catchup'/> <timer name='pit' tickpolicy='delay'/> <timer name='hpet' present='no'/> </clock> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>restart</on_crash> <devices> <emulator>/usr/local/sbin/qemu</emulator> <disk type='file' device='disk'> <driver name='qemu' type='raw' cache='writeback'/> <source file='/mnt/user/domains/Macinabox Monterey/macos_disk.img'/> <target dev='hdc' bus='sata'/> <boot order='1'/> <address type='drive' controller='0' bus='0' target='0' unit='2'/> </disk> <controller type='usb' index='0' model='ich9-ehci1'> <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x7'/> </controller> <controller type='usb' index='0' model='ich9-uhci1'> <master startport='0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0' multifunction='on'/> </controller> <controller type='usb' index='0' model='ich9-uhci2'> <master startport='2'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x1' multifunction='on'/> </controller> <controller type='usb' index='0' model='ich9-uhci3'> <master startport='4'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x2'/> </controller> <controller type='pci' index='0' model='pcie-root'/> <controller type='pci' index='1' model='pcie-root-port'> <model name='pcie-root-port'/> <target chassis='1' port='0x10'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0' multifunction='on'/> </controller> <controller type='pci' index='2' model='pcie-root-port'> <model name='pcie-root-port'/> <target chassis='2' port='0x11'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x1'/> </controller> <controller type='pci' index='3' model='pcie-root-port'> <model name='pcie-root-port'/> <target chassis='3' port='0x12'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x2'/> </controller> <controller type='pci' index='4' model='pcie-root-port'> <model name='pcie-root-port'/> <target chassis='4' port='0x13'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x3'/> </controller> <controller type='virtio-serial' index='0'> <address type='pci' domain='0x0000' bus='0x02' slot='0x00' function='0x0'/> </controller> <controller type='sata' index='0'> <address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/> </controller> <interface type='bridge'> <mac address='52:54:00:7d:24:fd'/> <source bridge='br0'/> <model type='virtio'/> <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/> </interface> <serial type='pty'> <target type='isa-serial' port='0'> <model name='isa-serial'/> </target> </serial> <console type='pty'> <target type='serial' port='0'/> </console> <channel type='unix'> <target type='virtio' name='org.qemu.guest_agent.0'/> <address type='virtio-serial' controller='0' bus='0' port='1'/> </channel> <input type='tablet' bus='usb'> <address type='usb' bus='0' port='1'/> </input> <input type='mouse' bus='ps2'/> <input type='keyboard' bus='ps2'/> <graphics type='vnc' port='-1' autoport='yes' websocket='-1' listen='0.0.0.0' keymap='en-us'> <listen type='address' address='0.0.0.0'/> </graphics> <graphics type='egl-headless'> <gl rendernode='/dev/dri/by-path/pci-0000:00:02.0-render'/> </graphics> <audio id='1' type='none'/> <video> <model type='none'/> </video> <hostdev mode='subsystem' type='mdev' managed='no' model='vfio-pci' display='on'> <source> <address uuid='42a87f64-e629-4d69-9672-6bef7162d042'/> </source> <address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/> </hostdev> <memballoon model='virtio'> <address type='pci' domain='0x0000' bus='0x03' slot='0x00' function='0x0'/> </memballoon> </devices> <qemu:commandline> <qemu:arg value='-usb'/> <qemu:arg value='-device'/> <qemu:arg value='usb-kbd,bus=usb-bus.0'/> <qemu:arg value='-device'/> <qemu:arg value='isa-applesmc,osk=[--- HIDDEN ---]'/> <qemu:arg value='-smbios'/> <qemu:arg value='type=2'/> <qemu:arg value='-cpu'/> <qemu:arg value='Penryn,kvm=on,vendor=GenuineIntel,+kvm_pv_unhalt,+kvm_pv_eoi,+hypervisor,+invtsc,+pcid,+ssse3,+sse4.2,+popcnt,+avx,+avx2,+aes,+fma,+bmi1,+bmi2,+xsave,+xsaveopt,+rdrand,check'/> </qemu:commandline> <qemu:override> <qemu:device alias='hostdev0'> <qemu:frontend> <qemu:property name='x-igd-opregion' type='bool' value='true'/> <qemu:property name='romfile' type='string' value='/mnt/user/data/i915dev/i915ovmf.rom'/> </qemu:frontend> </qemu:device> </qemu:override> </domain> Every time I try to start the VM it completely freezes the host and I'm forced to reboot. I can still access the Unraud console if I open it beforehand but even trying to stop libvirt doesn't work..the command hangs. I have no way to access the VM log to see if there are any errors. The freeze happens even if I don't specify the custom ROM. Do you know what's going on? Would you be able to help me? Thanks Andrea
  10. I have found out that even the official Intel drivers don’t expose the temperature sensor for X540 and X550 cards. I raised a feature request last year but nothing has been done. I was told by an Intel developer that the temperature sensor in those cards isn’t accurate and has never been calibrated. It is there just to detect major over temp events. Long story short, there still isn’t a solution I know of to access the temperature sensor
  11. I have replaced this ls ${TRANSCODE_DIR}/*.ts -1t | tail -${BATCH_SIZE} | xargs rm with this ls ${TRANSCODE_DIR}/*/*.ts -1t | tail -${BATCH_SIZE} | xargs rm and it appears to be working fine. Thanks for the update
  12. Thank you very much, I tried the script and it works great. I had to make only a small adjustment because Emby on my system is creating a random alphanumeric subfolder inside transcoding-temp (one for every movie) where it stores the segments.
  13. Hi @CS01-HS, thanks for this script. Have you found a better solution or are you still using it?
  14. Hello, I've been running the ZFS plugin on Unraid 6.10.3 since few months now and I'm mostly very happy with it. However, I have encountered a very annoying issue that I can't seem to be able to resolve. I run hourly snapshots on all my datasets in the ZFS pool, and I can see and access them just fine on the server by browsing to the hidden .zfs/snapshot directory, which contains a directory for each snapshot created on that dataset. I have also set snapdir visibility to visible in ZFS. To be able to access the dataset on the ZFS pool from the client (MacOS) I use a Samba share that is configured like this: [global] vfs objects = catia fruit streams_xattr fruit:aapl = yes fruit:model = MacSamba fruit:metadata = stream fruit:resource = xattr fruit:encoding = native fruit:nfs_aces = no fruit:wipe_intentionally_left_blank_rfork = yes fruit:delete_empty_adfiles = yes ea support = yes map archive = no map hidden = no map system = no store dos attributes = no [ShareTest] path = /zfs/test comment = ShareTest browseable = yes writeable = yes valid users = andrea write list = andrea guest ok = no create mask = 0775 directory mask = 0775 vfs objects = catia fruit streams_xattr veto files = /.DS_Store/ delete veto files = yes When I connect to the Samba share from the MacOS client (but the same happens from Windows) like this: smb://[IP address of server]/ShareTest I can cd to the hidden /ShareTest/.zfs directory. Inside there I can list and cd into the snapshot directory. However, if I do ls -a inside the snapshot directory I don't see any of the snapshots folders. andrea@192 snapshot % pwd /Volumes/ShareTest/.zfs/snapshot andrea@192 snapshot % ls -a . .. However, if I try to cd into any of the snapshot folders by starting to type the name of the directory and pressing tab to autocomplete, the auto-completion shows all the missing folders and I can cd into any of them. andrea@192 snapshot % cd 2022-0 2022-08-21_18-00/ 2022-08-24_08-00/ 2022-08-25_20-00/ 2022-08-28_15-00/ 2022-09-03_22-00/ 2022-09-09_23-00/ 2022-09-11_10-00/ 2022-08-23_22-00/ 2022-08-24_23-00/ 2022-08-25_21-00/ 2022-09-03_12-00/ 2022-09-03_23-00/ 2022-09-10_17-00/ As far as I know, when something like this happens is often because I don't have read permissions on the snapshots directories. This isn't the case this time, though. What's even more odd is that if I do the following: - Try to (unsuccessfully) list the snapshots folders for a given share - Restart the Samba service with this command: smbcontrol all reload-config - Try again to reconnect to the share and list the snapshot folders It almost always shows all the snapshots this time!! This only applies to that given share (and not the others) and only until I reboot the server or the client. For example, if I connect to a different share and I try to list the snapshots, I get an empty list again and I have to restart the Samba service once more. Does anybody know what's causing this issue?
  15. Quick update on some tests I've done, in case it is of use to somebody else. It appears that the total GPU memory that GVT-g can address on my system is 3712MB. This gets split between low GM space (a.k.a. Aperture Size) and high GM space. With Aperture Size set to 1024MB, the system has the remaining 2688MB as high GM space. I tried successfully multiple combinations of VMs with different vGPU modes. Combo 1: - 1x GVTg_V5_1 - 1x GVTg_V5_4 Low GM size used: 512MB + 128MB + 128MB (host) = 768MB High GM size used: 2048MB + 512MB = 2560MB Combo 2: - 2x GVTg_V5_2 - 1x GVTg_V5_4 Low GM size used: 2x256MB + 128MB + 128MB (host) = 768MB High GM size used: 2x1024MB + 512MB = 2560MB I haven't tried more than 3 VMs in parallel but I'm expecting that 5x GVTg_V5_4 should also be possible. For my particular system, setting an Aperture Size larger than 1GB not only is useless but hurts because it leaves so little high GM space that I can't even run a single GVTg_V5_1 Thanks again to @ich777 and @alturismo for your help!