Portál AbcLinuxu, 6. listopadu 2025 22:14
HW myslím že mám dostatečně výkonný. S diskem to má společné to, že když se mi ty programy spustí v návaznosti těsně po sobě, nebude tolik seekovat a ve vysledku se to spustí rychleji...A na to jsi přišel jak? To si jenom myslíš, že? Ono myslet, znamená ho..o vědět.
Předpokládám, že programy mají běžet současně a jako problém se ti jeví úvodní část jejich běhu, ukončená například naběhnutím hlavního okna v případě GUI aplikace, zahájením akceptování spojení serverem apod. OS přechod do takového stav neidentifikuje a ani nemůže, neboť jde o vnitřní stav aplikace.Konečně mě někdo pochopil a nehledal v mé otázce, do čeho si rýpnout. Díky, tahle odpověď mi stačí
Konečně mě někdo pochopil a nehledal v mé otázce, do čeho si rýpnout.a ty, co se vám snažily naznačit, že paralelní přístup k disku by měl řídit plánovač IO, jste nepochopil vy
&&. A kdyz jim chces dat oddech, tak tam nasazel sleepy
& mene
Nejak jsem to z uvodniho dotazu nepochopil. Jinak pokud bys to chtel uplne presne nadefinovat, ze az se "dokonci spousteni" tehle aplikace, tak "zacni spoustet" dalsi, tak na to me zadne reseni nenapada. Jedine to spoustet s nejakym stracem s vystupem "nekam", a ted vystup checkovat, jestli se porad zvetsuje, nebo uz ma stabilni velikost. Doufam, ze jsem to napsal srozumitelne.
Jestli jo, tak man strace
stracem to nepůjde, protože to by se proces programu musel okamžitě uspat, aby strace už nic nevypisoval. Stačí jediný pohyb paměti a tenhle způsob půjde do háje. Zelenýho.
Popravdě mě přijde celý dotaz jako naprostá kravina. Prostě použij ; (a když už, tak i nějaký sleep). Jinou možnost ani nemáš, protože jak už tu někdo psal by program musel posílat nějaký signál, že už je spuštěný. A to že to zrovna tyhle programy budou dělat je hoodně nepravděpodobné.
Pocit, že se programy takhle spustí rychleji je podle mně zcela mimo. Hlavičky hard disku musí tu cesto projít stejně v každém případě. Fragmentace souborů v systému bude přítomná vždy a lítání hlav tedy taky. Máš tedy v podstatě na výběr jestli hlavičky budou překmitávat rychle nebo pomalu (a to takřka stejným způsobem). To že to dělá větší kravál opravdu neznamená, že je to pomalejší.
Samozřejmě existuje teoretická možnost, že tvůj způsob bude rychlejší. A to v případě, že všechna data budou uložená na disku za sebou přesně v tom pořadí, v jakém se čtou (včetně všech knihoven). S tím se prakticky nesetkáte (existuje patch pro kernel, který dělá něco takového, ale jen po dobu bootu). Ovšem to by se program musel začít spouštět okamžitě po načtení dat předchozího (tedy i před jeho kompletním spuštěním) aby se hlavičky nestihly zaparkovat nebo tak něco.
PS: Navíc firmware disku si může dělat co chce, takže na OS bych v tomhle zrovna moc nespoléhal.
#!/usr/bin/python
from __future__ import division
import time
def sumsys_iowait():
statline = file('/proc/stat').readline().split()[1:8]
ints = [int(x) for x in statline]
sumsys = sum(ints)
iowait = ints[4] #IOWAIT
return sumsys, iowait
s_old, i_old = sumsys_iowait()
while True:
time.sleep(0.2)
s, i = sumsys_iowait()
iowait = (i-i_old)/(s-s_old)
print iowait
if iowait > 0.5:
break
s_old = s
i_old = i
Schválně jsem obrátil podmínku a nastavil, ať program skončí až se aktivita disku _zvýší_ nad 0.5 - ať je to zajímavější. Pětkrát za sekundu kontroluju IOWAIT což většinou odpovídá aktivitě disku (ale nemusí).
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.