Andrea3000

Members
  • Posts

    39
  • Joined

  • Last visited

Everything posted by Andrea3000

  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!
  16. Ok, I managed to make it work. I found this paper: https://ieeexplore.ieee.org/ielaam/71/8410754/8247267-aam.pdf that shows this diagram: together with this description: This got me thinking. If the VRAM that the GPU can address is the sum of low + high memory, if I set an aperture size that is too large, there might not be enough high memory left. I tried to reduce the aperture size in the BIOS to 1GB (from 2GB) and the VM started without issues with a GVTg_V5_1 vGPU. I don't have any other VM set at this time therefore I don't know how many more vGPU I can create. Considering that the host occupies 128MB of low memory/aperture, there should be 384MB left. Depending on how much high memory I got left, I might be able to create also a GVTg_V5_2 vGPU and a GVTg_V5_4. I haven't found anywhere a command in linux that can show the VRAM usage therefore it is going to be trial and error I suppose. PS: I tried to play with DVMT pre-allocation but it didn't make a difference. Thank you very much for your help.
  17. Thanks @alturismo, I tried with both Guc/Huc disabled (mode 0) and mode 3 but it makes no difference. In both cases I get the same error when I try to launch the VM with a GVTg_V5_1: gvt: fail to allocate resource high GM space gvt: request 2048MB avail 1664MB max 1664MB taken 0MB gvt: failed to create intel vgpu: -28 Based on the Intel spec, the GVTg_V5_1 mode requires 512MB of low GM space and 2048MB of high GM space. I have no idea what the low and high GM spaces mean, but I seem to remember having read that the low GM space has to be less than the aperture size and that the host alone will use 128MB of the available aperture size. As the error clearly states, my system doesn't seem to have enough memory for 2048MB of high GM space. This raises 2 questions: 1) Where is that 1664MB coming from? The only settings in the bios related to VRAM are: - Aperture size (set to 2048MB) - DVMT Pre-allocated memory (set to 1024MB which is the maximum) - DVMT total Gfx Mem (set to MAX). Note that other options are 128MB and 256MB. I tried to set it to 256MB but the error message still reports 1664MB available, which means that this parameter isn't linked with that memory. 2) How can someone create a GVTg_V5_4 vGPU with only 256MB of aperture size if the high GM space is 512MB? Does it mean that the high GM space has nothing to do with aperture size? EDIT: I was inspecting the portion of the log file that relates to GVT-g Aug 23 21:49:38 Jarvis root: -----------Found Intel GVT-g Plugin!----------- Aug 23 21:49:38 Jarvis root: ---GVT-g Plugin will enable the i915 Module!--- Aug 23 21:49:38 Jarvis root: Aug 23 21:49:38 Jarvis root: ----Installation of Intel GPU TOP complete----- Aug 23 21:49:38 Jarvis root: plugin: intel-gpu-top.plg installed Aug 23 21:49:38 Jarvis root: plugin: installing: /boot/config/plugins/intel-gvt-g.plg Aug 23 21:49:38 Jarvis root: plugin: running: anonymous Aug 23 21:49:38 Jarvis root: plugin: skipping: /boot/config/plugins/intel-gvt-g/gvt.g-2022.05.02.txz already exists Aug 23 21:49:38 Jarvis root: plugin: running: /boot/config/plugins/intel-gvt-g/gvt.g-2022.05.02.txz Aug 23 21:49:38 Jarvis root: Aug 23 21:49:38 Jarvis root: +============================================================================== Aug 23 21:49:38 Jarvis root: | Installing new package /boot/config/plugins/intel-gvt-g/gvt.g-2022.05.02.txz Aug 23 21:49:38 Jarvis root: +============================================================================== Aug 23 21:49:38 Jarvis root: Aug 23 21:49:38 Jarvis root: Verifying package gvt.g-2022.05.02.txz. Aug 23 21:49:38 Jarvis root: Installing package gvt.g-2022.05.02.txz: Aug 23 21:49:38 Jarvis root: PACKAGE DESCRIPTION: Aug 23 21:49:38 Jarvis root: Package gvt.g-2022.05.02.txz installed. Aug 23 21:49:38 Jarvis root: plugin: creating: /usr/local/emhttp/plugins/intel-gvt-g/README.md - from INLINE content Aug 23 21:49:38 Jarvis root: plugin: running: anonymous Aug 23 21:49:38 Jarvis root: Aug 23 21:49:38 Jarvis root: -----------Intel GVT-g already found, nothing to do------------ Aug 23 21:49:38 Jarvis root: Aug 23 21:49:38 Jarvis root: -----------------Loading Kernel Module 'i915'------------------ Aug 23 21:49:38 Jarvis kernel: Linux agpgart interface v0.103 Aug 23 21:49:38 Jarvis kernel: Setting dangerous option force_probe - tainting kernel Aug 23 21:49:38 Jarvis kernel: i915 0000:00:02.0: [drm] VT-d active for gfx access Aug 23 21:49:38 Jarvis kernel: checking generic (4000000000 300000) vs hw (6001000000 1000000) Aug 23 21:49:38 Jarvis kernel: checking generic (4000000000 300000) vs hw (4000000000 80000000) Aug 23 21:49:38 Jarvis kernel: fb0: switching to i915 from EFI VGA Aug 23 21:49:38 Jarvis kernel: Console: switching to colour dummy device 80x25 Aug 23 21:49:38 Jarvis kernel: i915 0000:00:02.0: vgaarb: deactivate vga console Aug 23 21:49:38 Jarvis kernel: i915 0000:00:02.0: Direct firmware load for i915/gvt/vid_0x8086_did_0x3e91_rid_0x00.golden_hw_state failed with error -2 Aug 23 21:49:38 Jarvis kernel: i915 0000:00:02.0: vgaarb: changed VGA decodes: olddecodes=io+mem,decodes=io+mem:owns=io+mem Aug 23 21:49:38 Jarvis kernel: i915 0000:00:02.0: [drm] [ENCODER:110:DDI C/PHY C] is disabled/in DSI mode with an ungated DDI clock, gate it Aug 23 21:49:38 Jarvis kernel: i915 0000:00:02.0: [drm] [ENCODER:114:DDI E/PHY E] is disabled/in DSI mode with an ungated DDI clock, gate it Aug 23 21:49:38 Jarvis kernel: i915 0000:00:02.0: [drm] Finished loading DMC firmware i915/kbl_dmc_ver1_04.bin (v1.4) Aug 23 21:49:38 Jarvis kernel: [drm] Initialized i915 1.6.0 20201103 for 0000:00:02.0 on minor 0 Aug 23 21:49:38 Jarvis kernel: ACPI: video: Video Device [GFX0] (multi-head: yes rom: no post: no) Aug 23 21:49:38 Jarvis kernel: input: Video Bus as /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/LNXVIDEO:00/input/input10 Aug 23 21:49:39 Jarvis kernel: fbcon: i915drmfb (fb0) is primary device Aug 23 21:49:39 Jarvis kernel: Console: switching to colour frame buffer device 240x75 Aug 23 21:49:39 Jarvis kernel: i915 0000:00:02.0: [drm] fb0: i915drmfb frame buffer device Aug 23 21:49:39 Jarvis kernel: i915 0000:00:02.0: MDEV: Registered Aug 23 21:49:40 Jarvis root: Aug 23 21:49:40 Jarvis root: -------------Installation of Intel GVT-g successful-------------- Aug 23 21:49:40 Jarvis root: Aug 23 21:49:40 Jarvis root: Aug 23 21:49:40 Jarvis root: ----------------------------------------------------------------- Aug 23 21:49:40 Jarvis root: -----------------Intel GVT-g plugin installed-------------------- Aug 23 21:49:40 Jarvis root: ----------------------------------------------------------------- Aug 23 21:49:40 Jarvis root: plugin: intel-gvt-g.plg installed and I saw this error: i915 0000:00:02.0: Direct firmware load for i915/gvt/vid_0x8086_did_0x3e91_rid_0x00.golden_hw_state failed with error -2 Do you know what it means? Could this be linked with the issue I'm seeing? At the moment the GuC/Huc firmware loading is disabled. EDIT2: Apparently that error message isn't an issue: https://github.com/intel/gvt-linux/pull/215
  18. Thanks for the reply. I don’t know enough about this to say whether my motherboard implements the aperture size correctly or not. But when I changed the aperture size from its default value of 256MB to 2048MB I got confirmation from Unraid that the value has changed correctly. Having approx 1600MB of vram available (as my system does) seems to be in the right ballpark. What is strange is that the requirement to assign a GVTg_V5_1 is 4 times what it should be (2048MB instead of 512MB)
  19. Hi @ich777 Thank you for having provided this plug-in. I have a Core i3-9100 on a Gigabyte C246M-WU4 with 64GB of ram. In the BIOS I’ve set the “Aperture Size” to 2048MB and vram allocation set to MAX. In Unraid I can confirm that my aperture size is indeed set to 2GB Memory at 6013000000 (64-bit, non-prefetchable) [size=16M] Memory at 4000000000 (64-bit, prefetchable) [size=2G] Based on this table from Intel: y aperture memory size hidden memory size fence size weight ------------------------------------------------------------------------------------------------------------- 8 64 384 4 2 4 128 512 4 4 2 256 1024 4 8 1 512 2048 4 16 with an aperture size of 2GB I should be able to create at least 3 vGPUs with GVTg_V5_1, as each one should require 512MB of aperture size. However, with no other VM or Docker container running, I can’t start even a single VM because gvt complains that it requires 2048MB of vram and I only have about 1600MB free. Do you know why gvt is asking for so much vram? If I reduce the weight of the vGPU to GVTg_V5_2 I can start the VM correctly and Windows 10 reports 4GB of vram available in total. Am I missing something?
  20. I’m on 6.10.3 and * * * * * only works after I disable and then re-enable the schedules. I don’t remember having had this issue when I was on 6.9.x
  21. My array is already set to autostart and it does. After some more digging I found out that: - All the custom schedules weren't working, not just the one that was supposed to run every minute - The issue was due to the syntax of the cron string and I managed to fix it and it is now working. I had to replace: - * * * * * with */1 * * * * - 0 * * * * with 0 */1 * * * - 0 0 1 * * with 0 0 1 */1 * I don't know why the old strings did't work as they should be equally valid..
  22. Hi @Squid I think I have encountered a bug with User Scripts. I use the scheduling/Cron feature on 3 of my scripts. - One is set to execute "At first array start only" (and works correctly) - One is set to execute every hour using a custom Cron string "0 * * * *" (and works correctly) - One si set to execute every minute using a custom Cron string "* * * * *" (THIS DOESN'T WORK) The script that is set to execute every minute works the first time I set it up but after a reboot it doesn't get executed. In order for it to work I have to temporarily disable the scheduling, put it back to custom and apply the changes. This works until the following reboot. Would you be able to help me with this? Thanks Andrea
  23. Actually, I was checking the in-tree Intel drivers that are included in the Linux kernel 5.15.46 and the logic to export the die temperature via hwmon is already there: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/drivers/net/ethernet/intel/ixgbe/ixgbe_sysfs.c?h=v5.15.46 I can see that it is enabled at compile time via the CONFIG_IXGBE_HWMON parameter (whose default value is TRUE) #ifdef CONFIG_IXGBE_HWMON if (ixgbe_sysfs_init(adapter)) e_err(probe, "failed to allocate sysfs resources\n"); #endif /* CONFIG_IXGBE_HWMON */ Is it kept at its default value when the unraid kernel is compiled or it is disabled? @limetech do you have any suggestion on how to debug the fact that I can't access the temperature sensor of my Intel X550 card? Thanks Andrea
  24. Sorry, I'm back with another ZFS related question. I'm trying to access the ZFS snapshots via Samba on MacOS. I know that for Windows I can use the shadow_copy2 vfs object to make the snapshots appears as shadow copies. But what about MacOS? I found online that this can be done in TrueNAS via the zfsacl vfs object: https://www.truenas.com/community/threads/how-to-access-zfs-snapshots-over-smb.69449/ but this doesn't appear to be available in unRAID. Is there a workaround?
  25. Thanks @jortan. Most of my use cases involve only asynchronous writes. In addition, I have an Intel Optane P1600x that I’m using as slog device to handle synchronous writes (It has power loss protection). Therefore, I’m more inclined to still allow synchronous write, my priority is not to lose any data.