From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751949AbcELFdW (ORCPT ); Thu, 12 May 2016 01:33:22 -0400 Received: from mail-lf0-f45.google.com ([209.85.215.45]:33622 "EHLO mail-lf0-f45.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751781AbcELFdU (ORCPT ); Thu, 12 May 2016 01:33:20 -0400 Subject: Re: Question about request queues in I/O scheduling To: linux-kernel@vger.kernel.org References: <571D1390.6060204@gmail.com> From: Max Kanushin Cc: jmoyer@redhat.com Message-ID: <5734159C.5070207@gmail.com> Date: Thu, 12 May 2016 08:33:16 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.7.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hello, I was trying to use spin_trylock(q->queue_lock) on several queues when q->nr_sorted exceeds the per-defined number to block them and unlock the them later with spin_unlock(q->queue_lock), but I have faced the following problem: my system freezes when I am trying to test it by moving files around in my system. I thought it might be caused by blocking a queue of a system partition or swap, but I do not know how to check this as well. Is it the right way to stop the queue/elevator? What are freezes might be caused by? Is there a simple way to find out which block device is a queue belong to? I would really appreciate your reply. Best regards, Max Kanushin. On 04/29/2016 07:22 PM, Jeff Moyer wrote: > Max Kanushin writes: > >> Thank you very much for the reply. My general idea is take control of all >> request queues to block and unblock them manually depending on their load. >> One of my steps is to find a length of a queue to decide if to block it. >> Actually I think I've found the way. If I got it right, I can move from one >> request to another within the list: >> struct list_head queue_head; >> So that I can calculate how many requests are there in the queue. > > Hi, Max, > > The queue_head is the dispatch list for I/O, so it does not represent > all I/O queued for a request_queue. The number of requests in the > scheduler would be reflected by q->nr_sorted. The number of dispatched > requests is in an array, in_flight. > > Cheers, > Jeff > > > >> >> Best regards, >> Max Kanushin. >> On Apr 29, 2016 6:32 PM, "Jeff Moyer" wrote: >> >>> Max Kanushin writes: >>> >>>> Hello, >>>> >>>> I was searching for a way to find out the length of a request_queue >>>> (that is defined as a structure in >>>> linux/include/linux/blkdev.h). However I am new to the kernel >>>> development and can't figure out where is the actual list of requests >>>> to be processed by an elevator. >>>> Is there a way to iterate requests in a queue or at least find a >>>> number of them? >>> >>> Hi, Max, >>> >>> What exactly are you trying to accomplish? >>> >>> Cheers, >>> Jeff >>>