> -----Original Message----- > > Sure. On my ppc64le machine, crash got 96hz after applying the above patch. The reason > > is that kernel calculates the value of bfq_timeout as below: > > > > bfq_timeout = HZ / 8; > > > > The actual value of HZ is 100, so bfq_timeout = 100 / 8 = 12, but in crash, we calculate > > the value of HZ: > > > > HZ = bfq_timeout * 8 = 12 * 8 = 96 > > > > It seems that this is not the result what we expected. Oh, you are right. > > > >> btw, I thought 'read_expire' was better than the 'bfq_timeout' because it > >> was introduced at 2.6.16 and has been unchanged, but most of kernels(vmlinux) > > > > Sounds good. But unfortunately, the 'read_expire' is a static variable in kernel, we > > can not get it directly by the symbol search. Maybe we should try to find a static > > variable(kernel) in another ways. > > > > If it is possible, I would tend to use the 'write_expire' to calculate the value of HZ > > in crash as below, that can avoid the above issues and get a correct result. > > > > HZ = write_expire / 5; > > > > /* > > * source: block/mq-deadline.c > > */ > > static const int write_expire = 5 * HZ > > > > For example: > > + if (symbol_exists("write_expire")) { ----> Here, it failed, maybe we can try to find the symbol > in another way. > > + uint write_expire; > > + get_symbol_data("write_expire", sizeof(int), &write_expire); > > + if (write_expire) { > > + machdep->hz = write_expire / 5; > > + if (CRASHDEBUG(2)) > > + fprintf(fp, "write_expire exists: setting hz to %d\n", > > + machdep->hz); > > + } > > + } else > > > >> that I have do not have a symbol for it. (some optimization?) > >> > > I can get the values of 'read_expire' and 'write_expire' in the latest rhel8 or later. > > > > crash> p read_expire > > $1 = 50 > > crash> p write_expire > > $2 = 500 > > > > Thanks. > > Linabo > > > > How do you think about the following changes? It works for me. > > /* > * source: net/ipv4/inetpeer.c > * int inet_peer_minttl __read_mostly = 120 * HZ; /* TTL under high load: 120 sec */ > */ um, unfortunately this is a sysctl parameter and can be changed. As for the 'write_expire' way, I found that it can be printed after "set scope dd_init_queue" or "set scope deadline_init_queue" on old kernels. crash> p write_expire No symbol "write_expire" in current context. p: gdb request failed: p write_expire crash> set scope dd_init_queue scope: ffffffffa43e3f80 (dd_init_queue) crash> p write_expire $1 = 5000 Maybe we can make use of gdb_set_crash_scope() and gdb_pass_through() to get this value? Thanks, Kazu -- Crash-utility mailing list Crash-utility@xxxxxxxxxx https://listman.redhat.com/mailman/listinfo/crash-utility