On 18/03/2022 14:41, Dmitry Osipenko wrote:
On 3/17/22 02:04, Dmitry Osipenko wrote:
On 3/16/22 18:04, Steven Price wrote:
On 14/03/2022 22:42, Dmitry Osipenko wrote:
Replace Panfrost's memory shrinker with a generic DRM memory shrinker.
Signed-off-by: Dmitry Osipenko dmitry.osipenko@collabora.com
I gave this a spin on my Firefly-RK3288 board and everything seems to work. So feel free to add a:
Tested-by: Steven Price steven.price@arm.com
As Alyssa has already pointed out you need to remove the panfrost_gem_shrinker.c file. But otherwise everything looks fine, and I'm very happy to see the shrinker code gone ;)
Awesome, thank you.
Steven, could you please tell me how exactly you tested the shrinker?
I realized that today's IGT doesn't have any tests for the Panfrost's madvise ioctl.
You may invoke "echo 2 > /proc/sys/vm/drop_caches" manually in order to trigger shrinker while 3d app is running actively (like a game or benchmark). Nothing crashing will be a good enough indicator that it works okay.
I may get an RK board next week and then will be able to test it by myself, so please don't hurry.
I have to admit it wasn't a very thorough test. I run glmark on the board with the following hack:
diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.c b/drivers/gpu/drm/panfrost/panfrost_drv.c index b014dadcf51f..194dec00695a 100644 --- a/drivers/gpu/drm/panfrost/panfrost_drv.c +++ b/drivers/gpu/drm/panfrost/panfrost_drv.c @@ -279,6 +279,14 @@ static int panfrost_ioctl_submit(struct drm_device *dev, void *data, if (ret) goto out_cleanup_job;
+ { + struct shrink_control sc = { + .nr_to_scan = 1000 + }; + dev->shmem_shrinker->base.scan_objects(&dev->shmem_shrinker->base, + &sc); + } + ret = panfrost_job_push(job); if (ret) goto out_cleanup_job;
That hack was specifically because I had some doubts about the removal of the 'gpu_usecount' counter and wanted to ensure that purging as the job is submitted wouldn't cause problems.
The drop_caches file should also work AFAIK.
Steve