On (24/02/07 17:47), Sergey Senozhatsky wrote: > On (24/02/07 15:57), Sergey Senozhatsky wrote: > > RFC > > > > We keep compression work memory buffer per-comp stream (which > > is per-CPU), but we don't need that many buffers, because on each > > CPU only one compression backend can access work memory at any given > > time. Hence the patch series moves compression work memory to a > > dedicated per-CPU area, reducing the amount of memory we allocate > > for those buffers. > > > > For instance, assume a 12 CPUs system, 2 compression streams > > per-CPU (a default and one for deferred recompression). Before > > we'd allocate 12 * 2 * 2 pages, after we'll allocate 12 * 2 pages. > > > > NOTE: > > The series stops short of moving comp buffers to a global per-CPU > > area, which all zram devices can share. Compression backends use > > CPUs exclusively (disable migration and CPU hotplug), so in theory > > comp work memory can be in global per-CPU data. This can reduce > > memory usage on systems that init numerous zram devices. > > E.g. instead of num-zram-devices * num-cpus buffers we'll allocate > > only num-cpus buffers. > > And this is the patch that moves comp buffers to global per-CPU > area, so that *all* zram devices and *all* comp backends share > them. It also moves local_lock (which disables migration/preemption > and CPU-hotplug once taken) to global comp mem per-CPU buffer. That's a squashed patch. I also have an incremental one, atop of 0002 in the series. So first move comp buffers to device per-CPU, then to global per-CPU.