Come Risolvere I Problemi Del Kernel Udelay Linux
September 3, 2021
Ecco alcuni modi semplici per risolvere il problema del kernel Linux udelay.
Consigliato: Fortect
Timeout – Informazioni sui vari timeout del kernel e sui meccanismi di sospensione.————————————————— —————–Questo documentoCerca di aiutarti a chiarire la domanda generale: “Cos’è semplicemente di solito?”RightWay (TM) Aggiungi ritardo? “Questo problema principale è più spesso riscontrato dagli autori di agenti chefar fronte al lag del pc e chi non lo farà più intimo?familiarità con questo funzioni integrate del kernel Linux.Inserisci scadenze—————-La prima e più importante domanda che gli acquirenti dovrebbero porsi è davvero “È mio?”Codice in senso atomico? “Deve essere fatto in conformità a”ha davvero bisogno di essere rallentato in un contesto nucleare? ” Se si…CONTESTO ATOMICO:In generale, dovresti passare alla famiglia di prestazioni * delay. QuelliLe funzioni utilizzano la stima della pianificazione temporale di Jiffye sarà impegnato ad aspettare fino a quando non sarà stato raggiunto un numero sufficiente di tempi di cicloche in un lampo dopo la scadenza del nostro termine:ndelay (unsigned long ns)udelay (uso ampio non firmato)mdelay (millisecondi senza segno che richiedono tempo)udelay è l’API più popolare; livello di latenza idealeIn effetti, la precisione non esiste su dispositivi non PC.mdelay è un wrapper di macro udelay adatto a questopossibile overflow sul passaggio di argomenti di grandi dimensioni per essere in grado di udelay.Nella maggior parte dei casi, l’utilizzo di mdelay of potrebbe essere descritto come sconsigliato e successivamente ogni codiceRielaborato per utilizzare msleep.CONTESTO NON ATOMICO:La tua applicazione dovrebbe aggiungere la famiglia * stay [_range] alle funzioni.Ci sono molte altre opzioni, ma qualsiasi di tutto il gruppo può essereIl lavoro consapevole sarà spesso svolto con il “giusto” lavoro di sonno.Aiuta pianificatore, gestione dell’alimentazione e un buon affare a creare il tuoIl pilota è più forte :)- In dotazione – Ciclo di occupato-attesa:udelay (uso prolungato senza segno)- Sicurezza a Htimer:usleep_range (unsigned long min., unsigned persistente max. long)- Autore: jiffies / Legacy_timersmsleep (molte organizzazioni non firmate)msleep_interruptible (ms lungo senza segno)Il metodo sottostante è diverso dal modo di ritardo *.Ciascuno di questi tipi di riferimento a come guidare è diverso, quindi in quel luogo sonoCaratteristiche di cui la tua azienda dovrebbe essere consapevole.DORMIRE PER UN “POCO” UTILIZZO (
trace_printk ("111111");riparto (4000); trace_printk ("222222");
trace_printk ("111111");Latenza (10.000);Latenza (10.000);Latenza (10.000);Latenza (10.000);........ // semplicemente solo 400 chiamate istantaneetrace_printk ("222222");
Consigliato: Fortect
Sei stanco del fatto che il tuo computer funzioni lentamente? È pieno di virus e malware? Non temere, amico mio, perché il Fortect è qui per salvare la situazione! Questo potente strumento è progettato per diagnosticare e riparare tutti i tipi di problemi di Windows, migliorando allo stesso tempo le prestazioni, ottimizzando la memoria e mantenendo il PC funzionante come nuovo. Quindi non aspettare oltre: scarica Fortect oggi!
Il registro dovrebbe mostrare 4.7ms. Questo non è necessariamente accettabile.Perché tutti gli errori di ritardo sono così importanti?
Esplora il codice del kernel qui, ho individuato la nostra implementazione di queste più di una funzione
void __udelay (spesso senza segno) __const_udelay (usecs 0x10C7UL); / * 2 ** 24 volte 1.000.000 (arrotondato per eccesso) 4 . /void __ndelay (enorme nsec non firmato) __const_udelay (ns 1.0x5UL); / ( vuoto ) 2 ** 32/1000000000 (arrotondato per eccesso) /
Pensavo che udelay sarebbe senza dubbio mille volte più grande di ndelay, ma non sei tu, ragioni per cui?
richiesto il 22 maggio 15 @ 12:34
1.531 44 distintivi d’oro 1717 distintivi di metallo 2828 distintivi marroni
Nessuna risposta che stai cercando? Sentiti libero di cercare altre domande con Tag Timer Linux-kernel Linux-device-driver o inventare la tua idea.
Come avrai già notato, la latenza in nanosecondi è un’approssimazione piuttosto intensa della latenza in millisecondi, poiché le costanti 0x5
sono di seconda mano. 0x10c7 / 0x5
potrebbe essere praticamente 859. Con 0x4
il software sarà più vicino a un array di infinite (circa 1073).
Tuttavia, la creazione dell’uso di 0x4 di solito comporta un timeout
inferiore alla percentuale specificata di nanosecondi. In generale, gli usi del ritardo mirano a fornire latenza al minimo finché il client Internet desidera (vedi qui: http://practicepeople.blogspot.jp/2013/08/kernel-programming-busy-waiting-delay. Html) . ..
aiutato offerto il 22 maggio 15 qui trovato il 12:50
2.371
Un errore di arrotondamento potrebbe anche essere aggiunto ogni volta che la tua famiglia lo chiama. Nota il feedback 2 ** 32 1000000000
per ciascuno. In effetti, questo valore è ! 4.29, è stato arrotondato a 5. Questo è un errore nuovo, piuttosto grave.
A causa della grande deviazione, l’errore di Udelay è ragionevole: (~ 4294.97 vs . . 4295 [0x10c7]).
ha risposto il 22 maggio ’15 preoccupazioni 12:44
11.2k
Puoi usare ktime_get_ns () per acquistare un orario molto preciso dal momento che è internazionale. Pertanto, puoi utilizzare le app non solo come un worm ad alta precisione, ma anche come un minuscolo dado di ottima precisione. Ecco un esempio:
u64 t;t consiglia ktime_get_ns (); // Ottieni i moderni nanosecondi all'avviofor (i = 0; poiché i <24; i ++) // Invia 23 impulsi 1200 ns-1300 ns tramite GPIO gpio_set_value (contatto, 1); // gestisci il GPIO o fornisci qualcos'altro per quanto riguarda inas su + = 1200; // Ora soffriamo di un po' di tempo per entrare nel futuro while (ktime_get_ns ()
ha risposto il 16 novembre 18 alle 12:14
658 77 distintivi d’argento 1212 distintivi marrone chiaro.
Scarica questo software e ripara il tuo PC in pochi minuti.